首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在verilog中实现“高级异步复位逻辑”?

如何在verilog中实现“高级异步复位逻辑”?
EN

Stack Overflow用户
提问于 2020-09-02 08:16:25
回答 3查看 1.4K关注 0票数 0

我知道高级异步重置可以实现如下所示:

代码语言:javascript
复制
always@(posedge clk or posedge rst)
begin
  if (rst==1)

但是如何实现后缘异步复位,这意味着瞬间复位边的出现,中的逻辑总是会立即阻止复位?

我写的逻辑如下:

代码语言:javascript
复制
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条rst的前缘,但总块被rst信号触发的次数远远超过1次。(用quartus 18 altera气旋10LP进行测试)

我认为我用来实现后置异步复位的方法是不稳定的,有人能告诉我如何解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2020-09-02 14:18:55

您试图实现的是异步重置。它可以是posedgenegedge

代码语言:javascript
复制
always@(posedge clk or posedge rst)
begin
   if (rst) 
      // do the reset
   else begin
      // your normal execution logic
   end
end

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

代码语言:javascript
复制
always@(posedge clk or negedge rst)
begin
   if (~rst) 
      // do the reset
   else begin
      // your normal execution logic
   end
end

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

票数 2
EN

Stack Overflow用户

发布于 2020-09-02 11:42:57

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

代码段指定了一个活动的高异步复位信号rst。"active high“+”异步“意味着这个always块生成的信号在rst断言时立即重置。

票数 1
EN

Stack Overflow用户

发布于 2020-09-04 19:37:09

一旦您在敏感列表中包含了"posedge/negedge重置“,并且始终块中的重置条件比顺序逻辑的其余部分具有优先级,那么它就是异步的:

代码语言:javascript
复制
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

使用“前缘”表示活动高度重置,使用"negedge“表示活动-低重置。

额外注意:有时有一个复位同步器也是有用的。这种同步的“软重置”应该包含在正常的时序逻辑中,它将有助于使所有东西都与时钟同步。通过这样做,您将有第一个异步重置条件,而最后一个同步重置将避免任何有关异步条件的转移性问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63701409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档