4 bits somador-subtractor em Verilog

votos
0

Eu estou escrevendo código Verilog para subtrator víbora de 4 bits. Eu estou usando projeto estrutural. No começo eu ter escrito o código Verilog para 1 bit somador completo. Então eu estou usando isso para escrever código para subtrator víbora 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

Eu não estou recebendo erro no código. Qual é o problema?

Publicado 02/09/2018 em 05:05
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Fazer uso de complementando B utilizando XORporta (quando em = 1) antes de colocar nos valores nos módulos instanciados.

quando o in=0, mesmo B será adicionado a A e quando in=1, ~ B será adicionado a A.

Respondeu 07/09/2018 em 11:14
fonte usuário

votos
0

Você é realmente muito perto. O que você parece não entender é que em Verilog seu projeto é sintetizada em tempo de compilação, não em tempo de execução. Você não pode instanciar módulos condicionalmente, porque em tempo de compilação não sabemos se essa condição será cumprida ou não. Portanto, sua primeira declaração no caso do bit subtração sendo baixa realmente não faz sentido. Também não faz sentido para colocá-lo em um bloco de sempre, já que a RTL é definido nos módulos já.

No entanto, a sua segunda declaração contém a maior parte da solução para o problema. Quando o bit de sinal é baixo, aqueles XORs no topo do somador / subtrator irá preservar os bits de entrada, eo projeto irá simplificar a apenas uma víbora. Tente usar apenas o segundo bloco sozinho.

Respondeu 02/09/2018 em 15:06
fonte usuário

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