发明内容
有鉴于此,本发明提供一种实现数据高速分发的装置,以解决上述现有技术的不足。
具体地,所述装置应用在FPGA芯片内部,该装置包括:上游业务模块,第一寄存器、下游业务模块以及数据缓冲模块,其中,上游业务模块通过第一寄存器连接数据缓冲模块的一端,下游业务模块连接数据缓冲模块的另一端,
所述数据缓冲模块包括第二寄存器、第三寄存器、输入控制单元和输出控制单元,其中
输入控制单元用于定期判断第二寄存器是否可用,如果是,则将第一寄存器中的上游业务模块发送的数据传送到第二寄存器中,
输出控制单元用于判断第三寄存器是否为空,如果第三寄存器为空,则输出无效信号,如果第三寄存器非空,则输出有效信号,
其中所述无效信号表示下游业务模块不能从第三寄存器中读取数据,所述有效信号表示下游业务模块可以从第三寄存器中读取数据,
输出控制单元进一步用于在第三寄存器为空的时候将第二寄存器中的所述数据传送到第三寄存器中。
由以上技术方案可见,本发明通过设置数据缓冲模块,方便整个系统的布局布线,提高了芯片的资源利用率。
具体实施方式
针对现有技术中FPGA设计利用FIFO模块实现星形拓扑分发数据所存在的消耗资源多且布局布线压力大等问题,本发明提供了一种实现数据高速分发的装置,应用在FPGA芯片内部。
请参考图1和图2,该装置包括上游业务模块,第一寄存器、下游业务模块以及数据缓冲模块。上游业务模块通过第一寄存器连接数据缓冲模块的一端,下游业务模块连接数据缓冲模块的另一端。具体地,所述数据缓冲模块包括第二寄存器、第三寄存器、输入控制单元以及输出控制单元。在传送数据时,该装置执行如下处理流程:
步骤101,上游业务模块将数据传送到第一寄存器中暂存。
步骤102,数据缓冲模块中的输入控制单元定期判断第二寄存器是否可用,如果是,将第一寄存器中的上游业务模块发送的数据传送到第二寄存器中。
步骤103,输出控制单元判断第三寄存器是否为空,如果是,则将第二寄存器中的所述数据传送到第三寄存器中暂存。
步骤104,输出控制单元进一步判断第三寄存器是否为空,如果第三寄存器为空,则输出无效信号,如果第三寄存器非空,则输出有效信号。其中所述无效信号表示下游业务模块不能从第三寄存器中读取数据,有效信号表示下游业务模块可以从第三寄存器中读取数据。
步骤105,下游业务模块在输出控制单元输出有效信号的时候读取第三寄存器中的所述数据。
上述步骤中,上游业务模块将需要下游业务模块处理的数据传送给数据缓冲模块,具体地,上游业务模块先将所述数据发送到第一寄存器中暂存,与此同时数据缓冲模块中的输入控制单元就会判断第二寄存器是否可用。在FPGA芯片的时序逻辑设计中,每个信号的处理都与时钟息息相关,通常取时钟的边沿去触发预定的程序,所以在实现中所述输入控制单元是依据时钟周期定期判断第二寄存器中的数据是否有效,如果第二寄存器中的数据无效,则意味着第二寄存器可用,其可以存储数据,此时就会将第一寄存器中的数据传送到第二寄存器中暂存。输出控制单元用于判断第三寄存器是否为空,具体地,如果第三寄存器为空,则意味着第三寄存器有存储空间,此时就会将第二寄存器中的数据传送到第三寄存器中暂存,于此同时,输出控制单元在判断第三寄存器非空的时候输出有效信号,以此信号通知下游业务模块可以读取所述数据,而输出控制单元在判断第三寄存器为空的时候输出无效信号,以此信号告知下游业务模块此时没有可供其读取的数据。在一种优选的实施方式中,有效信号可以用高电平表示,无效信号可以用低电平表示。这是因为在硬件实施中,不论第三寄存器是否为空都会有信号输出,如果不设置信号有效类别,则下游业务模块在其可用的时候就会去读取,所以本发明通过设置输出信号类别来告知下游业务模块区分。数据缓冲模块通过所述第三寄存器与下游业务模块通信,下游业务模块可以在其可用的时候从第三寄存器读取数据。
以上描述可以看出,数据缓冲模块对数据的分发处理分为两部分处理,一个是数据信息的传送,一个是对数据信息传送的逻辑控制。具体地,数据信息在传送过程中采用第二寄存器和第三寄存器寄存,是两级寄存,并且两级寄存之间是直接寄存,没有引入运算单元,效率高且节约宝贵的FPGA内部资源。所述对数据信息传送的逻辑控制是根据输入控制单元和输出控制单元对寄存器是否可用的判断来实现,具体地,是判断下级寄存器是否能够接收数据。这样的话,只有所述逻辑控制才消耗LUT资源,数据信息的传送只是消耗了寄存器资源,而且数据信息采用两级寄存,从而避免了对长线资源的消耗。
请参考表1,在各种位宽下数据缓冲模块和FIFO模块消耗的资源的对比表。我们可以看出,在存储转发的数据位宽相同的条件下,数据缓冲模块消耗的只有大量的较为廉价的寄存器资源,而LUT资源的消耗比FIFO模块少得多。另一方面,当数据位宽增加的时候,数据缓冲模块需要扩展数据传输的通道,此时,只需要扩展数据信息使用的寄存器,不需要增加珍贵资源LUT的消耗,而FIFO模块的寄存器资源和LUT资源的消耗都有增加。
表1
请参考图3所示的时序仿真图,依据上述数据缓冲模块的设计思路,在实现中,当第三寄存器中的数据被下游业务模块读取的时候,输出控制模块就会将第二寄存器中的数据传送到第三寄存器中,这两个动作是在同一个时钟周期内完成的。此时,如果没有连续判断单元,输入控制单元会在下个时钟周期才会判断第二寄存器是无效的状态,继而将第一寄存器中的数据传送到第二寄存器,这样就浪费了一个时钟周期,所以在上游业务模块和下游业务模块都全速处理的情况下,数据传输的效率也只能是66%。为了实现数据的高速分发,在一种优选的实施方式中,本发明所述的数据缓冲模块还包括连续判断单元,所述连续判断单元执行步骤105。
步骤105,连续判断单元判断下游业务模块是否能够连续可用,如果是,则触发输入控制单元将第一寄存器中的数据传入第二寄存器。
本步骤中,若连续判断单元判断下游业务模块连续可用,说明下游业务模块可以连续地从第三寄存器中读取数据,进而说明第三寄存器连续为空,此时不需要输入控制单元等到下个周期去判断,而是直接触发输入控制单元将第一寄存器中的数据传入第二寄存器中,这样的话数据就可以连续地从第一寄存器传送到第二寄存器,再到第三寄存器,最后被下游业务模块读取。请参考图4的时序仿真图,通过设置连续判断单元,可以实现数据的连续读写操作,在上游业务模块和下游业务模块都有能力全速处理的情况下,数据传输的效率达到100%,真正实现数据的高速分发。
在FPGA芯片内,有多个下游业务模块,对应地,所述数据缓冲模块中有数量相同输出控制单元,每一个输出控制单元都对应一个下游业务模块。数据缓冲模块作为星形拓扑结构的中心点处理数据,消耗较少的资源就可以实现数据的高速分发。
在一种优选的实施方式中,本发明所述的数据缓冲模块可以参考如图5所示的物理架构图,并且可以定义如表2所示的接口信号。
表2
通过以上描述可以看出,本发明设计数据缓冲模块,有效地提高了芯片的资源利用率,并通过连续判断单元优化了数据缓冲模块的存储转发效率,由66%提高到100%,实现数据高速分发。进一步,将数据缓冲模块作为星形拓扑的中心点,在FPGA中实现星形数据高速分发总线的设计,减少了对长线资源的消耗,放松了芯片整体布局布线的约束。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。