目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2019-02-27 gingko 初次建立

实验十八:基于单口 RAM 的 ARM+FPGA 数据存取实验

一、 实验目的与意义

  1. 了解单口 RAM 读写的工作原理。
  2. 掌握单口 RAM 使用方法。
  3. 掌握 QuartusII 集成开发环境使用方法。

二、 实验设备及平台

  1. iCore3 双核心板。点击购买
  2. Blaster(或相同功能)仿真器和 USB 线缆。点击购买
  3. Micro USB 线缆。
  4. QuartusII 开发平台。
  5. Keil MDK 开发平台。
  6. 装有 WIN XP(及更高版本)系统的计算机。

三、 实验原理

实验原理图

四、 Quartus 内部单口 RAM 块调用

1、 打开 Tools——MegaWizard Plug-In Manager. 图1 2、 直接点击 Next. 图2 3、 在方框 1、方框 2、方框 3 处如图所示做选择,在方框 4 处选择 RAM 块的路径及命 名,然后点击 Next. 图3 4、接下来是对单口RAM进行设置,如图中所示,设置RAM的存储位宽和存储深度,本实验设置存储宽度16bit,存储深度256个字节。这里可以把RAM想象成一个表格,每行有16个格子,总共256行,这里的每个格子相当于1个bit。然后设置例化RAM在FPGA内部占用资源的类型。因为用逻辑门例化为存储器的话占用逻辑资源较多,因此FPGA内部有专门用于构建存储器用的逻辑单元,如M9K、M144K等。本次实验选择Auto,在设计中可根据实际需求进行设置。之后是时钟的选择,这里选择单时钟,即输入输出使用同一时钟。点击next进行下一项设置。 图4 5、输出信号设置和读使能信号设置。 图5 6、这里选择Old Data。 图6 7、设置RAM初始状态值。可以通过hex文件给例化的RAM存入初始数据。这里选择不存储初始数据,而是通过FPGA控制数据的写入。 图7 8、默认设置,最后点击finish。 图8 图9

五、 代码讲解

//--------------------------fsmc---------------------------//
	wire rd = (CS0 | RD);		 //提取读信号
	wire wr = (CS0 | WR);       //提取写信号
 
	reg wr_clk1,wr_clk2;
	always @(posedge PLL_100M or negedge rst_n)
		begin
			if(!rst_n)
				begin
					wr_clk1 <= 1'd1;
					wr_clk2 <= 1'd1;
				end
			else
				{wr_clk2,wr_clk1} <= {wr_clk1,wr};	//提取写时钟
		end
 
	wire clk = (!wr_clk2 | !rd);
	assign DB = !rd ? DB_OUT : 16'hzzzz;	

六、实验步骤

  1. 把仿真器与 iCore3 的 SWD 调试口连接(直接相连或者通过转换器相连);
  2. 将 USB-Blaster 与 iCore3 的 JTAG 调试口相连;
  3. 将跳线帽插在 USB UART;
  4. 把 iCore3(USB_UART)通过 Micro USB 线与计算机连接,为 iCore3 供电;
  5. 打开 Commix 串口精灵,找到对应的 COM 端口打开;
  6. 打开 Quartus II 开发环境,并打开实验工程;
  7. 烧写 FPGA 程序到 iCore3 上;
  8. 打开 Keil MDK 开发环境,并打开实验工程;
  9. 烧写 ARM 程序到 iCore3 上;
  10. 输入串口命令,观察实验现象。

七、 实验现象