Números sin tamaño definido
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 es de 32 bits por defecto.
a = 'b1010; // Sin tamaño: Verilog trata esto como 32 bits
a = 32'b1010; // Lo mismo que arriba, pero explícitoLos números sin tamaño utilizan únicamente el formato y el valor: [format][value]
<strong>format</strong>— la base del número:bpara binario,dpara decimal,hpara hexadecimal oopara octal<strong>value</strong>— el número real (por ejemplo,1010)
El apóstrofo ' sigue siendo necesario entre el formato y el valor, pero no hay un recuento de bits antes de él.
'b1010— binario de 32 bits 1010'd255— decimal de 32 bits 255'hFF— hexadecimal de 32 bits FF'b1— binario de 32 bits 1 (con 31 ceros a la izquierda)
Ejemplo de código:
reg [7:0] data;
initial begin
data = 1010; // Sin tamaño: valor de 32 bits (puede causar una advertencia)
data = 'd255; // Sin tamaño: decimal de 32 bits 255
data = 'hFF; // Sin tamaño: hexadecimal de 32 bits FF
endSin tamaño vs Con tamaño
| Sin tamaño | Con tamaño | |
|---|---|---|
| Ejemplo | 1010 o 'd255 | 8'b1010 o 8'd255 |
| Ancho de bits | 32 bits (predeterminado) | Explícito (según lo especificado) |
| Apóstrofe | Requerido con formato | Requerido |
| Cuándo usar | Código de testbench simple | Asignaciones de hardware |
Problema Potencial
Los números sin tamaño pueden causar un comportamiento inesperado cuando se asignan a registros más pequeños:
reg [3:0] small;
small = 'b1111; // valor de 32 bits, pero cabe en 4 bits (bien)
small = '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 cual puede no ser lo que esperas.
Cuándo usar números sin tamaño
Los números sin tamaño son convenientes para:
- Números simples en bancos de pruebas (testbenches)
- Contadores de bucles
- Sentencias
$display
Para asignaciones de hardware reales, use números con tamaño para ser explícito y evitar advertencias.
Desafío
En el código de abajo, algunos números no tienen tamaño definido. Cámbialos a números con tamaño (8 bits) para evitar advertencias.
Qué hacer:
- Cambia
aa un número binario de 8 bits para 1010 - Cambia
ba un número decimal de 8 bits para 255 - Cambia
ca un número hexadecimal de 8 bits para FF
Hoja de referencia
Los números sin tamaño en Verilog tienen por defecto 32 bits. Sintaxis: '[format][value]
'b1010 // binario de 32 bits
'd255 // decimal de 32 bits
'hFF // hexadecimal de 32 bitsLos números con tamaño usan [bits]'[format][value]:
8'b1010 // binario de 8 bits
8'd255 // decimal de 8 bits
8'hFF // hexadecimal de 8 bitsAsignar un número sin tamaño a un registro más pequeño conserva solo los bits inferiores — use números con tamaño para asignaciones de hardware para evitar advertencias y truncamientos inesperados.
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; // Cambiar a con tamaño (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 Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - 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 condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo