Menu
Coddy logo textTech

Mise en pipeline des données et de valid

Fait partie de la section Conception et vérification RTL du Journey Verilog de Coddy. Leçon 18 sur 38.

Les pipelines répartissent le travail entre les registres. Un indicateur de validité accompagne chaque élément de données afin qu’une étape en aval puisse distinguer un échantillon d’une bulle. Avec les affectations non bloquantes, une étape ultérieure lit la valeur précédente d’une étape antérieure au même front. La réinitialisation doit invalider le travail en cours dans le pipeline.

Extrait pertinent : les déclarations et connexions environnantes sont fournies dans le défi.

always @(posedge clk) begin
    stage <= data;
    stage_valid <= in_valid;
    result <= stage;
    out_valid <= stage_valid;
end

Les données et leur validité traversent le même nombre de registres.

Alignez les données et la validité à travers chaque étape du pipeline, et invalidez la validité lors de la réinitialisation.

challenge icon

Défi

Moyen

Implémentez un pipeline à deux étapes de registres. À chaque front qui n’est pas une réinitialisation, la première étape capture a et in_valid. La deuxième étape utilise les valeurs précédentes de la première étape : out_valid devient son ancienne valeur de validité, et y devient son ancienne donnée plus un modulo 256 lorsqu’elle est valide, sinon zéro. La réinitialisation synchrone rst efface les deux étapes et les sorties. Colonnes de sortie : y, out_valid. Toutes les commandes et les données sont stables avant chaque front montant de l’horloge : les résultats sont observés ensuite.

Complétez design.v et préservez les noms de module et les ports. Le testbench.v verrouillé fournit les changements d’entrée et affiche les sorties une fois stabilisées. Il choisit un scénario à l’aide d’un argument du simulateur tel que +CASE=1 ; aucune entrée standard n’est requise. N’ajoutez pas d’affichage, de délais ni de terminaison de simulation au design. La sortie attendue est une ligne de valeurs décimales par observation, séparées par un espace et se terminant par un saut de ligne.

Essayez vous-même

module dut (input clk, input rst, input in_valid, input [7:0] a, output reg [7:0] y, output reg out_valid);
    // Remplacez ce placeholder par votre design.
    initial y = 0;
    initial out_valid = 0;
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Conception et vérification RTL

Entraînez-vous par vous-même : Compilateur Verilog en ligne