CN115935875A - 基于FPGA的PCIe通信系统及其通信方法 - Google Patents
基于FPGA的PCIe通信系统及其通信方法 Download PDFInfo
- Publication number
- CN115935875A CN115935875A CN202310027564.3A CN202310027564A CN115935875A CN 115935875 A CN115935875 A CN 115935875A CN 202310027564 A CN202310027564 A CN 202310027564A CN 115935875 A CN115935875 A CN 115935875A
- Authority
- CN
- China
- Prior art keywords
- data
- pcie
- module
- clock domain
- state machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Communication Control (AREA)
Abstract
本公开涉及基于FPGA的PCIe通信系统及其通信方法。所述基于FPGA的PCIe通信系统,通过时钟模块识别当前链路PCIe通信协议版本和数据位宽,输出当前链路PCIe对应时钟速率的系统时钟;数据接收模块接收并同步跨时钟域异步数据为系统时钟域数据,发送系统时钟域数据到数据发送模块和数据加扰/解扰模块;数据加扰/解扰模块对PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,发送到链路训练状态机检测模块;链路训练状态机检测模块检测解扰后的系统时钟域数据,分析链路训练状态机的状态,输出链路训练状态机的状态下的数据报文到数据发送模块;数据发送模块输出经数据位宽处理后的系统时钟域数据和数据报文。实现FPGA两端的PCIe设备正常通信。
Description
技术领域
本发明属于集成电路芯片设计技术领域,特别涉及基于FPGA的PCIe通信系统及其通信方法。
背景技术
高速外围互联组件(peripheral component interconnect express,PCIe)标准是由英特尔公司提出的新一代高速I/O互联技术。PCIe广泛应用于个人电脑、服务器等PCIe设备中。由于高速数据传输的需求日益增大,PCIe协议已经迭代到PCIe5.0,PCIe5.0速度达到了32GT/s,单Lane的数据带宽已经达到了4000MB。
PCIe协议分为事务层(transaction layer),数据链路层(data link layer),物理层(physical layer),数据在事务层发送,经过数据链路层,最后由物理层发送到其他的PCIe设备。两个PCIe设备开始通信时需要先在物理层进行链路训练(即通过初始化PCIe链路的物理层、端口配置信息、发送接收模块以及相关的链路的状态,并了解链路对端的拓扑结构,最终让PCIe链路两端的设备进行数据通信的过程),链路训练完成之后才能进行正常的数据通信。在链路训练的过程中,PCIe设备通过识别发送过来的数据实现LTSSM状态机跳转,LTSSM状态机大部分状态的跳转都通过检测特定的序列的次数实现跳转,只要能检测到特定的序列就能跳转到对应的状态。
但是在FPGA平台的PCIe因为受到FPGA的限制,导致PCIe不能达到协议所规定的时钟速率,导致数据的带宽不能满足协议的要求。此时与其它PCIe设备通信,因为FPGA平台的PCIe时钟速率慢,FPGA平台的PCIe发送一拍数据,与其相连的PCIe设备可能已经采集10次,即同一个数据被采样10次,这会导致LTSSM状态机的状态跳转出现错误,最后导致链路训练不能正常结束。链路训练不能正常进行导致两个PCIe设备不能正常通信。
目前常用的解决该问题的方案是增大数据位宽,数据位宽增大就可以增大数据带宽,但是目前该方法已经不太适用了,首先,PCIe协议在传输的过程中存在协议版本的迭代,协议变化随之而来的就是数据带宽翻倍,翻倍就导致时钟速率也在翻倍,去适配PCIe协议就更难。例如PCIe1.0数据带宽为250MB,数据位宽为8bit时时钟速率为250MHz,数据位宽为16bit时时钟速率为125MHz,数据位宽为32bit时时钟速率为62.5MHz。如果PCIe协议迭代为PCIe2.0数据带宽变为500MB,数据位宽为8bit时时钟速率为500MHz,数据位宽为16bit时时钟速率为250MHz,数据位宽为32bit时时钟速率为125MHz。在PCIe1.0时增大数据位宽可以把时钟速率降低到62.6MHz但是到PCIe2.0只能降低到125MHz。增大数据位宽会带来两个问题,第一数据位宽越大,并行数据之间的EMI干扰更严重,这会导致在数据传输的过程中出现意想不到的问题且不好排查;第二,数据位宽不能一直增大,位宽增大会导致布局布线难度增大、资源紧张,同时协议本身也存在最大数据位宽的限制。PIPE协议支持的最大数据位宽为64bit,所以理论上数据位宽最多只能降低8倍时钟速率。增大位宽可以降低时钟速率,但时钟速率的上限是由当前设计的复杂度以及FPGA性能所决定的,最多8倍的降低时钟速率所能支持的最低时钟速率为62.5MHz,该方法使用必须保证降低的时钟速率大于62.5MHz,但PCIe在FPGA上通常达不到62.5MHz,所以传统方法已经不适用。
其次,数据位宽不能无限增大,数据位宽增大会导致布线资源紧张以及布线难度增大,最大的问题还是并行数据线之间的EMI噪声会导致数据不稳定。最后,数据位宽最大只能增大到64bit,这是因为PIPE协议的限制,目前的PIPE协议最大支持的数据位宽为64bit,所以理论上增大数据位宽最多只能降低8倍的时钟速率。
发明内容
本发明克服了现有技术的不足之一,提供了一种基于FPGA的PCIe通信系统及其通信方法,能够解决FPGA两端的PCIe设备速度不一致所导致的数据带宽不能满足协议要求,FPGA两端的PCIe设备不能够正常通信的问题。
根据本公开的一方面,提出了一种基于FPGA的PCIe通信系统,所述系统包括:时钟模块、数据接收模块、数据发送模块、数据加扰/解扰模块和链路训练状态机检测模块;
其中,所述时钟模块,用于识别当前链路PCIe通信协议版本和数据位宽,输出符合所述当前链路PCIe通信协议版本的时钟速率的系统时钟到所述数据接收模块、数据发送模块、数据加扰/解扰模块和链路训练状态机检测模块;
所述数据接收模块,用于接收跨时钟域异步数据,并将所述跨时钟域异步数据同步为系统时钟域数据,并将同步后的所述系统时钟域数据发送到所述数据发送模块和所述数据加扰/解扰模块;
所述数据加扰/解扰模块,用于对所述同步后的PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,并发送到所述链路训练状态机检测模块;
所述链路训练状态机检测模块,用于检测所述解扰后的系统时钟域数据,根据所述解扰后的系统时钟域数据分析所述链路训练状态机的状态,输出所述链路训练状态机的状态下的数据报文到所述数据发送模块;
所述数据发送模块,用于对同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽进行处理,并输出经过数据位宽处理后的所述系统时钟域数据和所述数据报文。
在一种可能的实现方式中,所述数据加扰/解扰模块还用于将PCIe通信协议3.0及以上版本的所述链路训练状态机检测模块输出的数据报文进行加扰,并将加扰后的所述数据报文输出到所述数据发送模块。
在一种可能的实现方式中,所述时钟模块包括分频电路和数据选择器;
所述分频电路,用于通过内部计数器将输入的参考时钟分频为两个分频时钟;
所述数据选择器,用于识别当前链路PCIe通信协议版本和数据位宽,根据所述当前链路PCIe通信协议版本和数据位宽从所述两个分频时钟中选择输出符合所述当前链路PCIe通信协议版本的时钟速率的系统时钟。
在一种可能的实现方式中,所述跨时钟域异步数据包括:由FPGA平台的PCIe发送到其它PCIe设备的异步数据,及由其它PCIe设备发送到FPGA平台的PCIe的异步数据,其中,所述FPGA平台的PCIe的时钟速率小于其它PCIe设备的时钟速率。
在一种可能的实现方式中,所述数据接收模块包括异步握手电路和异步FIFO电路;
所述异步握手电路,用于将FPGA平台的PCIe发送到其它PCIe设备的异步数据同步为系统时钟域数据;
所述异步FIFO电路,用于将其它PCIe设备发送到FPGA平台的PCIe的异步数据同步为系统时钟域数据。
在一种可能的实现方式中,所述数据加扰/解扰模块包括线性反馈移位寄存器、第一数据选择器、第二数据选择器和加扰/解扰模块;
其中,所述线性反馈移位寄存器,用于对PCIe通信协议3.0及以上版本的链路训练状态机检测模块输出的数据报文进行加扰;
所述第一数据选择器,用于根据所述当前链路PCIe的数据位宽选择对应数据位宽的线性反馈移位寄存器输出;
所述第二数据选择器,用于根据所述当前链路PCIe通信协议版本的时钟速率选择需要加扰的数据报文;
所述加扰/解扰模块,用于将所述对应数据位宽的线性反馈移位寄存器输出数据与所述需要加扰的数据报文进行逻辑运算。
在一种可能的实现方式中,对所述经过线性反馈移位寄存器加扰的数据报文再做一次加扰为对PCIe通信协议3.0及以上版本的系统时钟域数据的解扰。
在一种可能的实现方式中,所述数据发送模块包括数据位宽转换模块、计数器和数据选择器;
其中,所述数据位宽转换模块,用于转换同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽;
所述计数器,用于对系统时钟进行计数,当计数数值达到预设值时产生SKP序列;
所述数据选择器,用于根据优先级依次输出SKP序列、经过数据位宽处理后的系统时钟域数据和链路训练状态机的状态下的数据报文。
在一种可能的实现方式中,所述转换同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽,包括:
检测所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽;
如果所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽小于所述数据发送模块的输出位宽时,缓存所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文后,输出所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文;
如果所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽大于等于所述数据发送模块的输出位宽时,根据输入的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的顺序依次输出所述系统时钟域数据和所述链路训练状态机的状态下的数据报文。
根据本公开的另一方面,提出了一种基于FPGA的PCIe通信方法,所述方法包括:
利用数据接收模块接收FPGA平台的PCIe发送到其它PCIe设备的异步数据或其它PCIe设备发送到FPGA平台的PCIe的异步数据,并将所述异步数据同步为系统时钟域数据;
利用数据加扰/解扰模块对PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,生成所述系统时钟域数据的原始SKP序列;
利用链路训练状态机检测模块对所述原始SKP序列进行检测分析,得到所述链路训练状态机的状态,并生成所述链路训练状态机的状态下的数据报文;
利用数据加扰/解扰模块对PCIe通信协议3.0及以上版本的所述链路训练状态机检测模块输出的数据报文进行加扰;
利用数据发送模块输出经加扰的链路训练状态机检测模块输出的数据报文和系统时钟域数据。
本公开的基于FPGA的PCIe通信系统及其通信方法,所述时钟模块识别当前链路PCIe通信协议版本和数据位宽,输出符合所述当前链路PCIe通信协议版本的时钟速率的系统时钟到所述数据接收模块、数据发送模块、数据加扰/解扰模块和链路训练状态机检测模块;所述数据接收模块接收跨时钟域异步数据,并将所述跨时钟域异步数据同步为系统时钟域数据,并将同步后的所述系统时钟域数据发送到所述数据发送模块和所述数据加扰/解扰模块;数据加扰/解扰模块,用于对所述同步后的PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,并发送到所述链路训练状态机检测模块;链路训练状态机检测模块检测所述解扰后的系统时钟域数据,根据所述解扰后的系统时钟域数据分析所述链路训练状态机的状态,输出所述链路训练状态机的状态下的数据报文到所述数据发送模块;数据发送模块对同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽进行处理,并输出经过数据位宽处理后的所述系统时钟域数据和所述数据报文。能够解决FPGA两端的PCIe设备速度不一致所导致的数据带宽不能满足协议要求,FPGA两端的PCIe设备不能够正常通信的问题。
本发明实施例的其他可选特征和技术效果一部分在下文描述,一部分可通过阅读本文而明白。
附图说明
以下,结合附图来详细说明本发明的实施例,所示出的元件不受附图所显示的比例限制,附图中相同或相似的附图标记表示相同或类似的元件,其中:
图1示出了根据本公开一实施例的基于FPGA的PCIe通信系统的原理框图;
图2示出了根据本公开另一实施例的基于FPGA的PCIe通信系统的原理框图;
图3示出了根据本公开一实施例的时钟模块的原理框图;
图4示出了根据本公开一实施例的数据接收模块的原理框图;
图5示出了根据本公开一实施例的数据加扰/解扰模块的原理框图;
图6示出了根据本公开一实施例的数据发送模块的原理框图;
图7示出了根据本公开一实施例的链路训练状态机检测的原理框图;
图8示出了根据本公开一实施例的基于FPGA的PCIe通信方法流程图;
图9示出了根据本公开一实施例的基于FPGA的PCIe通信系统应用场景示意图;
图10示出了根据本公开一实施例的电子设备的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合具体实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
另外,附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1和图2分别示出了根据本公开一实施例的基于FPGA的PCIe通信系统的原理框图。
PCIe通信系统(PCIe Speed Bridge,PCIe通信桥系统)通过识别FPGA平台PCIe设备和其它高速互联PCIe设备传输的数据报文,可以动态调整系统时钟、数据位宽以动态适配数据传输的带宽要求,能够应用于高速外围互联PCIe设备与FPGA上的PCIe设备完成链路训练,实现FPGA平台的PCIe可以与其它高速互联PCIe设备通信。
如图1和图2所示,该系统可以包括:时钟模块、数据接收模块、数据发送模块、数据加扰/解扰模块和链路训练状态机检测模块(Link Training and Status State Machine,LTSSM状态机)。
其中,时钟模块,用于识别当前链路PCIe通信协议版本和数据位宽,输出符合当前链路PCIe通信协议版本的时钟速率的系统时钟到数据接收模块、数据发送模块、数据加扰/解扰模块和链路训练状态机检测模块。
PCIe通信系统共有两个时钟输入,参考时钟ref_clk,为内部时钟模块分频的参考时钟,MAC层(Media Access Control,媒体介入控制层,数据链路层下层子层)时钟mac_clk,该时钟为FPGA平台PCIe设备MAC层的时钟。
时钟模块主要负责产生内部参考时钟ref_clk和MAC层时钟mac_clk,能够识别当前链路PCIe通信协议版本、数据位宽,输出与当前链路PCIe通信协议版本对应的时钟速率。例如,在PCIe通信系统初始化时,初始化时钟速率为125MHz。PCIe通信系统的时钟可以根据PCIe版本协议、数据位宽动态调整,例如PCIe版本协议为PCIe1.0协议,数据位宽8bit,此时时钟速率为250MHz。但FPGA平台所能达到的最高时钟频率为125MHz,所以该PCIe通信系统的时钟为125MHz,对应的数据位宽为16bit。
图3示出了根据本公开一实施例的时钟模块的原理框图。
在一示例中,如图3所示,时钟模块可以包括分频电路(DIV)和数据选择器(MUX)。
分频电路(DIV),用于通过内部计数器将输入的参考时钟分频为两个分频时钟。
数据选择器(MUX),用于识别当前链路PCIe通信协议版本和数据位宽,根据当前链路PCIe通信协议版本和数据位宽从两个分频时钟中选择输出符合当前链路PCIe通信协议版本的时钟速率的系统时钟。
如图3所示,分频电路DIV在参考时钟ref_clk的触发下,分频电路DIV内部计数器计数,通过计数器分频产生两个分频时钟(例如两个分频时钟可以为ref_clk_62p5m和ref_clk_125m),产生的两个分频时钟输入到数据选择器MUX。
数据选择器MUX通过当前链路PCIe通信协议版本号rate(PIPE(PhysicalInterface for PCI Express,PCIe物理层接口)协议信号)、数据位宽width(当前PIPE有效数据位宽)信号选择符合链路PCIe通信协议版本的时钟速率,并将时钟速率输出到系统时钟sys_clk。例如,如果当前链路PCIe通信协议为PCIe1.0协议,PCIe通信协议版本号rate为2’b00,数据位宽width为2’b01时,数据选择器MUX选择输出分频时钟ref_clk_125m。如果当前链路PCIe通信协议为PCIe1.0协议,PCIe通信协议版本号rate为2’b00,数据位宽width为2’b00,期望输出的时钟速率为250MHz,但该PCIe通信系统所能达到的最大时钟速率为125MHz,则输出时钟速率仍为分频时钟ref_clk_125m,此时需要将数据位宽width由2’b00修改为2’b01,该修改过程可以在数据接收模块完成。通过该时钟模块可以根据当前链路PCIe通信协议版本、数据位宽动态调整,以适应动态适配FPGA平台PCIe与其它PCIe设备之间数据传输的带宽要求。
数据接收模块,用于接收跨时钟域异步数据,并将跨时钟域异步数据同步为系统时钟域数据,并将同步后的系统时钟域数据发送到数据发送模块和所述数据加扰/解扰模块。
其中,跨时钟域异步数据包括:由FPGA平台的PCIe发送到其它PCIe设备的异步数据,及由其它PCIe设备发送到FPGA平台的PCIe的异步数据,FPGA平台的PCIe的时钟速率小于其它PCIe设备的时钟速率。
例如,由于FPGA的限制,FPGA平台的PCIe时钟速率可能只能达到10MHz,甚至更低,FPGA平台的PCIe通过PCIe Speed Bridge系统(PCIe通信系统)到向其它PCIe设备发送数据时存在慢速到快速的跨时钟域问题,可以采用握手协议处理慢速到快速的跨时钟域问题。
而其它PCIe设备通过PCIe Speed Bridge系统向FPGA平台的PCIe发送数据时存在快速到慢速的跨时钟域问题,可以采用异步FIFO缓存数据处理快速到慢速的跨时钟域问题。异步FIFO存在反压机制,当FIFO内部检测到FIFO快满时,产生信用值满信号credit_full以表明FIFO内存即将满,信用值(PCIe协议本身流控机制专用名字,表示FIFO剩余内存大小)不够。
图4示出了根据本公开一实施例的数据接收模块的原理框图。
在一示例中,数据接收模块可以包括异步握手电路和异步FIFO电路。
其中,异步握手电路,用于将FPGA平台的PCIe发送到其它PCIe设备的异步数据同步为系统时钟域数据。如图4所示,异步握手电路处理由FPGA平台的PCIe通过PIPE接口(Physical Interface for PCI Express,PCIe物理层接口)发送到其它PCIe设备的异步数据,例如可以为txdata、txdatak、txdatavalid等信号数据。所有异步信号数据均经过异步握手电路处理,连接到异步握手电路的输入端口mac_txdatai上。异步握手电路的原理(将跨时钟域异步数据同步为系统时钟域数据)为:在系统时钟sys_clk对mac时钟mac_clk三级同步打拍后,通过异或逻辑检测mac时钟mac_clk的上升沿,当检测到mac时钟mac_clk上升沿后,输入端口mac_txdatai在系统时钟sys_clk的驱动下输出到输出端口mac_txdatao。此时,还需要检测当前链路PCIe通信协议版本号rate和数据位宽width,例如上文时钟模块提到的PCIe1.0协议,即rate为2’b00,有效数据位宽width为2’b00,期望的时钟速率应当为250MHz,PCIe通信系统最高时钟速率为125MHz,则此时输出的有效数据位宽width为2’b01。
异步FIFO(Asynchronous FIFO)电路,用于将其它PCIe设备发送到FPGA平台的PCIe的异步数据同步为系统时钟域数据。如图4所示,异步FIFO电路处理其它高速互联PCIe设备发送到FPGA平台的PCIe的异步数据,和异步握手电路一样,需要将异步数据进行同步。具体为,即异步数据都连接到输入端口phy_txdadai上,通过系统时钟sys_clk驱动写,通过mac时钟mac_clk驱动读。同时异步FIFO电路内部判断当前FIFO剩余容量,当剩余容量达到预设值时,产生信用值满信号credit_full,产生到对端PCIe设备响应期间的数据量大小的信用预设值。即通过将异步数据写入异步FIFO进行数据同步处理,能够实现其它PCIe设备发送到FPGA平台的PCIe的,即由慢时钟到快时钟的跨时钟域处理之后异步数据被同步到PCIe通信系统(PCIe Speed Bridge)的时钟域。
数据加扰/解扰模块,用于对同步后的PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,并发送到链路训练状态机检测模块;以及将PCIe通信协议3.0及以上版本的链路训练状态机检测模块输出的数据报文进行加扰,并将加扰后的数据报文输出到所述数据发送模块。
其中,数据加扰/解扰模块主要处理PCIe3.0以上协议数据的解扰工作(该部分逻辑专为3.0及以上协议设计,主要检测控制报文,控制报文在1.0和2.0时不会被加扰,则不需要解扰功能),在PCIe协议3.0及以上版本的协议中会对LTSSM状态机中的序列进行加扰,需要对数据报文进行解扰。
PCIe3.0以上版本的通信协议可以通过LFSR(Linear Feedback Shift Register,线性反馈移位寄存器)对数据报文(系统时钟域数据)加扰。其中,LFSR的多项式为G(X)=X23+X21+X16+X8+X5+X2+1,X为数据报文。
PCIe协议对数据报文的加扰为并行加扰,则解扰逻辑也为并行解扰,其中,经过线性反馈移位寄存器加扰的数据报文再做一次加扰为对PCIe通信协议3.0及以上版本的系统时钟域数据的解扰。线性反馈移位寄存器LFSR识别到当前链路PCIe的LTSSM状态机(LinkTraining and Status State Machine,链路训练状态机)的LTS序列(Light TaskSchedule,分布式任务调度训练序列)中的COM字符时会初始化线性反馈移位寄存器LFSR,根据不同的信道初始化的数据不同。
图5示出了根据本公开一实施例的数据加扰/解扰模块的原理框图。
在一示例中,如图5所示,数据加扰/解扰模块可以包括线性反馈移位寄存器LFSR、第一数据选择器MUX、第二数据选择器MUX和加扰/解扰模块;
其中,线性反馈移位寄存器LFSR,用于对PCIe通信协议3.0及以上版本的链路训练状态机检测模块输出的数据报文进行加扰。因为线性反馈移位寄存器LFSR序列在进行并行数据的加扰时,不同数据位宽的加扰逻辑函数不同,如图5所示,数据加扰/解扰模块内部设置有LFSR_8、LFSR_16、LFSR_32、LFSR_64四组线性反馈移位寄存器可以同时对加PCIe通信协议3.0及以上版本的链路训练状态机检测模块输出的数据报文进行并行加扰工作。
第一数据选择器MUX,用于根据当前链路PCIe的数据位宽with选择对应数据位宽的线性反馈移位寄存器LFSR输出。第二数据选择器MUX,用于根据当前链路PCIe通信协议版本rate的时钟速率选择需要加扰的数据报文(输入数据datai);加扰/解扰模块,用于将对应数据位宽的线性反馈移位寄存器LFSR输出数据与需要加扰的数据报文(输入数据datai)进行逻辑运算,并输出逻辑运算的结果到输出数据datao端口上。
数据发送模块,用于对同步后的系统时钟域数据和链路训练状态机的状态下的数据报文的数据位宽进行处理,并输出经过数据位宽处理后的系统时钟域数据和数据报文。
数据发送模块主要负责发送数据,包括:FPGA平台的PCIe经PCIe通信系统(PCIeSpeed Bridge)发送数据到其它PCIe设备,以及其它PCIe设备经PCIe通信系统(PCIe SpeedBridge)发送数据到FPGA平台的PCIe。
图6示出了根据本公开一实施例的数据发送模块的原理框图。
在一示例中,如图6所示,数据发送模块可以包括数据位宽转换模块、计数器cnt和数据选择器MUX;
其中,数据位宽转换模块,用于转换同步后的系统时钟域数据和链路训练状态机的状态下的数据报文的数据位宽。
在一示例中,该过程可以包括:检测同步后的系统时钟域数据和链路训练状态机的状态下的数据报文的数据位宽;
如果同步后的系统时钟域数据和链路训练状态机的状态下的数据报文的数据位宽小于数据发送模块的输出位宽时,缓存同步后的系统时钟域数据和链路训练状态机的状态下的数据报文后,输出同步后的系统时钟域数据和链路训练状态机的状态下的数据报文;
如果同步后的系统时钟域数据和链路训练状态机的状态下的数据报文的数据位宽大于等于数据发送模块的输出位宽时,根据输入的系统时钟域数据和链路训练状态机的状态下的数据报文的顺序依次输出系统时钟域数据和链路训练状态机的状态下的数据报文。
例如,如图6所示,数据接收模块输出的同步后的系统时钟域数据mac_txdatao,链路训练状态机检测模块(LTSSM状态机)输出的当前链路训练状态机的状态下的数据报文ltssm_out。首先检测系统时钟域数据mac_txdatao和数据报文ltssm_out的数据位宽是否需要转换,如果系统时钟域数据mac_txdatao和数据报文ltssm_out的输入数据位宽in_width小于输出数据位宽out_width,则需要缓存输入的系统时钟域数据mac_txdatao和数据报文ltssm_out,再输出系统时钟域数据mac_txdatao和数据报文ltssm_out。如果系统时钟域数据mac_txdatao和数据报文ltssm_out的输入数据位宽in_width大于等于输出数据位宽out_width,则需要将输入系统时钟域数据mac_txdatao和数据报文ltssm_out按顺序分别输出即可,实现了系统时钟域数据mac_txdatao和数据报文ltssm_out的有效数据位宽的转换。
计数器cnt,用于对系统时钟sys_clk进行计数,当计数数值达到预设值时产生SKP序列。其中,预设值可以为如图6所示的1180,当该计数器cnt等于1180时生成SKP序列,并将该SKP序列输入到数据选择器MUX中。其中,SKP序列是PCIe总线专门用于补偿时钟差异的特殊序列,不传输有效数据信息,用来占位置,例如SKP序列会在PCIe总线上定期插入数据序列中占几个位置,具体占位置大小,不同代的PCIe不同。
数据选择器MUX,用于根据优先级依次输出SKP序列、经过数据位宽处理后的系统时钟域数据和链路训练状态机的状态下的数据报文。位宽转换完成的数据和产生的SKP序列输入到数据选择器MUX中。数据选择器MUX通过优先级判断,当SKP使能信号skp_en拉高时,则SKP序列优先级最高;如果信用值满信号credit_full拉高,则数据报文ltssm_out优先输出;最后mac_clk上升沿检测信号mac_pos(由数据接收模块产生)拉高,则系统时钟域数据mac_txdatao优先输出;最后若没有任何信号拉高,则数据报文ltssm_out(LTSSM状态机检测模块输出数据)优先输出。异步输出信号phy_txdatao经同样的数据位宽转换后直接输出。
通过数据发送模块主动发送SKP序列能够解决由于当前链路的PCIe协议传输时不携带时钟,时钟通过在数据报文(异步数据)内恢复得到,会导致恢复的时钟因为时钟漂移可能会与本地时钟不对齐,PCIe协议通过发送SKP序列解决时钟不对齐的问题,但因为FPGA平台的PCIe本身运行很慢,不能及时发送SKP序列,导致其它PCIe设备可能会出现不对齐的问题。
由于PCIe通信系统(PCIe Speed Bridge)需要同时发送三个数据到其它PCIe设备,分别是FPGA平台PCIe本身需要发送出去的系统时钟域数据mac_txdatao、LTSSM状态机检测模块发送过来的数据报文ltssm_out、内部产生的SKP序列数据,通过数据发送模块对三个数据做优先级的排列,内部产生的SKP序列数据优先级最高(FPGA的PCIe发送的和该模块产生的),流控机制报文优先级次高,FPGA平台PCIe发送过来的系统时钟域数据mac_txdatao优先级次低,LTSSM状态机产生的数据报文ltssm_out优先级最低,这样能够有效的将FPGA平台的PCIe的数据发送到其它PCIe设备上。通过PCIe通信系统(PCIe SpeedBridge)发送其它PCIe设备数据到FPGA平台的PCIe,只需要检查数据的位宽即可。
链路训练状态机检测模块,用于检测解扰后的系统时钟域数据,根据解扰后的系统时钟域数据分析链路训练状态机的状态,输出链路训练状态机的状态下的数据报文到数据发送模块。
其中,链路训练状态机(LTSSM)检测模块主要根据当前检测的LTSSM状态机发送对应的数据报文ltssm_out,以及检测异步FIFO的信用值满信号credit_full,检测到数据报文ltssm_out和信用值满信号credit_full后发送流控机制报文。PCIe协议的LTSSM状态机状态有明确的报文数量以及报文种类,通过检测对应的报文以及对报文进行计数即可实现对LTSSM状态机的检测功能。
图7示出了根据本公开一实施例的链路训练状态机检测的原理框图。
如图7所示,LTSSM状态机检测模块每个状态的功能为:
Polling_Active:在该状态发送TS1、TS2序列,该序列的作用为让其它PCIe设备识别不到连续的TS1序列,即其它PCIe设备LTSSM状态机不会跳转到下一个状态,当该系统接收到FPGA上PCIe发送连续8拍TS1序列时,再将连续的TS1序列发送到其它PCIe设备,同时状态跳变到Polling_Configuration。
Polling_Configuration:该状态发送TS1、TS2序列,发送序列的作用为让其它PCIe设备识别不到连续的TS2序列,即其它PCIe设备需等待FPGA上PCIe设备的LTSSM状态机跳转到对应状态,当检测FPGA上PCIe发送的TS2序列数量和类型符合状态跳变时跳变到Config_LinkWidthStart。
Config_LinkWidthStart:该状态发送TS2序列,因为该状态的正确序列为TS1序列,所以在未检测到FPGA上PCIe发送完整的TS1序列之前发送TS2序列,直到检测到完整的TS1序列,再将完整的TS1序列发送出去,同时状态跳变到Config_LinkWidthAccept。
Config_LinkWidthAccept:该状态发送TS2序列,同时检测其它PCIe设备发送的TS1序列数量和类型,和FPGA上PCIe发送的TS1序列的数量和类型,当两者满足状态跳变的条件的跳转到Config_LanenumWait。
Config_LanenumWait:该状态发送TS1序列,该序列作用仅仅为补充在检测其它PCIe设备发送的连续TS1序列的数量和类型这段时间内的序列,当检测到符合状态切换的连续TS1序列时状态切换到Config_LanenumAccept。
Config_LanenumAccept:该状态发送TS2序列,同时检测其它PCIe设备发送的TS1序列数量和类型,和FPGA上PCIe发送的TS1序列的数量和类型,当两者满足状态跳变的条件的跳转到Config_Complete。
Config_Complete:该状态发送TS1序列,同时检测其它PCIe设备发送的TS2序列数量和类型,和FPGA上PCIe发送的TS2序列的数量和类型,当两者满足状态跳变的条件的跳转到Config_Idle。
Config_Idle:该状态发送TS1序列,同时检测其它PCIe设备发送的空闲序列数量,和FPGA上PCIe发送的空闲序列的数量,当两者满足状态跳变的条件的跳转到L0。
L0状态即PCIe协议正常数据传输的状态,如果不需要切换链路的速度,就可以正常进行数据传输,如果需要切换链路速度,则检测TS1或TS2序列或EIEOS序列、EIOS序列,当检测到符合状态切换的序列,跳转到Recovery_RcvrLock。
同样,剩下的状态均发送TS1或TS2序列,直到检测到符合状态切换的序列。最后链路速度切换完成之后依旧会回到L0状态进行数据传输。
本公开的PCIe通信系统(PCIe Speed Bridge)通过识别FPGA平台PCIe设备和其它高速互联PCIe设备传输的数据报文,可以动态调整系统时钟、数据位宽以动态适配数据传输的带宽要求,该系统在适配带宽的同时可以检测出当前FPGA平台的PCIe的LTSSM状态机的状态,根据检测出的状态产生对应的数据报文,将对应的数据报文发送到其它高速互联PCIe设备,以补充慢速FPGA平台PCIe发送数据报文过慢造成数据被其它高速互联PCIe设备重复采用导致的LTSSM状态机(Link Training and Status State Machine,链路训练状态机)不对齐的问题,能够应用于高速外围互联PCIe设备与FPGA上的PCIe设备完成链路训练,实现慢速FPGA平台PCIe与其它高速互联PCIe设备通信。
下述为本申请方法实施例,可以应用于本申请上述用于PCIe通信系统实施例。对于本申请方法实施例中未披露的细节,请参照本申请系统实施例。
图8示出了根据本公开一实施例的基于FPGA的PCIe通信方法流程图。如图8所示,该方法可以包括:
步骤S1:利用数据接收模块接收FPGA平台的PCIe发送到其它PCIe设备的异步数据或其它PCIe设备发送到FPGA平台的PCIe的异步数据,并将异步数据同步为系统时钟域数据;
步骤S2:利用数据加扰/解扰模块对PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,生成系统时钟域数据的原始SKP序列;
步骤S3:利用链路训练状态机检测模块对原始SKP序列进行检测分析,得到链路训练状态机的状态,并生成链路训练状态机的状态下的数据报文;
步骤S4:利用数据加扰/解扰模块对PCIe通信协议3.0及以上版本的链路训练状态机检测模块输出的数据报文进行加扰;
步骤S4:利用数据发送模块输出经加扰的链路训练状态机检测模块输出的数据报文和系统时钟域数据。
图9示出了根据本公开一实施例的基于FPGA的PCIe通信系统应用场景示意图。
如图9所示,在FPGA平台,PCIe通信系统(PCIe Speed Bridge)左侧通过PIPE接口与PCIe的MAC层连接(endpoint是对PCIe的统称,PCIe可以分为RC、EP、switch),右侧通过PIPE接口与PCIe PHY连接。系统上电时,内部先以默认125MHz时钟工作,当右侧PCIe发送数据报文时,PCIe通信系统(PCIe Speed Bridge)通过PCIe通信协议版本号rate、数据位宽width分析当前链路PCIe协议版本以及有效数据位宽,产生符合当前链路PCIe通信协议版本的系统时钟sys_clk。系统时钟sys_clk作为主时钟,其它模块使用该系统时钟进行工作。
下面以由FPGA平台PCIe数据通过PCIe通信系统(PCIe Speed Bridge)发送到其它PCIe设备的应用场景为例进行基于FPGA的PCIe通信方法说明。
如图9所示,左侧FPGA平台PCIe设备输出数据报文进入PCIe通信系统(PCIe SpeedBridge)后,如图2所示,首先FPGA平台PCIe设备输出数据进入数据接收模块进行跨时钟域数据同步为系统时钟数据,同步之后的数据报文(系统时钟数据)同时输入数据输出模块和加扰/解扰模块。加扰/解扰模块对PCIe通信协议版本号rate进行判断,如果PCIe通信协议版本号rate为3’b010及以上代表当前链路PCIe通信协议版本为PCIe3.0及以上,此时,加扰/解扰模块开始工作,加扰/解扰模块通过syncheader信号(PIPE协议信号,PCIe3.0及以上使用,128/130B编码的同步头,表明控制报文或数据报文)区分控制报文和数据报文,当syncheader信号为2’b01为控制报文,再通过开始块信号start block判断控制信号的起始,检测到控制信号的起始后,加扰/解扰模块识别控制信号COM,即8’hbc时初始化线性反馈移位寄存器LFSR,Lane0的初始值为48’h1DBFBC,初始之后开始对控制报文解扰,将解扰后的原始控制报文输入到LTSSM状态机检测模块;LTSSM状态机通过识别控制报文类型以及数量检测当前LTSSM状态机的状态,例如Polling.Configuration->Configuration.Linkwidth.Start状态的切换,通过检测其它高速PCIe设备发送到FPGA平台PCIe设备的数据报文,当检测到8拍连续的TS1序列且TS1序列的link number和lanenumber均为PAD,同时在检测到1拍TS1序列后检测FPGA平台PCIe发送16拍TS1序列且TS1序列的link number和lane number均为PAD,此时即检测到状态切换,LTSSM状态机检测模块检测到状态切换到
Configuration.Linkwidth.Start后产生link number不为PAD的TS2序列,发送TS2序列,当其它高速互联PCIe识别到TS2序列后,判断该TS2序列后不符合下一次状态切换,所以状态不会发生跳转,同时也不会掉电,LTSSM状态机检测模块检测到异步FIFO的信用值满信号credit_full后,产生信用值满的流控报文;LTSSM状态机检测模块产生的报文,经过加扰/解扰模块,如果当前PCIe协议为3.0及以上则会做加/解扰工作,如果为PCIe3.0以下则不做处理直接输出到数据输出模块;数据输出模块通过对内部时钟计数,当计数到SKP序列发送的数值时,产生SKP序列输出选择SKP序列输出,mac时钟mac_clk时钟上升沿到来时输出数据接收模块发送过来的数据,其他时候输出LTSSM状态机产生的序列。
下面以由其它PCIe设备数据通过PCIe通信系统(PCIe Speed Bridge)发送到FPGA平台PCIe的应用场景为例进行基于FPGA的PCIe通信方法说明。
如图9所示,右侧其它高速互联PCIe设备发送数据到PCIe通信系统(PCIe SpeedBridge)。进入PCIe通信系统(PCIe Speed Bridge)后,如图2所示,首先,进入数据接收模块,使用异步FIFO电路同步其它高速互联PCIe设备发送数据。异步FIFO电路深度通过计算整个LTSSM状态机数据包的大小(整个链路训练需要的数据包的总数),通过计算得知从Polling状态到L0状态的数据包大小为246个TS序列,每个TS序列有128bit,读数据位宽为8bit,此时读时间为3936*Tmac_clk。该时间内写入的数据为则FIFO深度为异步FIFO电路即将满时产生信用值满信号credit_full,该信用值满信号credit_full输出到LTSSM状态机检测模块。异步FIFO电路使用mac时钟mac_clk读出数据,读出的数据首先经过异步握手处理,该异步握手处理和数据接收模块方法相同,使用握手的方式处理,即对mac时钟mac_clk时钟同步三次打拍之后通过异或检测mac时钟mac_clk的上升沿,当mac时钟mac_clk的上升沿被检测到之后再使用寄存器将数据同步;同步之后的报文同时输入到加扰/解扰模块和数据输出模块,数据输出模块检查数据的位宽是否匹配,如果匹配则直接输出,如果不匹配则转换位宽输出,加扰/解扰模块同上文加扰/解扰模块工作;加扰/解扰模块直接将报文输出到LTSSM状态机。
本领域的其他技术人员可以理解实现上述步骤,通过实施以上步骤可以实现FPGA平台PCIe与其它高速互联PCIe设备通信。
有益效果:
本发明可以实现FPGA上的PCIe与其它PCIe设备正常通信,与目前市面上的两种解决方案相比,
第一,该通信方法适用范围广。既不用修改PCIe设计也不需要修改PCIe通信系统(PCIe Speed Bridge)设计,例如扩展数据位宽方法想要验证PCIe1.0设计,此时数据带宽为250MB/s,数据位宽为16bit时时钟可以降低到125MHz,如果数据位宽为32bit时钟可以降低到62.5MHz。且数据位宽的改变可以在PCIe协议通信过程中动态改变,可以较为简单的实现在不同的FPGA平台以及不同的PCIe协议版本之间移植。
第二,该通信方法实现简单但功能完善。PCIe通信系统(PCIe Speed Bridge)通过检测LTSSM状态机再发送对应的SKP序列,可以让其他高速互联PCIe设备的LTSSM状态机状态正确跳转,同时通过主动发送SKP序列可以解决时钟不对齐的问题,最后通过发送流控机制报文,不会出现数据丢失,保证了数据的完整性。
第三,成本低,不需要单独购买设备。只需要在已有的基础上使用PCIe通信方法即可实现FPGA上的PCIe与其它PCIe设备之间的通信,不要需要设置复杂的参数,只需将PIPE接口正确连接,就可以实现FPGA上的PCIe与其它PCIe设备之间的通信。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在一些实施例中,超大规模集成电路的面积功耗优化系统装置可以结合任一实施例的超大规模集成电路的面积功耗优化的方法特征,反之亦然,在此不赘述。
在本发明实施例中,提供一种电子设备,包括:处理器和存储有计算机程序的存储器,处理器被配置为在运行计算机程序时执行任一本发明实施例的超大规模集成电路的面积功耗优化的方法。
图10示出了一种可以实施本发明实施例的方法或实现本发明实施例的电子设备1000的示意图,在一些实施例中可以包括比图示更多或更少的电子设备。在一些实施例中,可以利用单个或多个电子设备实施。在一些实施例中,可以利用云端或分布式的电子设备实施。
图10是本申请实施例提供的电子设备10的结构示意图。如图10所示,电子设备1000包括处理器1001,其可以根据存储在只读存储器(ROM)1002中的程序和/或数据或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序和/或数据而执行各种适当的操作和处理。处理器1001可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器1001可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如,中央处理器(CPU)、图形处理器(GPU)、神经网络处理器(NPU)、数字信号处理器(DSP)等等。在RAM1003中,还存储有电子设备1000操作所需的各种程序和数据。处理器1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。
上述处理器与存储器共同用于执行存储在存储器中的程序,所述程序被计算机执行时能够实现上述各实施例描述的方法、步骤或功能。
以下部件连接至I/O接口1005:包括键盘、鼠标、触摸屏等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。图10中仅示意性示出部分组件,并不意味着计算机系统1000只包括图10所示组件。
上述实施例阐明的系统、装置、模块或单元,可以由计算机或其关联部件实现。计算机例如可以为移动终端、智能电话、个人计算机、膝上型计算机、车载人机交互设备、个人数字助理、媒体播放器、导航设备、游戏控制台、平板电脑、可穿戴设备、智能电视、物联网系统、智能家居、工业计算机、服务器或者其组合。
尽管未示出,在本发明实施例中,提供一种存储介质,所述存储介质存储有计算机程序,所述计算机程序配置成被运行时执行任一本发明实施例的基于文件差异的编译方法。
在本发明的实施例的存储介质包括永久性和非永久性、可移动和非可移动的可以由任何方法或技术来实现信息存储的物品。存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
在本发明的实施例的方法、程序、系统、装置等,可以在单个或多个连网的计算机中执行或实现,也可以在分布式计算环境中实践。在本说明书实施例中,在这些分布式计算环境中,可以由通过通信网络而被连接的远程处理设备来执行任务。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本领域技术人员可想到,上述实施例阐明的功能模块/单元或控制器以及相关方法步骤的实现,可以用软件、硬件和软/硬件结合的方式实现。
除非明确指出,根据本发明实施例记载的方法、程序的动作或步骤并不必须按照特定的顺序来执行并且仍然可以实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本文中,针对本发明的多个实施例进行了描述,但为简明起见,各实施例的描述并不是详尽的,各个实施例之间相同或相似的特征或部分可能会被省略。在本文中,“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”意指适用于根据本发明的至少一个实施例或示例中,而非所有实施例。上述术语并不必然意味着指代相同的实施例或示例。在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
已参考上述实施例具体示出并描述了本发明的示例性系统及方法,其仅为实施本系统及方法的最佳模式的示例。本领域的技术人员可以理解的是可以在实施本系统及/或方法时对这里描述的系统及方法的实施例做各种改变而不脱离界定在所附权利要求中的本发明的精神及范围。
Claims (10)
1.一种基于FPGA的PCIe通信系统,其特征在于,所述系统包括:时钟模块、数据接收模块、数据发送模块、数据加扰/解扰模块和链路训练状态机检测模块;
其中,所述时钟模块,用于识别当前链路PCIe通信协议版本和数据位宽,输出符合所述当前链路PCIe通信协议版本的时钟速率的系统时钟到所述数据接收模块、数据发送模块、数据加扰/解扰模块和链路训练状态机检测模块;
所述数据接收模块,用于接收跨时钟域异步数据,并将所述跨时钟域异步数据同步为系统时钟域数据,并将同步后的所述系统时钟域数据发送到所述数据发送模块和所述数据加扰/解扰模块;
所述数据加扰/解扰模块,用于对所述同步后的PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,并发送到所述链路训练状态机检测模块;
所述链路训练状态机检测模块,用于检测所述解扰后的系统时钟域数据,根据所述解扰后的系统时钟域数据分析所述链路训练状态机的状态,输出所述链路训练状态机的状态下的数据报文到所述数据发送模块;
所述数据发送模块,用于对同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽进行处理,并输出经过数据位宽处理后的所述系统时钟域数据和所述数据报文。
2.根据权利要求1所述的基于FPGA的PCIe通信系统,其特征在于,所述数据加扰/解扰模块还用于将PCIe通信协议3.0及以上版本的所述链路训练状态机检测模块输出的数据报文进行加扰,并将加扰后的所述数据报文输出到所述数据发送模块。
3.根据权利要求1所述的基于FPGA的PCIe通信系统,其特征在于,所述时钟模块包括分频电路和数据选择器;
所述分频电路,用于通过内部计数器将输入的参考时钟分频为两个分频时钟;
所述数据选择器,用于识别当前链路PCIe通信协议版本和数据位宽,根据所述当前链路PCIe通信协议版本和数据位宽从所述两个分频时钟中选择输出符合所述当前链路PCIe通信协议版本的时钟速率的系统时钟。
4.根据权利要求1所述的基于FPGA的PCIe通信系统,其特征在于,所述跨时钟域异步数据包括:由FPGA平台的PCIe发送到其它PCIe设备的异步数据,及由其它PCIe设备发送到FPGA平台的PCIe的异步数据,其中,所述FPGA平台的PCIe的时钟速率小于其它PCIe设备的时钟速率。
5.根据权利要求4所述的基于FPGA的PCIe通信系统,其特征在于,所述数据接收模块包括异步握手电路和异步FIFO电路;
所述异步握手电路,用于将FPGA平台的PCIe发送到其它PCIe设备的异步数据同步为系统时钟域数据;
所述异步FIFO电路,用于将其它PCIe设备发送到FPGA平台的PCIe的异步数据同步为系统时钟域数据。
6.根据权利要求2所述的基于FPGA的PCIe通信系统,其特征在于,所述数据加扰/解扰模块包括线性反馈移位寄存器、第一数据选择器、第二数据选择器和加扰/解扰模块;
其中,所述线性反馈移位寄存器,用于对PCIe通信协议3.0及以上版本的链路训练状态机检测模块输出的数据报文进行加扰;
所述第一数据选择器,用于根据所述当前链路PCIe的数据位宽选择对应数据位宽的线性反馈移位寄存器输出;
所述第二数据选择器,用于根据所述当前链路PCIe通信协议版本的时钟速率选择需要加扰的数据报文;
所述加扰/解扰模块,用于将所述对应数据位宽的线性反馈移位寄存器输出数据与所述需要加扰的数据报文进行逻辑运算。
7.根据权利要求6所述的基于FPGA的PCIe通信系统,其特征在于,对所述经过线性反馈移位寄存器加扰的数据报文再做一次加扰为对PCIe通信协议3.0及以上版本的系统时钟域数据的解扰。
8.根据权利要求1所述的基于FPGA的PCIe通信系统,其特征在于,所述数据发送模块包括数据位宽转换模块、计数器和数据选择器;
其中,所述数据位宽转换模块,用于转换同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽;
所述计数器,用于对系统时钟进行计数,当计数数值达到预设值时产生SKP序列;
所述数据选择器,用于根据优先级依次输出SKP序列、经过数据位宽处理后的系统时钟域数据和链路训练状态机的状态下的数据报文。
9.根据权利要求8所述的基于FPGA的PCIe通信系统,其特征在于,所述转换同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽,包括:
检测所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽;
如果所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽小于所述数据发送模块的输出位宽时,缓存所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文后,输出所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文;
如果所述同步后的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的数据位宽大于等于所述数据发送模块的输出位宽时,根据输入的所述系统时钟域数据和所述链路训练状态机的状态下的数据报文的顺序依次输出所述系统时钟域数据和所述链路训练状态机的状态下的数据报文。
10.一种基于FPGA的PCIe通信方法,其特征在于,所述方法包括:
利用数据接收模块接收FPGA平台的PCIe发送到其它PCIe设备的异步数据或其它PCIe设备发送到FPGA平台的PCIe的异步数据,并将所述异步数据同步为系统时钟域数据;
利用数据加扰/解扰模块对PCIe通信协议3.0及以上版本的系统时钟域数据进行解扰,生成所述系统时钟域数据的原始SKP序列;
利用链路训练状态机检测模块对所述原始SKP序列进行检测分析,得到所述链路训练状态机的状态,并生成所述链路训练状态机的状态下的数据报文;
利用数据加扰/解扰模块对PCIe通信协议3.0及以上版本的所述链路训练状态机检测模块输出的数据报文进行加扰;
利用数据发送模块输出经加扰的链路训练状态机检测模块输出的数据报文和系统时钟域数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310027564.3A CN115935875A (zh) | 2023-01-09 | 2023-01-09 | 基于FPGA的PCIe通信系统及其通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310027564.3A CN115935875A (zh) | 2023-01-09 | 2023-01-09 | 基于FPGA的PCIe通信系统及其通信方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115935875A true CN115935875A (zh) | 2023-04-07 |
Family
ID=86550686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310027564.3A Pending CN115935875A (zh) | 2023-01-09 | 2023-01-09 | 基于FPGA的PCIe通信系统及其通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115935875A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116582471A (zh) * | 2023-07-14 | 2023-08-11 | 珠海星云智联科技有限公司 | Pcie设备、pcie数据捕获系统和服务器 |
-
2023
- 2023-01-09 CN CN202310027564.3A patent/CN115935875A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116582471A (zh) * | 2023-07-14 | 2023-08-11 | 珠海星云智联科技有限公司 | Pcie设备、pcie数据捕获系统和服务器 |
CN116582471B (zh) * | 2023-07-14 | 2023-09-19 | 珠海星云智联科技有限公司 | Pcie设备、pcie数据捕获系统和服务器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ryu et al. | A comparison of five different multiprocessor SoC bus architectures | |
US5392422A (en) | Source synchronized metastable free bus | |
CN101930416B (zh) | 硬件协助处理器间的沟通 | |
JP2001223729A (ja) | バスエミュレーション装置 | |
US20040059965A1 (en) | Synchronous serial data communication bus | |
EP0813153A2 (en) | Serial-to-parallel converter in a data communication system | |
BRPI0714865B1 (pt) | Codificador serial de taxa de dados dupla e baixa distorção de saída | |
WO2009158541A1 (en) | Low power deserializer and demultiplexing method | |
CN115935875A (zh) | 基于FPGA的PCIe通信系统及其通信方法 | |
CN108462620B (zh) | 一种吉比特级SpaceWire总线系统 | |
US7007121B1 (en) | Method and apparatus for synchronized buses | |
US5748902A (en) | Polarity switched data bus for reduced electromagnetic interference | |
US20100315134A1 (en) | Systems and methods for multi-lane communication busses | |
CN117113442B (zh) | 一种面向同态加密算法Paillier的数据通路的加速系统 | |
US6640277B1 (en) | Input staging logic for latching source synchronous data | |
CN116644010A (zh) | 一种数据处理方法、装置、设备及介质 | |
US6584531B1 (en) | Arbitration circuit with plural arbitration processors using memory bank history | |
CN115437972A (zh) | 一种带时钟切换的乒乓缓存方法、装置及接口控制器 | |
CN210405365U (zh) | 多协议聚合传输装置及系统 | |
US6651127B2 (en) | Method of detecting termination of a bus transfer operation | |
US6557064B1 (en) | Set up time adjust | |
JP2000347993A (ja) | ソースシンクロナス転送方式 | |
US6016521A (en) | Communication control device | |
CN116301200B (zh) | 一种全局时钟同步的优化方法、电子设备和存储介质 | |
EP1242897B1 (en) | Method and apparatus for differential strobing in a communications bus |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |