すべてが 1 の 128 ビット ベクトルを宣言したい場合、これらの方法のどれが常に正しいですか?
wire [127:0] mywire;
assign mywire = 128'b1;
assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
すべてが 1 の 128 ビット ベクトルを宣言したい場合、これらの方法のどれが常に正しいですか?
wire [127:0] mywire;
assign mywire = 128'b1;
assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
簡単なシミュレーションで証明されるように、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;
代わりに次のステートメントを使用します。
assign mywire = ~0;
このような単純な式では、代入の左側の幅が右側の式の幅を設定します。したがって0
、32 ビット定数である は、最初に mywire の完全な 128 ビットに拡張され、次にすべてのビットが反転され、結果としてすべて 1 のベクトルが割り当てられます。
割り当てのどこでも mywire の幅を指定する必要がないため、このバージョンをお勧めします。