简易计算机系统综合设计--RAM存储器
前面已有粗略地提了一下该部件的作用--储存指令,这里对具体过程进行说明。我这里没用VHDL代码写RAM存储器(不会QWQ),用的是库里面的lmp_ram_io.
首先我们看一下库里面的RAM:
(1)开始显然看不懂各个端口具体的作用,所以我们可以去看一下lpm_ram_io的端口说明,操作步骤为:
input Ports可以查看各个输入端口的作用,Truth Table可以查看部件输入输出的“真值表”。
这里有三个真值表,各个表的使用条件在表前均有说明:
根据不同的设计要求可以减少部件的某些非必需的端口,根据这里的设计这里的设计,需要一个数据输入端口,一个时钟信号端口,然后we和outenab配合控制在时钟信号到来时是读数据还是写入数据,故可以删除端口outclock和memenab:
设置结束后:
然后我们需要设置RAM的各项参数:
各个参数的含义在后面都有说明,这里主要说明一下RAM_FILE的设置:
RAM是一个储存数据的部件,那么我们自然需要给该部件初始化储存的数据,设置RAM_FILE就是给RAM绑定一个用于初始化的数据集(大概这么个意思,可能不那么专业)。我们需要先新建一个内存文件:
得到文件后右键第一行或者第一列可以改变其现实的形式,每个单元格子用于储存一个8位宽的数据,共256个储存单元,文件建好之后继续设置参数:
最终所有的参数设置如下:
(2)引脚说明
输入输出端口分别为:
Addr:地址输入端口;
EN: 读取端口,允许对RAM进行读取操作,当EN为高电平时有效;
WE: 写入使能,允许对RAM进行写入操作,当EN为低电平,WE为高电平时有效;
CLK:时钟信号输入端口,当时钟上升沿到来时配合WE以及EN对RAM进行读写操作。
Fout:双端接口,既可以从这里将RAM的数据读出,又可以将外部数据写入RAM,具体由CLK,WE以及EN控制。
(3)进行波形仿真:
这里不好处理数据输入,故没有对数据的写入进行仿真验证,对于数据的读出结果,结合波形图中当前输入的地址及当前输出,对比mif对应储存单元中数据可以判断自己的设计是否正确,这个十分关键。
最后说明一下,数据的写入不会写入到mif文件中,即我们无法通过直接查看mif文件的数据是否改变来判断写入是否成功,应该先将数据写入一个地址单元再将该地址单元的数据读入,看是否为写入的数据,mif文件只对RAM进行初始化。