Negative Numbers
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 16 de 90.
Em Verilog, números negative são representados usando o formato two's complement. two's complement é uma forma de representar números positive e negative em binário. O bit mais significativo (MSB) indica o sinal:
- 0 = número positive
- 1 = número negative
Como calcular o complemento de dois
Para encontrar o complemento de dois de um número:
- Escreva o número positivo em binário
- Inverta todos os bits (0 se torna 1, 1 se torna 0)
- Adicione 1
Exemplo: Representar -5 em 4 bits
| Etapa | Operação | Resultado |
|---|---|---|
| 1 | 5 positivo em binário | 0101 |
| 2 | Inverter todos os bits | 1010 |
| 3 | Adicionar 1 | 1011 |
-5 em complemento de dois de 4 bits é <strong>4'b1011</strong>
Escrevendo números negativos em Verilog
Você pode escrever números negativos diretamente usando o formato decimal:
reg signed [3:0] a;
a = -5; // Verilog automaticamente usa complemento de doisPara números binários com tamanho definido, você deve escrever o valor em complemento de dois:
a = 4'b1011; // This is -5 in 4-bit two's complementCom sinal vs. sem sinal
Por padrão, Verilog trata os números como unsigned. Para trabalhar com números negativos, declare os sinais como signed:
reg signed [3:0] negative; // Pode armazenar de -8 a 7
reg [3:0] positive; // Pode armazenar de 0 a 15Intervalo de números com sinal
Para N bits, um número com sinal pode representar:
- Mínimo: -2^(N-1)
- Máximo: 2^(N-1) - 1
| Bits | Intervalo |
|---|---|
| 4 bits | -8 a 7 |
| 8 bits | -128 a 127 |
| 16 bits | -32768 a 32767 |
Observações importantes
- Use a palavra-chave
signedpara habilitar o tratamento de números negativos - Sem
signed, Verilog trata todos os valores como positivos
- A aritmética de complemento de two funciona automatically ao usar
signed - O MSB determina o sinal: 1 = negative, 0 = positive
Desafio
Complete o código escrevendo os valores corretos de two's complement.
O que fazer:
- Defina
acomo -3 usando binário de 4 bits em two's complement - Defina
bcomo -8 usando binário de 4 bits em two's complement - Defina
ccomo -1 usando binário de 4 bits em two's complement
Experimente você mesmo
module negative_challenge;
reg signed [3:0] a, b, c;
initial begin
a = 4'b______; // -3 in 4-bit two's complement
b = 4'b______; // -8 in 4-bit two's complement
c = 4'b______; // -1 in 4-bit two's complement
$display("a = %d", a);
$display("b = %d", b);
$display("c = %d", 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