Slave FIFO 使用手册剖析.docx

上传人:b****4 文档编号:4914500 上传时间:2022-12-11 格式:DOCX 页数:31 大小:1.37MB
下载 相关 举报
Slave FIFO 使用手册剖析.docx_第1页
第1页 / 共31页
Slave FIFO 使用手册剖析.docx_第2页
第2页 / 共31页
Slave FIFO 使用手册剖析.docx_第3页
第3页 / 共31页
Slave FIFO 使用手册剖析.docx_第4页
第4页 / 共31页
Slave FIFO 使用手册剖析.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

Slave FIFO 使用手册剖析.docx

《Slave FIFO 使用手册剖析.docx》由会员分享,可在线阅读,更多相关《Slave FIFO 使用手册剖析.docx(31页珍藏版)》请在冰豆网上搜索。

Slave FIFO 使用手册剖析.docx

SlaveFIFO使用手册剖析

 

红色飓风III开发板USB2FPGA

实验指导

 

RedLogic

 

目录

第一章FX2特性介绍……………………………………………………………….3

1.1介绍………………………………………………………………………..3

1.2结构………………………………………………………………………..3

1.3特征………………………………………………………………………..4

第二章SlaveFIFO传输…………………………………………………………….5

2.1概述………………………………………………………………………..5

2.2硬件连接…………………………………………………………………..5

2.3SlaveFIFO的几种传输方式…………………………………………….6

2.3.1同步SlaveFIFO写…………………………………………….6

2.3.2同步SlaveFIFO读…………………………………………….9

2.3.3异步SlaveFIFO写…………………………………………….11

2.3.4异步SlaveFIFO读…………………………………………….12

第三章寄存器设置…………………………………………………………..…….15

3.1IFCONFIG………………………………………………………….……15

3.2PINFLAGSAB/CD………………………………………………….…...16

3.3FIFORESET……………………………………………………….…….17

3.4FIFOPINPOLAR………………………………………………….…….18

3.5EPxCFG………………………………………………………….………18

3.6EPxFIFOCFG……………………………………………………….…..19

3.7EPxAUTOINLENH/L…………………………………………………..20

3.8EPxFIFOPFH/L………………………………………………………....21

3.9INPKTEND……………………………………………………………...22

3.10OUTPKTEND………………………………………………………….22

3.11EPxFIFOIE和EPxFIFOIRQ………………………………………...22

3.12PORTACFG………………………………………………………….....23

3.13EPxFIFOBCHEPxFIFOBCL………………………………………...23

3.14EP24\68FIFOFLAG……………………………………………………24

3.15其它通用寄存器………………………………………………………..25

第四章同步slavefifo测试操作指南……………………………………….…….26

4.1安装软件包……………………………………………………………....26

4.2同步写FIFO测试……………………………………………………….26

4.3同步读FIFO测试……………………………………………………….30

第五章红色飓风II开发板USB2FPGA软件设计…………………….….…….33

5.168013固件程序设计…………………………………………………….33

5.2FPGA源代码设计………………………………………………………35

第六章USB2FPGA硬件原理图…………………………………………..……...37

第七章改板后注意的问题……………………………………………….……..…37

附录1版本历史……………………………………………………………………39

 

一.FX2特性介绍

1.1介绍

CypressSemiconductor公司的EZ-USBFX2是世界上第一款集成USB2.0的微处理器,它集成了USB2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。

FX2这种独创性结构可使数据传输率达到56Mbytes/s,即USB2.0允许的最大带宽。

在FX2中,智能SIE可以硬件处理许多USB1.1和USB2.0协议,从而减少了开发时间和确保了USB的兼容性。

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

1.2结构

CY7C68013结构图如图1所示。

它有三种封装形式:

56SSOP,100TQFP和128TQFP。

1.3特征:

★内嵌480MBit/s的收发器,锁相环PLL,串行接口引擎SIE——集成了整个USB2.0协议的物理层。

★为适应USB2.0的480MBit/s的速率,FIFO端点可配置成2,3,4个缓冲区。

