同步复位是时钟边沿触发时判断是否有效,和时钟有关。
异步复位是复位信号有效和时钟无关。
同步复位
always @(posedge clk) begin
if(~rst_n) begin
a <= 0;
end
else begin
a <= 1;
end
end
异步复位
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin
a <= 0;
end
else begin
a <= 1;
end
end
同步复位
优点:
- 同步复位通常确保电路是100%同步的
- 同步复位逻辑将综合成较小的触发器,特别是如果复位是由产生触发器输入的逻辑门控
- 同步复位确保复位只能发生在时钟边沿。这个时钟可以作为一个过滤器来处理小的复位故障。
- 在某些设计中,重置必须由一组内部条件生成。
建议对这些类型的设计采用同步复位,因为它可以过滤时钟之间的逻辑方程故障
缺点:
- 同步复位可能需要一个脉冲展宽器来保证复位脉冲宽度足够宽,以确保在时钟的活动边沿出现复位。这是一个重要的问题,做多时钟设计,可以使用一个小计数器来保证一定周期数的复位脉冲宽度
- 如果在SOC设计的组合逻辑中创建复位或者复位遍历本地组合逻辑的多个级别,那么可能存在潜在问题。在仿真过程中,根据复位的产生方式或将复位应用于功能块的方式,可以用X掩盖该复位。问题不在于您具有哪种类型的复位,而在于复位信号是否易于由外部引脚控制。
- 从本质上讲,同步复位将需要一个时钟来复位电路。 在某些情况下,使用门控时钟来节省功率时,这可能是个问题。 置位复位期间,时钟将同时被禁用。 在这种情况下,只有异步复位才能起作用,因为复位可能会在恢复时钟之前被清除。
异步复位
优点:
- 使用异步复位的最大优点是,只要供应商库具有可异步复位的触发器,就可以保证数据路径是干净的。 由于插入了用于处理同步复位的逻辑,正在推高数据路径时序限制的设计无法承受增加的门和数据路径中额外的净延迟。 使用异步复位,可以确保设计人员不会将复位添加到数据路径中。
- 支持异步复位最明显的优点是,无论有无时钟都可以复位电路。综合工具倾向于自动推断异步重置,而不需要添加任何综合属性
缺点:
- 对于DFT,如果异步复位不是直接由I / O引脚驱动,则必须禁用来自复位驱动器的复位网络,以进行DFT扫描和测试
- 异步复位的最大问题是,无论在复位的断言还是去断言时,它们都是异步的。 断言不是问题,去断言是问题。 如果异步复位在触发器的有效时钟沿处或附近释放,则触发器的输出可能变为亚稳态,因此SoC的复位状态可能会丢失。
- 异步复位可能会出现的另一个问题(取决于其来源)是由于板上的噪声或毛刺或系统复位而导致的虚假复位。 通常需要设计毛刺滤波器,以消除毛刺对复位电路的影响。 如果这是系统中的实际问题,则可能会认为使用同步重置是解决方案。
- 复位树必须为同步和异步复位定时,以确保复位释放可以在一个时钟周期内发生。 必须在布局之后执行重置树的时序分析,以确保满足此时序要求。 消除此问题的一种方法是使用分布式复位同步器触发器。
参考文献
https://m.eet.com/media/1121857/chapter2_clocks_resets-03.pdf