当前位置:   article > 正文

Verilog HDL的走马灯以及计时器实现_(分频)走马灯电路的输入时钟信号如何设计?

(分频)走马灯电路的输入时钟信号如何设计?

EDA课程实验的内容分享

跑马灯设计

设计一10个输入、8个输出的电路,10个输入中,2个输入作为模式控制,8个输入作为并行输入端
2个输入端控制4种显示模式:
① 模式1:按照1、2、3、4、5、6、7、8的顺序依次点亮所有灯;然后再按1、2、3、4、5、6、7、8的顺序依次熄灭所有灯,间隔时间按时钟信号的四分频设计。
② 模式2:并行输入8位数据并且输出。
③ 模式3:每1个时钟将输出取反,间隔时间按时钟信号的二分频设计。
④ 模式4:按向左移循环点亮的方式进行变化。

module marquee(Mode,In,Clk,Out,Reset);
    input [1:0]Mode;
    input [7:0]In;
    input Clk,Reset;
    output [7:0]Out;
    reg [7:0]Out;
    reg [1:0]cnt_4=0;
    reg cnt_2=0,cnt_o_4,cnt_o_2;
    reg step;
    //分频
    always @(posedge Clk,posedge Reset)
        begin
            if(Reset)begin cnt_o_4=0;cnt_4=0;cnt_o_2=0;cnt_2=0; end
            else
            begin
            if(cnt_4!='b11)
            begin cnt_4=cnt_4+1;cnt_o_4=0; end
            else
            begin cnt_4=0;cnt_o_4=1; end
            if(cnt_2!=1)
            begin cnt_2=cnt_2+1;cnt_o_2=0; end
            else
            begin cnt_2=0;cnt_o_2=1; end
            end
        end    
always @(posedge Clk)
        begin
            case(Mode)
            0:
            if(cnt_o_4)
            begin
                if(Out==8'b11111111)step=0;
                if(!Out)step=1;
                Out={step,Out[7:1]};
            end
            1:Out={In};
            2:
            if(cnt_o_2)
            Out=~Out;
            3:Out={Out[6:0],Out[7]};
            endcase
        end
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

注意点

  • 分频分别使用了两个寄存器来实现二分频和四分频
  • 依次点亮的实现以及移位的实现都是通过使用{}运算符来实现

计时器设计

设计一个计时器,4位数码管通电后以mmss格式显示计时时间(注:mm代表“分”,ss代表“秒”)

module cp4(number_out,SI,LT_N,BI_N,LE,Clk,Reset);
    output [6:0] number_out;
    output [3:0]SI;
    output LT_N,BI_N,LE;
    input Clk,Reset;
    reg [1:0]count=0;
    reg [9:0]time_count=0;
    reg t_o;
    reg [3:0]Out;
    reg [3:0]M1;
    reg [3:0]M2;
    reg [3:0]S1;
    reg [3:0]S2;
    reg [3:0]SI;
    assign LT_N=1;
    assign BI_N=1;
    assign LE=0;
    always@(posedge Clk or posedge Reset)
        begin
            if(Reset)
            begin 
            time_count=0;t_o=0;
            end
            else if(time_count==999)
            begin t_o=1;time_count=0; end
            else
            begin time_count=time_count+1;t_o=0; end
        end
    always@(posedge Clk or posedge Reset)
        begin
            if(Reset)count=0;
            else count=count+1;
        end
    always@(count[1:0])
    begin
        case(count[1:0])
            0:begin 
                Out=S2;SI='b1110; 
              end
            1:begin 
                Out=S1;SI='b1101;
              end
            2:begin 
                Out=M2;SI='b1011; 
              end
            3:begin 
                Out=M1;SI='b0111; 
              end
        endcase
    end
    always@(posedge Clk)
    begin
    	if(Reset)
    	begin M1=0;M2=0;S1=0;S2=0; end
        if(t_o)
        begin
              if(S2!=9)S2=S2+1;
              else
                begin
                if(S1!=6)S1=S1+1;
                else
                    begin
                    if(M2!=9)M2=M2+1;
                    else
                        begin
                        if(M1!=9)M1=M1+1;
                        else M1=0;
                        M2=0;
                        end
                    S1=0;
                    end
                 S2=0; 
                 end         
        end
    end
    mdy_74HC4511 mdy(LE,BI_N,LT_N,Out,number_out);
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

其中数码显示板使用的是74HC4511,其引脚图如下
在这里插入图片描述

注意点

  • 这里面调用了另外一个模块mdy_74HC4511,用于将数字0-9转化成74HC4511所需要的a-g数码管对应二进制码。
  • 同时应该注意DIG1是为0的时候显示。
  • 这里对于数字进位的判断直接使用多层IF嵌套实现。
  • 由于数码显示板一次只能显示一位数字,因此这里通过使用4分频,不断的在4位显示之间来回切换,在高频率下就可以使肉眼看上去像是4位同时显示。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/699721
推荐阅读
相关标签
  

闽ICP备14008679号