Implementación de ALU en Verilog: ¿cómo manejar números negativos?

3

Estoy diseñando una ALU simple con and , add , load para las operaciones de entrada de 16 bits. Esto es lo que tengo hasta ahora:

module ALU(overflow,out,in1,in2,select); 
input[1:0] select;
output[15:0] out;
output overflow;
reg[16:0] out;
reg overflow;
always @(in1,in2,select)

case(select)           

   0:out <= in1 & in2;    //and

   1:{overflow,out} <= in1 + in2;    //add

   2:out <= in1;         

   default: out<= 16'bx;

endcase                    
endmodule

Estoy confundido sobre cómo lidiar con los números negativos y cómo manejar cuando mis entradas son negativas: ¿qué debo hacer?

    
pregunta user18125

2 respuestas

2

Lo primero que debes hacer es decidir qué representación usarás para los números negativos. Casi todos los sistemas actuales utilizan dos complementos y le sugiero que haga lo mismo.

Lo bueno de los dos complementos es que no tiene que hacer nada especial para sumar y restar, simplemente funcionan usando exactamente la misma lógica que la aritmética sin signo. Tenga en cuenta que el indicador de salida que ha etiquetado como "overflow" normalmente se llamaría "carry", entonces sería común tener un código de operación "add with carry with carry" que le permite tomar el carry de la operación anterior y agregarlo al siguiente. Permitiéndote hacer aritmética en números más grandes. Tenga en cuenta que al agregar un número negativo con el indicador de acarreo establecido no significa, además, desbordamiento.

Si quieres que la multiplicación se complique un poco más. Si los tamaños de entrada y salida de su multiplicador son los mismos, un multiplicador sin signo funcionará para dos complementos, pero los multiplicadores más prácticos tienen una salida mayor que sus entradas. Las operaciones aritméticas con firma explícita en verilog 2001 pueden ser útiles aquí.

    
respondido por el Peter Green
1

Verilog 2001 agregó muchas extensiones para la aritmética firmada, incluidos los puertos firmados. Una de las reglas para las operaciones aritméticas es si todos los operandos están firmados, luego se realizará la aritmética firmada.

Fuente: enlace

    
respondido por el travisbartley

Lea otras preguntas en las etiquetas