我知道高级异步重置可以实现如下所示:
always@(posedge clk or posedge rst)
begin
if (rst==1)但是如何实现后缘异步复位,这意味着瞬间复位边的出现,中的逻辑总是会立即阻止复位?
我写的逻辑如下:
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进行测试)
我认为我用来实现后置异步复位的方法是不稳定的,有人能告诉我如何解决这个问题吗?
发布于 2020-09-02 14:18:55
您试图实现的是异步重置。它可以是posedge或negedge。
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/negedge of rst上,块都会被触发并进行重置。
发布于 2020-09-02 11:42:57
您称之为“高级异步重置”逻辑的第一个代码段是“高级异步重置逻辑”。
代码段指定了一个活动的高异步复位信号rst。"active high“+”异步“意味着这个always块生成的信号在rst断言时立即重置。
发布于 2020-09-04 19:37:09
一旦您在敏感列表中包含了"posedge/negedge重置“,并且始终块中的重置条件比顺序逻辑的其余部分具有优先级,那么它就是异步的:
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“表示活动-低重置。
额外注意:有时有一个复位同步器也是有用的。这种同步的“软重置”应该包含在正常的时序逻辑中,它将有助于使所有东西都与时钟同步。通过这样做,您将有第一个异步重置条件,而最后一个同步重置将避免任何有关异步条件的转移性问题。
https://stackoverflow.com/questions/63701409
复制相似问题