PCIe链路弹性缓冲区电路的制作方法

文档序号:15588278发布日期:2018-10-02 18:38阅读:186来源:国知局

本发明属于计算机技术领域,尤其设计一种pcie链路弹性缓冲区电路。



背景技术:

串行的pcie接口具有高速率和高带宽等特点,克服了传统pci总线在系统带宽、传输速度等方面的固有缺陷,具有很好的应用前景。

pcie链路双方时钟电路的精度为±300ppm,即在每一百万和理想的时钟周期的时间范围内允许±300个时钟周期的偏差。最坏情况下,如果链路一边的发送器以2.5ghz+300ppm的频率操作,而链路另一边的接收器的本地时钟以2.5ghz-300ppm的频率运行,存在的最大偏差为600ppm,累积10-6/600=1667个时钟周期,会产生一个时钟周期的偏移。

对于高速传输的连续的数据流,用于跨时钟处理,接收数据的缓冲区,数据的写时钟来源于从接收数据中恢复出的发送端时钟,读时钟来源于接收端本地晶振产生的时钟,如果不能正确处理写时钟和读时钟之间的累积时钟周期偏移,将会导致数据接收缓冲区的溢出,损坏接收到的数据或者产生数据丢失,严重影响系统通信的功能和性能。



技术实现要素:

发明目的:本发明的目的是提供一种pcie链路弹性缓冲区电路,通过对缓冲区的写操作和读操作进行控制,添加或者删除skip有序集,校正数据接收端缓冲区写时钟和读时钟的频率累积差异,解决pcie接口设计过程中由于频率累积偏差而导致的数据损坏或者丢失。

技术方案:本发明提供一种pcie链路弹性缓冲区电路,包括写数据和数据标志产生模块、写指针控制模块、写深度计算模块、弹性缓冲区存储器、读数据和数据标志产生模块、读指针控制模块、读深度计算模块、8b/10b解码模块、接收状态产生模块,

其中写数据和数据标志产生模块、写指针控制模块、写深度计算模块、弹性缓冲区存储器、读指针控制模块,共同完成写数据和数据标志产生模块输入数据到弹性缓冲区存储器的写入操作;

弹性缓冲区存储器、读数据和数据标志产生模块、读指针控制模块、读深度计算模块、写指针控制模块,共同完成有效数据从弹性缓冲区存储器读出,并最终从读数据和数据标志产生模块的输出的操作;

所述写数据和数据标志产生模块,接受phy接收数据,对数据做检测处理后,输出skip信号到写指针控制模块、输出24位的数据到弹性缓冲区存储器;

所述写指针控制模块,输出4位的写指针到弹性缓冲区存储器,输出写指针已在缓冲区中心位置指示信号到读深度计算模块;

所述写深度计算模块,是独立的写缓冲区深度判断电路,输出写时钟域的缓冲区容量指示信号es_high到写数据和数据标志产生模块、写指针控制模块;

所述弹性缓冲区存储器,输出数据到读数据和数据标志产生模块;

所述读数据和数据标志产生模块,输出读数据中有skip字符的标志位skip信号到读指针控制模块、接收状态产生模块,输出20位的数据到8b/10b解码模块;

所述读指针控制模块,输出读指针信号到弹性缓冲区存储器,输出读指针已在缓冲区中心位置指示信号到写深度计算模块;

所述读深度计算模块,是独立的读缓冲区深度判断电路,输出读时钟域的缓冲区容量指示信号es_low到读指针控制模块,输出缓冲区下溢信号es_uflow、上溢信号es_oflow信号到读指针控制模块和接收状态产生模块;

所述8b/10b解码模块,对读数据和数据标志产生模块输出的数据进行解码,完成pipe接收数据解码输出,以及将解码状态输出到接收状态产生模块;

所述接收状态产生模块,与读数据和数据标志产生模块、读深度计算模块、8b/10b解码模块相连,收集上述模块输出的状态信号,完成pipe接收状态信号生产及输出。

所述写数据和数据标志产生模块,包括:写数据检测电路和标志位生成电路。写数据检测电路对接收到数据中包含的skip有序集进行检测。标志位生成电路根据检测的结果和弹性缓冲区的空满状态,对准备写入弹性缓冲区的数据添加数据标志位,添加的数据标志位类型有:(a)接收到的数据是有效数据:接收数据中没有检测到skip有序集;(b)接收到的数据是skip:测到skip有序集,且es_high信号无效;(c)接收到的数据是可以删除的skip:检测到skip有序集,并且缓冲区容量指示信号es_high有效。写深度计算模块输出es_high信号,表示空闲缓冲区不足全部缓冲区的1/2。写数据和数据标志产生模块将可删除的skip序列之外的数据以及生成的数据标志位写入弹性缓冲区;

