存储器ROM与RAM实验

这个实验详细介绍了如何在FPGA中配置和使用ROM与RAM。实验目标包括理解ROM特性,编写MIF文件,以及在GW48_CP+实验台上进行实际操作。通过Quartus II环境,学习了ROM和RAM的参数设置、初始化文件创建、模块设计以及在系统读写。实验内容涉及地址和数据信号的配置,以及波形图和测试数据的分析。
摘要由CSDN通过智能技术生成

一、 实验目的

1、掌握 FPGA 中 ROM 的设置,作为只读存储器ROM 的工作特性和配置方法。
2、用文本编辑器编辑 mif 文件配置ROM,学习将程序代码以 mif 格式文件加载于ROM中。
3、在初始化存储器编辑窗口编辑 mif 文件配置ROM。
4、验证 FPGA 中 ROM 的功能。

二、 实验要求

1、实验前认真复习 ROM 存储器部分的有关内容。
2、记录实验数据,写出实验报告,给出仿真波形图。
3、通过本实验,熟悉 FPGA 中 EAB 构成的ROM 存储器。

三、 实验原理

ALTERA 的 FPGA 中有许多可调用的模块库,可构成如 rom、ram、fifo 等存储器结构。
CPU 中的重要部件,如 RAM、ROM 可直接调用他们构成,因此在 FPGA 中利用嵌入式阵列块EAB 可以构成各种结构的存储器,ROM 是其中的一种。ROM 有 5 组信号:地址信号address[ ]、数据信号 q[ ]、时钟信号 inclock、outclock、允许信号 memenable,其参数都是可以设定的。由于 ROM 是只读存储器,所以它的数据口是单向的输出端口,ROM 中的数据是在对 FPGA 现场配置时,通过配置文件一起写入存储单元的。图 2-1-1 中的 ROM 有 3 组信号:inclk——输入时钟脉冲;instruction[31…0]——lpm_ROM 的 32 位数据输出端;a[4…0]——lpm_ROM 的 5 位读出地址。
实验中主要应掌握以下三方面的内容:
1、 ROM 的参数设置;
2、 ROM 中数据的写入,即 FILE 初始化文件的编写;
3、 ROM 的实际应用,在 GW48_CP+实验台上的调试方法。

四、 实验内容

(1)新建工程。工程名是 scinstmem.qpf。
(2)用初始化存储器编辑窗口编辑 ROM 配置文件(文件名.mif)。这里预先给出后面将要用到的指令存储器初始化文件:scinstmem.mif 。scinstmem.mif 中的数据是机器指令代码
(图 2-1-3)。
(3)模块设计。用图形编辑,使用工具 Mega Wizard Plug-In Manager,定制指令存储器
rom 宏功能块。设置地址总线宽度 address[]和数据总线宽度 q[],分别为 5 位和 32 位,并添加输入输出引脚,如图 1-2 设置和连接。
在设置 rom 数据参数选择项 file 的对应窗口中(图 1-3),用键盘输入 ROM 配置文件的路径(scinstmem.mif),然后设置在系统 ROM/RAM 读写允许,以便能对 FPGA 中的 ROM 在系统读写。
(4)全程编译。
(5)画波形文件并进行功能仿真。
(6)引脚锁定。
(7)全程编译。

这是一个比较复杂的设计,需要使用Verilog HDL语言来实现。 首先,我们需要定义模块的输入和输出端口: ```verilog module RAM_8x1024( input clk, input rd_en, input wr_en, input [9:0] addr, input [7:0] data_in, output reg [7:0] data_out ); ``` 这里我们定义了输入端口 clk、rd_en、wr_en、addr、data_in,以及输出端口 data_out。 接着,我们需要定义一个 8×1024 的 RAM 数组: ```verilog reg [7:0] ram [0:1023]; ``` 这个数组包含了 1024 个 8 位元素,相当于一个 8×1024 的 RAM。 然后,我们需要在时钟上升沿时执行读写操作。具体来说,当 rd_en 为高电平时,我们从 RAM 中读取数据;当 wr_en 为高电平时,我们向 RAM 中写入数据。 ```verilog always @(posedge clk) begin if (rd_en) begin data_out <= ram[addr]; end if (wr_en) begin ram[addr] <= data_in; end end ``` 最后,我们需要将模块的输入输出端口与 RAM 数组连接起来: ```verilog assign data_out = rd_en ? ram[addr] : 8'bZZ; ``` 这里我们使用了一个三目运算符,当 rd_en 为高电平时,将 RAM 中的数据赋值给 data_out;否则,将 data_out 赋值为 "ZZ",表示输出未确定。 完整的 Verilog HDL 代码如下: ```verilog module RAM_8x1024( input clk, input rd_en, input wr_en, input [9:0] addr, input [7:0] data_in, output reg [7:0] data_out ); reg [7:0] ram [0:1023]; always @(posedge clk) begin if (rd_en) begin data_out <= ram[addr]; end if (wr_en) begin ram[addr] <= data_in; end end assign data_out = rd_en ? ram[addr] : 8'bZZ; endmodule ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值