10.3  利用FPGA实现USB 2.0通信接口

10.3.1  USB 2.0接口的实现方式

利用FPGA来实现USB 2.0接口的方式一般有两种,一是借助外围的USB接口芯片,二是FPGA内部实现USB协议控制器,外部通过USB的PHY芯片来实现接口。

对于第一种方式,FPGA不需要实现USB通信协议,开发的风险小,而且性能稳定,因此被大部分设计者所采用。而第二种方式需要购买USB的IP核,门槛较高。如果自己开发基于FPGA的USB协议栈,风险高,而且兼容性和稳定性很难保证。

目前市场上的USB 2.0接口芯片厂家和型号比较多,其中Cypress Semiconductor公司的EZ-USB FX2(CY7C68013)是世界上第一款集成USB 2.0的微处理器,它集成了USB 2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。

FX2这种独创性结构可使数据传输率达到56MByte/s,即USB 2.0允许的最大带宽。在FX2中,智能SIE可以硬件处理许多USB 1.1和USB 2.0协议,从而减少了开发时间、确保了USB的兼容性。

GPIF(General Programmable Interface)和主/从端点FIFO(8位或16位数据总线)为ATA、UTOPIA、EPP、PCMCIA和DSP等提供了简单和无缝连接接口。

CY7C68013结构图如图10.4所示。FPGA与CY7C68013的电路连接关系可以参考本书2.2.11小节的内容。

图10.4  CY7C68013 FX2结构示意图

10.3.2  FX2接口芯片的Slave FIFO传输模式

