fpga中reg[7:0] mem[0:255]怎么赋初值,还有它与通过mif初始化的ROM有什么区别?

如题所述

首先,verilog中对数组赋初始值没有简便的方法,只能对数组中的每个元素单独赋值。

第二,直接声明一个数组与调用一个IP核的ROM没有本质区别,取决于你的具体需求。前者简单易移植,后者性能更有保障。如果需要调用的存储深度很大,那么建议老老实实的用IP核、或者直接调用BlockRAM原语。追问

哦,是这样啊,那就是说数组赋初值是相当麻烦的,毕竟这么多,但是用的时候要快些,直接用就行了,而且一次可以对多个进行操作,ROM的话初始化容易些,但是后面要用的话就必须牵涉的地址操作

追答

如果仅是仿真的话,你说的倒也没错。
但是在硬件实现时,定义的数组最终还是会映射到分布式RAM(寄存器)或者BlockRAM,具体映射到哪种取决于数组的容量。
像你举得这个例子,编译器会把它映射到BlockRAM,地址操作是绕不开的。某一时刻仅能读(写)某一个地址的内容(双口RAM的话可以同时两个地址)。
说到底,还是看你的具体需求。如果仅是想跑跑仿真,倒也不需想太多。如果需要硬件实现并上器件调试,那么建议你先看看FPGA的结构概述,先对其结构和资源有个感性认识。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-12
相当于c语言里的数组,声明了一系列的mem寄存器,具体用的时候可以m[0],m[1],每一个寄存器是8位的,mif初始化的是fpga的内部资源,相当于把不用的资源拿来做rom用,mem只是寄存器,占用的资源不一样吧,个人理解本回答被提问者采纳
第2个回答  2014-12-13
一个是用EAB做的,一个是用逻辑宏单元的资源做的!