在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 14115|回复: 26

[求助] verilog中for循环中是不是不能模块实例化?

[复制链接]
发表于 2011-4-20 13:52:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
寻高手帮忙解答:
我的程序是这样的:

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
请问是什么原因?
发表于 2011-4-20 14:29:30 | 显示全部楼层
没见过额
发表于 2011-4-20 17:14:20 | 显示全部楼层
真敢想。。
发表于 2011-4-20 18:51:32 | 显示全部楼层
在generate中是可以的
发表于 2011-4-22 08:42:06 | 显示全部楼层
verilog2001中定义的新关键字generate可以的。
lz可以看看这方面资料。
发表于 2011-4-22 10:33:02 | 显示全部楼层
像你这样描述貌似不行,实例化后的模块是一个实际硬件电路,你可以在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内的模块中。
发表于 2011-5-3 23:14:29 | 显示全部楼层
楼主在verilog尽量不要用for循环。
发表于 2011-5-4 18:46:29 | 显示全部楼层
参考一下generate的语法就可以了,使用for语句可以简化模块例化。
发表于 2011-5-4 21:02:13 | 显示全部楼层
新标准可以用genvar定义变量来重复实例化一个模块。但是一般用的少。
发表于 2011-5-5 00:50:42 | 显示全部楼层
initial语句是肯定不能综合的啊
for语句的话 原则上有确定的循环次数的可以综合 但轻易不要用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-28 21:44 , Processed in 0.032211 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表