Sie müssen daran denken, dass -8d69
nur ein Bitmuster ist. reg ist ein Typ, der Bitmuster enthält. Es ist der Variablentyp, der /
anweist, vorzeichenbehaftete oder vorzeichenlose Arithmetik auszuführen.
Wenn dies für die Synthese im Hinterkopf ist, dass Sie versuchen, Teiler zu vermeiden, möchten Sie wirklich versuchen, signierte Teiler zu vermeiden. Es wird Synthese wahrscheinlich kleiner mit >>> 1
reg [7:0] a;
reg signed [7:0] b;
reg [7:0] c;
reg signed [7:0] d;
initial begin
a = -8'd69 ;
b = -8'd69 ;
c = -8'd69 ;
d = -8'd69 ;
#10ns;
a = a/2 ;
b = b/2 ;
#10ns;
$display("a : %8b, %d", a, a);
$display("b : %8b, %d", b, b);
$display("c >>>1 : %8b, %d", c>>>1, c>>>1);
$display("d >>>1 : %8b, %d", d>>>1, d>>>1);
end
Gibt:
a : 01011101, 93
b : 11011110, -34
c >>>1 : 01011101, 93
d >>>1 : 11011101, -35
>> x
Shifts rechts von x Orte, >>> x
Shifts rechts x Plätze, aber Zeichen erstreckt für signierte Typen.
Hinweis: Die /2
wird auch in meinen Beispielen aufgerundet, >>>
wird abgerundet/abgeschnitten.
Sie sollten auch signierte Nummern als solche deklarieren. 'reg signed [7: 0] my_reg' – Morgan
Sie könnten >>> 1 verwenden, um eine Vorzeichenerweiterung um 2 auszuführen (wenn es als signierter Typ deklariert ist). – Morgan