1 / 37 · Concept
RTL : décrire des circuits concurrents
Distinguez l'ordre d'exécution logiciel de la structure matérielle parallèle et précisez état, état suivant et observation.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Un circuit continue de fonctionner
La RTL décrit le passage des valeurs entre registres par la logique combinatoire. Un module délimite du matériel; deux instances créent deux structures qui interagissent, et non deux appels successifs. Le circuit reste actif lorsque ses entrées changent. Transformez les portes, mémoires et machines à états du cours Circuits logiques numériques en interfaces SystemVerilog explicites et vérifications répétables. Avant de coder, expliquez largeur, pilotage, validité et remise à zéro de chaque signal.
Séparer état courant et état suivant
Ce module complet accumule des échantillons non signés de quatre bits dans un registre de huit bits. La remise à zéro synchrone, active à 1, prime sur enable. Un front autorisé ajoute sample; les autres conservent sum. L'arithmétique revient à zéro modulo 256.
module accumulator (
input logic clk, rst, enable,
input logic [3:0] sample,
output logic [7:0] sum
);
logic [7:0] next_sum;
assign next_sum = sum + {4'b0000, sample};
always_ff @(posedge clk) begin
if (rst) sum <= 8'b0;
else if (enable) sum <= next_sum;
end
endmodulenext_sum est combinatoire et peut changer avec sum ou sample sans front d'horloge. sum mémorise l'état et change au front montant. Les déclarer tous deux logic ne leur donne pas le même rôle matériel. L'absence du dernier else dans ce bloc cadencé maintient le registre; une affectation manquante dans un bloc combinatoire peut nécessiter un verrou. Identifiez d'abord le type de bloc.
Calculer la table avant de simuler
Chaque ligne utilise état et entrées juste avant le front; observez après les mises à jour non bloquantes.
| Front | rst | enable | sample | sum avant | sum après |
|---|---|---|---|---|---|
| E0 | 1 | 1 | 9 | Inconnu | 0 |
| E1 | 0 | 1 | 3 | 0 | 3 |
| E2 | 0 | 0 | 7 | 3 | 3 |
| E3 | 0 | 1 | 5 | 3 | 8 |
| E4 | 1 | 1 | 15 | 8 | 0 |
En E4, la remise à zéro gagne et aucune somme n'est faite. Avec sum précédent=250 et sample accepté=10, les huit bits donnent 4. Préserver un neuvième bit changerait l'interface et le contrat arithmétique.
Ordre local et concurrence structurelle
Les affectations bloquantes = d'une procédure combinatoire suivent l'ordre procédural. Les procédures distinctes et affectations continues sont concurrentes. Les non bloquantes <= calculent leur membre droit avec les valeurs disponibles à l'exécution, puis planifient la mise à jour. L'ordre du texte ne remplace pas une spécification de latence. N'utilisez pas #10 dans l'accumulateur pour attendre une horloge: retards et générateurs d'horloge appartiennent au banc de simulation général. Une transition synthétisable décrit front et état, pas sleep.
Exercice : modifier une exigence
Remplacez le débordement par saturation à 255. Étendez explicitement les opérandes et additionnez sur neuf bits. Si le bit 8 vaut 1, stockez 255, sinon les bits 7:0. Gardez les priorités. Vérifiez 0+0,250+5,250+6, un front désactivé et reset/enable simultanés: attendez 0,255,255, état conservé,0. Seul 250+5 ne révèle pas une retenue perdue; incluez 250+6. Sauvegardez source, table et attentes. Une leçon marquée terminée atteste l'étude, pas une exécution du simulateur.