2024年fpga usb ip

fpga usb ipUSB 基本知识 概念 USB 是一种通用串行总线 USB 系统 一定是由一个 PC 和外围设备组成 外设称为 USB 设备 PC 为主机 主机里有 USB 主控制器 负责完成主机和 USB 设备之间的物理数据传输 USB 主控制器分为两种 具体哪两种这与 FPGA 开发无关 在此不细说

USB基本知识

 

  1. 概念:USB是一种通用串行总线。

 

  1. USB系统:一定是由一个PC和外围设备组成。外设称为USB设备,PC为主机。主机里有USB主控制器,负责完成主机和USB设备之间的物理数据传输。USB主控制器分为两种,具体哪两种这与FPGA开发无关,在此不细说。USB设备分为集线器和功能设备两种,集线器可以让一个USB端口连接多个设备。功能设备指的是功能性的设备,例如鼠标键盘。

 

  1. USB信号线:一共四根线,两根差分NRZI编码线。两根电源线,电压5V,最大电流100mA,500mA。

 

  1. USB事务处理:主机和USB设备之间的数据传输最基本的单位。它是有特定格式的信息包。主机和USB设备之间的通讯需要多个事务处理包才能完成。

 

  1. USB的传输类型:控制传输、批量传输、中断传输、同步传输。具体如下表。

同时,USB接口和FPGA的通讯大都采用的是68013芯片的FIFO模式。根据FIFO的传输特性,满足大量、速度恒定、有周期性的要求,所以应该是同步传输模式。这种通讯类型等特性的选择可以通过固件配置。

 

  1. USB的描述符:这个东西的定义晦涩难懂,对于FPGAer来说,把它看成了用来定义USB各个性能参数的寄存器。

 

  1. USB的设备请求:大概定义了USB各类请求格式。对于FPGAer而言,依旧不知道它干啥的,应该也不用知道。

 

 

 

CY7C68013芯片

 

  1. 简介:他是第一款支持USB2.0协议的微处理器。支持12Mb/s全速传输(即USB0)和480Mb/s(即USB2.0)高速传输。上文提到的四个传输类型该芯片都支持,但是和FPGA通讯所采用的FIFO模式,是其中的同步传输模式。具体框架如下图:

 

 

大概的接口图如下:

 

  1. 显著特点:

  1. USB单芯片解决方案,集成了USB2.0,串行接口引擎,和增强型51内核。
  2. 可以软件配置RAM(即配置固件),方式多种:USB口下载、E2PROM(有专门的烧写软件)、或者外围的存储(只限于部分封装)。
  3. 可编程GPIF。
  4. 集成的81内核。
  5. 智能串行接口引擎。
  6. 中断矢量
  7. I2C接口
  8. 4个集成的FIFO轻松和外部FPGA/DSP等连接

 

 

  1. FIFO模式

该模式是与FPGA/DSP等芯片连接的一种常见模式。之前版本的USB芯片,微处理器(51内核的)都要参与数据的处理。在速率不高的时候,12Mb/s全速传输模式下没有问题,但是到了480Mb/s的时候,微处理器就成为了瓶颈。

而此版本的68013直接解除了微处理器对数据处理的干预。

68013的通讯类型等特性可以通过固件配置。根据FIFO的传输特性,满足大量、速度恒定、有周期性的要求,所以应该是同步传输模式。

 

最高是96MByte/s。以8bit为例,则传输速率是96Mhz,一共四个FIFO,可以同时工作,所以fifo最高速率是24Mhz。(FPGA和FIFO的通讯同时只能和一个fifo)

 

 

  1. 增强型8051

画重点:外接24Mhz,内部分频,产生480MHZ供USB2.0使用。(疑问:这里的480MH的时钟就是为上文中480Mb/s高速传输模式提供的源吗)

     8051的内存:由下图而知,从下至上主要分为了8K的主RAM(地址0000·1FFF),用于缓存代码和数据,同时这部分的内存可以通过EA角进行外扩内存。(地址E000·E1FF)作为临时RAM,不能跑程序。(地址E400·E47F)用于存储GPIF的波形。(地址E600·E6FF)用于保存控制状态寄存器。(地址E740·E7FF)和(F000-FFFF)都是用于数据缓冲的内存。分别称之为端点0/1/2/4/6/8。 其中端点0和端点1仅能由固件程序访问。2/4/6/8端点是FIFO的空间。

对于FPGA开发者而言,唯一需要了解的是,FIFO模式下读写的数据(端点2/4/6/8)缓存的地方其实就是8051的内存区F000-FFFF。

 

 

  1. IO系统:IO功能分为了三类,第一类就是普通的IO口,第二类就是FIFO模式下的数据读写口,第三类是GPIF接口。

 

 

 

