Numeri negativi
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 16 di 90.
In Verilog, i numeri negativi sono rappresentati usando il formato in complemento a due. Il complemento a due è un modo per rappresentare numeri sia positivi sia negativi in binario. Il bit più significativo (MSB) indica il segno:
- 0 = numero positivo
- 1 = numero negativo
Come calcolare il complemento a due
Per trovare il complemento a due di un numero:
- Scrivi il numero positivo in binario
- Inverti tutti i bit (0 diventa 1, 1 diventa 0)
- Aggiungi 1
Esempio: rappresenta -5 con 4 bit
| Passaggio | Operazione | Risultato |
|---|---|---|
| 1 | 5 positivo in binario | 0101 |
| 2 | Inverti tutti i bit | 1010 |
| 3 | Aggiungi 1 | 1011 |
-5 in complemento a due su 4 bit è <strong>4'b1011</strong>
Scrivere numeri negativi in Verilog
Puoi scrivere i numeri negativi direttamente usando il formato decimale:
reg signed [3:0] a;
a = -5; // Verilog usa automaticamente il complemento a duePer i numeri binari di dimensione fissa, devi scrivere il valore in complemento a due:
a = 4'b1011; // This is -5 in 4-bit two's complementCon segno e senza segno
Per impostazione predefinita, Verilog considera i numeri senza segno. Per usare numeri negativi, dichiara i segnali come signed:
reg signed [3:0] negative; // Può memorizzare valori da -8 a 7
reg [3:0] positive; // Può memorizzare valori da 0 a 15Intervallo dei numeri con segno
Con N bit, un numero con segno può rappresentare:
- Minimo: -2^(N-1)
- Massimo: 2^(N-1) - 1
| Bit | Intervallo |
|---|---|
| 4 bit | -8 to 7 |
| 8 bit | -128 to 127 |
| 16 bit | -32768 to 32767 |
Note importanti
- Usa la parola chiave
signedper abilitare la gestione dei numeri negativi - Senza
signed, Verilog considera tutti i valori positivi
- L'aritmetica in complemento a due funziona automaticamente quando si usa
signed - Il bit più significativo determina il segno: 1 = negativo, 0 = positivo
Sfida
Completa il codice scrivendo i valori corretti in complemento a due.
Cosa fare:
- Imposta
asu -3 usando la rappresentazione binaria in complemento a due su 4 bit - Imposta
bsu -8 usando la rappresentazione binaria in complemento a due su 4 bit - Imposta
csu -1 usando la rappresentazione binaria in complemento a due su 4 bit
Provalo tu
module negative_challenge;
reg signed [3:0] a, b, c;
initial begin
a = 4'b______; // -3 in 4-bit two's complement
b = 4'b______; // -8 in 4-bit two's complement
c = 4'b______; // -1 in 4-bit two's complement
$display("a = %d", a);
$display("b = %d", b);
$display("c = %d", c);
$finish;
end
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online