4-битный сумматор-вычитатель в verilog - PullRequest
0 голосов
/ 02 сентября 2018

Я пишу код verilog для 4-битного вычитателя сумматора. Я использую структурный дизайн. Сначала я написал код verilog для 1-битного полного сумматора. Затем я использую это для написания кода для 4-битного вычитающего сумматора.

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;


          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);  
endmodule

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Используйте комплемент B, используя XOR gate (когда в = 1), прежде чем вводить значения в экземплярах модулей.

когда in=0, тот же B будет добавлен к A, а когда in=1, ~ B будет добавлен к A.

0 голосов
/ 02 сентября 2018

Ты на самом деле довольно близко. Кажется, вы не понимаете, что в Verilog ваш дизайн синтезируется во время компиляции, а не во время выполнения. Вы не можете создавать экземпляры модулей условно, потому что во время компиляции мы не знаем, будет ли выполнено это условие или нет. Таким образом, ваше первое утверждение в случае низкого бита вычитания не имеет смысла. Также не имеет смысла помещать его в блок всегда, так как rtl уже определен в модулях.

Однако ваше второе утверждение содержит большую часть решения проблемы. Когда бит знака низкий, эти xors в верхней части сумматора / вычитателя сохранят входящие биты, и конструкция упростится до простого сумматора. Попробуйте использовать только второй блок.

...