连接宽度与端口宽度不匹配[重复]

Posted

技术标签:

【中文标题】连接宽度与端口宽度不匹配[重复]【英文标题】:Connection width does not match width of port [duplicate] 【发布时间】:2017-12-10 16:22:28 【问题描述】:

我有问题!我的代码不起作用,我不知道为什么。请帮帮我。我尝试进行进位跳过加法器 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】:

您的多路复用器连接到“1”位信号:

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

多路复用器本身是用 8 位端口声明的:

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

所以,端口宽度不匹配。

【讨论】:

以上是关于连接宽度与端口宽度不匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章

宽度等于动态高度正方形[重复]

高度与宽度相同[重复]

在flexbox中设置项目的初始宽度[重复]

如何在不影响宽度的情况下定位固定[重复]

背景图像宽度不起作用[重复]

CSS Flex,最后两项与其余项的宽度不同[重复]