一种基于FPGA的通信方法以及FPGA控制器和USB适配器与流程

文档序号:15686180发布日期:2018-10-16 21:05阅读:179来源:国知局

本发明涉及通信技术领域,具体涉及一种基于fpga的通信方法以及fpga控制器和usb适配器。



背景技术:

usb(universalserialbus,通用串行总线)是一种通用串行传输总线协议,其具有数据传输效率高、使用方便的优点,usb标准接口已成为现有计算机设备上使用最广泛的接口之一。usb2.0和usb3.0的通信协议已经获得公众认可,并在电子技术领域得到广泛应用。

由于采用usb通信协议进行通信的设备之间通常利用主设备发起而从设备响应的方式完成信息交互,所以,涉及的usb设备一般有主/从设备之分,其中,usb主设备是指具有usb通信功能的上位机、pc、服务器等设备,usb从设备是指具有usb通信功能的u盘、鼠标、打印机等设备。为实现usb主设备与usb从设备的通信功能,需要匹配主设备和从设备之间的通信响应速度,为使两者间达到通信数据收发的同步性能,往往采用通信适配器协调usb主从设备间的通讯过程,现有的通信适配器通常采用通信类芯片集中处理usb通信的底层协议和驱动层协议。由于此类通信芯片需要胜任大数据、快速响应的工作要求,对其性能的过多要求使得此类通信芯片的外围电路复杂且使得通信适配应用成本较高。



技术实现要素:

本发明主要解决的技术问题是如何借助fpga实现主从设备之间usb通信功能。为解决上述问题,本发明提供了一种基于fpga的解决方案,即一种基于fpga的通信方法以及fpga控制器和usb适配器。

一种基于fpga控制器的通信方法,包括以下步骤:fpga通过其fifo模块获取载荷数据,所述载荷数据包括协议头部和读写数据,所述协议头部包括写命令或者问询命令;fpga通过其数据收发模块解析所述载荷数据;fpga通过其状态机判断所述协议头部的命令类型,如果是写命令,则fpga通过其数据收发模块发送相应的读写数据至外部通信设备,如果是问询命令,则fpga通过其数据收发模块发送相应的读写数据至外部通信设备以及接收所述外部通信设备返回的答复数据。

上述实施例提供的通信方法采用了usb协处理机制,采用fpga单独完成驱动层的usb通信过程,使得操作命令以及相关通信数据的读取、解析和发送过程紧密地结合在一起,有效避免了底层usb通信过程与驱动层usb通信过程相互影响的现象,从而增快了数据载荷从usb主设备到usb从设备之间的处理速度。

一种用于通信的fpga控制器,包括:fifo模块、数据收发模块和状态机模块。所述fifo模块用于信号连接usb主设备,该fifo模块用于缓存载荷数据;所述数据收发模块用于通信连接usb从设备,用于解析载荷数据并发送载荷数据中的读写数据;所述状态机模块用于控制所述fifo模块和所述数据收发模块的通信过程。外部通信设备向所述数据收发模块返回答复数据时,该数据收发模块用于接收并封装所述答复数据。

上述实施例提供的fpga控制器采用了fifo模块,以数据暂存的形式缓存载荷数据,使得通信过程不会出现数据积压,甚至通信停滞的现象。另外,该fpga控制器采用了数据收发模块,单独处理数据的解析或封装工作,利于和fifo模块同时间处理载荷数据。此外,状态机模块不承担数据的处理工作,仅用于协调数据通信过程,从而使得fifo模块和数据收发模块在处理数据的过程中能够充分利用自身的功能,提过通信速率的同时增加了带宽。

一种用于通信的usb适配器,包括:usb控制器和fpga控制器。其中,usb控制器用于通信连接usb主设备和fpga控制器,用于执行底层usb协议通信,该fpga控制器用于执行驱动层usb协议通信。