所述写指针控制模块,用于检测写数据和数据标志产生模块输出的数据标志位,控制写指针的变化,剔除可删除的skip有序集,将除可删除skip之外的数据写入到弹性缓冲区存储器;

所述写深度计算模块,为独立的写缓冲区深度判断电路,用于检测读指针控制模块输出的读指针已在缓冲区中心位置指示信号,将当前写指针值和弹性缓冲区存储器的中心位置值进行比较,判断剩余空闲缓冲区的容量,空闲缓冲区小于总容量的1/2时,es_high输出信号有效;

所述读数据和数据标志产生模块,用于获取从弹性缓冲区存储器输出的数据和数据标志位,将数据输出到8b/10b解码模块,将标志位输出到读指针控制模块;

所述读指针控制模块,用于判断读数据和数据标志产生模块输出的数据标志位,控制读指针的变化,将弹性缓冲区存储器中的数据依次读出,在弹性缓冲区存储器即将下溢时,将skip有序集重复读出;

所述读深度计算模块,为独立的读缓冲区深度判断电路,用于检测写指针控制模块输出的写指针已在缓冲区中心位置指示信号,将当前读指针值和弹性缓冲区存储器的中心位置值进行比较,判断剩余空闲缓冲区的容量,空闲缓冲区大于总容量的1/2时,es_low输出信号有效;当前读指针的值即将追上写指针的值时,输出es_uflow信号,表示弹性缓冲区即将下溢;当前写指针的值即将追上读指针的值时,输出es_oflow信号,表示弹性缓冲区即将上溢;

所述8b/10b解码模块,用于对读数据和数据标志产生模块输出的数据按照8b/10b解码的规则对接收数据进行处理,输出pipe接收数据;

所述接收状态产生模块,用于收集读数据和数据标志产生模块输出的skip标志、读深度计算模块输出的弹性缓冲区上溢信号(es_oflow)、弹性缓冲区下溢信号(es_uflow),以及8b/10b解码模块输出的解码状态信号,包括极性错误、不在8b/10b编码表中等解码错误,输出pipe接收状态信号。

有益效果:

本发明提供的一种pcie链路弹性缓冲区电路,在写时钟域和读时钟域采用独立的缓冲区深度判断电路,对缓冲区的使用状况分别进行监控,依据弹性缓冲区的空、满状态适时地删除和添加skip有序集,使写指针和读指针的差值始终保持在半个弹性缓冲区的空间,可以容忍较大的读写时钟偏差;该电路采用全硬件实现,无需软件干预,可以快速的集成到带pcie接口设备的开发中,加速pcie接口技术在机载领域的推广和应用。

附图说明

图1是本发明一种pcie链路弹性缓冲区电路结构示意图。

具体实施方式:

下面结合附图和具体实施例进一步说明本发明的技术方案,请参阅图1。

本发明提供一种pcie链路弹性缓冲区电路,包括写数据和数据标志产生模块1、写指针控制模块2、写深度计算模块3、弹性缓冲区存储器4、读数据和数据标志产生模块5、读指针控制模块6、读深度计算模块7、8b/10b解码模块8、接收状态产生模块9,

其中写数据和数据标志产生模块1、写指针控制模块2、写深度计算模块3、弹性缓冲区存储器4、读指针控制模块6,共同完成写数据和数据标志产生模块1输入数据到弹性缓冲区存储器4的写入操作;

弹性缓冲区存储器4、读数据和数据标志产生模块5、读指针控制模块6、读深度计算模块7、写指针控制模块2,共同完成有效数据从弹性缓冲区存储器4读出,并最终从读数据和数据标志产生模块5的输出的操作;

所述写数据和数据标志产生模块1,接受phy接收数据,对数据做检测处理后,输出skip信号到写指针控制模块2、输出24位的数据到弹性缓冲区存储器4;

所述写指针控制模块2,输出4位的写指针到弹性缓冲区存储器4,输出写指针已在缓冲区中心位置指示信号到读深度计算模块7;

所述写深度计算模块3,是独立的写缓冲区深度判断电路,输出写时钟域的缓冲区容量指示信号es_high到写数据和数据标志产生模块1、写指针控制模块2;

