Números Negativos
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 16 de 90.
Em Verilog, números negativos são representados usando o formato de complemento de dois. O complemento de dois é uma forma de representar números positivos e negativos em binário. O bit mais significativo (MSB) indica o sinal:
- 0 = número positivo
- 1 = número negativo
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 torna-se 1, 1 torna-se 0)
- Adicione 1
Exemplo: Representar -5 em 4 bits
| Passo | 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; // O Verilog usa automaticamente o complemento de doisPara números binários com tamanho definido, você deve escrever o valor em complemento de dois:
a = 4'b1011; // Isso é -5 em complemento de dois de 4 bitsSinalizado vs Não Sinalizado
Por padrão, o Verilog trata os números como não sinalizados (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 |
Notas Importantes
- Use a palavra-chave
signedpara habilitar o tratamento de números negativos - Sem
signed, o Verilog trata todos os valores como positivos
- A aritmética de complemento de dois funciona automaticamente ao usar
signed - O MSB determina o sinal: 1 = negativo, 0 = positivo
Desafio
Complete o código escrevendo os valores corretos em complemento de dois.
O que fazer:
- Defina
acomo -3 usando binário em complemento de dois de 4 bits - Defina
bcomo -8 usando binário em complemento de dois de 4 bits - Defina
ccomo -1 usando binário em complemento de dois de 4 bits
Folha de consulta
Em Verilog, números negativos usam o formato de complemento de dois. O MSB indica o sinal: 0 = positivo, 1 = negativo.
Calculando o Complemento de Dois:
- Escreva o número positivo em binário
- Inverta todos os bits
- Some 1
Exemplo: -5 em 4 bits → 0101 → 1010 → 1011 = 4'b1011
Declare sinais como signed para lidar com números negativos:
reg signed [3:0] negative; // Pode armazenar de -8 a 7
reg [3:0] positive; // Pode armazenar de 0 a 15Atribua valores negativos diretamente ou via binário em complemento de dois:
reg signed [3:0] a;
a = -5; // O Verilog usa automaticamente o complemento de dois
a = 4'b1011; // Equivalente: -5 em complemento de dois de 4 bitsIntervalo para signed de N bits: -2^(N-1) a 2^(N-1) - 1 (ex: 4 bits: -8 a 7).
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 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