Was ist der Unterschied zwischen einer casez- und einer casex-Anweisung in Verilog?
On Dezember 31, 2020 by adminIch weiß, dass eine case-Anweisung in Verilog mit case, casex oder casez beginnen kann. Wann würde ich bei casex und casez eines über dem anderen verwenden?
Kommentare
- Was hindert Sie daran, casex vs casez " in Google Query?
- Sie können auch versuchen, nach " verilog casex casez ", nur für den Fall @EugeneSh. Der Kommentar von ' wird gelöscht, da " unfreundlich " ist. Wir erwarten, dass Sie ein wenig recherchieren, bevor Sie hier eine Frage stellen.
- @ElliotAlderson Wahre Freunde sprechen oft viel härter miteinander, daher frage ich mich, wie " freundlich " sollte definiert werden 🙂
- @EugeneSh. Ich stimme Ihnen zu, aber ich habe ähnliche Kommentare gelöscht.
- @EugeneSh. Anscheinend geht StackExchange jetzt gegen Kommentare vor, die sagen: " Google es einfach … " Ich denke jedoch, Elliot hat das richtige Art, jemandem eine Antwort an Google zu sagen lol.
Antwort
Ich nehme an, Sie sind es können das LRM lesen, fragen aber nach einer Meinung: Warum ?
Das Problem ist, dass viele Verilog-Funktionen auf speziellen Wunsch eines Benutzers hinzugefügt wurden und einige dieser Funktionen nicht so nützlich waren. Und manchmal wurde ein Feature eingefügt, weil es zu dieser Zeit konsistent und einfach zu implementieren schien, sich aber am Ende als kontraproduktiv herausstellte. casex
könnte eine dieser Funktionen sein. Aber vieles davon ist in der Vergangenheit verloren gegangen.
Sie sollten niemals casex
verwenden. casex
ist berüchtigt dafür, Unterschiede zwischen Simulationen vor und nach der Synthese zu verursachen.
Sie Verwenden Sie casez
, um die Pflegebedingungen mit einem ?
in Ihrem Fallelement zu modellieren. Wenn Sie jedoch zu SystemVerilog wechseln können, wird das case inside
ist sogar noch besser, da sie sich nur mit dem Fallelementausdruck befasst, nicht mit dem Fallauswahlausdruck.
Antwort
Das Guthaben geht beispielsweise an ASIC World Codes.
casez
Behandelt alle z-Werte im case-Ausdruck als egal.
Beispiel:
casez(opcode) 4"b1zzx : begin // Don"t care about lower 2:1 bit, bit 0 match with x out = a; $display("@%0dns 4"b1zzx is selected, opcode %b",$time,opcode); end 4"b01?? : begin out = b; // bit 1:0 is don"t care $display("@%0dns 4"b01?? is selected, opcode %b",$time,opcode); end 4"b001? : begin // bit 0 is don"t care out = c; $display("@%0dns 4"b001? is selected, opcode %b",$time,opcode);
casex
Behandelt alle x und z-Werte im Fallausdruck als egal.
Beispiel:
casex(opcode) 4"b1zzx : begin // Don"t care 2:0 bits out = a; $display("@%0dns 4"b1zzx is selected, opcode %b",$time,opcode); end 4"b01?? : begin // bit 1:0 is don"t care out = b; $display("@%0dns 4"b01?? is selected, opcode %b",$time,opcode); end 4"b001? : begin // bit 0 is don"t care out = c; $display("@%0dns 4"b001? is selected, opcode %b",$time,opcode); end
Natürlich benötigen Sie eine endcase
am Ende von casez
und Module.
Schreibe einen Kommentar