4 бит Сумматор-вычитатель в Verilog

голоса
0

Я пишу код 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;
  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

Я не получаю ошибки в коде. В чем проблема?

Задан 02/09/2018 в 05:05
источник пользователем
На других языках...                            


2 ответов

голоса
0

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

когда in=0, то же самое В будет добавлен к А и , когда in=1, ~ В будет добавлена к A.

Ответил 07/09/2018 в 11:14
источник пользователем

голоса
0

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

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

Ответил 02/09/2018 в 15:06
источник пользователем

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