multiplicador con signo de k-bit

0

Se me pide que diseñe un multiplicador con signo de 4 bits utilizando solo circuitos combinacionales. Código Verilog.

He diseñado un multipulador de 4 bits:

El módulo Half adder

module HA(sout,cout,a,b);   //for Half adder mux
 output sout,cout;
 input a,b;
 assign sout=a^b;
 assign cout=(a&b);
endmodule

El módulo de sumador completo

module FA(sout,cout,a,b,cin);   // for full adder mux
 output sout,cout;
 input a,b,cin;
 assign sout=(a^b^cin);
 assign cout=((a&b)|(a&cin)|(b&cin));
endmodule

El módulo de multiplicación

module multiply4bits(product,inp1,inp2);
 output [7:0]product;
 input [3:0]inp1;
 input [3:0]inp2;
 assign product[0]=(inp1[0]&inp2[0]);

 wire x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17; //wire range started from [1:17]

 HA HA1(product[1],x1,(inp1[1]&inp2[0]),(inp1[0]&inp2[1]));
 FA FA1(x2,x3,inp1[1]&inp2[1],(inp1[0]&inp2[2]),x1);
 FA FA2(x4,x5,(inp1[1]&inp2[2]),(inp1[0]&inp2[3]),x3);
 HA HA2(x6,x7,(inp1[1]&inp2[3]),x5);
 HA HA3(product[2],x15,x2,(inp1[2]&inp2[0]));
 FA FA5(x14,x16,x4,(inp1[2]&inp2[1]),x15);
 FA FA4(x13,x17,x6,(inp1[2]&inp2[2]),x16);
 FA FA3(x9,x8,x7,(inp1[2]&inp2[3]),x17);
 HA HA4(product[3],x12,x14,(inp1[3]&inp2[0]));
 FA FA8(product[4],x11,x13,(inp1[3]&inp2[1]),x12);
 FA FA7(product[5],x10,x9,(inp1[3]&inp2[2]),x11);
 FA FA6(product[6],product[7],x8,(inp1[3]&inp2[3]),x10);
endmodule

Creo que es correcto, pero ahora necesito extenderlo y agregar el complemento de 2 al final.

    
pregunta fa6ma

1 respuesta

1

Un enfoque simple sería convertir ambos factores en representación de signo / magnitud . Asegúrese de usar 1 bit para el signo y 4 para la magnitud para evitar el desbordamiento del valor -8. XOR las señales y aplicar eso al resultado. Esto se puede hacer en otro módulo de verilog, envolviendo su multiply4bits -module.

Esta función combinatoria probablemente se optimizará a algo completamente diferente cuando se vea el resultado de la síntesis. Hay enfoques mucho mejores cuando desea optimizar recursos o retrasos. Consulte este excelente documento de Ray Andraka para obtener una descripción general.

En su caso, algoritmo de Booth sería un buen enfoque.

    
respondido por el Andreas

Lea otras preguntas en las etiquetas