★内嵌可工作在48MHz的增强型8051,它具有以下特征:

-具有256Byte的寄存器空间,两个串口,三个定时器,两个数据指针。

-四个机器周期(工作在48MHz下时为83.3ns)即组成一个指令周期。

-特殊功能寄存器(包括I/O口控制寄存器)可高速访问。

-应用USB向量中断,具有极短的ISR响应时间。

-只用作USB事务管理,控制,不参与数据传输,较好地解决了USB高速模式的带宽问题。

★“软配置”——USB固件可由USB总线下载,片上不需集成ROM。

★拥有四个FIFO接口,可工作在内部或外部时钟下。

端点和FIFO接口的应用使外部逻辑和USB总线可高速连接。

★内嵌通用可编程接口GPIF,它是一个状态机,可充当主控制器,提供外部逻辑和USB总线的“无胶粘贴”。

★一种单片USB2.0外设解决方案,不需要外部的协议物理层,FX2把所有的功能集成在一个芯片上。

 

二、SlaveFIFO传输

2.1概述

当有一个与FX2芯片相连的外部逻辑只需要利用FX2做为一个USB2.0接口而实现与主机的高速通讯,而它本身又能够提供满足SlaveFIFO要求的传输时序,可以做为SlaveFIFO主控制器时,即可考虑用此传输方式。

SlaveFIFO传输的示意图如下:

在这种方式下,FX2内嵌的8051固件的功能只是配置SlaveFIFO相关的寄存器以及控制FX2何时工作在SlaveFIFO模式下。

一旦8051固件将相关的寄存器配置完毕,且使自身工作在SlaveFIFO模式下后,外部逻辑(如FPGA)即可按照SlaveFIFO的传输时序,高速与主机进行通讯,而在通讯过程中不需要8051固件的参与。

2.2硬件连接(标准)

在SlaveFIFO方式下,外部逻辑与FX2的连接信号图如下:

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]:

选择四个FIFO端点的地址线,外部逻辑控制。

2.3SlaveFIFO的几种传输方式

2.3.1同步SlaveFIFO写

同步SlaveFIFO写的标准连接图如下:

同步SlaveFIFO写的标准时序如下:

IDLE:

当写事件发生时,进状态1;

状态1:

使FIFOADR[1:

0]指向INFIFO,进状态2;

状态2:

如FIFO满,在本状态等待,否则进状态3;

状态3:

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

状态4:

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

状态跳转示意图如下:

几种情况的时序图示意如下(FULL,EMPTY,SLWR,PKTEND均假定低有效):

图示FIFO中本来没有数据,外部逻辑写入第一个数据时的情况。

图示假定FX2设定包大小为512字节,外部逻辑向FIFO端点中写入的数据达512字节时的情况。

此时FX2硬件自动将已写入的512字节打成一包准备进行传输,这个动作就和在普通传输中,FX2固件向FIFO端点中写入512字节后,把512这个数写入EPxBC中一样,只不过这个过程是由硬件自动完成的。

在这里可以看出“FX2固件不参与数据传输过程”的含义了。

外部逻辑只须按上面的时序图所示的时序向FIFO端点中一个一个字节(或字)地写数,写到一定数量,FX2硬件自动将数据打包传输,这一切均不需固件的参与,由此实现高速数据传输。

图示的是FIFO端点被写满时的情况。

2.3.2同步SlaveFIFO读:

同步SlaveFIFO读的标准连接图如下:

同步SlaveFIFO读的标准时序如下:

IDLE:

当读事件发生时,进状态1;

状态1:

使FIFOADR[1:

0]指向OUTFIFO,进状态2;

状态2:

使SLOE有效,如FIFO空,在本状态等待,否则进状态3;

状态3:

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

状态4:

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

状态跳转示意图如下:

几种情况的时序图示意如下(FULL,EMPTY,SLRD,SLOE均假定低有效):

图示正常情况时的时序。

图示FIFO被读空时的情况。

2.3.3异步SlaveFIFO写:

异步SlaveFIFO写的标准连接图如下:

异步SlaveFIFO写的标准时序如下:

IDLE:

