verilog中for循环中是不是不能模块实例化?
我的程序是这样的:
initial
begin
ck_re[7:0]<=ck0_re[7:0];
ck_im[7:0]<=ck0_im[7:0];
for(i=0;i<10;i=i+1)
begin
mult_complex_cut y(
.clk(clk),
.dataa_re(xk_re),
.dataa_im(xk_im),
.datab_re(ck_re),
.datab_im(ck_im),
.data_out_re(yk_temp_re),
.data_out_im(yk_temp_im));
decision d(
.clk(clk),
.rst(rst),
.din_re(yk_re),
.din_im(yk_im),
.dout_re(dk_re),
.dout_im(dk_im));
error e(
.einact_re(yk_re),
.einact_im(yk_im),
.einexp_re(dk_re),
.einexp_im(dk_im),
.eout_re(ek_re),
.eout_im(ek_im));
coefficient c(
.clk(clk),
.cin_re(ck_re),
.cin_im(ck_im),
.e_re(ek_re),
.e_im(ek_im),
.x_re(xk_re),
.x_im(xk_im),
.cout_re(ck_temp_re),
.cout_im(ck_temp_im));
ck_re[7:0]<=ck_temp_re[7:0];
ck_im[7:0]<=ck_temp_im[7:0];
end
yk_re[7:0]<=yk_temp_re[7:0];
yk_im[7:0]<=yk_temp_im[7:0];
end
*********************************************************************************
错误提示如下:
Error (10170): Verilog HDL syntax error at lms.v(31) near text "("; expecting ";"
Error (10170): Verilog HDL syntax error at lms.v(40) near text "("; expecting ";"
Error (10170): Verilog HDL syntax error at lms.v(48) near text "("; expecting ";"
Error (10170): Verilog HDL syntax error at lms.v(56) near text "("; expecting ";"
Error (10112): Ignored design unit "lms" at lms.v(2) due to previous errors
请问是什么原因?
没见过额
真敢想。
在generate中是可以的
verilog2001中定义的新关键字generate可以的。
lz可以看看这方面资料。
像你这样描述貌似不行,实例化后的模块是一个实际硬件电路,你可以在for内模块和你的控制空块之间做一个接口。
比如你要做一个8次的循环,你可以做一个使能:
always @(posedge clk) brgin
if (rst == 1'b0) cnt <= 3'd0;
else cnt <= cnt + 1'b1;
end
assign en = cnt[2] & cnt[1] & cnt[0];
然后将使能信号en接入for内的模块中。
小编在verilog尽量不要用for循环。
参考一下generate的语法就可以了,使用for语句可以简化模块例化。
新标准可以用genvar定义变量来重复实例化一个模块。但是一般用的少。
initial语句是肯定不能综合的啊
for语句的话 原则上有确定的循环次数的可以综合 但轻易不要用
for循环是可以综合的 但是出来的效果极差 initial语句能综合的就真的没见过了
for循环中的循环体循环次数只要是固定值,电路一般都是可综合的。楼上的同学都太保守了,我本身做ASIC,对于for、generate这样的语法都用了2年多了。
小编出错的问题我看至少有3处:
1.initial是不可综合的
2.如果是要例化多份逻辑,不是光靠for就能实现的,还需要配合generate 才行,具体参考2001语法
genvar i
generate
for (i = 0; i<10;i=i+1) begin: GEN_XXX
always ....
end
endgenerate
3. 在你例化10份的逻辑中,都没与出现和变量i有关系的东西,不晓得你例化10份的功能是什么,很是费解呀
明白了 谢谢
用GENERATE
没有比GENERATE更好用的语句了。
for
generate
可以,但需要用generate
感谢!
新学习的,所以很多地方不懂
generate 可以,貌似占用的资源多
做asic 5年了,generate 还真没敢用。
1. 循环创建或条件创建元件使用generate;
2. for在固定次数的情况使用比较强点的综合器是可以综合的。
3. initial 在quartus中是有条件的认的。具体可参考quartus的手册。
学习 多谢各位
设计的一个状态机中含有四个状态,在Idle状态的时候我需要执行一个子模块的功能,这个时候在Idle状态里可以直接使用实例化吗?
不能的话,我怎么让这个实例化和Idle状态中的其他操作联系起来?
求解!
你做例化咋能for循环啊,例化就是把两个模块物理连接起来,你for在连接时干什么用啊,显然是错误的~
一般for循环如何用其他可综合的语句块代替啊?
循环变量i,在下面没有看到使用?
initial只能用于仿真,不可综合
用generate,可以例化多个同类型的模块,进程块。
