2

不在复位感知 always_ff 块内复位触发器的后果是什么?

示例 1:

always_ff @(posedge clk, negedge rst) begin
   if (~rst) begin
      reg_a <='0;
      reg_b <='0;
   end else begin
      if (condition_1) begin
         reg_a <= some_signal;
      end else if (condition_2) begin
         reg_b <= some signal;
      end
   end
end

示例 2:

always_ff @(posedge clk, negedge rst) begin
   if (~rst) begin
      reg_a <='0;
   end else begin
      if (condition_1) begin
         reg_a <= some_signal;
      end else if (condition_2) begin
         reg_b <= some signal;
      end
   end
end

示例 1 和示例 2 之间的唯一区别是,在示例 2 中,reg_b 没有任何重置条件。这个后端/综合错误的后果是什么?我有前端 RTL 设计背景,在合成方面经验很少。所以,我试图理解为什么上面的示例 2 是一个不好的做法。

一个明显的问题是 - 在示例 2 中重置 reg_b 之后将是 X。因此,如果 reg_b 用于任何控制逻辑,那么它可能会在设计中引入错误。除此之外,这还会产生什么其他问题?

4

1 回答 1

0

我不认为它会在综合或 PnR 期间导致任何错误。
在大型设计中,我确实遇到了一些未重置的 ff。它可以避免对 PnR 工具的一些不必要的限制。
但是,正如您所说,您应该注意不要在编写之前使用它来引入错误,因为在此之前它将是“X”。

于 2016-02-08T09:28:32.020 回答