Menu
CoddyTech

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 tem. 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;    // Igual ao anterior, mas explícito

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

  • format: a base do número: b para binário, d para decimal, h para hexadecimal ou o para octal
  • value: o número em si (por exemplo, 1010)

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

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

Exemplo de código:

reg [7:0] data;

initial begin
  data = 1010;      // Sem tamanho especificado: valor de 32 bits (pode gerar um aviso)
  data = 'd255;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // Sem tamanho especificado: valor hexadecimal de 32 bits FF
end

Sem tamanho vs. Com tamanho

 Sem tamanhoCom tamanho
Exemplo1010 ou 'd2558'b1010 ou 8'd255
Largura em 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_reg;
small_reg = 'b1111;   // 32-bit value, but fits in 4 bits (fine)
small_reg = '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. 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 especificado

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

  • Números simples em bancos de teste
  • Contadores de loop
  • instruções $display

Para atribuições em hardware real, use números com tamanho especificado para ser explícito e evitar avisos.

challenge icon

Desafio

No código abaixo, alguns números não têm tamanho definido. 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 correspondente a 1010
  2. Altere b para um número decimal de 8 bits correspondente a 255
  3. Altere c para um número hexadecimal de 8 bits correspondente a 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 um valor com tamanho definido (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

Confira uma conversão: Conversor de bases numéricas