3

Verilog コードで 1 を与えることと 1'b1 を与えることの違いは何ですか?

4

3 に答える 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 ビットを使用してすべての計算を行う ( 132 ビット幅であるため) 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 に答える