HDL et vérification
Voulant un registre à décalage à deux étages, on a écrit le code ci-dessus avec des affectations bloquantes (=). Quel problème survient ?
always @(posedge clk) begin
q1 = d;
q2 = q1;
end
- Aq2 reçoit q1 mis à jour au même front (c'est-à-dire d), et le circuit ne retarde que d'un étage
- Bq1 et q2 restent indéfiniment à 0
- COn obtient correctement un registre à décalage à deux étages, sans problème
Afficher la réponse et l'explication
Réponse : A. q2 reçoit q1 mis à jour au même front (c'est-à-dire d), et le circuit ne retarde que d'un étage
Avec l'affectation bloquante, q1 prend immédiatement la valeur de d à la première ligne, et q2 reçoit à la deuxième q1 mis à jour, c'est-à-dire d. q2 prend donc la même valeur que q1, et le retard n'est que d'un étage, en simulation comme dans le circuit synthétisé. En écrivant « q1 <= d; q2 <= q1; », q2 reçoit q1 d'avant le front et l'on obtient le registre à décalage à deux étages voulu. Inverser l'ordre des lignes peut fonctionner, mais c'est une source d'erreurs.