| 银杏科技有限公司旗下技术文档发布平台 | 
	
		| 技术支持电话 | 0379-69926675-801 | 
	
		| 技术支持邮件 | Gingko@vip.163.com | 
	
		| 版本 | 日期 | 作者 | 修改内容 | 
	
		| V1.0 | 2020-1-21 | gingko | 初次建立 | 
实验十四:基于ARM+FPGA的FSMC非复用模式通信
一、实验目的与意义
-  了解FSMC的非复用模式及时序 
-  掌握ARM和FPGA基于FSMC非复用模式通信的设计方法 
 
二、实验设备及平台
-  iCore3 双核心板( FPGA型号为EP4CE10F17,ARM型号为STM32F407IGT6) 点击购买- 。 
-  Blaster(或相同功能的)仿真器和USB线缆 点击购买- 。 
-  Micro USB线缆。 
-  QuartusII开发软件(本实验中使用的是13.1版本)。 
 
三、实验原理
-  本次实验是要实现ARM和FPGA在FSMC非复用模式下通信的设计。ARM外设FSMC在连接NOR型FLASH时,可以设置为复用模式和非复用模式,本实验就是在FSMC非复用模式下,实现ARM和FPGA之间的数据传输。                                                           
-  具体实验内容可以设计为,将STM32F407的引脚连接到FPGA,FSMC配置为非复用模式,向FPGA发送和接受数据。本实验为了验证ARM和FPGA之间的数据传输是否正确,在STM32程序中自动生成数据,通过FSMC向FPGA写数据并读回进行对比判断。两组数据相同,说明通信正常,点亮绿色LED;不同,则说明通信异常,点亮红色LED。FPGA例化了RAM,用于缓存ARM发送的数据,并对FSMC的信号进行处理,实现数据的接收。 
-  所以整体思路是ARM将FPGA内的RAM当成NOR FLASH型外挂存储器,将FSMC配置为非复用模式。通过FSMC向RAM中写入自动生成的数据,并和读回数据进行对比,从而验证ARM和FPGA之间基于FSMC的通信。系统框架如下图所示: 
  
  
FSMC的非复用模式
 
四、代码讲解
//-------------------------rd_wr ----------------------------//	
	assign rd = (csn | rdn);
	assign wr = (csn | wrn);
	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}; //提取写时钟,延2拍使取反后的时钟上升沿在数据的稳定期。
		end	
	wire clk = (!wr_clk2 | !rd);//将写和读时钟信号结合作为RAM的驱动时钟。两个信号都是低有效,因此取反。
 
 
五、操作流程和测试结果
1.操作步骤
-  将仿真器和iCore3双核心板连接。 
-  给开发板供电。 
-  将编译成功的FPGA代码和ARM代码分别下载到开发板。 
-  观察现象,亦可通过signalTap查看相关信号,判断时序和逻辑是否有误。 
 
2.实验结果