当写事件发生时,进状态1;

状态1:

使FIFOADR[1:

0]指向INFIFO,进状态2;

状态2:

如FIFO满,在本状态等待,否则进状态3;

状态3:

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

状态4:

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

状态跳转示意图如下:

几种情况的时序图示意如下(FULL,EMPTY,SLWR,PKTEND均假定低有效):

图示FIFO中本来没有数据,外部逻辑写入第一个数据时的情况。

2.3.4异步SlaveFIFO读:

异步SlaveFIFO读的标准连接图如下:

异步SlaveFIFO读的标准时序如下:

IDLE:

当读事件发生时,进状态1;

状态1:

使FIFOADR[1:

0]指向OUTFIFO,进状态2;

状态2:

如FIFO空,在本状态等待,否则进状态3;

状态3:

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

状态4:

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

状态跳转示意图如下:

几种情况的时序图示意如下(FULL,EMPTY,SLRD,SLOE均假定低有效):

图示正常情况时的时序。

 

三、寄存器设置

slavefifo模式下常用寄存器

IFCONFIG

EPxFIFOPFH/L

PINFLAGAB

PORTACFG

PINFLAGCK

INPKTEND

FIFORESET

EPxFLAGIE

FIFOPINPOLAR

EPxFLAGIRQ

EPxCFG

EPxFIFOBCH:

L

EPxFIFOCFG

EPxFLAGS

EPxAUTOINLENH:

L

EPxBUF

3.1IFCONFIG(E601):

接口配置寄存器

IFCLKSRC:

FIFO时钟内部/外部时钟源选择,0外部时钟源,1内部时钟源。

3048MHZ:

如选择内部时钟,30MHz/48MHz频率选择,0IFCLK时钟30M,1IFCLK时钟48M。

IFCLKOE:

IFCLK时钟输出使能,0关闭,1打开。

IFCLKPOL:

IFCLK输出反转使能,0不反转,1反转。

ASYNC:

SlaveFIFO同步/异步工作方式选择,0同步,1异步。

GSTATE:

选择是否将GSTATE[2:

0]在PORTE[2:

0]输出,0关闭,1使能。

IFCFG1:

0:

FX2I/O端口模式选择,也既是上面所说的FX2与外部逻辑传输方式的选择。

00:

I/O方式;01:

reserved;10:

SlaveFIFO方式;11:

GPIF方式。

3.2PINFLAGSAB/CD(E602:

E603):

FLAGx引脚配置寄存器

FLAGA,FLAGB,FLAGC,FLAGD反映FIFO状态选择。

每个脚有编址/固定两种模式:

如设为编址模式,则它们都反映FIFOADR[1:

0]脚当前所指端点的状态,其中,FLAGA反映“可编程极限”,FLAGB反映“满”标志,FLAGC反映“空”标志,FLAGD不存在;如设为固定模式,它们均可任意设置成反映任意端点的任意标志,而不受限于FIFOADR[1:

0]脚当前所指端点的状态。

Slavefifo模式中,用引脚FLAGA~FLAGD来定义用端点FIFO的状态,并可灵活编程来实现FLAGx设置,见表3.2

说明:

1.PF表示FIFO编程状态,EF表示FIFO已空,FF表示FIFO已满

2.0000为索引模式,其它为固定模式

3.3FIFORESET(E604):

端点缓冲区复位寄存器

将FIFO复位到初始状态。

具体过程是,写0x80到此寄存器,NAK所有主机请求;写0x02,0x04,0x06,0x08分别复位各个端点;写0x00,结束复位过程。

一般,在每一次开始进行slaveFIFO或GPIF传输之前,先复位端点,再清空端点,然后即可进行数据传输。

NAKALL-0关闭NAK功能,1用NAK响应主控器请求,例如在复位端点FIFO时,为了保证复位正常,防止主控器请求的干扰,先写入0x80,然后复位端点,最后写入0x00,使能请求响应。

EP3~EP0,1复位对应的端点缓冲区,其中EP3~EP0分别对应端点EP8,EP6,EP4,EP2。

