前言
本节讲述一下 FPGA 片内 RAM 的仿真与测试,我们也知道 RAM 是随机存储器,顾名思义是一种存储数据的一种模块,说到随机呢,也就是我们可以任意的访问它里面的一些地址空间里面的数据。
Xilinx 在 Vivado 里为我们已经提供了 RAM 的 IP 核 , 我们只需通过 IP 核例化一个 RAM 根据 RAM 的读写时序来写入和读取 RAM 中存储的数据 。实验中会通过 VIVADO 集成的在线逻辑分析仪 ila ,我们可以观察 RAM 的读写时序 和从 RAM 中读取的数据。
一、创建及配置工程
1、创建工程
新建一个 ram_test 的工程
2、添加 RAM IP核
①、 点击下图中 IP Catalog ,在右侧弹出的界面中搜索 ram ,找到 Block Memory Generator,双击打开。
②、Basic 选项栏按照下图进行配置
- Interface Type:接口类型,选择 Native
- 在 XILINX 的 FPGA 上想要实现一个存储器,一般有两种方式:第一种是自己使用 FPGA 的逻辑资源自己设计;第二种是使用 XILINX 专用的 Block Memory Generator(BMG)。针对 BRAM 的资源形式,XILINX 提供了两种接口类型:Native 和 AXI4。这两种核的主要特点如下表。
Memory Type:存储器类型,选择 Simple Dual Port RAM
- Native 端口的内存类型共有五种,区别如下表
Simple Dual Port RAM 的写时序如下
- 当写使能有效时(高电平),在时钟的上升沿将指定数据写入到指定地址
Simple Dual Port RAM 的读时序如下
- 读的时候是有一定延时的,如果在同一个时钟下面我们去采集这个有效的输出数据的时候,我们是需要在下一个周期才能采集到它的一个有效的数据
③、Port A Option 选项栏按照下图进行配置
按照这样设置,也就是说可以存储 512 个 16 位数据
- Port A Width(数据宽度):端口 A 的宽度,这里我们设置 16 位宽
- Port A Depth(RAM 里可以存放多少个数据):端口 A 的深度,我们这里设置 512
- Enable Port Type:Always Enable,保持一直使能,这样我们就不需要去控制它了
④、Port B Option 选项栏按照下图进行配置
Port B Width(数据宽度):端口 B 的宽度,这里我们设置 16 位宽
Enable Port Type:Always Enable(端口 B 的使能保持一直开启)
Primitives Output Register(基元输出寄存器):取消勾选,其功能是在输出数据加上寄存器,可以有效改善时序 ,但读出的数据会落后地址两个周期。 很多情况下,不使能这项功能,保持数据落后地址一个周期。
关于其它更多的设置可以参照 XILINX 的官方文档《Block Memory Generator v8.4 LogiCORE IP Product Guide》⑤、Other Options 保持默认配置即可
- Load Init File 是我们可以初始化一些文件放在 RAM 里面,也就是说 FPGA 上电之后会把你预先存好的这些数据加载到 RAM 里面
⑥、点击 OK,再点击 Generate,生成 RAM IP