Altifigence Academy

2 / 63 · Concetto

Sistemi numerici e rappresentazioni a larghezza fissa

Oltre alla conversione di base, calcolare intervalli rappresentabili, bit necessari ed errori di troncamento.

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 NN bit è:

u=∑i=0N−1bi2i,0≤u≤2N−1u=\sum_{i=0}^{N-1}b_i2^i,\qquad 0\le u\le 2^N-1

10110110 vale 128+32+16+4+2=182128+32+16+4+2=182. 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.

Bit e rappresentazioni numeriche

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 MM stati è:

N=⌈log⁡2M⌉N=\left\lceil\log_2 M\right\rceil

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 M=1M=1, 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 NN è un'operazione modulare:

xstored=x mod 2Nx_{stored}=x\bmod 2^N

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.

SystemVerilog
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 4096=2124096=2^{12} valori e richiede dodici bit; il secondo ne contiene 4097 e ne richiede tredici. Poiché 511 mod 256=255511\bmod256=255, il valore memorizzato è 8'hFF. Questo da solo non dimostra che non vi sia stato overflow.

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