Números sin tamaño
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 15 de 90.
Un número sin tamaño es un número escrito sin especificar cuántos bits tiene. Cuando escribes un número sin un prefijo de tamaño, Verilog asume que tiene 32 bits de forma predeterminada.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // Igual que arriba, pero explícitoLos números sin tamaño usan únicamente el formato y el valor: [format][value]
format: la base del número:bpara binario,dpara decimal,hpara hexadecimal oopara octalvalue: el número real (por ejemplo,1010)
El apóstrofo ' sigue siendo necesario antes de la letra de formato, pero no hay ningún recuento de bits delante.
'b1010: 1010 binario de 32 bits'd255: 255 decimal de 32 bits'hFF: FF hexadecimal de 32 bits'b1: 1 binario de 32 bits (con 31 ceros iniciales)
Ejemplo de código:
reg [7:0] data;
initial begin
data = 1010; // Sin tamaño especificado: valor de 32 bits (puede generar una advertencia)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // Sin tamaño especificado: FF hexadecimal de 32 bits
endSin tamaño frente a con tamaño
| Sin tamaño | Con tamaño | |
|---|---|---|
| Ejemplo | 1010 o 'd255 | 8'b1010 o 8'd255 |
| Ancho en bits | 32 bits (predeterminado) | Explícito (según lo especificado) |
| Apóstrofo | Obligatorio con el formato | Obligatorio |
| Cuándo usarlo | Código simple de banco de pruebas | Asignaciones de hardware |
Problema potencial
Los números sin tamaño especificado pueden causar un comportamiento inesperado cuando se asignan a registros más pequeños:
reg [3:0] small_reg;
small_reg = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small_reg = 'b10000; // Valor de 32 bits, ¡pero demasiado grande! (advertencia)El segundo ejemplo asigna un valor de 32 bits 10000 a un registro de 4 bits. Solo se conservan los 4 bits inferiores (0000), lo que quizá no sea lo que esperas.
Cuándo usar números sin tamaño definido
Los números sin tamaño definido son prácticos para:
- Números sencillos en bancos de pruebas
- Contadores de bucles
$displayinstrucciones
Para asignaciones de hardware reales, usa números con tamaño especificado para ser explícito y evitar advertencias.
Desafío
En el código siguiente, algunos números no tienen tamaño. Cámbialos por números con tamaño (8 bits) para evitar advertencias.
Qué hacer:
- Cambia
apor un número binario de 8 bits para 1010 - Cambia
bpor un número decimal de 8 bits para 255 - Cambia
cpor un número hexadecimal de 8 bits para FF
Pruébalo tú mismo
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // Cambia a un valor con tamaño especificado (decimal de 8 bits)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", c);
$finish;
end
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: circuito de compuertas lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores, parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online
Comprueba una conversión: Conversor de bases numéricas