Slave FIFO模式调试(USB设备为FPGA

  • 1.基本要素:虽然基于FX2(68013)芯片的设备可以直接使用FX2的内核8051传输数据,但是大部分环境下,还是将FX2用做USB和外部逻辑芯片(DSP或者ASIC等)的一种连接通道。

USB数据通过可以通过FX2的内置FIFO让数据在主设备(PC)和逻辑设备(FPGA)间传输。

GPIF和slave fifo模式其实都是属于FX2芯片的fifo模式。

对于那些逻辑芯片里没有标准fifo接口的,FX2里面内置的GPIF可以作为主控,在这种模式下(GPIF模式下)我们称之为主fifo模式,FX2本身就是FIFO的主控设备。当FIFO被外部的设备控制时(外部设备主控),例如,和FPGA相连,就是处在Slave FIFO模式。

Slave FIFO模式下,包括了四个FIFO。他们能够工作在16位和8位模式。大概的系统框图如下:

其中硬件配置涉及的部分寄存器如下:

  • 2.引脚:

FX2的复位只能在普通的IO模式下进行,在fifo模式下是不可以进行复位的,所以你看在slave模式下是没有复位信号的。

如果想把芯片配置到SLAVE fifo模式下,需要对IFCONFIG 这个寄存器进行设置,fifo和外部主控的信号连线如下图:

SLOE:FD数据信号是双向的,可以通过SLOE信号线进行选择。低有效。

FIFOADR:选择哪一个FIFO挂到FD总线上。低有效。

SLRD、SLWR:读写信号。分为了同步和异步两种模式。低有效。

FD:总线。可以配置为8bit和16bit模式。8模式下,用的是PORT B。16模式下,用的是PORT B和 PORT D。(PORT的概念可以去FX2手册中找)。上电默认是16位模式。其中,如果改成8位模式的时候,PORT D可以作为普通IO使用。

IFCLK:可以使用内部时候和外部时钟。内部时钟的时候,时钟频率30/48可以选择。外部时钟的时候,5到48MHZ时钟可以调整。上电默认是内部时钟48MHZ。

FLAG(FLAGA, FLAGB, FLAGC, FLAGD):这些信号主要用于监测FIFO状态,具体功能可以配置。FLAGA, FLAGB, and FLAGC 这些都可以工作在indexed和fixed两个模式。FLAGD 只能工作在FIXED模式。

Indexed模式下,flag只能显示所选择的fifo的状态,FLAGA/B/C分别代表“programmable-level” ,full,empty。Fixed模式下,flag显示特定fifo的状态,而无论是否选择了该FIFO。full,empty默认是低有效,也可以用寄存器进行配置。

上电默认是Indexed模式。

FIFOADR:选择哪一个FIFO。

PKTEND:无论设置的数据长度是多少,有效该信号则代表数据传输的结束。一般用于长度比较短的数据。例如,如果通过寄存器设置的数据长度是512byte.当一次传输的数据长度短于512时,由于数据低于设置的长度,一般主控有两个方法让数据发送。一个就是发送虚拟的数据满足最终的长度。或者有效PKTEND脚,这样就能直接写短长度的数据。

SLCS:FIFO选通信号。该信号有效,则所有控制才有效。

 

 

 

3.时序

引脚的控制时序:控制管脚主要是SLOE(输出使能),SLED(读使能),SLWR(写使能),PKTEND(包尾),FIFOADR(FIFO选择)。这里的读写都是以外部的主设备角度讲的。

读时序:SLOE使能FD总线脚。 同步模式,SLRD在时钟上升沿有效,SLRD有效同时FIFO计数加一个。异步模式则在SLRD变化时有效。他们默认都是低有效。

写时序:同步模式,SLWR上升沿有效。默认都是低有效。

 

写案例:

典型写过程(相对于主机):

 

典型读过程(相对于主机):

 

注意:读过程比写过程多了对SLOE信号的使能。

异步时序暂时不做讨论。可以参照官方文档。

 

 

 

调试记录

(读):

(写):

 

Rd和oe的关系:按照官方推荐sloe是需要提前slrd有效的

 

 

主要的参考资料:

1.《USB+FPGA开发文档》(某开发板资料)

2.《FX2开发手册》官方手册

3.《GPIF开发手册》本文中未做参考,有需要的可以看看

 

所有资料均在本人的CSDN的资源页面。

 

知秋君
上一篇 2024-11-12 10:55
下一篇 2024-11-07 14:02

相关推荐