赞
踩
本次实验以XILINX-vivado2021.2为软件平台,以DDS为载体,介绍一下ROM核的使用。
ROM(Read-Only Memory,只读存储器)是一种只能读取存储内容而不能修改的存储器。事实上,在FPGA中,无论是ROM还是RAM本质上都是调用的RAM资源,掉电会丢失【很好理解,FPGA的内部存储器主要是基于静态随机存取存储器(SRAM)构建的。SRAM是一种易失性存储器,即在断电时存储的数据会丢失。】,用IP核生成的ROM核只是提前添加了数据文件(.COE),在掉电重启时,FPGA会将数据文件预先加载到ROM核中,实现ROM核的初始化,所以才让ROM核看起来像“掉电不丢失”的存储单元。故在调用之初就必须将要存储在ROM核中的内容放到数据文件(.COE)中写死,在后续的设计中无法修改。
依次点击IP Catalog-->Search,输入ROM,能看到Distributed Memory Generator和Block Memory Generator,二者最主要的差别是生成的 Core所占用的 FPGA 资源不一样,从 Distributed Memory Generator 生成的 ROM/RAM Core 占用的资源是 LUT(查找表,查找表本质就是一个小的 RAM);从 Block Memory Generator 生成的 ROM/RAM Core 占用的资源是 Block Memory(嵌入式的硬件 RAM)。我们在这里使用块存储器,即 Block Memory。
进入IP配置界面
将 “blk_mem_gen_1” 改为 "ROM"。
在“Memory Type” 框中选择存储器类型,可供选择的类型有:Single Port RAM(单端口 RAM)、 Simple Dual Port RAM(简单双口 RAM)、True Dual Port RAM(真双口 RAM)、Singl Port ROM(单端口 ROM)、Doul Port ROM(双端口 ROM)。这里我们选择“Single Port Rom”单端口 ROM。 其他选择默认设置。
“Port A Width”数据宽度,表示位宽,例如我DA模块的精度为12位,那我的数据宽度即12。
“Port A Depth”数据深度,可以理解为数据的个数,表示可以存放多少个12位宽大小的数据,在此我取的为4096。
“Enable Port Type”使能端口,“Always Enabled”表示一直使能,用“Use ENA Pin”表示我在读取数据时需要接入使能端口。
下图可以理解成是ROM的内部结构,方便大家深入理解数据深度和数据宽度
点击Memory Initialization-->Load lnit File,把我们事先准备好的“.COE”文件(我用的是在小梅哥官网上的mif精灵生成的.COE文件,也可以用MATLAB生成)加载进去,其他选择默认值,一个简单的单口ROM就配置好了。
按照下图序号依次点击,选中最后的“.veo”文件,里面就是配置好的ROM例化模板。到此,一个简单的单口ROM就配置好了。
ROM的用法比较简单,在此就不做过多的验证,验证放在后面的系列文章中。
双口ROM可以看成是两个单口ROM拼在一起,用法也一样。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。