Altifigence Academy

7 / 37 · Concept

Largeurs des tranches, concaténations et répétitions

Construire les chemins de données en calculant largeur totale et conditions de conservation des valeurs.

Concaténer n'est pas additionner

{a,b} place les bits de b après ceux de a. Pour des largeurs M et N, le résultat a M+N bits. Si les motifs sont non signésNon signé Interprétation d'un motif de bits comme entier non négatif. Sur n bits, la plage va de 0 à 2^n−1 et peut différer de l'interprétation signée du même motif. En savoir plus :

{a,b}=a⋅2N+b\{a,b\}=a\cdot2^N+b

Avec a=2'b10 et b=3'b101, le résultat est 5'b10101, soit 21, et non la somme 7.

Les bits de a montent de la largeur de b. La concaténationConcaténation Juxtaposition de motifs de bits. La largeur résultante est la somme des largeurs, ce qui diffère d'une addition numérique. se lit a×2³+b, pas a+b.

Concaténer des bits ou les additionner
  1. a = 10: Largeur 2 bits, entier 2
  2. b = 101: Largeur 3 bits, entier 5
  3. {a,b} = 10101: Largeur 5 bits, 2×8+5=21

Écrire les largeurs à côté des expressions

SystemVerilog
logic [7:0] word;
logic [3:0] upper, lower;
logic [7:0] swapped;
assign upper = word[7:4];
assign lower = word[3:0];
assign swapped = {lower, upper};

Avec 8'hA3 en entrée, swapped vaut 8'h3A. Une erreur de borne de trancheTranche Sélection d'une plage contiguë de bits d'un vecteur. La plage choisie fixe largeur et ordre des bits du résultat. modifie largeur ou valeur. Une sélection partielle peut être traitée comme une valeur non signée indépendante, même issue d'un vecteur signé : revérifiez son sens avant une opération signée.

Extension de signe et répétition

SystemVerilog
logic signed [3:0] small;
logic signed [7:0] extended;
assign extended = {{4{small[3]}}, small};

Quatre copies du bit de signe suivies des quatre bits initiaux donnent huit bits. L'extension de signe ne consiste pas à ajouter 1 lorsque le MSBMSB Bit de poids le plus fort. Son indice dépend du sens de déclaration du vecteur ; ce n'est pas nécessairement l'indice numérique le plus grand. En savoir plus vaut 1 ; elle élargit le motif pour préserver sa valeur interprétée.

Un décalage générique utilisant q[N-2:0] n'a pas une plage valide pour N=1. Limitez la largeur minimale ou traitez N=1 dans une branche generate. Remplacer un nombre par un paramètre ne suffit pas à rendre le circuit générique.

Essayez vous-même

a est 101 sur trois bits, b est 11 sur deux bits. Donnez largeur et valeur de {a,b}, puis le résultat stocké sur quatre bits.

Lire l’explication

Largeur cinq bits, motif 10111, valeur 5⋅4+3=235\cdot4+3=23. Sur quatre bits, le bit haut est supprimé et il reste 0111, soit 7.

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