微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog中for循环中是不是不能模块实例化?

verilog中for循环中是不是不能模块实例化?

时间:10-02 整理:3721RD 点击:
寻高手帮忙解答:
我的程序是这样的:
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,可以例化多个同类型的模块,进程块。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top