北邮计算机原理实验-存储器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机原理与应用实验
实验名称:存储器实验
学院:信息与通信工程学院
班级:2017211113
姓名:***
学号:**********
同组成员姓名:李凝
同组成员学号:**********
一、实验目的
1. 熟练掌握GPIO 输入输出操作。
2. 掌握存储器原理及应用。
3. 学会根据时序图编写程序。
二、实验原理及内容
(一)实验原理
1. 双端口存储器简介双端口存储器是指同一个存储器具有两组相互独立的读写控制线路,进行并行的独立操作,是一种高速工作的存储器。
2. 双端口存储器
clock: 系统时钟50Mhz,用于提供RAM读写数据;
wraddress: 写数据地址,将数据写入该地址的RAM 存储区内;
data: 写入的数据0~7;
wren: 写使能高电平有效;
rdadress: 读数据地址,将内存中的数据从RAM存储区读出;
(二)实验内容
1. 基础部分(必做实验)
1)基于FPGA设计存储器;
2)C 编语言编程实现ARM 对FPGA 设计的存储器进行读写测试,并送指示灯显示数据;
2. 提高部分(选做实验)
1)基于FPGA 设计双存储器M1、M2;
2)C编语言编程实现ARM对M1、M2储器读写操作,并从M1、M2某个地址单元中读取
数据,将读取的数据进行运算,并将运算结果送到M1某个地址单元保存,再将结果读出送指示灯显示;
三、硬件接线图与软件程序流程图
(一)、硬件接线图
管脚与模块连接
ARM接口
(二)软件程序流程图
四、源程序
(一)C语言程序
#include "stm32f4xx.h"
#include "delay.h"
/*******************************
功能:LED端口初始化
参数:无
返回值:无
*******************************/
#define KEY_READ() GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) // 上按键检测
#define KEY_WRITE() GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_11) // 下按键检测
#define CLK(val) GPIO_WriteBit(GPIOF, GPIO_Pin_6, (BitAction)val) // FPGA 时钟信号
#define WREN(val) GPIO_WriteBit(GPIOF, GPIO_Pin_7, (BitAction)val) // FPGA 读写信号
/*******************************
功能:LED灯读写数据显示
参数:无
返回值:无
*******************************/
void Led_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //开启GPIOB的时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 \
| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Write(GPIOB, 0x0000);
}
/*******************************
功能:拨码开关端口初始化
参数:无
返回值:无
*******************************/
void Sw_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //开启GPIOC的时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
(二)Verilog语言程序(Quartus中)
module double_ram(
clock,
data,
rdaddress,
wraddress,
wren,
q
);
input clock;
input [3:0]data;
input [2:0]rdaddress;
input [2:0]wraddress;
input wren;
output [3:0]q;
wire [3:0]n_rdaddress = {1'b0,rdaddress};
wire [3:0]n_wraddress = {1'b0,wraddress};
ram2 ram2
(
.clock(clock),
.data(data),