Menu
Coddy logo textTech

Unsized Numbers

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 15 de 90.

Um número Unsized é um número escrito sem especificar quantos bits ele possui. Quando você escreve um número sem um prefixo de tamanho, o Verilog presume que ele tem 32 bits por padrão.

a = 'b1010;        // Unsized: Verilog treats this as 32 bits
a = 32'b1010;    // Igual ao acima, mas explícito

Unsized numbers usam apenas o formato e o valor: [format][value]

  • <strong>format</strong>: a base do número: b para binary, d para decimal, h para hexadecimal ou o para octal
  • <strong>value</strong>: o número propriamente dito (por exemplo, 1010)

O apóstrofo ' ainda é necessário entre o formato e o valor, mas não há uma contagem de bits antes dele.

  • 'b1010: binário de 32 bits 1010
  • 'd255: decimal de 32 bits 255
  • 'hFF: hexadecimal de 32 bits FF
  • 'b1: binário de 32 bits 1 (com 31 zeros à esquerda)

Exemplo de código:

reg [7:0] data;

initial begin
  data = 1010;      // Não dimensionado: valor de 32 bits (pode causar aviso)
  data = 'd255;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // Não dimensionado: hex de 32 bits FF
end

Unsized vs Sized

 UnsizedSized
Exemplo1010 ou 'd2558'b1010 ou 8'd255
Largura em bits32 bits (padrão)explicit (conforme especificado)
ApóstrofoObrigatório com o formatoObrigatório
Quando usarCódigo simples de testbenchAtribuições de hardware

Problema potencial

Números Unsized podem causar um comportamento inesperado quando atribuídos a registradores menores:

reg [3:0] small;
small = 'b1111;      // 32-bit value, but fits in 4 bits (fine)
small = 'b10000;     // valor de 32 bits, mas grande demais! (aviso)

O segundo exemplo atribui um valor de 32 bits 10000 a um registrador de 4 bits. Somente os 4 bits inferiores são mantidos (0000), o que pode não ser o que você espera.

Quando Usar Números Unsized

Números Unsized são convenientes para:

  • Números simples em testbenches
  • Contadores de loop
  • Instruções $display

Para atribuições de hardware reais, use números com tamanho definido para ser explícito e evitar avisos.

challenge icon

Desafio

No código abaixo, alguns números não têm tamanho definido. Change-os para números com tamanho definido (8 bits) para evitar avisos.

O que fazer:

  1. Change a para um número binary de 8 bits para 1010
  2. Change b para um número decimal de 8 bits para 255
  3. Change c para um número hex de 8 bits para FF

Experimente você mesmo

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // Altere para dimensionado (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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online