本篇实现基于叁芯智能科技的SANXIN -B02 FPGA开发板,如有入手开发板,可以登录官方淘宝店购买,还有配套的学习视频。
随机存取存储器(random access memory,RAM)又称作"随机存储器"。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。按照存储单元的工作原理,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。在FPGA内部的存储块为SRAM。
设计一个深度为256,宽度为8的RAM。不需要初始化内容。
RAM,此种存储器支持写操作,支持读操作。在存储器建造时,可以进行初始化数据,也可以不进行初始化数据。RAM的初始化文件也是coe文件,原理和ROM类似。
由于设计RAM深度为256,故而地址的宽度为8位。
RAM工作原理为,在时钟上升沿采样到rden为1时,将addr所指示的存储空间的数据进行输出;在时钟上升沿采样到wren为1时,将wdata存储到addr所指示的存储空间中去。
此模块命名为ram_test。my_ram为ip core。
建好工程之后,右键点击工程,选择New Source,新建IP核。
找到对应路径,命名为my_ram。
打开IP核库之后,搜索Block Memory即可看到我们的RAM。
点击Next。
点击Finish。
点击Next。
选择默认的Single Port RAM。点击Next。
数据位宽为8,数据深度为256。Enable选择Always Enable。点击Next。
此界面的数据初始化我们不需要做,因为RAM的数据是我们自己写入的,不是提前固化好的,所以这个界面我们保持默认点击Next。
复位端口同样不使用,如果需要,可以勾选上。我们这里保持默认点击Next。
点击Generate。
顶层负责调用my_ram,例化文件在ipcore_dir -> my_ram.veo中。
设计代码为:
在某些地址中,写入一些数据,然后读出来。由于写进去后,还需要读出来,所以地址不在使用随机值,固定在0,100,200,255地址写入随机值。
仿真代码为:
经过设置后,进行RTL仿真。
通过波形图中,可以看出,在地址为0时,写入数据为36;在地址为100时,写入数据为129;在地址为200时,写入数据为9;在地址为255时,写入数据为99。经过一段时间后,对上述几个地址进行读取,输出的数据与写入数据相同(输出时,输出数据要比地址晚两拍)。