Verilog コードで 1 を与えることと 1'b1 を与えることの違いは何ですか?
7126 次
3 に答える
3
では、たとえば、
logic [7:0] count;
...
count <= count + 1'b1;
と
logic [7:0] count;
...
count <= count + 1;
多くはありません。最初のケースでは、シミュレーター/シンセサイザーはこれを行います:
i) を (8 ビット幅であるため) に拡張し1'b1
ます8'b1
。ii count
) 8 ビットを使用してすべての計算を行います (すべてが 8 ビット幅であるため)。
2 番目のケースでは、シミュレーター/シンセサイザーはこれを行います。
i) 32 ビットを使用してすべての計算を行う ( 1
32 ビット幅であるため) ii) 32 ビットの結果を 8 ビット幅に切り詰める (count は 8 ビット幅であるため)
動作は同じになります。ただし、常にそうであるとは限りません。これ:
count <= (count * 8'd255) >> 8;
この:
count <= (count * 255) >> 8;
異なる振る舞いをします。最初のケースでは、乗算に 8 ビットが使用されるため ( の幅8
は>> 8
関係ありません)、乗算はオーバーフローします。2 番目のケースでは、乗算に 32 ビットが使用されるため、すべて問題ありません。
于 2019-11-29T08:20:44.173 に答える