同异步转换的双端双通道FIFO
技术领域
本发明涉及自动检测控制技术领域,涉及数据采集与处理的电子信息技术,具体涉及一种同异步转换的双端双通道FIFO。
背景技术
目前,在自动检测方面数据采集与处理的性能要求越来越高,需要高速的数据采集频率和数据采集位数,直接带来了数据量的成倍数增长,不但数据的处理能力需要不断提高,而且与之相应的数据传输的速度和方式也需要进一步改进,提高数据传输速率使其不至于是高精度与高速度的数据采集与处理的瓶颈。
对于数据采集装置或数据采集设备而言,设备的构成方式一般有三种。一是便携式测量装置,其集数据采集、数据处理、分析和结果输出、显示于一体,在测量过程中不需要数据传输,但其功能比较有限。第二种是数据采集处理分离的测试设备,其中包含数据采集部分和数据分析部分,一般由计算机构成数据分析部分,数据采集部分直接把采集到的数据通过某种接口实时的发送给处理终端——计算机,系统要求数据传输速度要快、可靠性要高,接口形式要方便可靠。三是智能数据采集系统,由数据采集部分和控制分析部分组成,数据采集部分除了能够完成数据采集工作以外,还能够进行一系列的数据分析和工作模式调整;控制分析部分主要由计算机构成,实时接收下位机即数据采集部分的实时采集数据和分析结果,还可以根据用户需要发送控制指令和系统参数,这样的数据采集系统对数据通信要求更高,不仅需要高速的数据接收通道还需要相应的数据发送通道,即双向高速数据通道并存,并协调工作。
在这样性能通信要求下,数据采集设备往往使用USB2.0以上的通信接口标准和接口形式,USB2.0有高速数据通信模式,理论数据传输能力480Mb/s,而在这种工作模式下,其与设备相接的总线往往要使用同步工作模式才能达到比较的数据传输速率。另外对于数据采集与数据处理于一身的数据采集终端,其MPU一般多使用高性能的DSP芯片或ARM芯片构成,而且一般为多任务系统,工作在多线程模式下,这就需要在USB接口与DSP之间构建一个能够进行数据缓冲的FIFO存储单元进行协调。
发明内容
针对于使用高性能的数据处理芯片构成的嵌入式数据采集装置,本发明提供一种同异步转换的双端双通道FIFO,该双端双通道FIFO采用FPGA构造,其能够有效实现USB2.0接口的同步数据读写和高速MPU的数据异步读写,满足数据处理芯片和通信接口之间进行数据通信协调的需要。
本发明解决其技术问题所采用的技术方案是:在数据处理芯片和通信接口之间连接同异步转换的双端双通道FIFO,同异步转换的双端双通道FIFO包括上下行FIFO存储单元、控制数据读写及状态标志生成的逻辑单元、总线管理单元和总线仲裁单元,上下行FIFO存储单元、控制数据读写及状态标志生成的逻辑单元通过同步端的总线管理单元连接通信接口,上下行FIFO存储单元、控制数据读写及状态标志生成的逻辑单元经总线仲裁单元通过异步端的总线管理单元连接数据处理芯片,上行FIFO与USB的数据端点之间使用同步方式进行数据通信,下行FIFO与数据处理芯片MPU之间使用固定地址异步通信方式。
其中,上下行FIFO用于数据存储与传输,逻辑单元用于控制数据读写及状态标志生成,逻辑单元根据双向FIFO中的数据当前状态和USB端口的状态生成同步端和异步端所需的各个状态标志,同时使用安全岛机制约束同步端和异步端对同一FIFO的读写,以保证在没有共同的同步时钟的前提下数据读取的正确性;总线管理单元对两端的数据总线的使用方向以及输出状态进行管理,以满足共享数据总线的需要;总线仲裁单元根据当前的异步端口送出的地址信息进行数据总线信号的读写目标的管理,以协调FPGA芯片中构建的各种功能单元的数据读写和总线的共享。
本发明的技术解决方案的原理是:
(1)FPGA上构建的FIFO与USB的数据端点之间使用同步方式进行数据通信,并且为16总线宽度,通信过程中受同步脉冲控制;在同步脉冲的上升沿进行读写触发,在USB输出端点不为空时且FPGA上构建的下行通道FIFO不为满时,FPGA控制选通USB的输出端点进行读使能,在同步脉冲的触发下将读出的16位数据写入FPGA上构建的下行通道FIFO;若USB输出端点为空则FPGA控制选通USB的输入端点,同时在USB的输入端点不为满的情况且FPGA上构建的上行通道FIFO不为空时,FPGA输出USB的写使能,在同步脉冲的触发下,从FPGA上构建的上行通道FIFO读数据16位数据写入USB输入端口;
(2)FPGA上构建的FIFO与MPU之间使用固定地址异步通信方式,数据读写受MPU控制总线的数据读写信号控制;数据读写过程中MPU的地址总线送读地址或写地址,其中读或写的地址各自为某一固定地址即端口地址,分别代表FPGA中构建的上下行FIFO通道,其占用地址空间小,且适用于DMA方式,使用方式灵活;MPU进行数据写时先判断FIFO的通道状态,如上行通道FIFO不为满通过地址总线送出相应上行通道FIFO的端口地址,数据总线送出数据在MPU写控制信号有效时写入FPGA上构建的上行通道FIFO;MCU读FIFO的方式与写方式稍有不同,因为下行数量和使用频率都不是很高所以采用中断方式,使用下行通道FIFO的满标志作为MPU的一个中断源,当下行通道FIFO被写满时发出中断请求,告诉MPU有指令或参数需要读取,MPU在总线允许的情况下响应中断读取数据;
(3)各通道的FIFO的长度不同,下行通道FIFO设置成一个USB数据包长256字、每字16位,用于接收命令和参数,上行通道根据FPGA型号即内部资源情况尽可能的设置大一些,有助于提高速率,用于实时数据的发送;
(4)数据有效性控制,使用块传送方式结合安全岛结构实现,也就是MPU在进行数据读写时要求是以整USB数据包的形式读写,在上行通道的FIFO中,对数据读写进行安全控制使其写入地址控制在MPU将要读的地址(FIFO的内部地址)前一个USB包外,从而可以避免读速度不匹配的情况下出现首尾字数据错误的现象。
本发明的有益效果是:1、MPU的读写使用完全的异步模式,与USB的同步模式完全隔离;2、上先行数据传输拥有独立FIFO通道,数据传输互不干扰;3、USB和MPU可以同时操作同一通道和不同通道,有助于系统传输速度的提高和协同工作。
附图说明
图1是本发明的结构框图。
图2是图1的同步端读写状态图。
图3是图1的异步端读写状态图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
图1是本发明的结构框图,在FPGA中通过编程实现如图1所示的同异步转换的双端双通道FIFO;其中含有用于数据存储与传输的上下行FIFO,用于控制数据读写及状态标志生成的逻辑单元,逻辑单元根据双向FIFO中的数据当前状态和USB端口在状态生成同步端和异步端所需的各个状态标志,同时使用安全岛机制约束同步端和异步端对同一FIFO的读写,以保证在没有共同的同步时钟的前提下数据读取的正确性;总线管理单元对两端的数据总线的使用方向以及输出状态进行管理,以满足共享数据总线的需要;总线仲裁单元根据当前的异步端口送出的地址信息进行数据总线信号的读写目标的管理,以协调FPGA芯片中构建的各种功能单元的数据读写和总线的共享。
图2是本发明的同步端读写状态图,其表示本发明的功能电路的同步端工作状态关系;当系统启动后,根据USB接口芯片输出的端口状态OUT_EMPTY和IN_FULL以及内部状态状态标志FIFO_RDE进行工作状态转换,OUT_EMPTY代表USB的输出端口的空标志,IN_FULL为USB的输入端口的满标志,FIFO_RDE为本发明的上行FIFO的读允许标志,系统中各标志都为低电平有效;系统启动后进入状态1,检查OUT_EMPTY、IN_FULL和FIFO_RDE等状态标志,如OUT_EMPTY=1,即USB有数据送出,进入工作状态2,在IFCLK的同步作用下将USB输出端口的数据写入本发明的下行FIFO中;若OUT_EMPTY=0,即USB数据被读空,转入工作状态3,判断IN FULL和FIFO_RDE的状态,若N_FULL=1,即USB输入端口不为满,FIFO_RDE=0,本发明上行FIFO可读,则进入工作状态4,在同步信号IFCLK的同步下将上行FIFO的数据写入USB的输入端口;如该两状态标志之一不满足要求即停止数据传输,在N_FULL=0或者FIFO_RDE=1的前提下进入空闲状态1,或根据USB的输入端口的需求OUT_EMPTY=1进入状态2进行下行数据传输;同样如果在状态1时如没有下行数据需求OUT_EMPTY=0,可以根据上行数据需求N_FULL=1,FIFO_RDE=0进入上行数据传输工作状态4。
图3是本发明的异步端读写状态图,异步端口进行FIFO的数据读写时,在空闲状态1根据上下行状态标志进行数据的读写工作;下行数据的读可以使用中断方式也可以使用查询方式,即可以使用DOWN_FULL作为中断标志,也可以使用DOWN_FULL和DOWN_EMPTY作为查询标志;在DOWN_FULL=0时开始下行通道的数据读操作,数据读完返回空闲状态1,同时在空闲状态根据UP_STATUS的状态和系统数据输出的需求启动上行FIFO的写入操作。