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 utilizan únicamente el formato y el valor: [format][value]
<strong>format</strong>: la base del número:bpara binario,dpara decimal,hpara hexadecimal uopara 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 conteo 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 iniciales)
Ejemplo de código:
reg [7:0] data;
initial begin
data = 1010; // Sin tamaño: valor de 32 bits (puede causar advertencia)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // Sin tamaño: hex 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 se especifica) |
| 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 pueden causar un comportamiento inesperado al asignarse a registros más pequeños:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
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 que puede no ser lo que esperas.
Cuándo usar números sin tamaño
Los números sin tamaño son prácticos para:
- Números simples en bancos de pruebas
- Contadores de bucle
- sentencias
$display
Para las asignaciones de hardware reales, usa números con tamaño para ser explícito y evitar advertencias.
Desafío
En el código siguiente, algunos números no tienen tamaño definido. Cámbialos a números con tamaño definido (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
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 sized (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