3.4FIFOPINPOLAR(E609):

控制引脚极性设置寄存器

SlaveFIFO引脚极性设置:

0低有效,1高有效。

提示:

PF极性没有提供寄存器设置,为高有效。

3.5EPxCFG(E610:

E615):

端点2,4,6,8配置

VALID-0端点无效,1端点有效

DIR-端点方向,0=OUT方向,1=IN方向,默认端点2,4为IN,端点6,8为OUT

TYPE1,TYPE0-端点类型,见表3.4

SIZE-缓冲区大小(仅端点2和端点),0=512字节,1=1024字节

BUF1,BUF0-端点缓冲区个数(仅端点2和端点6),见表3.5

3.6EPxFIFOCFG(E618:

E61B):

端点FIFO配置寄存器

INFM1:

FIFO状态标志是否提前一个字节有效选择,IN端点满减1,1使能,0非使能。

OEP1:

FIFO状态标志是否提前一个字节有效选择,OUT端点空加1,1使能,0非使能。

AUTOOUT:

在前面,我们说SlaveFIFO方式下的数据传输过程不需要FX2固件的参与,实际上是不确切的,应该说,FX2固件可以不参与数据传输过程,也可以参与。

AUTOOUT即可设置。

如果设置AUTOOUT为1,则就如上面所说的,FX2固件只需要完成初始化工作,真正的数据传输是不需要FX2固件的参与的,具体的说,当FX2从主机收到一包数据时,外部逻辑即可看到FIFO端点缓冲区状态的改变,然后从中取数。

如果设置AUTOOUT为0,则数据传输过程就需要FX2参与了,此时当FX2从主机收到一包数据时,FIFO端点缓冲区状态的改变并不会立刻在端口显现,而是固件先看到FIFO端点状态的改变,此时,FX2固件可以做三件事情:

a.向OUTPKTEND中的SKIP位写0,使FIFO端点状态的改变在端口显现,从而使外部逻辑可以从FIFO端点中读取数据;

b.向OUTPKTEND中的SKIP位写1,丢掉这包数据,这样就相当于主机从来就没有发送这一包数据,外部逻辑当然也不能从FIFO端点中读到这一包数据了;

c.从新编辑这一包数据,设置完全重写整个包的数据,再写EPxBC寄存器,把数据传给外部逻辑。

在FX2复位之后,如果其OUT端点缓冲区内有一包数据未处理,这包数据并不会自动传给外部逻辑。

所以,为保证OUT端点缓冲区内没有未处理数据,在resetFX2后,要清空一下OUT端点缓冲区,具体做法就是向SKIP位写1(OUT端点缓冲区有几个缓冲区就写几次)。

AUTOIN:

AutoIN和AutoOUT有一点不同,在AutoOUT里,包的大小只能是512或1024,而在AutoIN里,包的大小可以任意设定,甚至可以是0字节,这可以通过EPxAUTOINLENTH/L设置。

和AUTOOUT类似,当设置AUTOIN=0时,FX2固件可以传输,丢弃,修改外部逻辑传过来的数据,这通过向INPTKEND寄存器的SKIP写不同的值实现。

ZEROLENIN:

是否允许传输0字节,1使能,0非使能。

WORDWIDE:

8Bit,16Bit选择。

当选择8Bit模式时,PortB将是FD[7:

0];当选择16Bit模式时,PortD将是FD[15:

8],1则为16位,0则为8位。

3.7EPxAUTOINLENH/L(E620:

E627):

端点2,4,6,8AUTOIN长度设置(仅IN端点有效)

设置AUTOIN时自动传输的包大小(注意,不能大于IN端点的缓冲区的大小)。

说明:

PL10仅端点2和6有效

3.8EPxFIFOPFH/L(E630:

E637):

FIFO可编程PF状态长度设置

DECIS-0小于等于门限值PF有效,1大于等于门限值PF有效

PKSTAT-

1.OUT端点FIFO:

门限值为PFC12:

0设置,当FIFO长度小于等于门限值(DECIS=0),或者FIFO长度大于等于门限值(DECIS=1),则PF有效。

