Unsized Numbers
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 15 de 90.
Un número Unsized 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ícitoUnsized numbers usan únicamente el formato y el valor: [format][value]
<strong>format</strong>: la base del número:bpara binary,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 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
endUnsized vs Sized
| Unsized | Sized | |
|---|---|---|
| Ejemplo | 1010 o 'd255 | 8'b1010 o 8'd255 |
| Ancho de bits | 32 bits (predeterminado) | explicit (según lo especificado) |
| Apóstrofo | Requerido con el formato | Requerido |
| Cuándo usarlo | Código simple de banco de pruebas | Asignaciones de hardware |
Problema potencial
Los números Unsized 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 Unsized
Los números Unsized son prácticos para:
- Números simples en bancos de pruebas
- Contadores de bucle
- sentencias
$display
Para asignaciones de hardware reales, usa números sized para ser explícito y evitar advertencias.
Desafío
En el código siguiente, algunos números no están predeterminados. Cámbialos a números de tamaño definido (8 bits) para evitar advertencias.
Qué hacer:
- Change
aa un número binary de 8 bits para 1010 - Change
ba un número decimal de 8 bits para 255 - Change
ca un número hex 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ño4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPractica por tu cuenta: Compilador de Verilog online