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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fpga中reg[7:0] mem[0:255]怎么赋初值,还有它与通过mif初始化的ROM有啥区别?相关的知识,希望对你有一定的参考价值。

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

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

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

追答

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

参考技术A 相当于c语言里的数组,声明了一系列的mem寄存器,具体用的时候可以m[0],m[1],每一个寄存器是8位的,mif初始化的是fpga的内部资源,相当于把不用的资源拿来做rom用,mem只是寄存器,占用的资源不一样吧,个人理解本回答被提问者采纳 参考技术B 一个是用EAB做的,一个是用逻辑宏单元的资源做的!

以上是关于fpga中reg[7:0] mem[0:255]怎么赋初值,还有它与通过mif初始化的ROM有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

verilog 定义memory类型变量 reg[16:1] a[7:0], 赋值时候可不可以这样:a[5][16:9]=8'b11111111;

在FPGA的开发中,如何对inout信号进行赋值,除了用assign语言之外?

请教Verilog 中memory 型数据的问题

verilog 怎么给二维数组赋值

fpga减法运算

通过FPGA将图片信息通过RS232串口发送到PC端,使用MATLAB进行图片显示