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 が悪い習慣である理由を理解しようとしています。

明らかな問題の 1 つは、リセット直後に例 2 の reg_b が X になることです。したがって、reg_b が制御ロジックで使用されている場合、設計にバグが発生する可能性があります。これ以外に、これによってどのような問題が発生する可能性がありますか?

4

1 に答える 1