Números negativos
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 16 de 90.
En Verilog, los números negativos se representan utilizando el formato de complemento a dos. El complemento a dos es una forma de representar números tanto positivos como negativos en binario. El bit más significativo (MSB) indica el signo:
- 0 = número positivo
- 1 = número negativo
Cómo calcular el complemento a dos
Para encontrar el complemento a dos de un número:
- Escribe el número positivo en binario
- Invierte todos los bits (0 se convierte en 1, 1 se convierte en 0)
- Suma 1
Ejemplo: Representar -5 en 4 bits
| Paso | Operación | Resultado |
|---|---|---|
| 1 | 5 positivo en binario | 0101 |
| 2 | Invertir todos los bits | 1010 |
| 3 | Sumar 1 | 1011 |
-5 en complemento a dos de 4 bits es <strong>4'b1011</strong>
Escribir números negativos en Verilog
Puedes escribir números negativos directamente usando el formato decimal:
reg signed [3:0] a;
a = -5; // Verilog usa automáticamente el complemento a dosPara los números binarios con tamaño definido, debes escribir el valor en complemento a dos:
a = 4'b1011; // This is -5 in 4-bit two's complementCon signo frente a sin signo
De forma predeterminada, Verilog trata los números como sin signo. Para trabajar con números negativos, declara las señales como signed:
reg signed [3:0] negative; // Puede almacenar de -8 a 7
reg [3:0] positive; // Puede almacenar de 0 a 15Rango de números con signo
Para N bits, un número con signo puede representar:
- Mínimo: -2^(N-1)
- Máximo: 2^(N-1) - 1
| Bits | Rango |
|---|---|
| 4 bits | -8 a 7 |
| 8 bits | -128 a 127 |
| 16 bits | -32768 a 32767 |
Notas importantes
- Usa la palabra clave
signedpara habilitar el manejo de números negativos - Sin
signed, Verilog trata todos los valores como positivos
- La aritmética en complemento a dos funciona automáticamente al usar
signed - El MSB determina el signo: 1 = negativo, 0 = positivo
Desafío
Completa el código escribiendo los valores correctos de complemento de two.
Qué hacer:
- Establece
aen -3 usando binario de complemento de two de 4 bits - Establece
ben -8 usando binario de complemento de two de 4 bits - Establece
cen -1 usando binario de complemento de two de 4 bits
Pruébalo tú mismo
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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: circuito de compuertas lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores, parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online