当FPGA与FX2芯片相连时,只需要利用FX2作为一个USB 2.0数据通道来实现与主机的高速通信。FPGA能够提供满足Slave FIFO要求的传输时序,可以作为Slave FIFO主控制器。`

Slave FIFO传输的示意图如图10.5所示。

图10.5  Slave FIFO传输的示意图

在这种方式下,FX2内嵌的8051固件的功能只是配置Slave FIFO相关的寄存器以及控制FX2何时工作在Slave FIFO模式下。一旦8051固件将相关的寄存器配置完毕,且使自身工作在Slave FIFO模式下后,FPGA就可按照Slave FIFO的传输时序,高速与主机进行通信,而在通信过程中不需要8051固件的参与。

在Slave FIFO方式下,FPGA与FX2的连接信号图如图10.6所示。

下面是信号线的说明。

IFCLK:FX2输出的时钟,可作为通信的同步时钟。

FLAGA、FLAGB、FLAGC、FLAGD:FX2输出的FIFO状态信息,如满、空等。

SLCS:FIFO的片选信号,外部逻辑控制,当SLCS输出高时,不可进行数据传输。

SLOE:FIFO输出使能,外部逻辑控制,当SLOE无效时,数据线不输出有效数据。

SLRD:FIFO读信号,外部逻辑控制,同步读时,FIFO指针在SLRD有效时的每个IFCLK的上升沿递增,异步读时,FIFO读指针在SLRD的每个有效至无效的跳变沿时递增。

SLWR:FIFO写信号,外部逻辑控制,同步写时,在SLWR有效时的每个IFCLK的上升沿时数据被写入,FIFO指针递增,异步写时,在SLWR的每个有效至无效的跳变沿时数据被写入,FIFO写指针递增。

PKTEND:包结束信号,外部逻辑控制,在正常情况下,外部逻辑向FX2的FIFO中写数,当写入FIFO端点的字节数等于FX2固件设定的包大小时,数据将自动被打成一包进行传输,但有时外部逻辑可能需要传输一个字节数小于FX2固件设定的包大小的包,这时,它只需在写入一定数目的字节后,声明此信号,此时FX2硬件不管外部逻辑写入了多少字节,都自动将之打成一包进行传输。

FD[15:0]:数据线。

FIFOADR[1:0]:选择4个FIFO端点的地址线,外部逻辑控制。

10.3.3  Slave FIFO模式的典型操作时序

1.同步Slave FIFO写操作

同步Slave FIFO写的标准连接图如图10.7所示。

同步Slave FIFO写的标准时序如下。

·  IDLE:当写事件发生时,进状态1。

·  状态1:使FIFOADR[1:0]指向IN FIFO,进状态2。

·  状态2:如FIFO满,在当前状态等待,否则进状态3。

·  状态3:驱动数据到数据线上,使SLWR有效,持续一个IFCLK周期,进状态4。

·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。

状态跳转示意图如图10.8所示。

图10.7  同步Slave FIFO写的标准连接图    图10.8  同步Slave FIFO写的标准时序

假定FX2设定包大小为512字节,当FPGA向FIFO端点中写入的数据达512字节时,FX2硬件自动将已写入的512字节打成一包准备进行传输。这个动作就和在普通传输中,FX2固件向FIFO端点中写入512字节后,把512这个数写入EPxBC中一样,只不过这个过程是由硬件自动完成的。在这里可以看出“FX2固件不参与数据传输过程”的含义了。外部逻辑只需按上面的时序图所示的时序向FIFO端点中一个一个字节(或字)地写数,写到一定数量,FX2硬件自动将数据打包传输,这一切均不需固件的参与,由此实现高速数据传输。

2.同步Slave FIFO读操作

同步Slave FIFO读的标准连接图如图10.9所示。

同步Slave FIFO读的标准时序如下。

·  IDLE:当读事件发生时,进状态1。

·  状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2。

·  状态2:使SLOE有效,如FIFO空,在当前状态等待,否则进状态3,

·  状态3:从数据线上读数,使SLRD有效,持续一个IFCLK周期,以递增FIFO读指针,进状态4。

·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。

状态跳转示意图如图10.10所示。

3.异步Slave FIFO写操作

异步Slave FIFO写的标准连接图如图10.11所示。

图10.10  同步Slave FIFO读状态跳转示意图     图10.11  异步Slave FIFO写的标准连接图

异步Slave FIFO写的标准时序如下。

·  IDLE:当写事件发生时,进状态1。

·  状态1:使FIFOADR[1:0]指向IN FIFO,进状态2。

·  状态2:如FIFO满,在当前状态等待,否则进状态3。

·  状态3:驱动数据到数据线上,使SLWR有效,再无效,以使FIFO写指针递增,进状态4。

·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。

状态跳转示意图如图10.12所示。

4.异步Slave FIFO读操作

异步Slave FIFO读的标准连接如图10.13所示。

图10.12  异步Slave FIFO写状态跳转示意图         图10.13  异步Slave FIFO读的标准连接图

异步Slave FIFO读的标准时序如下。

·  IDLE:当读事件发生时,进状态1。

·  状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2。

·  状态2:如FIFO空,在当前状态等待,否则进状态3。

·  状态3:使SLOE有效,使SLRD有效,从数据线上读数,再使SLRD无效,以递增FIFO读指针,再使SLOE无效,进状态4。

·  状态4:如需传输更多的数,进状态2,否则进状态IDLE。

状态跳转示意图如图10.14所示。

10.3.4  FX2的固件程序设计

在FX2芯片的固件程序设计中,最关键的就是系统初始化函数TD_Init(void),下面讲解这个函数的部分代码。

//时钟设置

CPUCS = 0x12;        // 48MHz CLKOUT 输出使能

IFCONFIG =0x43;      // 使用外部时钟,IFCLK输入不反向

SYNCDELAY;           // 同步延迟

EP2CFG=0xA0;         // 需要设定为4缓冲,每个缓冲区大小为512字节

SYNCDELAY;

EP4CFG=0x00;

SYNCDELAY;

EP6CFG=0xE0;

SYNCDELAY;

EP8CFG=0x00;

SYNCDELAY;

FIFORESET = 0x80;   // 激活 NAK-ALL 避免竞争

SYNCDELAY;

FIFORESET = 0x02;   // 复位 FIFO 2

SYNCDELAY;

FIFORESET = 0x06;   // 复位 FIFO 6

SYNCDELAY;

FIFORESET = 0x00;   // 取消激活 NAK-ALL

SYNCDELAY;

PINFLAGSAB = 0xE6;  // FLAGA 设定为 EP6PF, FLAGB 设定为 EP6FF

SYNCDELAY;

PINFLAGSCD = 0xf8;  // FLAGC 设定为 EP2EF, FLAGD 保留

SYNCDELAY;

PORTACFG |=  0x00;  // SLCS有效

SYNCDELAY;

FIFOPINPOLAR = 0x00; // 所有信号低电平有效

SYNCDELAY;

10.3.5  USB 2.0接口的典型应用

由于USB 2.0接口的数据传输速度快,而且使用方便,因此被广泛应用于各种便携设备中。例如,基于USB 2.0接口的数据采集终端,可以将各种类型的数据采集到电脑主机中进行处理和结果显示,其典型的结构如图10.15所示。

图10.15  基于USB 2.0接口的数据采集终端结构框图

利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口相关推荐

  1. c语言转fpga原理,要想玩转FPGA,就必须理解FPGA内部的工作原理-可编程逻辑-与非网...

    FPGA(Field-Program mable Gate Array),即现场可编程门阵列,它是在 PAL.GAL.CPLD 等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领 ...

  2. FPGA 的基本结构(RAM/FPGA/SOC)

    FPGA 的基本结构 FPGA 可编程的特性决定了其实现数字逻辑的结构不能像专用 ASIC 那样通过固定的逻辑门电路来完成,而只能采用一种可以重复配置的结构来实现, 而查找表(LUT)可以很好地满足这 ...

  3. 【LabVIEW FPGA图形化】IP集成节点:USB通信

    目录 一.前情提要 二.FPGA蔡氏定律 三.USB外围电路 四.LabVIEW FPGA IP集成节点网表文件的编写 五.FPGA图形化程序编写 总结 一.前情提要 上一节内容介绍了图形化FPGA测 ...

  4. FPGA零基础学习:在FPGA中,同步信号、异步信号和亚稳态的理解

    FPGA零基础学习:在FPGA中,同步信号.异步信号和亚稳态的理解 叁芯智能科技-郝旭帅团队打造"FPGA 设计与研发"学习系列, 可以让设计者从"小白"到&q ...

  5. 基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs

    Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs 最近arXiv上挂出来一篇文章, ...

  6. FPGA之道(18)FPGA设计的编译过程

    文章目录 前言 FPGA设计的实现过程 编译概述 编译流程之综合 综合的输入 HDL代码 综合设置 综合的输出 综合的工具 编译流程之翻译融合 翻译融合的输入 翻译融合的输出 翻译融合工具 编译流程之 ...

  7. FPGA之道(17)FPGA设计的时序分析

    文章目录 前言 FPGA设计的时序分析 一.时序分析的概念和必要性. 二.时序分析的分类 三.时序分析工具介绍. 四.时序约束与时序分析的关系. 五.时序分析的好处与隐患. 六.时序分析环节的输出. ...

  8. FPGA之道(13)FPGA芯片的应用模式

    前言 所谓的FPGA的应用模式就是配置方式的组合,在实际的项目开发中,我们可以在调试阶段通过JTAG配置模式进行配置,在成熟阶段,可以通过主动配置模式进行配置,而主动配置模式就是所谓的将bit流文件固 ...

  9. FPGA之道(12)FPGA芯片的配置方式

    文章目录 前言 FPGA芯片的配置方法 主动配置模式 被动配置模式 JTAG配置模式 前言 Xilinx公司FPGA芯片的配置方法在调试阶段可以通过JTAG的方式将bit流文件烧写(编程)进FPGA芯 ...

最新文章

  1. [BUUCTF-pwn]——picoctf_2018_leak_me(内涵peak小知识)
  2. 关于OAuth2.0 Authorization Code+PKCE flow在原生客户端(Native App)下集成的思考
  3. ARMA模型的性质之ARMA模型
  4. 请领导批阅文件怎么说_请领导吃饭,不要对外说,职场员工为何如此保密?
  5. javascript本地,宿主,内置对象
  6. TCP、UDP绑定同一端口通信的解释-转
  7. 失败的信息化案例分享
  8. 给程序员的建议(转自李开复)
  9. Win8 开发者训练营第一天的过程,感受和收获
  10. Haxdoors of the Kaspersky Antivirus 6/7
  11. python中raise stoplteration_Python 中的异常处理
  12. [破解]Shark恒破解基础教程笔记
  13. AD单片机九齐单片机NY8B062D SOP16九齐
  14. How Gradual Typing System Helps Us
  15. Catalan数的分析和应用
  16. python day 07
  17. 舆情监控系统python开源_TiDB 在西山居实时舆情监控系统中的应用
  18. directory index of “/data/“ is forbidden
  19. operator=、operator[]、operator()操作符重载
  20. JavaWeb项目 Web.xml文件详解(启动顺序)

热门文章

  1. wxWidgets:stream流类概述
  2. boost::signals2模块连接扩展槽的示例程序,使用信号的 connect_extended 和 extended_slot_type
  3. boost::flyweight模块实现自定义工厂模式的示例
  4. Boost:宏BOOST_TEST_CSTR_EQ的使用实例
  5. DCMTK:测试VR类的compare()运算符
  6. VTK:小部件之CheckerboardWidget
  7. VTK:可视化之HideAllActors
  8. VTK:PolyData之PointInsideObject2
  9. OpenCV均值漂移meanshift algorithm算法的实例(附完整代码)
  10. OpenCV图像操作的实例(附完整代码)