2.IN端点FIFO,且PKTSTAT=1:

门限值为PFC9:

0

3.IN端点FIFO,且PKTSTAT=0:

门限值由两部分组成:

PKTS2:

0(数据包)再加上PFC9:

0(当前数据长度)。

解释:

对于OUT包,极限存储在PFC[12:

0]中,在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。

对于IN包,当PKTSTAT=1时,极限存储在两部分:

PKTS[2:

0]存储极限包数(已经交给SIE但未传给主机的包数),PFC[9:

0]存储极限字节数(正在编辑的包里的字节数)。

在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。

3.9INPKTEND(E648):

结束IN传输

SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个IN缓冲区,1表示将跳过一个IN缓冲区

EP3,EP2,EP1,EP0-代替PKTEND引脚功能,软件强行结束IN端点8,6,4,2IN数据传输,传输短包。

3.10OUTPKTEND(E649):

强行结束OUT传输寄存器

SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个OUT缓冲区,1表示将跳过一个OUT缓冲区

EP3,EP2,EP1,EP0-代替EPxBLH.7=1引脚功能,软件强行结束OUT端点8,6,4,2数据传输。

3.11EPxFIFOIE和EPxFIFOIRQ(E652:

E657):

端点FIFO中断(INT4)使能和请求

EDGPF-PF中断触发沿,0上升沿触发,1下降沿触发

PF-1使能端点FIFOPF中断,0非使能

EF-1使能端点FIFOEF中断,0非使能

FF-1使能端点FIFOFF中断,0非使能

PF-0无PF中断,1有PF中断

EF-0无EF中断,1有EF中断

PF-0无FF中断,1有FF中断

3.12PORTACFG:

端口A配置

置1使能端口A复用引脚,虽然SLCS出现在PORTACFG.6的位置上,当IFCFG1:

0=11时,PORTA.7复用为SLCS,FLAGD也出现在PORTA.7引脚上,当PORTACFG.7置位时,PORTA.7复用为FLAGD输出,当PORTACFG.6和PORTACFG.7均为1,则PORTA.7复用为FLAGD。

所以PORTACFG7:

6=01时,PORTA.7复用为SLCS。

3.13EPxFIFOBCHEPxFIFOBCL(E6AB:

E6B2):

端点FIFO计数

当前端点缓冲区中已有的数据数目。

说明:

端点2最大缓冲区计数BC[12:

0],为4096字节。

端点6最大缓冲区计数BC[11:

0],为2048字节。

端点4和8最大缓冲区计数BC[10:

0],为1024字节。

3.14EP24\68FIFOFLAG(SFRAB:

SFRAC)和EPxFIFOFLGS(E6A7:

E6AA):

端点FIFO状态标志寄存器

3.15其它通用寄存器

CPUCS(E600):

PORTCSTB:

128脚或100脚的RD,WR输出使能。

CLKSPD1,CLKSPD0:

CPU频率选择,00:

12MHz(默认);01:

24MHz;10:

48MHz;11:

Reserved。

CLKINV:

CLKOUT反转选择。

CLKOE:

CLKOUT输出使能。

REVCTL(E608):

正常情况下,简单地设置DYN_OUT和ENH_PKT位为1即可。

 

四、同步slavefifo测试操作指南

4.1安装软件包

第一次使用时,首先要安装CYPRESS开发包,安装完毕后,在目录“windows\system32\drivers”中有一个文件ezusb.sys,用驱动程序目录下的ezusb.sys将其代替,两个驱动程序文件的区别是,后者将缓冲区的大小扩展为6M字节,详见驱动代码。

图4.1

4.2同步写FIFO测试

插上开发板后,系统默认采用USB接口供电,PC上安装好下载线,并将下载线与开发板FPGA的JTAG下载口连接好,将FPGA程序下载到配置芯片中或内部flash,打开XILINX的编译软件ISE10.1,“相应目录\SPARTAN6_USB_test\FIFIO_WR\USB_SLAVE_LX16_WR”下的.ise工程项目文件打开,将相应的bit文件或者.mcs文件下

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1