-1

次のコードがラッチを推測しないのはなぜですか?

d と rst の両方が "0" の場合、ツールは "e" に何を割り当てるかをどのように認識しますか?

module tmp(input d,
        input clk,
        input rst,
        output reg o,
        output reg e);

 always@(posedge clk)
         if(rst) begin
               o <=0;
               e <= 1;
               end
         else if(d) begin
                     o<=1;
                     e<=0;
               end
          else
                    o <=1;
endmodule
4

1 に答える 1

2

always ブロック モデルのシーケンシャル ロジック(つまり、フリップフロップを含むロジック)。drstが両方ともの場合1'b0、への代入を含むコード行はe実行されません。その結果、e以前の値が保持されます (記憶されます)。しかしe、D タイプのフリップフロップとして合成されるため、問題ありません。フリップフロップには状態があり、ストレージがあります。ラッチは必要ありません。

于 2017-04-03T14:55:19.660 に答える