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 número sem tamanho definido é 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;        // Sem tamanho definido: o Verilog trata isso como 32 bits
a = 32'b1010;    // O mesmo que acima, mas explícito

Números sem tamanho definido usam apenas o formato e o valor: [format][value]

  • <strong>format</strong> — a base do número: b para binário, 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 é obrigatório entre o formato e o valor, mas não há 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;      // Sem tamanho definido: valor de 32 bits (pode causar aviso)
  data = 'd255;     // Sem tamanho definido: decimal 255 de 32 bits
  data = 'hFF;      // Sem tamanho definido: hexadecimal FF de 32 bits
end

Sem tamanho vs Com tamanho

 Sem tamanho (Unsized)Com tamanho (Sized)
Exemplo1010 ou 'd2558'b1010 ou 8'd255
Largura de bits32 bits (padrão)Explícita (conforme especificado)
ApóstrofoObrigatório com o formatoObrigatório
Quando usarCódigo simples de testbenchAtribuições de hardware

Problema Potencial

Números sem tamanho definido podem causar comportamento inesperado quando atribuídos a registradores menores:

reg [3:0] small;
small = 'b1111;      // valor de 32 bits, mas cabe em 4 bits (ok)
small = 'b10000;     // valor de 32 bits, mas muito grande! (aviso)

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

Quando usar números sem tamanho definido

Números sem tamanho definido são convenientes para:

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

Para atribuições reais de hardware, 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 (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 de 8 bits para 1010
  2. Altere b para um número decimal de 8 bits para 255
  3. Altere c para um número hexadecimal de 8 bits para FF

Folha de consulta

Números sem tamanho definido em Verilog têm como padrão 32 bits. Sintaxe: '[format][value]

'b1010   // binário de 32 bits
'd255    // decimal de 32 bits
'hFF     // hexadecimal de 32 bits

Números com tamanho definido usam [bits]'[format][value]:

8'b1010  // binário de 8 bits
8'd255   // decimal de 8 bits
8'hFF    // hexadecimal de 8 bits

Atribuir um número sem tamanho a um registrador menor mantém apenas os bits menos significativos — use números com tamanho definido para atribuições de hardware para evitar avisos e truncamento inesperado.

Experimente você mesmo

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