Números com Tamanho Definido
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 14 de 90.
Existe uma maneira de declarar um número com um tamanho específico em Verilog. Isso é chamado de número com tamanho definido (sized number). É útil porque evita confusão sobre quantos bits seu número possui e garante que seu hardware se comporte exatamente como esperado.
Um número com tamanho segue este formato: [bits]'[format][value]
<strong>bits</strong>— o número de bits (por exemplo,8)<strong>'</strong>— um apóstrofo que separa o tamanho do formato (obrigatório)
<strong>format</strong>— a base do número:bpara binário,dpara decimal,hpara hexadecimal ouopara octal<strong>value</strong>— o número real (por exemplo,1010)
Por exemplo:
4'b1010— 4 bits, binário 1010 (decimal 10)8'd255— 8 bits, decimal 255 (binário 11111111)16'hFF— 16 bits, hexadecimal FF (binário 0000000011111111)3'b1— 3 bits, binário 001 (os bits à esquerda são preenchidos com zero)
Exemplo de Código:
reg [7:0] data;
data = 8'b10101010; // 8 bits, binário 10101010
data = 8'd170; // 8 bits, decimal 170
data = 8'hAA; // 8 bits, hex AATodos os três exemplos atribuem o mesmo valor a data.
Por que o tamanho importa
Sem tamanho:
reg [7:0] data;
data = 1; // O que isso significa? 1 bit? 8 bits?O Verilog assume que números pequenos são de 32 bits por padrão, o que pode causar problemas.
Com tamanho:
reg [7:0] data;
data = 8'b00000001; // Limpar: valor de 8 bits 1Zero Padding
Quando você atribui um valor menor a um vetor maior, o Verilog preenche os bits à esquerda com zeros:
reg [7:0] data;
data = 4'b1010; // Torna-se 8'b00001010Desafio
Complete o código escrevendo os números com o tamanho correto.
O que fazer:
- Defina
acomo um número binário de 8 bits para o decimal 170 (binário 10101010) - Defina
bcomo um número binário de 4 bits para o decimal 12 (binário 1100) - Defina
ccomo um número hexadecimal de 16 bits para o decimal 255 (hexadecimal FF)
Folha de consulta
Um número com tamanho definido (sized number) em Verilog segue o formato: [bits]'[format][value]
bits— número de bits'— separador de apóstrofo obrigatórioformat—b(binário),d(decimal),h(hexadecimal),o(octal)value— o número real
reg [7:0] data;
data = 8'b10101010; // 8 bits, binary
data = 8'd170; // 8 bits, decimal
data = 8'hAA; // 8 bits, hex (all three are equal)Sem um tamanho definido, o Verilog assume como padrão 32 bits, o que pode causar comportamentos inesperados. Os bits à esquerda são preenchidos com zero quando o valor é menor que o tamanho declarado:
reg [7:0] data;
data = 4'b1010; // Becomes 8'b00001010Experimente você mesmo
module sized_challenge;
reg [7:0] a;
reg [3:0] b;
reg [15:0] c;
initial begin
a = ______; // Binário de 8 bits para 170 (10101010)
b = ______; // Binário de 4 bits para 12 (1100)
c = ______; // Hexadecimal de 16 bits para 255 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", 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 SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
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ão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo