Je suis nouveau ici comme dans verilog ... Je veux demander la différence entre = et <= dans ce programme? et comment imprimer la valeur des données?
module always_example();
reg clk,reset,enable,q_in,data;
always @ (posedge clk)
if (reset) begin
data <= 0;
end else if (enable) begin
data <= q_in;
end
// if i put $print("data=%d", data); there is error
endmodule
<= est une affectation non bloquante. Il est utilisé pour décrire la logique séquentielle, comme dans votre exemple de code. Reportez-vous à IEEE Std 1800-2012, section 10.4.2 "Affectations procédurales non bloquantes".
= sert à bloquer les affectations. Il est utilisé pour décrire la logique combinatoire.
Voir aussi Affectations non bloquantes dans Verilog Synthesis, styles de codage qui tuent!
Vous pouvez utiliser $display
au lieu de $print
pour imprimer la valeur des variables. Voir aussi IEEE Std 1800-2012, section 21.2 "Afficher les tâches système".
= est une instruction bloquante. Dans un bloc always
, la ligne de code ne sera exécutée qu'après l'exécution de sa ligne précédente. Par conséquent, ils se produisent l'un après l'autre, tout comme les logiques combinatoires en boucle.
<= est de nature non bloquante. Cela signifie que dans un bloc always
, chaque ligne sera exécutée en parallèle. Menant ainsi à la mise en œuvre d'éléments séquentiels.