欢迎光临散文网 会员登陆 & 注册

Verilog基础之十六、RAM实现

2023-07-16 09:58 作者:行中悟_悟中行  | 我要投稿

一、前言

    工程设计中除逻辑计算单元外,存储单元也是不可获取的部分,RAM(Random Access Memory)随机存取存储器即可以写入数据,也可读取数据,写入或读取的位置由输入的地址决定。

二、工程设计

    RAM作为常用的单元,器件都是自带对应的IP核,可直接创建例化使用,本文将介绍通过IP核以及RTL代码两种方式实现RAM。

    2.1 RAM IP核使用

    先创建工程指定器件,然后在Flow Navigator中进入IP Catalog,进入创建界面


    进入IP Catalog,Search搜索框中输入查找的IP核RAM,显示相关的搜索结果,此处以“Distributed Memory Generator”为例。

进入IP核的设置窗口,Depth为存储器的深度,此处设置的值将决定左侧输入a的位宽,Data Width为存储数据的位宽,设置后即为左侧输入d的位宽。Port config和RST&Initialization为相关的设置

设置完后点击右下角的OK,成功生成IP核,在Sources窗口可看到生成的IP核,名称为dist_mem_gen_0;

    2.2 设计代码

设计中包含了IP核和RTL生成RAM的方式,IP核的生成方式十分方便,对dist_mem_gen_0进行例化即可实现

2.3 仿真代码

2.4 综合结果

IP核实现的RAM在Schematic中即为一个完整的模块

RTL代码实现依赖LUT和FF和RAM网表单元。

2.5 仿真结果

仿真结果如下图

1)在rst为1时非复位状态,we为1处于写入状态,因此输出spo一直为0

2)在we为0处于读取状态时,下图红框1,2,3分为别复位信号rst为1,0,1,为0时进行复位,在方框2处为复位状态,输出spo输出为0

3)在rst为1,we为0,即正常的读取状态时,地址addr范围为0-15,输入d0范围为0-31,当前地址addr的读取值为之前的写入值。

a.在序号1 439ns处,addr为13,输入d0为13,此时写入13;

b.在序号2 441ns处,addr为14,输入d0为14,此时写入14;

c.在序号3 502ns处,此时读取地址为13,根据之前存储的值为13,因此输出spo为13.

d.在序号4 506ns处,类似的读取之前存储的值14,符合预期


Verilog基础之十六、RAM实现的评论 (共 条)

分享到微博请遵守国家法律