18 / 63 · Concetto
Comparatori e specifiche dei valori limite
Distinguere confronti unsigned e signed degli stessi bit e verificare le condizioni limite.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
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 , il confronto maggiore a quattro bit è:
a sinistra è il risultato booleano del confronto. Una posizione bassa conta solo se tutte quelle superiori coincidono. L'uguaglianza è l'AND di tutti gli .
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.
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.
- 1111 vs 0001: Gli stessi ingressi a 4 bit
- Unsigned: 15 è maggiore di 1
- 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 provate prima , 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.