verilog中的动态n位模块



我想知道是否有可能在verilog中创建n位进位前瞻加法器。在评论的帮助下,我走了这么远

module nbit_lookahead(x, y, cin, cout, s);
parameter n = 1;
integer i;
integer j;
input wire [n:0] x, y, cin;
output wire [n:0] cout, s;
wire [n:0] g, p;
reg cpp, gp;
generate
cpp = 1; // ERROR HERE -- Line 25
gpp = 1;
for(i = 0; i < n; i=i+1) begin : outer_loop
assign p[i] = x[i] | y[i];
assign g[i] = x[i] & y[i];
assign s[i] = cin[i]^x[i]^y[i];
for(j = i - 1; j >= 0; j=j-1) begin : inner_loop
cpp &= (cin[j] & p[j] & p[i]); // ERROR HERE -- Line 32
gp &= (g[j] & p[i]) & gp;
end
assign cout[n] = cpp | gp | (x[i] & y[i]);
end
endgenerate
endmodule

我现在面临的挑战是如何分配cpp和gp。我一直得到错误:

错误(10170):Verilog HDL语法错误在fourbit_look .v(25)附近的文本:"=";期待";;或"("。检查并修复任何出现在指定关键字之前或位置的语法错误。

错误(10170):Verilog HDL语法错误在fourbit_look .v(32)附近的文本:"&&quot;;期待";;或"("。检查并修复任何出现在指定关键字之前或位置的语法错误。

我很生锈,但是在for循环中混合电线和regs对我来说是错误的。这里我要做的第一件事是让cpp和gpp位向量,这样一切都是平行的。这样内循环中就不会有任何重赋值。在generate中,您有cpp[0]=1'b1和gpp[0]=1'b1,然后在内部循环中,将cpp[i+1]和gpp[i+1]赋值给您的值。在循环的每次迭代中设置cout[n]看起来也是错误的。您应该根据cpp[i]和gpp[i]设置cout[i]。

最新更新