一、FPGA 中 LPM_ROM 定制与读出实验的实验步骤
第一步:创建新的工程建立mif文件
File--->New Project wizard.... --->选择芯片cyclone IV EP4CE22F17C8--->建立存储器初始化文件ROM1.mif --->创建一个128*32bits空间大小的存储空间--->输入初始化数据(如图5.1ROM1的数据)
图5.1 ROM1的数据
第二步:调用用LMP元件库创建自己的元件。
用图形编辑,进入 mega_LPM 元件库,调用 LPM_ROM 元件,设置地址总线宽度 ADR[6..0] 和数据总线宽度 Q[31..0],分别为 7位和 32位,并添加输入输出引脚,如下图5.2所示设置和连接。
图5.2 自定义ROM的原理图
第三步:编译,仿真测试。
编译通过后。创建University Program vwf文件进行仿真测试。仿真图如图5.3 自定义ROM的仿真图。
图5.3 自定义ROM的仿真图
分析此仿真图,每当clk是上升沿,就会触发此ROM,读出对应地址中的内容,比如说当地址是1的时候,clk遇到上升沿的时候,就会触发,读出相应地址内的内容为1。
二、FPGA 中 LPM_RAM 定制与读出实验的实验步骤
第一步:创建新的工程建立mif文件
File--->New Project wizard.... --->选择芯片cyclone IV EP4CE22F17C8--->建立存储器初始化文件ROM1.mif --->创建一个128*8bits空间大小的存储空间--->输入初始化数据(如图5.4ROM2的数据)
图5.4ROM2的数据
第二步:调用用LMP元件库创建自己的元件。
用图形编辑,进入 mega_LPM 元件库,调用 LPM_RAM 元件,设置地址总线宽度 ADR[6..0] 和数据总线宽度 Q[7..0],分别为 7位和 8位,并添加输入输出引脚,wren控制的是读写信号,wren是1的时候是写入数据,为0时读取数据。如下图5.5所示设置和连接。
图5.5自定义RAM的原理图
第三步:编译,仿真测试。
编译通过后。创建University Program vwf文件进行仿真测试。wren=0的仿真图如图5.6 自定义RAM的仿真图1。
图5.6 自定义RAM的仿真图1
分析此仿真图,当读写信号线wren设置为0时,只能读。每当clk是上升沿,就会触发此RAM,读出对应地址中的内容,比如说当地址是1的时候,clk遇到上升沿的时候,就会触发,读出相应地址内的内容为1。
当wren=1和0的仿真图如图5.7 自定义RAM的仿真图2
图5.7 自定义RAM的仿真图2
分析此仿真图,当读写信号线wren设置为0和1交替时,可读可写。每当clk是上升沿,就会触发此RAM,读出对应地址中的内容,当wren是1的时候,就会将data中的数据更新address处的数据。实现数据的更新,比如说当wren第一次为1时,将1 地址内的数据更新为128,之后遇到clk为上升沿读取数据发现是128。
六、实验讨论与总结
(1)如何在图形编辑窗口中设计 LPM-ROM 、LPM-RAM存储器?怎样设计地址宽度和数据线的宽度?怎样导入 LPM-ROM、LPM-RAM 的设计参数文件和存储 LPM-ROM 、LPM-RAM的设计参数文件?
解答:以设计LPM-ROM为例,设计的时候在IP Catalog窗口搜ROM,如下图
选中ROM:1-POST之后,选择一个保存的位置,比如ROM,然后设置相应的参数,如下图。
最后需要创建.bsf和.v的文件。就可以在原理图中进行设计的引用了。
创建一个Block Diagram/Schematic File文件,双击界面,弹出一个Symbol的界面,找到Project,就可以选中我们刚刚创建的ROM了。
RAM的创建和ROM的相似,只不过搜的时候搜RAM。其余步骤同理。
(2)怎样对 LPM-ROM、LPM-RAM 的设计参数文件进行软件仿真测试?
解答:以ROM为例,设计完原理图之后,就需要创建VMF的仿真文件,将引脚导入,设置相应的参数,进行仿真的测试。设置参数的对于ROM的测试主要就是address和clk,但是对于RAM来说多了wren和data,都要进行测试。
(3)怎样在实验台上对 LPM-ROM 、LPM-RAM进行测试?
解答:需要下载到我们的实验箱上的FPGA芯片上进行测试,通过拨码开关结合段码显示,进行测试。
(4)存储器原理图中的地址、数据,可否通过寄存器提供?
解答:可以,寄存器本身就有存储的功能,但是需要控制好周期。