Altifigence Academy

11 / 63 · Concept

Décodeurs, sélection one-hot et entrées valides

Convertir une adresse binaire en sélections individuelles et définir enable, plage valide et invariants de sélection.

Transformer une adresse en ligne de sélection

Un décodeurDécodeur Circuit activant la ligne correspondant à un code binaire. Avec enable, toutes les sorties peuvent être mises à 0 lorsqu'il est désactivé. de NN bits transforme l'adresse en sélection d'une sortie parmi au plus 2N2^N. Avec une autorisation ee, la sortie did_i peut se définir ainsi :

di=e∧(a=i)d_i=e\land(a=i)

Pour un décodeur 2-vers-4, d0=ea‾1a‾0d_0=e\overline a_1\overline a_0, d1=ea‾1a0d_1=e\overline a_1a_0, d2=ea1a‾0d_2=ea_1\overline a_0 et d3=ea1a0d_3=ea_1a_0. Si enable=0, toutes les sorties valent 0 ; s'il vaut 1, exactement une sortie vaut 1.

Avec enable=1, changez a1a0 : une seule sortie d0 à d3 s'allume. Passez enable à 0 et vérifiez l'extinction de toutes les sélections.

De l'adresse à une sélection one-hot

d[i] = enable AND (2 × a1 + a0 = i)

La valeur par défaut complète la fonction

SystemVerilog
module decoder2 (
  input logic en,
  input logic [1:0] addr,
  output logic [3:0] select
);
  always_comb begin
    select = 4'b0000;
    if (en) begin
      case (addr)
        2'd0: select = 4'b0001;
        2'd1: select = 4'b0010;
        2'd2: select = 4'b0100;
        2'd3: select = 4'b1000;
        default: select = 4'b0000;
      endcase
    end
  end
endmodule

L'affectation par défaut initiale couvre tous les chemins d'exécution et évite de mémoriser l'ancienne sortie. Le nom always_comb ne rend pas automatiquement correcte une branche non définie.

Quand le nombre de sorties n'est pas une puissance de deux

Dix dispositifs demandent quatre bits d'adresse, mais les codes 10 à 15 sont invalides. Spécifiez alors une politique, par exemple toutes les sorties à 0 et un indicateur d'erreur à 1. Un code inutilisé n'autorise pas automatiquement une sortie arbitraire.

Au-delà de la correspondance entrée-sortie, vérifiez qu'aucune sélection simultanée n'est possible et que disable éteint tout. Ces invariantsInvariant Condition devant rester vraie dans toute exécution autorisée. Par exemple, l'occupation d'un FIFO de profondeur 4 reste toujours entre 0 et 4. En savoir plus sont essentiels pour les autorisations d'écriture mémoire et les sélections de bus. Un grand décodeur augmente aussi le fan-out des adresses et la charge du câblage, ce qui peut justifier un décodage hiérarchique.

Essayez vous-même

Concevez un décodeur d'adresse à dix sorties : déterminez largeur d'adresse, nombre de codes invalides et condition obligatoire lorsque en=0.

Lire l’explication

L'adresse exige ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bits et comporte six codes invalides. Si en=0, toutes les sélections doivent valoir 0, quelle que soit l'adresse. On peut spécifier le même résultat pour une adresse invalide, avec un indicateur d'erreur distinct.

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