如何在Verilog中实现“ posege异步复位逻辑”?

问题描述

我知道可以通过以下方式实现高级异步重置:

always@(posedge clk or posedge rst)
begin
  if (rst==1)

但是如何实现posege异步重置,这意味着一旦出现重置边缘,总是阻塞的逻辑会立即重置?

我写了下面的逻辑:

always@(posedge clk or posedge rst)
begin
  rst_pre<=rst;
  if(!rst_pre && rst) // to test if rst is posedge
      //execute reset logic here...

但是问题是,始终阻止是在意外的高频下触发的,我终于弄清楚了,尽管只有 1个摆姿势的第一个姿势,但始终是阻止被第一个信号触发的时间超过1次。 (使用Altera气旋10LP和quartus 18进行测试)

我认为我用于实现posege异步重置的方法不稳定,有人可以告诉我该怎么做才能解决此问题?

解决方法

您要实现的是异步重置。可以是posedgenegedge

always@(posedge clk or posedge rst)
begin
   if (rst) 
      // do the reset
   else begin
      // your normal execution logic
   end
end

如果您想使用negedge重置,则可以使用:

always@(posedge clk or negedge rst)
begin
   if (~rst) 
      // do the reset
   else begin
      // your normal execution logic
   end
end

除此之外,重置没有什么复杂的。在这两种情况下,posedge的{​​{1}} / negedge上的块都会被触发并进行重置。

,

您称为“高级异步重置”逻辑的第一个代码段是“ posege异步重置逻辑”。

该代码段指定了一个有效的高异步复位信号rst。 “高电平有效” +“异步”表示always置为有效后,此rst块生成的信号立即被重置。

,

只要在敏感列表中包含“ posege / negedge reset”,并且Always块中的reset条件优先于其余顺序逻辑,则它是异步的:

always @ (posedge clk_i,posedge arst_i) begin
  if(arst_i) begin
    ...this condition has to be first
  end
  else begin
    ...normal sequential logic
  end
end

将“ posege”用于高电平有效复位,将“ negedge”用于低电平有效复位。

额外说明:有时,使用重置同步器也很有用。此同步的“软复位”应包含在常规顺序逻辑中,这将有助于使所有内容与时钟同步。这样,您将拥有第一个异步重置条件,而最后一次同步重置将避免有关异步条件的任何稳态问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...