考虑到我有一个普通的verilog模块,我想要导出到两种不同的设计--一种是同步复位,另一种是异步复位。
在这个公共模块中编写一个始终块的正确方法是什么,以便它在这两种设计中都能很好地工作?我想我们可以像这样使用异步复位块-
always @(posedge clk or negedge reset_) begin
if(!reset_) temp <= 'd0;
else <do something>
end如果我使用同步重置,那么在异步重置设计中,如果时钟启动的时间比复位断言延迟得多,那么就会出现问题,这样就可以完全忽略所需的重置。
在同步重置中,我们知道clk的前缘和reset_的边界总是重合的,所以这有什么问题吗?
发布于 2018-10-29 09:33:02
你可以这样做:
always @(posedge clk or negedge async_reset) begin
if(!async_reset)
temp <= 'd0;
else
if (!sync_reset)
temp <= 'd0;
else
<do something>
end然后将一个或另一个重置绑定到非活动状态(在本例中为1'b1)。如果你正在合成一个FPGA,我可以想象它在面积和速度上都不会花费多少钱。如果你在用集成电路合成器,我会检查合成器是怎么用的。
https://stackoverflow.com/questions/53039083
复制相似问题