Ces exercices seront fait en Verilog, mais leurs principes restent les mêmes pour VHDL ou SystemC...

Exercice 1

On considère un compteur synchrone très simple :

 

schema compteur

Schéma du compteur

Une description Verilog possible de ces trois processus est donnée dans la figure ci-dessous :

processus compteur

Description Verilog des trois processus

La notation @(signal) signifie que le processus en question est stoppé jusqu'à un événement sur signal (un changement d'état).
La notation #10; est un point d'arrêt sans liste de sensibilité. Le processus est stoppé, et reprend sont exécution 10ns plus tard.
La notation D <= #10 Q; signifie que l'affectation est prévue pour dans 10ns. L'affectation est non bloquante, le processus n'est pas stoppé.

 
Question 1

Parmi ces trois processus il en est deux qui relèvent de la seule modélisation, alors que le troisième peut à priori indifféremment être destiné à la modélisation ou à la synthèse, quel est-il ?

 

Question 2

Donner un chronogrammes précis d'évolution des signaux H, D et Q en fonction du temps physique + temps symbolique.
A quelle date (physique + symbolique) Q passe-t-il pour la première fois à 1 ?






Back to Top

Exercice 2

Soit le dispositif représenté ci-dessous. C'est un registre à décalage à trois étages. A chaque front d'horloge, le contenu d'un registre est tranféré dans le suivant.

Registre décalage

Registre à décalage à 3 étages

 

Question 1

Parmi les quatre descriptions Verilog ci-dessous, laquelle(s) est (sont) correcte(s), et pourquoi ?

module REGS(CK, DIN, DOUT);
input CK, DIN;
output DOUT;
reg DOUT;
reg A0, A1;
always @(posedge CK) begin
  A0 = DIN;
  A1 = A0;
  DOUT = A1;
end
endmodule
module REGS(CK, DIN, DOUT);
input CK, DIN;
output DOUT;
reg DOUT;
reg A0, A1;
always @(posedge CK) begin
  A0 <= DIN;
  A1 <= A0;
  DOUT <= A1;
end
endmodule
module REGS(CK, DIN, DOUT);
input CK, DIN;
output DOUT;
reg DOUT;
reg A0, A1;
always @(posedge CK)
  DOUT <= A1;
always @(posedge CK)
  A1 <= A0;
always @(posedge CK)
  A0 <= DIN;
endmodule
module REGS(CK, DIN, DOUT);
input CK, DIN;
output DOUT;
reg DOUT;
reg A0, A1;
always @(posedge CK)
  DOUT = A1;
always @(posedge CK)
  A1 = A0;
always @(posedge CK)
  A0 = DIN;
endmodule
Version 1
Version 2
Version 3
Version 4

La notation D <= Q; signifie que l'affectation est non bloquante : différée à la fin du delta-cycle courant
La notation D = Q; signifie que l'affectation est bloquante : elle est exécuté instantanément
La notation always @(posedge CK) signifie que le processus est sensible à un front montant de CK : il n'est réveillé et exécuté que sur front montant de CK.





Back to Top

Conclusion

Vous connaissez maintenant les principes sous-jacents aux HDL, et à la simulation événementielle.

Ces principes, notamment la différence entre affectations immédiates et différées (variables et signaux) sont primordiaux.

Vous pouvez maintenant passer à l'étude du langage que vous souhaitez :


Back to Top