Sized Numbers
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 14 de 90.
Há uma maneira de declarar um número com um tamanho específico em Verilog. Ele é chamado de número dimensionado. Isso é útil porque evita confusão sobre quantos bits seu número tem e garante que seu hardware se comporte exatamente como esperado.
Um número com tamanho definido 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 binary,dpara decimal,hpara hexadecimal ouopara octal<strong>value</strong>: o número propriamente dito (por exemplo,1010)
Por exemplo:
4'b1010: 4 bits, binary 1010 (decimal 10)8'd255: 8 bits, decimal 255 (binary 11111111)16'hFF: 16 bits, hex FF (binary 0000000011111111)3'b1: 3 bits, binary 001 (os bits à esquerda são preenchidos com zeros)
Exemplo de código:
reg [7:0] data;
data = 8'b10101010; // 8 bits, binary 10101010
data = 8'd170; // 8 bits, decimal 170
data = 8'hAA; // 8 bits, hex AAOs 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 presume que números pequenos têm 32 bits por padrão, o que pode causar problemas.
Com tamanho:
reg [7:0] data;
data = 8'b00000001; // Clear: 8-bit value 1Preenchimento com zeros
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; // Becomes 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)
Experimente 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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online