Modélisation d'une bascule T déclenchée par front positif avec effacement asynchrone
Je modélise une bascule T déclenchée par un front positif avec un clear asynchrone. Voici le code:
module t_flip_flop_exam (q,clk,clear,t);
input t ;
input clk;
input clear;
output reg q ;
reg internal_t;
always @ (clear)begin
if (clear==1)
q=0;
else
q=q;
end
always @ (posedge clk)begin
if (t==1)
q=~q;
else
q=q;
end
endmodule
Est-ce un code efficace? Est-il acceptable de devoir séparer des always
blocs, ou existe-t-il un moyen d'inclure à la fois le code de comportement clear
et le clk
code de comportement des signaux dans un seul always
bloc?
Réponses
C'est une manière courante de combiner les always
blocs:
module t_flip_flop_exam (q,clk,clear,t);
input t;
input clk;
input clear;
output reg q;
always @(posedge clk or posedge clear) begin
if (clear)
q <= 0;
else if (t)
q <= ~q;
end
endmodule
Il est préférable d'affecter un signal à partir d'un seul always
bloc.
Déclencher le always
bloc sur le posedge
de clear
sorte que la synthèse peut déduire la logique désiré (asynchrone clair, bascule synchrone).
Utilisez des affectations non bloquantes ( <=
) pour la logique séquentielle.
Il n'est pas nécessaire de le faire explicitement q=q
car cela est implicite.