17

すべてが 1 の 128 ビット ベクトルを宣言したい場合、これらの方法のどれが常に正しいですか?

wire [127:0] mywire;

assign mywire = 128'b1;
assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
4

2 に答える 2

23

簡単なシミュレーションで証明されるように、assign mywire = 128'b1;は のすべてのビットを 1 に割り当てませんmywire。ビット 0 のみに 1 が割り当てられます。

次の両方は、常に 128 ビットすべてを 1 に割り当てます。

assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

1 行目の利点の 1 つは、幅が 128 より大きくても小さくても簡単に拡張できることです。

SystemVerilog では、次の構文も常に 128 ビットすべてを 1 に割り当てます。

assign mywire = '1;
于 2013-09-30T23:56:07.377 に答える
13

代わりに次のステートメントを使用します。

assign mywire = ~0;

このような単純な式では、代入の左側の幅が右側の式の幅を設定します。したがって0、32 ビット定数である は、最初に mywire の完全な 128 ビットに拡張され、次にすべてのビットが反転され、結果としてすべて 1 のベクトルが割り当てられます。

割り当てのどこでも mywire の幅を指定する必要がないため、このバージョンをお勧めします。

于 2013-10-04T09:38:01.267 に答える