Numeri senza dimensione specificata
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 15 di 90.
Un numero senza dimensione è un numero scritto senza specificare quanti bit contiene. Quando scrivi un numero senza un prefisso di dimensione, Verilog presume che sia di 32 bit per impostazione predefinita.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // Come sopra, ma esplicitoI numeri senza dimensione usano solo il formato e il valore: [format][value]
<strong>format</strong>: la base del numero:bper binario,dper decimale,hper esadecimale oppureoper ottale<strong>value</strong>: il numero effettivo (per esempio,1010)
L'apostrofo ' è ancora necessario tra il formato e il valore, ma prima non viene indicato il numero di bit.
'b1010: 1010 binario a 32 bit'd255: 255 decimale a 32 bit'hFF: FF esadecimale a 32 bit'b1: 1 binario a 32 bit (con 31 zeri iniziali)
Esempio di codice:
reg [7:0] data;
initial begin
data = 1010; // Senza dimensione specificata: valore a 32 bit (può generare un avviso)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // Senza dimensione specificata: FF esadecimale a 32 bit
endSenza dimensione vs con dimensione
| Senza dimensione | Con dimensione | |
|---|---|---|
| Esempio | 1010 o 'd255 | 8'b1010 o 8'd255 |
| Larghezza in bit | 32 bit (predefinita) | Esplicita (come specificato) |
| Apostrofo | Richiesto con il formato | Richiesto |
| Quando usarla | Codice di testbench semplice | Assegnazioni hardware |
Problema potenziale
I numeri senza dimensione possono causare comportamenti imprevisti quando vengono assegnati a registri più piccoli:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = 'b10000; // Valore a 32 bit, ma troppo grande! (avviso)Il secondo esempio assegna un valore a 32 bit 10000 a un registro a 4 bit. Vengono mantenuti solo i 4 bit meno significativi (0000), il che potrebbe non essere ciò che ti aspetti.
Quando usare numeri senza dimensione
I numeri senza dimensione sono utili per:
- Numeri semplici nei banchi di prova
- Contatori dei cicli
$displayistruzioni
Per le assegnazioni hardware effettive, usa numeri con dimensione specificata per essere esplicito ed evitare avvisi.
Sfida
Nel codice qui sotto, alcuni numeri non hanno una dimensione specificata. Modificali in numeri di dimensione specificata (8 bit) per evitare avvisi.
Cosa fare:
- Modifica
ain un numero binario a 8 bit per 1010 - Modifica
bin un numero decimale a 8 bit per 255 - Modifica
cin un numero esadecimale a 8 bit per FF
Provalo tu
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // Converti in un valore con dimensione specificata (decimale a 8 bit)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", 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