Verilog同步4位计数器保持最大值,直到给出信号

Verilog同步4位计数器保持最大值,直到给出信号,verilog,counter,synchronous,test-bench,Verilog,Counter,Synchronous,Test Bench,所以我的计数器是4位的verilog,我希望它保持在最大值1111,直到我给它一个信号,再次从0000开始计数 以下是我到目前为止所能想到的: module contadorAscMax ( input iClk, input iRst, output oQ, input iCE, input iSignal, output [3:0] orCnt ); reg[3:0] rvCnt_d; reg[3:0] rvCnt_q; assign or

所以我的计数器是4位的verilog,我希望它保持在最大值1111,直到我给它一个信号,再次从0000开始计数

以下是我到目前为止所能想到的:

module contadorAscMax
(
    input iClk,
    input iRst,
    output oQ,
    input iCE,
    input iSignal,
    output [3:0] orCnt
);

reg[3:0] rvCnt_d;
reg[3:0] rvCnt_q;

assign orCnt = rvCnt_q;

always @(posedge iClk or posedge iRst)
begin
    if(iRst)
    begin
        rvCnt_q<=4'b0;
    end
    else
    begin
        if(iCE)
        begin
            rvCnt_q<=rvCnt_d;
        end
        else
        begin
            rvCnt_q<=rvCnt_q;
        end
    end
end
always @*
begin
    rvCnt_d=rvCnt_q+4'b1;
    if(rvCnt_d == 4'b1111)
    begin
        rvCnt_d = rvCnt_d;
    end
    else if(rvCnt_d == 4'b1111 & iSignal)
    begin
        rvCnt_d = 4'b0;
    end
end


endmodule

感谢您的帮助:)

您已将代码拆分为寄存器和组合部分。虽然这对于复杂逻辑来说是一个好主意,但对于一个简单的4位计数器来说,这有点过头了

为了解决你的问题,你很接近。这样的代码的诀窍是使用“编程”语言进行定义。然后代码就从那里流出来。
我想要一个计数器,当信号出现时,它从1111到0000,否则我想要它计数。
这将导致:

always @(clk or posedge reset)
begin
   if (reset)
      count <= 4'b1111;
   else
   begin
       if (count==4'b1111 && start_signal)
          count <= 4'b0000;
       else
          count <= count + 4'b0001
   end
end
始终@(clk或posedge重置)
开始
如果(重置)
计数
always @(clk or posedge reset)
begin
   if (reset)
      count <= 4'b1111;
   else
   begin
       if (count==4'b1111 && start_signal)
          count <= 4'b0000;
       else
          count <= count + 4'b0001
   end
end
module contadorAscMax
(
    input iClk,
    input iRst,
//    output oQ,
    input iCE,
    input iSignal,
   output reg [3:0] orCnt
);
always @(iClk or posedge iRst)
begin
   if (iRst)
      orCnt <= 4'b0000; // or should that be 4'b1111
      // Is this really what you want? 
      // It will start counting after a reset!
   else
   begin
       if (iCE)
       begin
          if (orCnt==4'b1111 && iSignal)
             orCnt <= 4'b0000;
          else
             orCnt <= orCnt+ 4'b0001;
       end
   end
end
endmodule