Altifigence Academy

18 / 63 · Concept

Comparateurs et spécification des limites

Distinguer comparaisons signées et non signées du même motif et vérifier les conditions limites.

Le premier bit différent de poids fort décide de l'ordre

Comparez deux vecteurs 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 depuis 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. Au premier bit différent, celui à 1 désigne le plus grand nombre. En posant ei=ai⊕bi‾e_i=\overline{a_i\oplus b_i}, la condition « supérieur à » sur quatre bits est :

gt⁡(a,b)=a3b‾3+e3a2b‾2+e3e2a1b‾1+e3e2e1a0b‾0\operatorname{gt}(a,b)=a_3\overline b_3+e_3a_2\overline b_2+e_3e_2a_1\overline b_1+e_3e_2e_1a_0\overline b_0

gt⁡(a,b)\operatorname{gt}(a,b) est ici le résultat booléen de comparaison. Un rang bas n'intervient que si tous les rangs supérieurs sont égaux. L'égalité complète est le AND de tous les eie_i.

Une comparaison signée interprète d'abord le signe

4'b1111 et 4'b0001 valent 15 et 1 en non signé, mais -1 et 1 en signé. Si les signes diffèrent, le négatif est plus petit. logic [3:0] et logic signed [3:0] ont la même capacité de stockage ; leur interprétation dans les opérations diffère.

SystemVerilog
logic [3:0] a, b;
logic unsigned_lt, signed_lt;
assign unsigned_lt = a < b;
assign signed_lt = $signed(a) < $signed(b);

Ce code suppose des opérandes de même largeur. Sinon, choisissez d'abord la largeur d'extension avant un simple cast.

Le contrat de signe peut inverser l'ordre des mêmes motifs. N'appliquez pas directement la règle non signée aux valeurs signées.

Choisir l'interprétation avant de comparer les bits
  1. 1111 vs 0001: Mêmes entrées sur 4 bits
  2. Non signé: 15 est supérieur à 1
  3. Signé: −1 est inférieur à 1

Fixer les limites par une phrase précise

Pour un tampon de seize éléments, count==16 signifie plein et count<16 autorise un ajout. Avec count sur quatre bits, 16 est impossible à représenter : la condition full échoue. Il faut examiner à la fois le comparateur et la plage de son opérande.

Autour du seuil TT, testez d'abord T−1,T,T+1T-1,T,T+1, en traitant séparément les valeurs hors plage. Rendez volontairement visible la différence entre < et <=. Une comparaison après rebouclage non signé ne peut pas récupérer une retenue déjà perdue.

Essayez vous-même

Combien de bits faut-il au compteur d'occupation d'un FIFO allant de 0 à 16 ? Une comparaison seule décide-t-elle si pop et push simultanés sont permis à plein ?

Lire l’explication

Il faut cinq bits pour dix-sept valeurs. Accepter un push à la place libérée par un pop simultané relève du contrat d'interface. count < 16 seul peut interdire l'échange quand le FIFO est plein ; pour l'autoriser, il faut intégrer l'acceptation effective du pop.

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