上述实施例提供的usb适配器将usb数据通信过程分成两个阶段,分别为驱动层usb通信和协议层usb通信,一方面协调了usb主、从设备之间的通信响应速度,另一方面提高了硬件的运行速度,从而保证了usb主、从设备之间的数据通信效果。而且,fpga控制器的集成度高、应用成本低,不但利于简化usb适配器的整体电路结构,还利于降低usb适配器的使用成本。

附图说明

图1为实施例一fpga控制器的结构示意图;

图2为载荷数据的结构示意图;

图3为实施例二基于fpga通信方法的流程示意图;

图4为实施例三fpga状态机模块的工作原理示意图。

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。

另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。

本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。

usb协议,通常包括底层协议和驱动层协议,其中在处理底层usb协议时包括数据包(指usb通信数据,即载荷数据)的识别、认证和校验等处理机制,在处理驱动层usb协议时包括数据包的解析、封装和传输等处理机制。

载荷数据,是指能够实现usb通信的数据包,该数据包往往包括usb协议和与usb协议相对应的读写数据,usb协议是判断读写数据格式和类型的主要依据,而与usb协议相对应的读写数据是判断通信内容的主要依据。

fpga,作为一种可编程逻辑器件,其集成度高且逻辑资源丰富,开发起来十分便捷,并且,由于fpga处理速度快,在数字信号处理或硬件算法的实现上具有独到的优势。如果将处理usb协议的过程都在fpga上实现,那么会势必占用较多的fpga片上资源,不利于fpga在处理数字信号时的硬件加速效果。因此,采用一种基于fpga的通信方法以单独处理驱动层usb协议有利于充分发挥fpga的数字信号处理性能。

实施例一、用于通信的fpga控制器,如图1所示。

在本实施例中,usb主设备d1和usb从设备d2之间依次连接有usb控制器101和fpga控制器102,其中,usb控制器101和usb主设备d1之间采用usb通信的方式连接,fpga控制器102和usb从设备d2之间采用usb通信或者io通信的方式连接,usb控制器101和fpga控制器102之间采用总线连接。

在本实施例中,usb控制器101和fpga控制器102构成了usb适配器,前者用于处理底层usb协议,后者用于处理驱动层usb协议,两者之间通信连接并协同工作,大大增强了usb通信时的硬件加速效果。

在本实施例中,usb控制器101具有处理底层usb协议的功能部件,该功能部件可实现对通信数据的识别、认证和校验处理功能,从而合理决定该通信数据的传输形式,如采用usb2.0协议或者usb3.0协议等通信标准完成通信工作。

在本实施例中,fpga控制器102包括fifo模块1021、数据收发模块1023和状态机模块1022。fifo模块1021信号连接于usb主设备(fifo模块1021与usb控制器101总线连接),该fifo模块用于缓存载荷数据。数据收发模块1023通信连接于usb从设备d2,该数据收发模块1023用于解析载荷数据并发送与协议头部相关的读写数据,而且,该数据收发模块1023内有用于收发数据的io控制模块。状态机模块1022通过fifo接口与fifo模块1011连接,其通过状态机接口与数据收发模块1023连接,该状态机模块1022控制fifo模块1021和数据收发模块1023之间的通信过程。

在本实施例中,所述的载荷数据往往以数据包的形式存在,该数据包中存在一些特定含义的数据。见图2,载荷数据a1包括协议头部a11和读写数据a12,协议头部a11包括两种类型的操作命令,写命令a111或者问询命令a112(一个载荷数据的协议头部仅有一种类型的操作命令)。写命令a111用于指导对usb从设备的数据写入过程,因此,该写命令对应的读写数据a12为写入内容。问询命令a112用于指导对usb从设备的答复结果的回传过程,因此,该问询命令a112对应的读写数据a12为查询问题,而与查询问题相对应的答复结果为答复数据。

实施例二、基于fpga的通信方法,如图3所示。

在通信初始,usb主设备d1向usb控制器101发送载荷数据,usb控制器101接收到载荷数据后对其进行校验处理,校验处理包括数据包标志位识别、底层usb协议认证和数据包完整性校验等过程,然后,usb控制器101将已经校验处理的载荷数据发送至fifo模块1021。此后,fpga控制器102将接收该载荷数据并对该数据进行处理。

