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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8691|回复: 18

[求助] for循环请教

[复制链接]
发表于 2012-8-30 11:15:38 | 显示全部楼层 |阅读模式

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

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

x
听说for循环不能综合,想修改程序中的for.
由于memory类型不可以整体调用,而地址又很长,所以只能用for循环实现,具体代码如下:
不知道各位大侠有没有什么好的方法可以同样实现,而不用for语句呢?


`define VALID_HS 856
reg  [5:0] mem [`VALID_HS/2-1:0];
reg  [5:0] memtwo [`VALID_HS/2-1:0];
integer i;
always @(posedge rd_pck)
begin
  if(latch1_full)
   begin
      for (i = 0; i < `VALID_HS/2; i = i + 1)
     memtwo[i] = mem[i];
   end
end
发表于 2012-8-30 11:27:18 | 显示全部楼层
用generate 语句
发表于 2012-8-30 14:39:40 | 显示全部楼层
赞成2楼的。
 楼主| 发表于 2012-8-30 14:59:10 | 显示全部楼层
回复 2# jiemoyang


    谢谢你!

    generate的用法我在网上看了一些,还是没太理解。我那段代码,怎么修改都报错。麻烦可以给我看一下吗?

generate
genvar i ;
always @(posedge rd_pck)
  begin
   for(i = 0; i < `VALID_HS/2; i = i + 1)
    begin:genlatch
     memtwo <= mem;
    end
  end
endgenerate

报错:
** Error: D:/Quartus Projects/cs ic sim/double_sram_856_480/pro/class1_latch.v(516): Invalid context for genvar i. A genvar can be used only inside of the generate loop that it indexes.
** Error: D:/Quartus Projects/cs ic sim/double_sram_856_480/pro/class1_latch.v(516): Invalid context for genvar i. A genvar can be used only inside of the generate loop that it indexes.
** Error: D:/Quartus Projects/cs ic sim/double_sram_856_480/pro/class1_latch.v(516): Invalid context for genvar i. A genvar can be used only inside of the generate loop that it indexes.
** Error: D:/Quartus Projects/cs ic sim/double_sram_856_480/pro/class1_latch.v(516): Invalid context for genvar i. A genvar can be used only inside of the generate loop that it indexes.
** Error: D:/Quartus Projects/cs ic sim/double_sram_856_480/pro/class1_latch.v(518): Invalid context for genvar i. A genvar can be used only inside of the generate loop that it indexes.
** Error: D:/Quartus Projects/cs ic sim/double_sram_856_480/pro/class1_latch.v(518): Invalid context for genvar i. A genvar can be used only inside of the generate loop that it indexes.
发表于 2012-8-30 16:40:05 | 显示全部楼层
直接调用Altera存储,回答完毕
发表于 2012-8-30 16:55:50 | 显示全部楼层
genvar i ;
generate  for(i = 0; i < `VALID_HS/2; i = i + 1)
always @(posedge rd_pck)
  begin
  
    begin:genlatch
     memtwo[i] <= mem[i];
    end
  end
endgenerate

类似于这样,使用generate的目的就是为了方便展开,把变量I等直接放在generate一行,你在网上找个例子写写。
发表于 2012-8-30 17:00:18 | 显示全部楼层
回复 4# easychen

我也没写过2001的代码, 看错误信息应该是“genvar i” 需要在generate process外部定义。
发表于 2012-8-30 17:06:15 | 显示全部楼层
你的目的是?一个cycle把mem的值全部赋给memtwo?
发表于 2012-8-30 17:22:04 | 显示全部楼层
楼主是要对mem初始化吗?
是写testbench吧?
那也没必要写成可综合的啊。
发表于 2012-8-30 17:36:11 | 显示全部楼层
一般memory初始化都是一个cycle操作一个memory cell,因为memory比较大的时候不太可能用DFF去兜,而是直接调用memory模块,这种memory是没有办法一次全部初始化完成,只能一个地址一个地址的去操作。
如果一定要一起初始化或赋值,用generate做代码看上去会比较清爽,也可能让mem[i]一个一个的分开来写,代码比较多就写个简单script自动生成代码好了,感觉for少用,另外,在FPGA上一般对for的次数都会一些限制
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-8 13:40 , Processed in 0.021332 second(s), 7 queries , Gzip On, MemCached On.

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