Menu
Coddy logo textTech

Décodage sûr avec case

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

Utilisez une instruction case ordinaire pour les codes de contrôle exacts. Fournissez un comportement default pour les codes non pris en charge et assign toutes les sorties. Le décodage avec caractères génériques à l’aide de casex peut masquer des bits de contrôle inconnus lors de la simulation ; il ne convient donc pas lorsque les valeurs inconnues doivent rester visibles pendant le débogage.

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

always @* begin
    y = 0;
    invalid = 0;
    case (op)
        0: y = a & b;
        1: y = a | b;
        default: invalid = 1;
    endcase
end

Les codes non pris en charge produisent un état explicite plutôt que de conserver une sortie précédente.

Définissez explicitement les codes de contrôle non pris en charge et évitez de masquer les contrôles inconnus avec casex.

challenge icon

Défi

Moyen

Implémentez une unité logique de 8 bits : op 0 calcule un AND entre a et b, op 1 calcule un OR entre a et b, op 2 calcule un XOR entre a et b, et op 3 renvoie zéro avec invalid défini à un. invalid vaut zéro pour les opérations prises en charge. Colonnes de sortie : y, invalid. Toutes les valeurs de stimulation sont des valeurs binaires connues.

Complétez design.v et préservez les noms de modules 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 constituée d’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 [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
    // Remplacez ce placeholder par votre design.
    initial y = 0;
    initial invalid = 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