连接宽度与端口宽度不匹配

时间:2017-12-10 16:22:29

标签: verilog add helpers mux

我有问题!我的代码不起作用,我不知道为什么。请帮帮我。我尝试使用进位跳过加法器nbits并发生错误。

这是我的错误:

  

警告:C:/Users/Gerson/Desktop/cska1/cska1.v(102):连接宽度与端口'a'的宽度不匹配。

这个错误发生在我的所有多路复用器a,b,sel an out。

感谢所有帮助人员。

module ha_w ( a, b, co, s ); // modulo de meio somador half adder wire 

  input wire a, b; // declaraco das entradas a e b
  output wire 
          co,  // declaracao das saidas carry out 
          s;   // e saida

assign s  = a ^ b; // funcao xor representada pelo simbolo ^
assign co = a & b; // funcao and representada pelo simbolo &

endmodule // fim do modulo ha_w  


module fulladd( a, b, cin, co, s); //declaracao das variaveis 
// bloco full adder feito com a juncao de dois half adders adders

  input a, b;     // entradas do full adder
  input wire cin; // declaracao entrada carry input
  output wire co; // declaracao da saida carry out
  output wire s;  // tava faltando
  wire x,y,z;     // fios dentro do bloco de projeto x(liga o primeiro half adder ao segundo half adder), 
  //y(liga o segundo half adder a porta OR ), z(liga o primeiro half adder a porta OR)

// ha_w   ( a,   b, co, s )
  ha_w ha_1 (                   // mapeamento do primeiro half adder(entradas e saidas)
              .a (a), .b(b),    // inputs connection
              .co(z),           // cout  
              .s(x)             // saida   //nao vai virgula
             ); 
  ha_w ha_2 ( cin, x, y,  s ); // mapeamento do segundo half adder (entradas e saidas)

  assign co = y | z;        // saida co obtida pelo resultado de y e z pela porta OR

   endmodule // fulladd  

module mux(a,b,sel,out);

    parameter Nbits = 8;

    input  wire   [Nbits-1:0] a,b;
    output wire   [Nbits  :0] out;
    input  wire   [Nbits-1:0] sel;  
    wire          [Nbits-1:0] a1,b1,so;

     genvar r;

         generate
            for (r=0; r<Nbits;r=r+1) begin
                 nand u1(so[r],sel[r],sel[r]);
                 nand u2(a1[r],so[r],a[r]);
                 nand u3(b1[r],sel[r],b[r]);
                 nand u4(out[r],a1[r],b1[r]);
            end
        endgenerate
endmodule   


module cska(a,b,co);

        parameter Nbits = 8;

    input [Nbits-1:0]a,b;
    output[Nbits  :0]co;

    wire  [Nbits  :0] cin;
    wire  [Nbits-1:0] p,s;
    wire  [Nbits  :0] clinha   ;   // fios de ligacao entre os full adders, cout vai ligado no cin
  wire  [Nbits  :0] c0;
    wire  [Nbits  :0] bp;
    genvar m;

        generate 

            for ( m=0; m<Nbits; m=m+1 ) begin
                // fulladd(     a,    b,       cin,          co,   s);
                fulladd fa1( a[m], b[m], clinha[m], clinha[m+1], s[m] );  // mapeamento de portas do full adder para assim generaliza-las para o RCA
            end

        endgenerate

    //assign clinha[0] = cin;
    //assign co        = clinha [Nbits];   

    genvar n;

        generate

            for (n=0; n<Nbits; n=n+1) begin
                assign p[n]     = a[n] | b[n];               // Propagate = P=A+B
                assign bp = &p ;
            end
        endgenerate 

    //assign Cin[0]= 1'b0; // carry in = 0  
    //assign co = {Cin[Nbits], S}; //Concatenacao entre a previsao de carry in's e a saida soma

    genvar z;

        generate

            for (z=0; z<Nbits; z=z+1) begin
                mux mux1(c0[z+1], cin[z+1], bp[z+1], co[z+1]);
            end
        endgenerate


endmodule 

1 个答案:

答案 0 :(得分:0)

你的多路复用器连接到&#39; 1&#39;位信号:

mux mux1(c0[z+1], cin[z+1], bp[z+1], co[z+1]);

mux本身用8位端口声明:

parameter Nbits = 8;
input  wire   [Nbits-1:0] a,b;

因此,端口宽度不匹配。