设计中的所有触发器都需要可复位(ASIC)吗?

new*_*bie 5 verilog vhdl system-verilog asic

我试图了解芯片中的时钟重置。在设计中,使用什么标准来决定复位期间是否应为触发器分配一个值(通常为零)?

always_ff @(posedge clk or negedge reset) begin : process_w_reset
   if(~reset) begin
      flop1 <= '0;
      ....
   end else begin
      if (condition) begin
         flop1 <= something ;
         .... 
      end
   end
end

always_ff @(posedge clk) begin : process_wo_reset
      if (condition) begin
         flop1 <= something ;
         .... 
      end
end
Run Code Online (Sandbox Code Playgroud)

不重置稍后用作梳状逻辑中的控制信号的触发器是一种不好的做法吗?如果设计确保触发器在用于梳状逻辑块(即在 if 语句或 FSM 梳状逻辑中)之前分配有有效值(0 或 1),该怎么办?

我觉得最好总是重置设计中的所有失败。这样芯片复位后就不会有X了。然而,对于数据路径逻辑来说,重置触发器可能并不是什么大问题,因为它只是管道阶段。然而,如果触发器位于控制路径中(即,FSM 下一状态梳逻辑),则应将其重置为默认值。我的理解正确吗?我对DFT了解不多,不确定它是否还有其他含义。

Mor*_*mer 4

假设重置意味着异步重置,如代码示例中所示。

答案部分是基于意见的,因为设计可以与最小数量的触发器(FF)和所有 FF 的复位一起工作。

我建议复位最少数量的 FF,这通常会导致控制路径中的大多数 FF 复位,而不会复位数据路径中的 FF。下面概述了这种方法的优点。

对于 Verilog 和 VHDL 而言,仿真对于未初始化值的传播通常是保守的,因此就像仿真可以在值未初始化时同时检查 0 和 1 值一样。

因此,由于 FF 未重置而导致的错误可能会在仿真验证中更早地显示出来,因此设计人员可以获得有关错误设计假设的宝贵反馈,这可能会导致设计中的修正,从而修复其他错误。只需重置所有 FF 就可能隐藏此类错误。

如果控制路径和数据路径中的所有 FF 都被重置,那么设计和验证似乎会更容易,因为它修复了设计中所有“烦人的”X 传播。但是,当通过重置抑制 X 传播时,需要增加测试次数以验证所有值组合。

实现对复位信号施加较小的负载,因此更容易满足整个芯片的复位网络的时序。

一般来说,DFT (测试设计),然后向 FF 添加复位将不会帮助 DFT 找到卡在复位值的网络。使用 DFT 扫描链方法,其中所有 FF 都通过扫描链加载,因此某些 FF 上缺少复位将不需要更多向量。