所述弹性缓冲区存储器4,输出数据到读数据和数据标志产生模块5;

所述读数据和数据标志产生模块5,输出读数据中有skip字符的标志位skip信号到读指针控制模块6、接收状态产生模块9,输出20位的数据到8b/10b解码模块8;

所述读指针控制模块6,输出读指针信号到弹性缓冲区存储器4,输出读指针已在缓冲区中心位置指示信号到写深度计算模块3;

所述读深度计算模块7,是独立的读缓冲区深度判断电路,输出读时钟域的缓冲区容量指示信号es_low到读指针控制模块6,输出缓冲区下溢信号es_uflow、上溢信号es_oflow信号到读指针控制模块6和接收状态产生模块9;

所述8b/10b解码模块8,对读数据和数据标志产生模块5输出的数据进行解码,完成pipe接收数据解码输出,以及将解码状态输出到接收状态产生模块9;

所述接收状态产生模块9,与读数据和数据标志产生模块5、读深度计算模块7、8b/10b解码模块8相连,收集上述模块输出的状态信号,完成pipe接收状态信号生产及输出。

所述写数据和数据标志产生模块1,包括:写数据检测电路和标志位生成电路。写数据检测电路处理的数据位宽可以是20位,按照每10位一组,对数据中包含的skip有序集进行检测。标志位生成电路根据检测的结果和弹性缓冲区的空满状态,对准备写入弹性缓冲区的数据添加数据标志位,添加的数据标志位位宽可以为4位,其中每10位数据带两个标志位,标志位的类型及编码为:(a)接收到的数据是有效数据:接收数据中没有检测到skip有序集,编码为2’b01;(b)接收到的数据是skip:测到skip有序集,且es_high信号无效,编码为2’b10;(c)接收到的数据是可以删除的skip:检测到skip有序集,并且缓冲区容量指示信号es_high有效,编码为2’b11。写数据和数据标志产生模块将可删除的skip序列之外的数据以及生成的数据标志位写入弹性缓冲区;

所述写指针控制模块2,用于判断写数据和数据标志产生模块1输出的数据标志位,控制写指针的变化,剔除可删除的skip有序集,将除可删除skip之外的数据写入到弹性缓冲区存储器4,当弹性缓冲区的深度不大于16时,写指针的位宽可以为4位;

所述写深度计算模块3,用于检测到读指针控制模块6输出的读指针已在缓冲区中心位置指示信号有效,开始将当前写指针值和弹性缓冲区存储器4的中心位置值进行比较,判断剩余空闲缓冲区的容量,空闲缓冲区小于总容量的1/2时,es_high输出信号有效;

所述读数据和数据标志产生模块5,用于获取从弹性缓冲区存储器4输出的数据和数据标志位,将数据输出到8b/10b解码模块8,将标志位输出到读指针控制模块6;

所述读指针控制模块6,用于判断读数据和数据标志产生模块5输出的数据标志位,控制读指针的变化,将弹性缓冲区存储器4中的数据依次读出,在弹性缓冲区存储器4即将下溢时,将skip有序集重复读出,当弹性缓冲区的深度不大于16时,读指针的位宽可以为4位;

所述读深度计算模块7,用于检测到写指针控制模块2输出的写指针已在缓冲区中心位置指示信号有效,开始将当前读指针值和弹性缓冲区存储器4的中心位置值进行比较,判断剩余空闲缓冲区的容量,空闲缓冲区大于总容量的1/2时,es_low输出信号有效;当前读指针的值即将追上写指针的值时,输出es_uflow信号,表示弹性缓冲区即将下溢;当前写指针的值即将追上读指针的值时,输出es_oflow信号,表示弹性缓冲区即将上溢;

所述8b/10b解码模块8,用于对读数据和数据标志产生模块5输出的数据按照8b/10b解码的规则对接收数据进行处理,该模块的输入数据可以是20位宽,按照高10位数据和低10位数据的顺序进行解码,输出16位宽的pipe接收数据;

所述接收状态产生模块9,用于收集读深度计算模块7输出的弹性缓冲区上溢信号(es_oflow)、弹性缓冲区下溢信号(es_uflow),以及8b/10b解码模块输出的解码状态信号,包括编码极性错误、不在8b/10b编码表中等解码错误,输出pipe接收状态信号,该状态信号可以是以上信息的编码输出,3’b001:表示缓冲区上溢,3’010表示弹性缓冲区下溢,3’b011表示不在8b/10b编码表中,3’b100表示编码极性错误。

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