Hardwarebeschreibungssprachen und Verifikation
a sollte wie oben geschrieben das vorzeichenbehaftete −1 sein, doch gt wurde 1. Was ist der Grund?
wire [7:0] a = 8'hFF;
wire gt = (a > 8'd1);
- AWeil nicht als signed deklariert wurde, wurde a als vorzeichenlose 255 verglichen
- BWeil in Verilog das Vergleichsergebnis stets 1 ist
- CWeil 8'hFF denselben Wert wie 0 hat
Antwort und Erläuterung anzeigen
Antwort: A. Weil nicht als signed deklariert wurde, wurde a als vorzeichenlose 255 verglichen
Verilog-Signale werden ohne signed als vorzeichenlos behandelt, 8'hFF ist daher 255, und 255 > 1 ist wahr. Werden sowohl a als auch b etwa als „wire signed [7:0]“ deklariert, wird im Zweierkomplement als −1 verglichen und das Ergebnis ist 0. Da zudem die Regel gilt, dass der gesamte Ausdruck vorzeichenlos berechnet wird, sobald auch nur ein vorzeichenloser Wert enthalten ist, ist es bei vorzeichenbehafteter Rechnung wichtig, alle Werte im Typ anzugleichen.