在本实施例中,提供的通信方法是usb主、从设备之间的部分通信机制,主要实现驱动层usb协议的处理功能,下面将结合图1对该通信方法作出详细说明,该通信方法包括以下步骤:

201,fifo模块1021获取载荷数据。

在usb主设备d1和usb从设备d2在通信初始阶段,usb主设备d1主动向usb从设备d2发送载荷数据,为提高usb从设备d2对载荷数据的响应速度,借助fpga控制器102对该载荷数据进行获取以便对其进行驱动层的处理,获取该载荷数据的过程由fpga控制器102中的状态机模块1022控制fifo模块1021完成。

202,数据收发模块1023解析载荷数据得到协议头部和读写数据。

状态机模块1022读取fifo模块1021中载荷数据并将该载荷数据发送至数据收发模块1023,状态机模块1022控制数据收发模块1023解析该载荷数据并从其中得到协议头部和读写数据。此协议头部包括一种操作命令,为写命令或者问询命令。写命令对应的读写数据为写入内容,问询命令对应的读写数据为查询问题。

203,状态机模块1022判断协议头部是否包括写命令。

对协议头部的标识字符进行识别就可以得到数据载荷对应的操作命令类型,该操作命令为写命令或者问询命令。

204,若协议头部包括写命令时进入此步骤,数据收发模块1023发送所述读写数据至外部通信设备。

状态机模块1022控制数据收发模块1023将读写数据(即写入内容)发送至外部通信设备,该外部通信设备为usb从设备d2。

在步骤204完成后,系统再次进入201至204的步骤。

205,若协议头部不包括写命令时进入此步骤,数据收发模块1023发送所述读写数据至外部通信设备。

状态机模块1022控制数据收发模块1023将读写数据(即查询问题)发送至外部通信设备,该外部通信设备为usb从设备d2。usb从设备不仅接收读写数据,还将根据查询问题返回相对应的答复数据。步骤205完成后,系统进入步骤206。

在本实施例中,由于载荷数据中只有写命令和询问命令的两种命令形式,因此,协议头部不包括写命令的情况即视为协议头部包括问询命令。

206,数据收发模块1023接收并封装答复数据。

数据收发模块1023接收来自usb从设备d2的答复数据,将该答复数据作为读写数据与问询命令相对应的协议头部结合,从而形成新的载荷数据,从而完成答复数据的封装操作。

207,fifo模块1021缓存已封装的答复数据。

状态机1022将步骤206中所述的载荷数据(即已封装的答复数据)写入fifo模块1021以对该载荷数据进行缓存。该步骤的目的是快速转移答复数据并完成后续答复数据的封装工作。

208,fifo模块1021发送已封装的答复数据。

状态机1022控制fifo模块1021将缓存的载荷数据发送至usb控制器101,usb控制器对该载荷数据进行校验并将其发送至usb主设备d1,从而完成答复数据的回传工作。

在另一个实施例中,在一答复数据完成回传工作的过程中,步骤205至步骤208被多次执行,即usb主设备d1在短时间内向usb从设备d2发送多组带有问询命令的载荷数据,此时,fpga控制器102具有同时处理多组载荷数据的功能。这种情形下,数据收发模块1023连续接收多组载荷数据,分别将这些载荷数据进行解析并将各载荷数据的协议头部按照优先级顺序进行一一锁存,然后分别发送各读写数据至usb从设备d2。由于usb从设备d2处理各读写数据的时间不同或者返回各答复数据的优先级顺序不同,使得各答复数据的返回顺序并不遵循各读写数据的发送顺序。此时,数据收发模块1023会主动识别已返回的答复数据的优先级标志,根据优先级标志从锁存单元中获取与之相匹配的协议头部,进而对该答复数据执行步骤206的操作。

实施例三、状态机模块运行流程图,如图4所示。

由于状态机模块1022是fpga控制器102中的控制部件,所以,本实施例将以状态机模块1022的主动控制过程为主线来详细说明fpga控制器对载荷数据的处理过程,包括四个处理步骤,分别为:

