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ícitoNúmeros sem tamanho definido usam apenas o formato e o valor: [format][value]
format: a base do número:bpara binário,dpara decimal,hpara hexadecimal ouopara octalvalue: 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
endSem tamanho vs. Com tamanho
| Sem tamanho | Com tamanho | |
|---|---|---|
| Exemplo | 1010 ou 'd255 | 8'b1010 ou 8'd255 |
| Largura em bits | 32 bits (padrão) | Explícita (conforme especificado) |
| Apóstrofo | Obrigatório com o formato | Obrigatório |
| Quando usar | Código simples de testbench | Atribuiçõ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.
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:
- Altere
apara um número binário de 8 bits correspondente a 1010 - Altere
bpara um número decimal de 8 bits correspondente a 255 - Altere
cpara 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
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online
Confira uma conversão: Conversor de bases numéricas