目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-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、创建IP核,点击next。 图2 3、在弹出界面1存储器列表里选择2双口RAM。3处选择FPGA类型。4处选择输出文件语言类型。5处设置文件存储位置和命名。点击6处next进行下一项设置。 图3 4、设置如下 图4 5、设置存储器深度为256,输出总线宽度16bit,使用FPGA逻辑资源类型选择自动分配。点击next。 图5 6、配置端口时钟和读使能信号。 图6 7、注意红框中不打勾,点击Next, 图7 8、后面几项保持默认设置,直接点击Next,最后点击Finish,双口RAM就构建好了。注意:在存储内容初始化选项设置里选择保持空白,因为本实验是要向双口RAM中写入数据再读出数据并进行对比的操作,不需要在存储器内预装数据。 图8 图9 图10 图11

五、代码讲解

	always @ (posedge a_clk or negedge rst_n)
		begin
			if(!rst_n)
			   begin
					a_wren <= 1'd0;
					a_rden <= 1'd0;
					a_datain <= 10'd0;
					a_addr <= 10'd0;
			   end 
			else if(cnt >= 10'd0 && cnt <=10'd255)
				begin
					a_wren <= 1'd1;           //写使能信号拉高
					a_addr <= cnt;			//写地址
					a_datain <= cnt;			//写入数据
					a_rden <= 1'd0;			//读使能信号拉低
				end 
			else if(cnt >= 10'd256 && cnt <= 10'd511)
				begin
					a_rden <= 1'd1;			//读使能信号拉高
					a_addr <= cnt - 10'd256;	//读地址
					a_wren <= 1'd0;			//写使能信号拉低
				end
		end
//--------------------------ram_b_rd---------------------------//
/*控制ram_b端口的读取功能,当读信号来临时,读取相应的数据发送至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 b_clk = (!wr_clk2 | !rd);		//提取ram_b端口的时钟
    assign DB = !rd ? b_dataout : 16'hzzzz;	//读信号来临,读取ram_b端口数据

六、 实验步骤

  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. 输入串口命令,观察实验现象。

七、 实验现象