web-dev-qa-db-fra.com

Quelle est la différence entre = et <= dans Verilog?

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
7
Hayder Al-Amily

<= 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".

11
toolic

= 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.

14
Sourabh