打印
[FPGA]

从画时序图开始的计数器

[复制链接]
31|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 不是张角 于 2025-3-6 11:44 编辑

#有奖活动# #申请原创#
该图是通过timegen3所画


module counter(
    input clk,
    input reset_n,
    output reg out
    );

    always @(posedge clk or negedge reset_n)
        if(!reset_n)
            out <= 0;
        else
            out <= 1;
        
endmodule

这句的意思就是每当时钟上升或者复位就进入

看图可以知道在第二个始终上升沿reset_n上拉,但是此时他还是0,所以到下一个时钟上升沿out就会为1

module counter_tb;
    reg clk;
    reg reset_n;
    wire out;

    counter counter_tb0(
        .clk(clk),
        .reset_n(reset_n),
        .out(out)

    );

    initial clk = 1;
    always #10 clk = ~clk;

    initial begin
        reset_n = 0;
        #201;
        reset_n = 1;
        #40000000;
        $stop;            
    end


endmodule
下来就要考虑计数器的情况:

parameter MAX_COUNT_S = 'd49_999_999;//一秒
    parameter MAX_COUNT_M = 'd59;//一分钟
    reg [25:0]counter_delay_s;
    reg [7:0]counter_delay_m;//分钟

//HS秒
    always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行
        if(!reset_n)
            counter_delay_s <= 'd0;
        else if(counter_delay_s == MAX_COUNT_S)
            counter_delay_s <= 0;
        else
            counter_delay_s <= counter_delay_s + 1'b1;

//HS分
        always @(posedge clk or negedge reset_n) //表示只要是始终上升沿或复位下降沿都会运行
        if(!reset_n)
            counter_delay_m <= 'd0;
        else if(counter_delay_s == MAX_COUNT_S && counter_delay_m == MAX_COUNT_M)//当一分钟时候
            counter_delay_m <= 0;
        else if(counter_delay_s == MAX_COUNT_S)
            counter_delay_m <= counter_delay_m + 1'b1;

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