4 bit sumador-restador en Verilog

votos
0

Estoy escribiendo código Verilog para el restador sumador de 4 bits. Estoy utilizando el diseño estructural. Al principio he escrito código Verilog de 1 bit sumador completo. Luego de que estoy usando para escribir código para restador sumador de 4 bits.

module fadder (A, B, Cin, Sum, Cout);
    input A, B;
    input Cin;
    output Sum;
    output Cout;
    wire t1,t2,t3,t4;
  xor x1(t1,A,B);
  xor x2(Sum,t1,cin);
  and g1(t2,A,B);
  and g2(t3,B,Cin);
  and g3(t4,Cin,A);
  or  g4(Cout,t2,t3,t4);  
endmodule


module add_sub_4 (A, B, In, Res, Out);
    input [3:0] A, B;
    input In;
    output [3:0] Res;
    output Out;
    wire t1,t2,t3,t4,t5,t6,t7;
  always@(A or B or In)
    begin
      if(In==0)
        begin
          fadder f1(A[0],B[0],In,Res[0],t1);
          fadder f2(A[1],B[1],t1,Res[1],t2);
          fadder f3(A[2],B[2],t2,Res[2],t3);
          fadder f4(A[3],B[3],t3,Res[3],Out);
        end

      else
        begin
          xor x3(t3,B[0],in);
          xor x4(t4,B[1],in);
          xor x5(t5,B[2],in);
          xor x6(t6,B[3],in);
          fadder f5(A[0],t3,In,Res[0],t1);
          fadder f6(A[1],t4,t1,Res[1],t2);
          fadder f7(A[2],t5,t2,Res[2],t3);
          fadder f8(A[3],t6,t3,Res[3],Out);

        end
    end
endmodule

No estoy consiguiendo error en el código. ¿Cuál es el problema?

Publicado el 02/09/2018 a las 05:05
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Hacer uso de complementando B utilizando XORpuerta (cuando en = 1) antes de poner en los valores en los módulos instanciados.

cuando el in=0se añadirá, mismo B a A y cuando in=1, se añadirá ~ B a A.

Respondida el 07/09/2018 a las 11:14
fuente por usuario

votos
0

En realidad estás muy cerca. Lo que parece no entender es que en Verilog su diseño se sintetiza en tiempo de compilación, no en tiempo de ejecución. No se puede crear instancias de módulos de forma condicional, porque en tiempo de compilación que no sabemos si se cumplirá o no esa condición. Así que su primera declaración en el caso del bit de la resta de ser bajos en realidad no tiene sentido. Asimismo, no tiene sentido para ponerlo en un bloque de siempre, ya que la RTL se define en los módulos ya.

Sin embargo, su segunda declaración contiene la mayor parte de la solución al problema. Cuando el bit de signo es baja, esos XORs en la parte superior del sumador / restador preservará los bits entrantes, y el diseño simplificarán a sólo un sumador. Trate de usar sólo el segundo bloque solo.

Respondida el 02/09/2018 a las 15:06
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more