Menu
Coddy logo textTech

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ícito

Unsized numbers usan únicamente el formato y el valor: [format][value]

  • <strong>format</strong>: la base del número: b para binary, d para decimal, h para hexadecimal o o para 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
end

Unsized vs Sized

 UnsizedSized
Ejemplo1010 o 'd2558'b1010 o 8'd255
Ancho de bits32 bits (predeterminado)explicit (según lo especificado)
ApóstrofoRequerido con el formatoRequerido
Cuándo usarloCódigo simple de banco de pruebasAsignaciones 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.

challenge icon

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:

  1. Change a a un número binary de 8 bits para 1010
  2. Change b a un número decimal de 8 bits para 255
  3. Change c a 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
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos

Practica por tu cuenta: Compilador de Verilog online