微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > for循环请教

for循环请教

时间:10-02 整理:3721RD 点击:
听说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

用generate 语句

赞成2楼的。



    谢谢你!
    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.

直接调用Altera存储,回答完毕

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一行,你在网上找个例子写写。


我也没写过2001的代码, 看错误信息应该是“genvar i” 需要在generate process外部定义。

你的目的是?一个cycle把mem的值全部赋给memtwo?

小编是要对mem初始化吗?
是写testbench吧?
那也没必要写成可综合的啊。

一般memory初始化都是一个cycle操作一个memory cell,因为memory比较大的时候不太可能用DFF去兜,而是直接调用memory模块,这种memory是没有办法一次全部初始化完成,只能一个地址一个地址的去操作。
如果一定要一起初始化或赋值,用generate做代码看上去会比较清爽,也可能让mem[i]一个一个的分开来写,代码比较多就写个简单script自动生成代码好了,感觉for少用,另外,在FPGA上一般对for的次数都会一些限制

谁说for loop不能综合的?

用Generate语句应该可以吧。

记下方法

一段C程序写到文件中 再复制出来贴到verilog中 这是我用的方法 个人见解

1楼的代码是可以综合的。



    谢谢哦~
    把代码综合了一下,好像符合要求,没有问题噢,嘿嘿!



    是啊,就是这个意思。



    不是testbench,就是一部分代码哦~所以要保证能综合才行。



    就是generate就一定能够综合,而且综合没问题?

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

网站地图

Top