OpenEdv-开源电子网

标题: 怎么计算一维数组的下标? [打印本页]

作者: jshzp    时间: 2019-11-5 17:02
标题: 怎么计算一维数组的下标?
本帖最后由 jshzp 于 2019-11-8 09:12 编辑

我定义了一维数组dataPort,想把数组中的某16个bit赋给模块输出端口,Verilog代码如下:
  1. module ADC(sys_clk,sys_rst_n,dataRam);
  2. input[24:0]        Addr;            //地址总线
  3. inout[15:0]        dataBus;        //数据总线
  4. wire[1024*16-1:0]    dataPort;            //一维数组

  5. assign index=(Addr[9:0]-10'h10)*16;
  6. assign dataBus =dataPort[index+15:index];    //用index计算下标时报错

  7. endmodule
复制代码

综合时报错,Addr is not a constant,该怎么计算一维数组的下标呢?感谢指教!



作者: QinQZ    时间: 2019-11-5 17:02
jshzp 发表于 2019-11-8 13:18
感谢回复!
端口不能定义成数组,所以我把数组转成了一维的(其实就是一排线而已,wire),但是计算下标 ...

对,数据存入RAM 或者FIFO IP核。另外如果像你这种定义成一维的这种,也方便计算下标的,比如像dataBus[cnt]。
作者: peng1554    时间: 2019-11-6 15:44
帮顶~~
作者: QinQZ    时间: 2019-11-8 09:43
如果没记错的话,数组应该是不能放在模块端口进行定义的,如果有比较多的数据要存储的话,可以在顶层例化个RAM或者FIFO,通过读写RAM或者FIFO来传递数据
作者: jshzp    时间: 2019-11-8 13:18
QinQZ 发表于 2019-11-8 09:43
如果没记错的话,数组应该是不能放在模块端口进行定义的,如果有比较多的数据要存储的话,可以在顶层例化个 ...

感谢回复!
端口不能定义成数组,所以我把数组转成了一维的(其实就是一排线而已,wire),但是计算下标时遇到了只能是CONST的麻烦。目前用的是非常笨的办法,穷举法,一个一个的用const去写。。。

您说的是指用IP核去例化RAM或者FIFO吗?
作者: Elliott    时间: 2019-11-20 08:43
初学者前来学习
作者: Elliott    时间: 2019-11-20 08:44
初学者前来学习了  帮顶




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4