Xilinx IP核 Block Memory Generator v8.4 的使用

news/2024/11/29 10:49:57/

文章目录

  • 背景
  • IP核的使用
  • 初始化
  • 仿真

背景

如果想在 Xilinx 的FPGA上构建一个 RAM,通常有两种方式:

  1. 使用逻辑资源LUT组成DRAM,一般来说是用verilog声明一个多维数组即可
  2. 使用开发板上内嵌专用的BRAM,一般来说需要使用Xilinx提供的IP核

Block Memory Generator 就是使用了开发板上的BRAM。我在一个项目中需要对该IP核进行初始化,主要是使用 coe 文件初始化存储,因此本文主要介绍如何使用并初始化 Xilinx 提供的IP核 Block Memory Generator v8.4 ,为了确保成功初始化,还对其进行了一个简单的仿真,更多细节请参考官方手册。

IP核的使用

创建工程后,点击左侧的 IP Catalog,搜索 Block Memory Generator ,双击对应的IP核,会打开如下所示的配置界面

在这里插入图片描述

如果要查看该IP核的文档,可以点击左上角 Documentation 查看;如果打开的 DocNav 显示无法查看pdf,只要点击 Open to Print 即可下载说明文档,用自带的pdf阅读器查看文档

现在对其主要的配置作一个简单的介绍:

  1. Component Name:设置该IP核的名称,我这里保持了默认。
  2. Interface Type:RAM接口总线。这里保持默认,选择Native接口类型(标准RAM接口总线);
  3. Memory Type:存储器类型。可配置成Single Port RAM(单端口RAM)、Simple Dual Port RAM(伪双端口RAM)、True Dual Port RAM(真双端口RAM)、Single Port ROM(单端口ROM)和Dual Port ROM(双端口ROM),这里选择Simple Dual Port RAM。
  4. ECC Options:Error Correction Capability,纠错能力选项,这里保持默认。
  5. Write Enable:字节写使能选项,勾中后可以单独将数据的某个字节写入RAM中,这里不使能。
  6. Algorithm Options:算法选项。可选择Minimum Area(最小面积)、Low Power(低功耗)和Fixed Primitives(固定的原语),这里选择默认的Minimum Area。

接下来切换至 Port A 选项页,设置端口A的参数,该页面配置如下:

请添加图片描述

这里将 Port A WidthPort A Depth 分别设置为 72 和 2048,实际的宽度和深度请根据需求来设定。其他选项均保持默认。

接下来切换至 Port B 选项页,设置端口B的参数,该页面配置如下:

请添加图片描述

这里将 Port B Width 设置为 72,实际的宽度请根据需求来设定。其他选项均保持默认。

完成配置后,点击右下角 OK,紧接着会弹出 Genarate Output Products 的窗口,直接点击 Generate 即可

初始化

重新打开IP核的配置界面,切换到 Other Options 选项页,勾选上 Load Init File,然后点击 Edit 按钮,如果弹窗显示 No COE file specified. Create/Choose?,点击 OK 然后选择coe文件的路径和名字即可。最终会弹出下面的窗口。

请添加图片描述

第一行是用于指定第二行输入的值是什么进制的,比如第一行输入10,那么第二行输入的值都应该是十进制。

完成第一行输入后,第二行可以输入一系列值,相邻的值用逗号分隔,下图是一个示例。

请添加图片描述

由于配置的宽度是72,因此第一个72比特的值是1,第二个72比特的值是2,第三个72比特的值是1003,以此类推。后面将通过仿真来验证这一点。

完成后点击 Save,然后关闭窗口,点击配置界面右下角OK,重新 Generate 即可。

后面如果要改初始化的内容,可以直接修改对应的coe文件即可,但是最好去配置界面里重新加载初始化文件,因为直接修改coe文件,可能IP核还是使用的旧coe文件的内容

仿真

编写测试代码,如下所示

module test_mem();reg clk;reg rst_n;reg enb;reg [10:0] addrb;wire [71:0] doutb;blk_mem_gen_0 mem_instance(.clka(clk),.ena(1'b0),.wea(1'b0),.addra(11'b0),.dina(72'b0),.clkb(clk),.enb(enb),.addrb(addrb),.doutb(doutb));always #5 clk = ~clk;initial beginclk = 1'b0;rst_n = 1'b1;enb = 1'b0;addrb = 11'b0;#5;rst_n = 1'b0;#20;rst_n = 1'b1;endalways #60 addrb = addrb + 11'b001;always #30 enb = ~enb;endmodule

仿真波形如下所示

请添加图片描述


http://www.ppmy.cn/news/109662.html

相关文章

SpringCloud Alibaba Seata 工作机制

SpringCloud Alibaba Seata Seata 工作机制 说明 之所以放在后面说工作机制是因为如果一开始就说的话理解困难 所以我们有了前面的列子和说明我们在结合本节内容会收获的多理解相对容易点 分布式事务过程分析 Seata 分布式事务处理过程-ID三组件模型 debug 梳理: 术语 先…

Windows的Powershell终端增强

Ubuntu上一直用的Oh My Zsh强化终端,体验非常nice。最近在Win上做东西比较多,于是也想把Powershell这个简陋的终端加强一下。 说干就干,网上查了一圈,发现大部分人用Oh My Posh来操作,因此试了一下,发现卡…

vulhub-Jarbas(易)

打靶练习Jarbas 0x00 部署0x01 信息收集:端口扫描、服务发现0x02 路径爬取0x03 反弹shell0x04 内网信息收集0x05 crontab定时任务提权0x06 总结 0x00 部署 靶机:下载地址 宿主机:kali2021版本 0x01 信息收集:端口扫描、服务发现…

sqlite3常用指令

SQLite 是一款轻量级的数据库,它的设计目标是嵌入式的,但它也可以在大型系统中使用。SQLite 提供了一系列的命令来帮助用户进行数据库操作。以下是 SQLite 的一些常用指令: 建立数据表 使用 CREATE TABLE 命令来创建一个新的数据表。 CREATE …

MVC 接收不到参数? —— 看我如何给你安排得明明白白

文章结构 问题背景:问题处理总结 问题背景: 现有如下代码: PostMapping(value "/payment/create") ResponseBody public CommonResult create(Payment payment) {}乍眼看去是不是很好,至少没啥问题很自然&#xff0c…

何时加索引,性别字段和逻辑删除字段应不应该加

首先哪些地方加索引(按照sql执行顺序写) 1、from表扫描连接处索引 2、where后条件去走索引 3、group by加索引 4、select查询不用加 5、order by排序加索引 (对于第四点,覆盖索引:查询的字段都被索引覆盖,…

Kotlin笔记(一)常量与变量

文章目录 1、常量与变量定义NULL检查机制?. 判空辅助?: 判空辅助!! 非空断言 类型检测与类型转换is 类型检测as 类型转换 2、基本数据类型数字比较 类型转换 toDouble()位操作符字符数组字符串 String""" 字符串字面值${} 字符串模板 lateinit 延迟初始化by l…

linux条件变量知识点总结

与条件变量相关API 条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其他线程…