Altifigence Academy

18 / 63 · Concetto

Comparatori e specifiche dei valori limite

Distinguere confronti unsigned e signed degli stessi bit e verificare le condizioni limite.

Il confronto dipende dalla posizione diversa più significativa

Confrontate due vettori unsignedUnsigned Interpretazione dei bit come intero non negativo. Il campo a n bit è 0–2^n−1 e può differire dalla lettura signed degli stessi bit. Approfondisci a partire dal MSBMSB Bit di peso maggiore. L’indice dipende dalla direzione dichiarata: non è necessariamente il numero più alto. Approfondisci. Alla prima differenza, quello con 1 è maggiore. Definendo ei=ai⊕bi‾e_i=\overline{a_i\oplus b_i}, il confronto maggiore a quattro bit è:

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) a sinistra è il risultato booleano del confronto. Una posizione bassa conta solo se tutte quelle superiori coincidono. L'uguaglianza è l'AND di tutti gli eie_i.

Il confronto signed interpreta prima il segno

4'b1111 e 4'b0001 valgono 15 e 1 unsigned, ma −1 e 1 signed. Con segni diversi il negativo è minore. La differenza fra logic [3:0] e logic signed [3:0] riguarda l'interpretazione nelle operazioni, non la capacità di memoria.

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

Il codice assume operandi della stessa larghezza. Se differiscono, prima di un semplice cast bisogna scegliere a quale larghezza estenderli.

L'ordine delle stesse sequenze può invertirsi cambiando il contratto sul segno. Non applicate invariata ai signed la regola unsigned dal bit più alto.

Definire l’interpretazione prima di confrontare i bit
  1. 1111 vs 0001: Gli stessi ingressi a 4 bit
  2. Unsigned: 15 è maggiore di 1
  3. Signed: −1 è minore di 1

Definire verbalmente i confini

In un buffer da 16 elementi, count==16 indica pieno e count<16 spazio disponibile. Con count a quattro bit, 16 non è rappresentabile e la stessa condizione full fallisce. Occorre quindi valutare insieme confronto e campo rappresentabile.

Per una soglia TT provate prima T−1,T,T+1T-1,T,T+1, trattando separatamente i valori fuori campo. Costruite test che mostrino deliberatamente la differenza fra < e <=. Confrontare solo il valore dopo un wraparound unsigned non recupera il carry già perso.

Prova tu

Quanti bit servono per l’occupazione FIFO da 0 a 16? La sola formula di confronto decide se a pieno sono ammessi pop e push simultanei?

Leggi la spiegazione

Diciassette valori richiedono cinque bit. La possibilità di accettare push grazie a un pop simultaneo dipende dalla politica dell’interfaccia. count < 16 da solo può bloccare lo scambio a pieno; per ammetterlo bisogna considerare l’effettiva accettazione di pop.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.