Ich schreibe etwas Verilog und simuliere es mit Modelsim. Ich habe einen Block, der so aussieht:
if(wr_req & !cam_busy & !lookup_latched & !cam_match_found & !cam_match_found_d1) begin
cam_we <= 1;
cam_wr_addr <= wr_addr;
cam_din <= wr_cmp_data ;
cam_data_mask <= wr_cmp_dmask;
wr_ack <= 1;
lut_wr_data <= wr_data;
end
lookup_latched
ist hochohmig. cam_match_found
und cam_match_found_d1
sind beide in einem egal Zustand.
Es scheint mir, als sollte die Aussage diese Signale einfach ignorieren.
Das einzige Problem, das mir aufgefallen ist, war, dass die Signale bitweise statt logisch geandet wurden (ich habe den Code nicht geschrieben). Wird sich das auf das Ergebnis auswirken? (Ich denke es wird)
Danke!
Dein Code wird nicht funktionieren.
In Verilog verwandelt sich ein „z“ am Eingang eines Gatters in ein „x“ am Ausgang des Gatters. Ein 'x' am Eingang des Gatters wird auch in ein 'x' am Ausgang des Gatters übersetzt.
Daher reduziert sich Ihr Code aufif(wr_req & !cam_busy & X & X & X)
Der Wert von (something & X)
kann entweder 0 oder X sein, und in beiden Fällen wird die if-Anweisung als falsch ausgewertet ( if(X)
ist dasselbe wie if(0)
).
Das einzige Problem, das mir aufgefallen ist, war, dass die Signale bitweise statt logisch geandet wurden (ich habe den Code nicht geschrieben). Wird sich das auf das Ergebnis auswirken? (Ich denke es wird)
Wenn das alles 1-Bit-Signale sind, dann ist logisches UND (&&) das gleiche Ergebnis wie bitweises UND (&).
Ätzend
Ätzend
8'hXF && 8'hFF
? Ich gehe davon aus, dass dies als wahr ausgewertet wird, da der erste Operand Nicht-Null-Bits enthält. Ist das richtig?Tim
true
, aber es ist wahrscheinlich keine gute Idee, Multi-Bit-Werte in einer logischen Operation zu verwenden (wird wahrscheinlich Flusen- oder Synthesewarnungen geben).