目录

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

实验二十:基于 FIFO 的 ARM+FPGA 数据存取实验

一、 实验目的与意义

  1. 了解 FIFO 读写的工作原理。
  2. 掌握 FIFO 使用方法。
  3. 学习 QuartusII 集成开发环境中FIFO IP核的调用及配置方法。

二、 实验设备及平台

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

三、 实验原理

四、 Quartus 内部 FIFO 模块调用

1、 打开 Tools——MegaWizard Plug-In Manager. 2、 弹出界面里默认选择第一个,创建新的宏功能模块,然后直接点击 Next。如果已经建立了IP核,想要做参数的修改,可以在这一步选择第二个选项。 3、 在Memory Complier下选择FIFO,如下图1所示。在下图中2所示位置选择FPGA类型,在3所示位置选择输出文件的命名,然后点击 Next。 4、接下来如图所示,设置FIFO的存储宽度为16bit,存储深度为256字节,类型设置为异步模式,即读写操作不使用同一个时钟信号。可以在左侧状态显示里看到当前设置的FIFO的控制信号和存储信息,核对无误后点击 Next 。 5、对FIFO进行优化类型的选择,该页面保持默认设置,直接点击 Next。 6、设置控制信号,这里勾选了写满标志位信号。FIFO 就建好了。 7、读取模式设置为预读取模式,即先读取一个数据,当rdreq有效时开始读取第二个数据。存储类型选择Auto,点击Next。 8、优化设置和仿真相关设置,参考下图设置,点击Next。 9、点击Finish,完成FIFO的构建。

五、代码讲解

//--------------------ab_r------------------//		
		reg [15:0]data_in;
		always @ (posedge wr or negedge rst_n)
		begin
			if(!rst_n)
				data_in <= 16'd0;
			else data_in <= db;	//锁存数据
		end 
 
//--------------------wr------------------//	
/*提取写信号*/	
	reg wr1,wr2;
	wire wr = (csn | wrn); 	//提取写信号	
	always @ (posedge pll_150m or negedge rst_n)
		begin
			if(!rst_n)
				begin
					wr1 <= 1'd0;
					wr2 <= 1'd0;
				end 
			else 
				begin
					{wr2,wr1} <= {wr1,wr};
				end 
		end 
 
//--------------------rd------------------//
/*fifo读操作*/
	wire rd = (csn | rdn);	//提取读信号
	assign db = rd ? 16'hzzzz : db_out;

六、 实验步骤

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

七、 实验现象