Verilog循环计数

本来想写两个计数器每当cnt 0——9 循环计数 cnt1 0——3 循环计数
cnt 每次循环 cnt1 = cnt1 + 1

  reg            [31:0]    cnt;

parameter            CNT_NUM = 50_000_000 / 1;

always @ (posedge clk ,negedge rst_n)    begin
    if(rst_n == 1'b0)
        cnt <= 1'd0;
    else    if(cnt < CNT_NUM - 1'd1)
        cnt = cnt + 1'd1;
    else
        cnt <= 32'd0;
end

reg            [31:0]    cnt1;

parameter            T4 = 4;

always @ (posedge clk ,negedge rst_n)    begin
    if (rst_n == 1'b0)
        cnt1 <= 32'd0;
    else    if((cnt1 < T4 - 1'd1) && (cnt == CNT_NUM - 1'd1))
        cnt1 <= cnt1 + 1'd1;
    else    if(cnt == CNT_NUM - 1'd1)
        cnt1 <= 32'd0;
    else
        cnt1 <= cnt1;
end

img


运行结果及报错内容

代码没找到问题哭

cnt 每计九个数 cnt1加1

你这个错误非常隐蔽,这是堵塞非堵塞混用造成的


reg            [31:0]    cnt;
 
parameter            CNT_NUM = 10;//50_000_000 / 1;
 
always @ (posedge clk ,negedge rst_n)    begin
    if(rst_n == 1'b0)
//        cnt <= 1'd0;    //这个地方要赋 32'd0;
        cnt <= 32'd0;    //这个地方要赋 32'd0;
    else    if(cnt < CNT_NUM - 1'd1)
//      cnt = cnt + 1'd1;    //这个地方不该用 = 要用 <= 你这个错误主要是这个堵塞非堵塞混用造成的
        cnt <= cnt + 1'd1;    //这个地方不该用 = 要用 <= 你这个错误主要是这个堵塞非堵塞混用造成的
    else
        cnt <= 32'd0;
end
 
reg            [31:0]    cnt1;
 
parameter            T4 = 4;
 
always @ (posedge clk ,negedge rst_n)    begin
    if (rst_n == 1'b0)
        cnt1 <= 32'd0;
    else    if((cnt1 < T4 - 1'd1) && (cnt == CNT_NUM - 1'd1))
        cnt1 <= cnt1 + 1'd1;
    else    if(cnt == CNT_NUM - 1'd1)
        cnt1 <= 32'd0;
    else
        cnt1 <= cnt1;
end