REVIEW
之前已经学习过: ROM:FPGA寄存器 Vivado IP核-CSDN博客 串口接收:Vivado 串口接收优化-CSDN博客 |
1. 今日摸鱼计划
RAM创建与测试 |
小梅哥视频: 21C_嵌入式块存储器RAM介绍_哔哩哔哩_bilibili 21D_嵌入式块存储器RAM实现和仿真_哔哩哔哩_bilibili 小梅哥教材: 02_【逻辑教程】基于HDL的FPGA逻辑设计与验证教程V3.4.pdf 14 IP 核使用之 |
2. RAM IP核配置
RAM(Random Access Memory): 它可以随时把数据写入到任何一指定地址的存储单元,也可以随时从任一指定地址读出数据。 其读写速度有时钟频率决定,主要用来存放程序以及程序执行过程中产生的数据运算结果等。 |
Distributed Memory Generator (查找表,查找表本质就是一个小的 Block Memory Generator (嵌入式的硬件 |
RAM 具体的差异我们可以通过依次选择,然后观察窗口左边 |
单端口 |
简单双端口 相较单端口 PORTA |
真双端口 两个 |
写数据字节使能: |
算法类型 |
操作模式设置: |
Write First 模式下的波形,如果仅读出数据而未发生数据的同时读写,则读出存储器以前存储的数据,如果发生数据的同时读写,读出数据为刚从数据总线送入的数据,而不考虑该地址以前存储的数据。 |
Read First 模式下的波形,同时对同一地址读写,读出数据为上次刚写入该地址以前的数据,忽略正在写数据这一事件对读出数据的影响。 |
No Change 模式下波形,读出的数据只有在进行读操作但未进行写操作时更新数据,在同时读写数据时,读出数据保持不变。 |
端口使能信号 |
端口B输出寄存器配置: 这里可以看下 REGCEB Pin 是寄存器使能管脚,如果勾选,会有一个寄存器使能控制管脚用于控制寄存器的使能,如果不勾选寄存器就一直使能状态,这里就不勾选。 要得到更好的性能,将这里的两个寄存器都勾选。 |
端口 B 输出置位/复位设置 这里不创建置位 |
其它保持默认就OK |
最后看一看总的情况,信息包括使用的资源, |
Latentcy 这里之所以 |
到这里 |
3. RAM 测试
`timescale 1ns/1ns module ram_tb(); //blk_mem_gen_0 是忘记改名字哩~ |
本测试,对RAM 地址0~31 写入127~96 然后从地址0~31依次读取其中的数值 |
这里可以看到读取时,会晚3个时钟周期 |
本次RAM读写都未配置使能ena enb 所以看起来很简单; (但是本摸鱼怪又觉得没有使能控制看着有点怪,后边再搞一下呗~) |
4. 带使能en的RAM
ram_tb |
`timescale 1ns/1ns module ram_tb(); |
#60; enb = 0; |
这个自己调试一下就会发现问题 (其实就是Latentcy ) |
本摸鱼怪还是行动力很强的嘛,桀桀桀~~~ |