2 / 63 · Concetto
Sistemi numerici e rappresentazioni a larghezza fissa
Oltre alla conversione di base, calcolare intervalli rappresentabili, bit necessari ed errori di troncamento.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Il punto di partenza del corso
Si consigliano algebra delle scuole superiori e nozioni di programmazione. Numeri binari e algebra booleanaAlgebra booleana Algebra di 0,1, AND, OR e NOT. Il simbolo più indica normalmente OR e segue regole diverse dall’addizione intera. Approfondisci vengono ripresi nel corso, che procede rapidamente a livello universitario introduttivo. Concentratevi sul definire condizioni d'ingresso, larghezza in bit e istante di osservazione e sul verificarli con esempi, più che sul memorizzare formule.
Distinguere la sequenza di bit dal valore
Un circuito memorizza una sequenza finita di bit. La specifica di progetto stabilisce se interpretarla come intero, valore con segno o numero a virgola fissaVirgola fissa Rappresentazione con posizione della virgola prefissata e scala applicata a una sequenza intera. Vanno definiti insieme larghezza, segno e bit frazionari. Approfondisci. Questa lezione presuppone la conoscenza delle operazioni fra interi e delle potenze e passa direttamente ai calcoli d'intervallo necessari nell'RTL reale.
L'interpretazione di un valore 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. a bit è:
10110110 vale . Raggruppando quattro bit alla volta si ottiene B6: 8'hB6 e 8'b10110110 indicano quindi la stessa sequenza. Una cifra esadecimale rappresenta sempre quattro bit, rendendo rapida la conversione di indirizzi, maschere e forme d'onda.
Stessi bit, interpretazioni diverse
Commutate b7 qui sotto. Nell'interpretazione unsigned si aggiunge il peso 128; nel complemento a dueComplemento a due Rappresentazione di interi con segno a larghezza fissa. Con n bit il campo è da −2^(n−1) a 2^(n−1)−1. Approfondisci il bit più significativo ha invece peso −128. Create prima 0x7F e 0x80 per confrontare il confine fra le due interpretazioni.
10110110 → unsigned 182 · signed -74 · hex 0xB6
Modificare i bit e interpretarli come signed sono operazioni diverse. Anche mantenendo una larghezza di otto bit, l'esito dei confronti cambia in base all'informazione di segno fornita agli operatori.
Prima l'intervallo, poi la larghezza
Il numero minimo di bit per distinguere stati è:
Contare da 0 a 999 richiede 1000 valori, quindi dieci bit. Da 0 a 1024 i valori sono 1025 e servono undici bit. Confondere massimo e numero di stati lascia un bit mancante proprio al limite. Se parametrizzate l'RTL fino a , imponete una larghezza minima di uno per evitare vettori a zero bit.
Che cosa accade memorizzando in un segnale più stretto
La memorizzazione unsigned che scarta i bit superiori e ne conserva solo è un'operazione modulare:
Per esempio, memorizzando il risultato a nove bit 300 in otto bit resta 44. Non è né arrotondamento né saturazione. Per ottenere saturazione occorre un circuito aggiuntivo che rilevi il superamento del campo e selezioni il massimo.
logic [7:0] a, b, low;
logic [8:0] full_sum;
assign full_sum = {1'b0, a} + {1'b0, b};
assign low = full_sum[7:0];Estendere entrambi gli operandi prima dell'addizione rende esplicita l'intenzione di conservare anche il carry. La sola base di rappresentazione non definisce segno o larghezza del risultato. Per interpretare una forma d'onda servono larghezza, segno e base.
Prova tu
Quanti bit servono per contare da 0 a 4095 e da 0 a 4096? Quale valore resta memorizzando 511 in un unsigned a otto bit?
Leggi la spiegazione
Il primo intervallo contiene valori e richiede dodici bit; il secondo ne contiene 4097 e ne richiede tredici. Poiché , il valore memorizzato è 8'hFF. Questo da solo non dimostra che non vi sia stato overflow.