Мне нужно сделать n-битный сумматор в verilog с помощью 4-битного carry_lookahead
модуля (n, которое я упомянул, будет кратным 4).Я думаю, что я понял, как бороться с переносами, однако я не могу присвоить значения суммам (которые являются массивом s[n-1:0]
).Я продолжаю получать ошибки ниже:
in line 22: near "[": syntax error, unexpected '['
in line 22:(vlog-13205) Syntax error found in the scope following 's'. Is there a missing '::'?
Это модуль carry_lookahead
, который отлично работает:
module cla4(a,b,cin,cout);
parameter n=4;
genvar i;
input cin;
input [3:0]a,b;
wire [3:0]c;
output cout;
assign g0=(a[0]&b[0]);
assign p0=((a[0]^b[0])&cin);
assign c[0]=(g0|p0);
assign g1=(a[1]&b[1]);
assign p1=((a[1]^b[1])&c[0]);
assign c[1]=(g1|p1);
assign g2=(a[2]&b[2]);
assign p2=((a[2]^b[2])&c[1]);
assign c[2]=(g2|p2);
assign g3=(a[3]&b[3]);
assign p3=((a[3]^b[3])&c[2]);
assign cout=(g3|p3);
endmodule
И основная программа:
module n_bits_adder (a,b,cin,cout,s);
genvar i,k;
parameter n=8;
input cin;
input [n-1:0]a,b;
output reg [n-1:0]s;
output cout;
reg [n:0]c;
for(i=0;i<n/4;i=i+1)
begin
cla4 U1(.a0(a[i]),.a1(a[i+1]),.a2(a[i+2]),.a3(a[i+3]),.b0(b[i]),.b1(b[i+1]),.b2(b[i+2]),.b3(b[i+3]),.cin(c[i]),.cout(c[i+1]));
assign cin=c[0];
assign cout=c[i+1];
end
for(k=0;k<n;k=k+1)
begin
case({a[k],b[k],c[k]}) //i check the inputs for each adder and assign the
correct value to the sum below
3'b000: s[k]=1'b0;
3'b001: s[k]=1'b1;
3'b010: s[k]=1'b1;
3'b011: s[k]=1'b0;
3'b100: s[k]=1'b1;
3'b101: s[k]=1'b0;
3'b110: s[k]=1'b0;
3'b111: s[k]=1'b1;
end
endmodule
Почему он не позволяет мне присваивать значения s
?