【verilog每日一练】计数器计时 - FPGA开发者技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

Mill 关注 私信
[问答]

【verilog每日一练】计数器计时

已知外部输入时钟信号clk为50MHz,请用verilog实现计数器的计时1秒钟,每间隔1秒输出一个clk时钟周期的脉冲信号flag,参考波形如下:
图片1.png

图片2.png

回帖(7)

刘秀英

2023-8-17 10:52:46
module counter(
    input clk,
    output reg flag
    );
    reg [26:0] cnt;
    always @(posedge clk) begin
        if(cnt == 50000000) begin
            cnt <= 0;
            flag <= !flag;
        end
        else
            cnt <= cnt + 1;
    end
endmodule

dfghjkghj

2023-8-18 00:20:09
设计一个计数器,使得flag信号在达到1s时置1,其余时间为0。
reg [27:0] cnt;
reg flag;

always @ (posedge clk)
begin
    if (!rstn)
        cnt <= 0;
    else if (cnt == 28'd50000000)
        cnt <= 0;
    else
        cnt <= cnt + 1;
end

always @ (posedge clk)
begin
    if (!rstn)
        flag <= 1'b0;
    else if (cnt == 28'd50000000)
        flag <= 1'b1;
    else
        flag <= 1'b0;
end

Mill

2023-8-18 09:33:14


解析:时钟信号为50MHz则50_000_000个时钟周期的时间为1s,所以计数器需按每个时钟上升沿+1计数,计数范围从0~49_999_999,循环计数,计数器每次计到一个固定数值时flag信号置为1。

jf_84491108

2023-8-18 10:47:23
reg [27:0] cnt;
reg flag;

always @ (posedge clk)
begin
    if (!rstn)
        cnt <= 0;
    else if (cnt == 28\'d50000000)
        cnt <= 0;
    else
        cnt <= cnt + 1;
end

always @ (posedge clk)
begin
    if (!rstn)
        flag <= 1\'b0;
    else if (cnt == 28\'d50000000)
        flag <= 1\'b1;
    else
        flag <= 1\'b0;
end

更多回帖

×
发帖