什么是RAM?
- RAM(Random Access Memory),即随机存取存储器,它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据, 其读写速度是由时钟频率决定的。
- RAM主要用来存放程序及程序执行过程中产生的中间数据、 运算结果等。
- 与ROM的区别:ROM(Read-Only Memory)即只读内存,它在工作时只能进行读取操作。
目标
使用 Altera RAM IP核生成单端口RAM,进行读写操作,然后仿真验证。
创建测试工程
参照之前工程,创建模板工程
1、创建RAM核
参照上文“如何创建使用IP核-PPL?”
- 找到“Memory Compiler”中的“RAM:1-PORT”选择单端口RAM
2. 位宽深度存储器类型配置
3、输入输出配置
4. 选择写入时,进行读取,数据时效性
尽量避免同时读写,故选择“Don't Care”
5、RAM初始化配置
没特殊要求,默认即可。
2、工程代码
1、分配引脚
名称 |
功能 |
管脚 |
sys_clk |
输入时钟 |
E1 |
sys_rst_n |
系统复位 |
M1 |
2、顶层文件模块
有一个“ram ip核”对象“m_ram_singleport”,以及一个读写操作对象“m_ram_rw”。
“m_ram_singleport”:提供输出到内部的接口;
“m_ram_rw”:提供一个读写例程
3、读写例程模块
此例程模块,核心是rw_cnt计数,同时由于给ram核提供的时钟为sys_clk,故此例程模块时钟也必须是sys_clk。
通过rw_cnt可以达到以下目的:
- 确定当前为写入或者读取状态
- 当为写入状态时,修改ram_wr_data数据