如果我们将异步重置块与同步重置一起使用会怎样?

时间:2018-10-29 05:12:57

标签: verilog

考虑到我有一个通用的Verilog模块,我想将其导出到2种不同的设计中-一种在同步重置时,另一种在异步重置时。

在这个通用模块中编写一个always块以便在两种设计中都能正常工作的正确方法是什么?我认为我们可以像这样使用异步重置块-

always @(posedge clk or negedge reset_) begin
  if(!reset_) temp <= 'd0;
  else <do something>
end

如果我使用同步重置,那么在异步重置设计中,如果时钟的启动时间比重置声明-断言要晚得多,那么所需的重置可能会完全丢失。

在同步重置中,我们知道clk的姿势和reset_的忽略总是会重合的,所以这有什么问题吗?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

always @(posedge clk or negedge async_reset) begin
  if(!async_reset) 
    temp <= 'd0;
  else 
    if (!sync_reset)
      temp <= 'd0;
    else
      <do something> 
end

,然后将一个或另一个重置绑定为INACTIVE(在这种情况下为1'b1)。如果您要合成到FPGA,我想它在面积或速度上都不会花费您什么。如果您要合成为IC,那么我会检查合成器的功能。