用户工具

站点工具


icore4tfpga_22

这是本文档旧的修订版!


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

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

一、 实验目的与意义

  1. 掌握FIFO IP核的调用及例化方法。
  2. 掌握FIFO存储器的读写时序。
  3. 掌握QuartusII的使用方法。

二、 实验设备及平台

  1. iCore4T 双核心板。点击购买
  2. Blaster(或相同功能)仿真器。点击购买
  3. JLINK(或相同功能)仿真器。
  4. Micro USB线缆。
  5. Keil MDK 开发平台。
  6. Quartus开发平台。
  7. 电脑一台。

三、 实验原理

  • FIFO(First Input First Output)是一种先进先出的存储器。与之前的RAM相比较而言,FIFO存储器没有地址线,操作起来更加的简单,但其缺点就在于,只能顺序读写数据,不能随意指定读写数据的地址单元。根据读写时钟的相同与否,FIFO可分为异步FIFO和同步FIFO两种,本实验讲的是异步FIFO。
  • FIFO的读写时钟在每个时钟上升沿到来时对数据进行操作;读写请求信号为高电平有效,低电平失能。
  • FIFO读写操作的工作原理:在FIFO内部有读写指针,其中,读指针指向下一个将要读取数据的地址,复位时指针指向0地址;写指针指向下一个将要写入数据的地址,服为止指针指向0地址。
  • FIFO的空/满检测是FIFO应用中的一个重要参数,不过在应用过程中,这两项参数不是必须使用的,可以通过控制读写时钟及读写请求信号来避免溢出,即通过人为的控制数据长度避免读写溢出(本实验即使如此)。
  • 根据上面的介绍可知,FIFO的读写操作时序如图22.1所示。

22.1(a)读操作时序 22.1(b)写操作时序

  • 本实验基于ARM+FPGA构架,通过SPI实现ARM与FPGA之间通信,以FIFO作为FPGA内部的数据存储器,实现ARM对数据的读写功能。ARM通过SPI将数据发送到FPGA,FPGA顺序的将数据写入FIFO中,再顺序读出,实现数据的交互,实验流程较为简单,重点是掌握FIFO IP核的调用及时序的描述。

四、 FIFO IP核调用

1.新建一个工程名为pll的工程,然后点击Tool →Megawizard Plug-In Manager,如图22.2所示。 图22.2 2.在下面界面中保持默认,直接Next即可,如图22.3所示。 图22.3 3.在该界面中选择FIFO IP核、芯片类型、硬件描述语言类型及IP核相关文件存储位置,如图22.4所示。 图22.4 4.在该对话框中设置FIFO的位宽、存储深度,并选择同步还是异步FIFO(一般选择异步),如图22.5所示。 图22.5 5.该对话框保持默认直接Next即可,如图22.6所示。 图22.6 6.在此对话框选择空满标志信号及信号的输出方式(一般空信号选择读方向,满标志选择写方向),如图22.7所示。 图22.7 7.选择读请求的模式,一般选择常规模式,如图22.8所示。 图22.8 8.该对话框选择是否禁用“上溢”和“下溢”检测,一般选择禁用,如图22.9所示。 图22.9 9.保持默认值,直接Next即可,如图22.10所示。 图22.10 10.该对话框选择要生成的FIFO相关文件,一般保持默认即可,如图22.11所示 图22.11 11.IP核设置完成后出现下面对话框,点击Yes,否则将无法正常调用FIFO,如图22.12所示。 图22.12

五、 代码讲解

IP核调用只是生成相关的模块文件,在应用中要实现存储、读写功能,还需要对IP核进行实例化操作,FIFO IP核例化代码如下:

//------------------------------------------------//
//spi_fifo
//负责存储SPI通信的数据
//FIFO:先进先出,主要用于缓存数据。
spi_fifo u0(
    .data(receive_byte),
    .wrclk(wrclk),
    .wrreq(wrreq),
    .wrfull(),
 
    .rdclk(rdclk),  
    .rdreq(rdreq),
    .rdempty(),
    .q(data_out)
);

六、 实验步骤及实验结果

图22.13

  1. 将硬件正确连接,如图22.13所示。
  2. 打开putty串口调试工具,打开设备管理器查看对应的端口信息,在putty中打开对应的端口,用于打印串口信息及控制FIFO读写;
  3. 将编写好的FPGA代码进行编译,并下载到开发板中;
  4. 将编写好的ARM代码编译,并下载到开发板中,putty工具中会打印相应的SPI通信相关信息(若想多次测试,查看结果在putty中输入“test”即可);
  5. 观察实验现象及putty终端打印信息——FPGA_LED闪烁,putty终端打印如图22.14所示。

图22.14

七、 拓展实验

1.通过Signaltap观察FIFO读写时序是否和参考时序一致。

icore4tfpga_22.1648782288.txt.gz · 最后更改: 2022/04/01 11:04 由 sean