Im folgenden vereinfachten Verilog-Code:Verilog "~" Operator zusätzlich Betrieb gibt unerwünschtes Ergebnis
wire [31:0] depth;
wire mode_u2 = 1'h0;
assign depth = 'h80 + (~mode_u2);
wenn ich eine Anzeige auf Tiefe und simulieren sie mit VCS (2014.12-1)
$display("depth is 0x%2x", depth);
Ich bekomme statt erwartet 0x81
. es scheint, dass ~ mode_u2 als minus 1 behandelt wird.
Wenn ich ~mode_u2
zu !mode_u2
ändere. Ich bekomme 0x81 wie erwartet.
was mehr interessant ist, ist, wenn ich wire mode = ~mode_u2
tun und dann assign depth = 'h80 + (~mode)
statt 0x80
, bekomme ich 0x7e
Fehle ich etwas hier?
Kann jemand erklären, warum sich ~
auf diese Weise in einem +
Betrieb verhält? Oder ist dies eine der Situationen, in denen Simulation und Synthese eine andere sind?
Vielen Dank !!
Willie
Ich denke, Sie sind auf der richtigen Spur, aber 32-Bit-Erweiterung von 0 ist '32'h0000_0000' und seine bitweisen Negation ist' 32'hffff_ffff'. – toolic
@toolic: Danke. Fest. – Ari
@Ari: Ich dachte über das gleiche nach, das sollte die einzig mögliche Erklärung sein. Allerdings ist eine erwähnenswerte Sache, dass, wenn es 0x80 + alle fs macht, wenn ich 33 Bits der Ergebnistiefe drucke, das MSB NICHT 1 ist? und wenn du + (~ Modus) machst, warum fügt es ~ 32'h0000_0001 hinzu, nicht ~ 32'hffff_ffff, da der Modus ~ mode_u2 ist. – shakimura