Asynchronous 我应该如何在Verilog中重置重置信号?

Asynchronous 我应该如何在Verilog中重置重置信号?,asynchronous,verilog,reset,Asynchronous,Verilog,Reset,我有两个始终块,一个计算通过的时钟周期数,能够异步复位,另一个触发一些输入信号负边缘的复位信号 always@(posedge clock or posedge reset) begin: ClockCounter if(reset == 1) begin clock_cnt = 1; end else begin clock_cnt = clock_cnt + 1; end end always@(negedge pulse_in)

我有两个始终块,一个计算通过的时钟周期数,能够异步复位,另一个触发一些输入信号负边缘的复位信号

always@(posedge clock or posedge reset)

begin: ClockCounter

if(reset == 1)
    begin
    clock_cnt = 1;  
    end
else
    begin
    clock_cnt = clock_cnt + 1;
    end
end

always@(negedge pulse_in)

begin: Receiver

negedge_cnt = negedge_cnt + 1;

reset = 1;

.......Code goes on

end
end module

我要做的是,一旦时钟被重置为1,将重置信号设置为0,这样它就可以在下一个时钟周期中继续计数。如果我尝试插入重置=0;在时钟_cnt=1之后;我遇到了一个问题,多个司机对同一信号。有人知道怎么做吗?

除非有非常重要的理由这样做,并且您保证了无故障组合逻辑,否则您不应该使用异步重置来清除寄存器。典型的方法是使用同步清除信号,而不是使用异步复位

下面是代码的样子:

always @(posedge clk or posedge reset) begin
  if (reset) begin // Note that you need to separate the asynchronous reset and synchronous clear logic (ie, dont do 'if (reset | clr)') 
    counter <= 1; // Use non-blocking assignment for clocked blocks
  end
  else begin
    if (clr) begin
      counter <= 1;
    end
    else begin
      counter <= counter + 1;
    end
  end
end

always @(posedge clk) begin // You need to synchronize your input pulse, Im assuming its synchronous to your clock, otherwise youll need a synchronizer
  if (prev_pulse_in & ~pulse_in) begin
    negedge_cnt <= negedge_cnt + 1;
    clr <= 1;
  end
  else begin
    clr <= 0;
  end
  prev_pulse_in <= pulse_in;
end
始终@(posedge clk或posedge重置)开始
if(reset)begin//注意,您需要将异步重置和同步清除逻辑分开(即,不要执行“if(reset | clr)”)
计数器我的解决方案是

always@(posedge clock or posedge reset)

begin: ClockCounter

if(reset == 1)
    begin
    clock_cnt = 1;
    reset_flag = 1;
    end
else
    begin
    clock_cnt = clock_cnt + 1;
    reset_flag = 0;
    end
end

always@(negedge pulse_in or posedge reset_flag)
begin

reset = 1;

if(reset_flag == 1)
reset = 0;
end

感谢您的信息性回复。唯一的问题是输入脉冲输入完全独立于系统时钟。复位信号到哪里去了?@fatbolls复位信号仍然存在,但现在使用
clr
信号复位计数器。如果你的输入脉冲持续时间短于你的时钟周期,你需要某种更高速的时钟来检测它;如果它持续一个时钟周期或更长时间,您可以使用您的时钟对其进行采样,但您需要对其进行同步(请参阅此说明,从我对它的快速扫描来看,这似乎很好:)