考虑到我有一个通用的Verilog模块,我想将其导出到2种不同的设计中-一种在同步重置时,另一种在异步重置时。
在这个通用模块中编写一个always块以便在两种设计中都能正常工作的正确方法是什么?我认为我们可以像这样使用异步重置块-
always @(posedge clk or negedge reset_) begin
if(!reset_) temp <= 'd0;
else <do something>
end
如果我使用同步重置,那么在异步重置设计中,如果时钟的启动时间比重置声明-断言要晚得多,那么所需的重置可能会完全丢失。
在同步重置中,我们知道clk的姿势和reset_的忽略总是会重合的,所以这有什么问题吗?
答案 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,那么我会检查合成器的功能。