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 che ne indica la 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]
format: la base del numero:bper il binario,dper il decimale,hper l'esadecimale oppureoper l'ottalevalue: il numero effettivo (per esempio,1010)
L'apostrofo ' è ancora necessario prima della lettera di formato, ma prima di esso non c'è alcun conteggio 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: valore esadecimale FF 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 (predefinito) | Esplicita (come specificato) |
| Apostrofo | Richiesto con il formato | Richiesto |
| Quando usare | Codice semplice per un banco di prova | Assegnazioni hardware |
Problema potenziale
I numeri senza dimensione possono causare un comportamento imprevisto quando vengono assegnati a registri più piccoli:
reg [3:0] small_reg;
small_reg = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small_reg = '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), cosa che potrebbe non essere ciò che ti aspetti.
Quando usare i numeri senza dimensione
I numeri senza dimensione sono comodi per:
- Numeri semplici nei banchi di prova
- Contatori dei cicli
- istruzioni
$display
Per le assegnazioni all’hardware reale, usa numeri con dimensioni specificate per essere esplicito ed evitare avvisi.
Sfida
Nel codice qui sotto, alcuni numeri non hanno una dimensione specificata. Modificali in numeri con 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 una costante con dimensione esplicita (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
Verifica una conversione: Convertitore di basi numeriche