301,状态机模块1022进入“空闲”状态。

该状态是状态机模块1022的初始状态,状态机模块1022会识别fifo模块1021中的数据存储状态,该识别方式可以是主动方式也可以是被动方式。

在此状态时,状态机模块1022将控制fifo模块1021使能其写操作,以便随时获取来自usb控制器101的载荷数据。

302,状态机模块1022进入“读fifo”状态。

当fifo模块1021被写入来自usb控制器的载荷数据之后,状态机模块1022判断fifo模块1021为非空,此时,状态机模块1022进入“读fifo”状态。此状态下,状态机模块1022会读取fifo模块1021中的载荷数据并将该载荷数据发送至数据收发模块1023。

在该步骤中,状态机模块1022将载荷数据发送至数据收发模块1023的过程中,载荷数据是以数据流的形式存在,因此,该状态机模块1022将控制数据收发模块1023从该数据流中解析载荷数据以得到协议头部和读写数据,然后,状态机模块1022判断得到的协议头部是否包括写命令或者问询命令。

如果协议头部中包括写命令,则状态机模块1022将失效fifo模块1021的写操作(即fifo写操作未使能),此时,fifo模块1021不再接收数据,此操作的目的是暂时关闭fifo模块1021的数据缓存功能,优先处理已接收的载荷数据,保证数据处理速度,避免接收过多载荷数据所造成的数据拥堵现象。之后,状态机模块1022将控制数据收发模块1023发送解析得到的读写数据(即写入内容)至usb从设备d2。

如果协议头部中包括问询命令,则状态机模块1022将借助锁存器对该协议头部进行锁存以对来自usb从设备的答复数据执行封装操作,且保持fifo模块1021的写使能操作以快速缓存来自usb从设备d2的答复数据。之后,状态机模块1022将控制数据收发模块1023发送解析得到的读写数据(即查询问题)至usb从设备d2。

当状态机模块1022识别到fifo模块1021为空且已全部发送载荷数据至数据收发模块1023时,表明已处理完成或者即将处理完成载荷数据,则状态机模块1022将进入下一个状态。反之,当状态机模块1022识别到fifo模块1021为非空或者未全部发送载荷数据至数据收发模块1023时,表明还未处理完载荷数据,状态机模块1022将持续进入“读fifo”状态。

303,状态机模块1022进入“等待”状态。

由于fifo模块1021为空且已全部发送载荷数据,使得状态机模块1022进入“等待”状态。此状态下,状态机模块1022判断fifo模块1021的写操作状态,如果写操作失效,表明usb从设备d2无答复数据,则状态机模块1022进入步骤301中的“空闲”状态。如果fifo模块1021的写操作使能,表明usb从设备d2有答复数据,则状态机模块1022会等待usb从设备d2的答复数据,数据收发模块1023收到答复数据或者答复超时时,状态机模块1022将进入下一个状态。

304,状态机模块1022进入“写fifo”状态。

此状态下,状态机模块1022控制数据收发模块1023接收usb从设备d2返回的答复数据(该答复数据在答复超时的情况下为空),并将该答复数据与已锁存的协议头部(该协议头部已被处理,其适应于答复数据的协议形式)结合并封装为新的载荷数据。然后,状态机模块1022将已封装的载荷数据写入fifo模块1021,将该载荷数据写入fifo模块1021中有利于快速释放数据收发模块1023的资源。此后,状态机模块1022将控制fifo模块1021发送该新的载荷数据至usb控制器101。

当状态机模块1022识别到fifo模块为空且已全部发送载荷数据至usb控制器101时,该状态机模块1022将进入步骤301中的“空闲”状态。反之,当状态机模块1022识别到fifo模块为非空或者未全部发送载荷数据至usb控制器101时,该状态机模块1022将持续进入“写fifo”状态。

在本实施例中,usb控制器101接收来自fifo模块1021的载荷数据后,会对该载荷数据进行校验处理,然后将已校验的载荷数据发送至usb主设备d1。

以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1