Menu
Coddy logo textTech

Números sem Tamanho Definido

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

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

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

Números unsized 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 real (por exemplo, 1010)

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

  • 'b1010 — 32-bit binary 1010
  • 'd255 — 32-bit decimal 255
  • 'hFF — 32-bit hex FF
  • 'b1 — 32-bit binary 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 de bits32 bits (padrão)Explícito (conforme especificado)
ApostróficoObrigatório com formatoObrigatório
Quando usarCódigo de testbench simplesAtribuições de hardware

Problema Potencial

Números unsized podem causar 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-bit 10000 a um registrador de 4-bit. Apenas os 4 bits inferiores são mantidos (0000), o que may não ser o que você espera.

Quando Usar Números Não Dimensionados (Unsized)

Números não dimensionados (unsized) são convenientes para:

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

Para atribuições de hardware reais, use sized numbers para ser explicit e evitar avisos.

challenge icon

Desafio

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

O que fazer:

  1. Altere a para um número binário (binary) de 8 bits (bits) para 1010
  2. Altere b para um número decimal (decimal) de 8 bits (bits) para 255
  3. Altere c para um número hexadecimal (hex) de 8 bits (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 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 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