Altifigence Academy

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.

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.

SystemVerilog
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
endmodule

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

Frontrstenablesamplesum avantsum après
E0119Inconnu0
E101303
E200733
E301538
E4111580

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.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.