Multiplicador de 4 bits con verilog usando solo sumadores completos

-1

Estoy tratando de escribir la parte del banco de pruebas pero no sé cómo hacerlo. Básicamente, quiero probar 0x10 o 5x5. No sé si lo que tengo es correcto.

Aquí hay una foto para darte una idea de lo que estoy tratando de construir. no es este exacto.

Aquí está el sumador completo:

module FA(input a,input b,input cin,output s,output cout);
wire z1,z2,z3;
xor(z1,a,b);
xor(s,z1,cin);
and(z2,z1,cin);
and(z3,a,b);
or(cout,z2,z3);
endmodule

Aquí está el multiplicador:

module multiplier(m0,m1,m2,m3,p);
input[7:0] m0,m1,m2,m3;
output[7:0]p;
wire[11:1]w; // wire
wire[6:1]o; // outputs for the FA
// first part of the diagram
FA stage1(p[1],w[1],m0[1],m1[1]);
FA stage2(o[1],w[2],m0[2],m1[2],m2[2]);
FA stage3(o[2],w[3],m1[3],m2[3],m3[3]);
FA stage4(o[3],w[4],m0[4],m1[4],m2[4]);
// second part of the diagram
FA stage5(p[2],o[1],w[1],w[5]);
FA stage6(o[4],o[2],w[2],w[6],m0[3]);
FA stage7(o[5],o[3],w[3],w[6],w[7]);
FA stage8(o[6],m0[5],m1[5],w[4],w[8]);
// third part of the diagram
FA stage9(p[3],o[4],w[5],w[9]);
FA stage10(p[4],o[5],w[9],w[10]);
FA stage11(p[5],o[6],w[7],w[10],w[11]);
FA stage12(p[6],p[7],w[8],w[11],m0[6]);
endmodule

Aquí está mi banco de pruebas:

   module sim();       
   reg [7:0]m0,m1,m2,m3;       
   wire [7:0]p;       
   multiplier uut(.m0(m0),.m1(m1),.m2(m2),.m3(m3),.p(p));

   initial begin m0=0;m1=0;m2=0;m3=0;
   #1 m0=1;m1=1;m2=0;m3=0;
   #1 m0=0;m1=1;m2=0;m3=1;
   #1 m0=1;m1=1;m2=1;m3=1;
   end 
   endmodule
    
pregunta CharleBarkely123

1 respuesta

1

No entiendo por qué en un multiplicador de 4 bits x 4 bits está tomando 4 entradas que también de 8 bits, ¿qué representan? Si es un multiplicador lógico combinacional, debería haber sido:

module mult(multiplicand, multiplier, product);
      input [3:0] multiplicand, multiplier;
      output [7:0] product;
    
respondido por el Purnendu Kumar

Lea otras preguntas en las etiquetas