连接宽度与端口宽度不匹配[重复]
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;
所以,端口宽度不匹配。
【讨论】:
以上是关于连接宽度与端口宽度不匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章