7

私はそのように宣言されたレジスタを持っています:

logic signed [15:0][2:0][15:0] registers;

2の補数を配列に配置し、その数を算術的にシフトすると、代わりに論理シフトされます。

registers[0][0] = 16'b1000000000000000;
registers[0][0] = registers[0][0]>>>2;

明らかに、数値が署名されていない場合、システムは算術シフトではなく論理シフトします。ただし、はっきりとわかるように、「レジスタ」は確実に署名されています。

私がここで何が欠けているのか誰か知っていますか?

ありがとう!

4

1 に答える 1

13

Verilogでは、part-selectを実行すると、結果はになりunsignedます。$signedパーツ選択のシステムタスクを使用して、署名します。

res = $signed(registers[0][0]) >>> 2;
于 2013-01-07T13:50:09.277 に答える