4 bit additionneur-soustracteur dans Verilog

voix
0

Je vous écris du code Verilog pour 4 sommateur bits soustracteur. J'utilise la conception structurelle. Au début, je l'ai écrit code Verilog pour 1 bit additionneur complet. Ensuite, je me sers que d'écrire du code pour 4 sommateur bits soustracteur.

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

Je ne reçois pas d'erreur dans le code. Quel est le problème?

Créé 02/09/2018 à 05:05
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Faire usage de l' utilisation de complimentant B XORgrille (alors qu'en = 1) avant la mise en valeurs dans les modules instanciés.

lorsque le in=0, même B sera ajouté à A et quand in=1, ~ B sera ajouté à A.

Créé 07/09/2018 à 11:14
source utilisateur

voix
0

Vous êtes en fait assez près. Ce que vous semblez ne pas comprendre est que dans Verilog votre conception est synthétisée au moment de la compilation, pas au moment de l'exécution. Vous ne pouvez pas instancier modules conditionnel car au moment de la compilation, nous ne savons pas si cette condition sera remplie ou non. Donc, votre première déclaration dans le cas du bit de soustraction étant faible ne fait pas vraiment de sens. Il ne fait pas de sens de mettre dans un bloc toujours, puisque le rtl est défini dans les modules déjà.

Cependant, votre deuxième déclaration contient la plupart de la solution au problème. Lorsque le bit de signe est faible, ces XOR en haut de l'additionneur / soustracteur conservera les bits entrants, et la conception simplifieront juste un sommateur. Essayez juste en utilisant le deuxième bloc seul.

Créé 02/09/2018 à 15:06
source utilisateur

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