[verilog] 这个式子该怎么表示。

[复制链接]
1212|9
 楼主| 魔人布欧 发表于 2016-4-25 15:32 | 显示全部楼层 |阅读模式
for(k=-1;k<=1;k++)
      {
           for(l=-1;l<=1;l++)
                {
                     avg=avg+pd[i+k][j+l];
                }
      }
我想知道这些式子在Verilog中该怎么表示,特别是 avg=avg+pd[1+k][1+l];这个式子,对于pd[k+1][l+1]怎么办。谢谢给位来指点。
xuander 发表于 2016-4-27 00:58 | 显示全部楼层
本帖最后由 xuander 于 2016-4-27 01:01 编辑

for循环是不可综合的,不能组合出电路的意思。

两个for太复杂,举个单for的例子,请意会。

always    @clk
{
if    (rst有效)
    {    sum = 0;
    counter=0;
    }
esle
    {
    if     (flag == 1)
         {
         sum = sum  +   a [ counter ];
         counter += 1;
         if    ( counter >= limit )
              {
              sum完成,后续处理;
              flag = 0;
              }
          }
     }}







 楼主| 魔人布欧 发表于 2016-4-27 09:33 | 显示全部楼层
你这里的counter是不是一个RAM啊,是不是需要自己写一个RAM 或者是其他的什么啊 。
谢谢!
xuander 发表于 2016-4-27 09:55 | 显示全部楼层

就是一个普通变量,
位数自己定。


 楼主| 魔人布欧 发表于 2016-4-27 11:07 | 显示全部楼层
xuander 发表于 2016-4-27 00:58
for循环是不可综合的,不能组合出电路的意思。

两个for太复杂,举个单for的例子,请意会。

你这里的counter是不是一个RAM啊,是不是需要自己写一个RAM 或者是其他的什么啊 。
谢谢!
xuander 发表于 2016-4-27 11:18 | 显示全部楼层
魔人布欧 发表于 2016-4-27 11:07
你这里的counter是不是一个RAM啊,是不是需要自己写一个RAM 或者是其他的什么啊 。
谢谢! ...


不是RAM,它肯定要占用逻辑单元里面一个寄存器。


xiamingmin163 发表于 2016-4-27 14:02 | 显示全部楼层
首先,FOR循环在verilog里面会被直接展开,编译器一般支持,但两个FOR嵌套的做法不好,起码巨耗资源,不要那样做,用计数器的做法来代替;
其次,对于“pd[k+1][l+1]”可以定义其为memory型的变量,可以理解成C里面的二维数组了;
最后,还是看看书吧,毕竟硬件语言是有限制的。
 楼主| 魔人布欧 发表于 2016-4-27 19:47 | 显示全部楼层
xuander 发表于 2016-4-27 11:18
不是RAM,它肯定要占用逻辑单元里面一个寄存器。

那估计是要自己去写一个RAM 来存储数据吧。
abcdfff 发表于 2016-6-12 09:18 | 显示全部楼层
那个数组要写成一个表吗?用查表法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

43

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部