Es endete also, dass der Fehler, der mich tagelang gehalten hatte, ein Codeabschnitt war, der zu "False" ausgewertet werden und "True" auswerten sollte. Mein anfänglicher Code ging so etwas wie:Was ist der Unterschied zwischen Verilog! und ~?
if(~x && ~y) begin //do stuff end
d Wenn x nicht ein und y ist nicht einer dann Sachen zu tun. Beim Durchlaufen des Debuggers stellte ich fest, dass, obwohl x 1 war, der Ausdruck in der if-Anweisung immer noch in TRUE resultierte und der nachfolgende Code ausgeführt wurde.
Allerdings, wenn ich die Aussage geändert:
if(x == 0 && y == 0) begin
//do stuff
end
und auch versucht:
if(!x && !y) begin
//do stuff
end
der Code innerhalb der if-Anweisung wurde nicht bewertet, die das erwartete Verhalten ist. Ich verstehe, dass ~ eine bitweise Negation ist und! eine logische Verneinung, aber sollte nicht (~ x & & ~ y) und (! x & &! y) zur gleichen Sache bewerten? Ich fürchte, die Codebasis ist zu groß, daher kann ich sie hier nicht einfügen, aber dies war die einzige Änderung, die ich vorgenommen habe, damit der Code so funktioniert, wie ich es beabsichtigt hatte. Vielen Dank.
Als Antwort auf eine der nachstehenden Bemerkungen: Ich habe einen Testfall erstellt, dieses Verhalten zu testen:
`Zeitplan 10ns/1ns
Modul test_negation();
integer x, y; initial begin x = 1; y = 0; if(~x && ~y) begin $display("%s", "First case executed"); end if(!x && !y) begin $display("%s", "Second case executed"); end if(x == 0 && y == 0) begin $display("%s", "Third case executed"); end end endmodule
Und seltsam genug, „Erster Fall ausgeführt“ wird das ursprüngliche Verhalten ich beobachtet, um zu bestätigen gedruckt.
raten, aber wäre nicht bitweise Verneinung etwas wie ~ ~ 0xAA = 0x55', vs. '! 0xAA' ist das Äquivalent von" 0xAA ist nicht Null, also werte ". –
@Marc B Ja, das ist ein wichtiger Unterschied. In diesem Fall sind jedoch sowohl x als auch y 1 Bit lang. Wenn x "1" ist, würde ich eine bitweise Negation ~ x als "0" erwarten. – iab
Ein Bit lang? Wie seltsam. Können Sie ein Testprojekt machen, um die Werte von 'x','! X', '~ x',' y', '! Y',' ~ y' und '(~ x && ~ y)' und anzuzeigen '(! x &&! y)'? –