所有提交的EM系统将被重定向到网上投稿系统.作者被要求将文章直接提交给网上投稿系统各自的日志。

PCIe协议TLP-Packets的ECRC计算

Shoeb Mohammed Balabatti1, Radha R C2
  1. 印度卡纳塔克邦班加罗尔市BMSCE电子与通信系硕士生
  2. 印度卡纳塔克邦班加罗尔市BMSCE电子与通信系助理教授
有关文章载于Pubmed谷歌学者

更多相关文章请访问国际电气、电子和仪器工程高级研究杂志

摘要

基于平台的硅后验证包括平台、内存和其他外设。从外设(如PCIe)发送到平台的数据需要检查是否有错误。由于信号积分,数据中产生了误差。这个项目的基本目标是支持软件的开发,可用于自动生成ECRC错误位的数据,从图形/视频卡通过PCIE发送到CPU,这个软件用于数据完整性。这是一个研究项目,展示了如何保护数据。

关键字

TLP(事务层数据包),ECRC(端到端循环冗余检查),PCIe(外围组件接口快速),LA(逻辑分析仪)。

介绍

在目前的系统中,有许多外部连接到CPU的组件,其中一些需要注意的组件是连接到CPU的PCIe协议的视频/显卡。在CPU和卡之间发生数据传输。由于系统的高度复杂性,在数据传输过程中可能会产生一些错误。为了提供端到端数据完整性,为了避免数据损坏,在数据中使用ECRC位。这使得调试人员可以专注于数据分析和调试问题,从而提高了硅后验证过程[1][2]的整体生产力。

文献调查

论文“后硅验证的机遇、挑战和最新进展”详细阐述了后硅验证的机遇、挑战和最新进展,并概述了前硅验证、后硅验证和制造测试之间的比较研究。硅后验证用于检测和修复集成电路和系统制造后的缺陷。由于设计的复杂性,在制造之前几乎不可能检测和修复所有的错误。后硅验证是未来系统的主要挑战。今天,它在很大程度上被视为一种艺术,很少有系统的解决方案。因此,后硅验证是一个新兴的研究课题,为电子设计自动化领域的重大创新提供了几个令人兴奋的机会。硅后验证与硅前设计验证和制造(或生产)测试有显著重叠[1]。论文《基于循环冗余校验码的多比特纠错方法》和CRC的维基百科详细介绍了CRC的原理和纠错方法,在[2][5]项目中得到了应用。
论文《PCI Express控制器的设计与验证》详细介绍了PCIe的结构、不同层间的报文流和PCIe拓扑结构[3]。PCI Express的详细信息以及PCIe中不同级别使用的报文可以从PCI- sig和PCIe[4][5][7]的Wikipedia了解。

pci协议细节

PCIe架构是计算/通信平台中外围设备的高性能互连。它是从PCI和PCI- x™体系结构发展而来的。PCI Express是两个设备之间的串行点对点互连。实现了基于数据包的信息传输协议。根据信号数量[3][4][5][7]可扩展性能。
PCIe是三层协议:
ïÂ‑·每层分为TX和RX部分。
ï ·确保设备间可靠的数据传输。PCIe通过报文实现设备之间的数据传输。根复合体可以与端点通信,反之亦然。一个端点可以与另一个端点通信。通信包括通过通道传输和接收称为事务层数据包(tlp)的数据包。
PCIe事务可以分为以下几类
1.Memory Read或Memory Write:用于内存和CPU之间的数据传输。
2.I/O事务:这些数据包用于I/O和CPU之间的数据传输。这些事务仅限于支持端点设备。
3.配置读或配置写事务:这些事务用于程序特性,并检查PCI Express配置空间中的状态。
4.消息事务:这些事务用于事件信号和通用消息传递
事务被定义为在请求方和完成方之间完成信息传输所需的一系列一个或多个包传输。这些交易可以分为已贴交易和未贴交易[4][5][7]。
在表1.3中,列出了TLP的不同类型的PCIe事务。对于non - posting transactions,请求方向补全器发送TLP数据包。稍后,补全程序返回一个TLP补全包给请求程序。完成TLP的目的是向请求者确认完成者已收到请求TLP[4][7]。
内存读请求
IORd = IO读请求
CfgRd0 = Type 0配置读请求
CfgRd1 = Type 1配置读请求
CplD =完成正常操作的数据
Cpl =正常运行时无数据完成
对于已发布事务,请求者将TLP包传输给补全者。补全器不会将补全TLP包返回给请求者。提交的事务被优化为完成事务的最佳性能,代价是请求者不知道完成者[4][7]成功接收了请求。
MWr =内存写请求
消息事务
A.楼宇交易
发射机的一面:
ï ·在PCIe协议的事务层形成一个事务层数据包,其中包含(头和数据)以及这个数据包的ECRC字段,用于错误检查。
ï ·在PCIe协议序列号字段和LCRC字段的数据链路层附加到来自事务层的数据包。
在PCIe协议的物理层,开始和结束符号被附加到来自数据链路层的数据包中。
这些报文发送到PCIe链路上的接收端[3][5][7]。
接收端:
在PCIe协议的物理层,开始和结束符号从来自发射器的数据包中剥离。
在PCIe协议的数据链路层,序列号字段和LCRC字段从来自物理层的数据包中被条带化。
在PCIe协议的事务层,一个事务层数据包被取出,其中包含(报头和数据)并传输到报头字段中指定的特定目的地。ECRC字段为错误检查[3][5][7]的目的而被条带化。
B. TLP报文详细信息
TLP报文包含Header和Data Field。
ï  ' Data字段包含要传输的数据。
ï  '头字段包含TLP报文类型、地址等信息。
报头字段的详细描述如下所示
o数据包的格式。
o任何相关数据的长度。
o事务描述符,包括:
事务ID
属性
交通类
o地址/路由资料。
o Byte Enableso消息编码
o完成状态
o TLP摘要字段包含数据包的计算ECRC值
o Fmt -报头的大小,数据包中是否存在有效负载取决于该字段。o长度-在DW中定义有效载荷大小。
o EP -中毒。
o TC -交通等级。
o TD - TLP文摘- ECRC字段。
o Attr - status(成功,中止)。

ecrc生成

为了在需要高数据可靠性的系统中确保端到端数据完整性检测,可以在TLP末尾的Digest字段中放置一个Transaction Layer 32-bit (ECRC)。ECRC涵盖了所有在TLP遍历路径时不发生变化的字段。ECRC由源组件中的事务层生成,并由最终PCI Express Receiver和中间Receiver进行检查。支持ECRC检查的交换机必须检查针对交换机本身的tlp上的ECRC。这样的交换机可以有选择地检查它转发的tlp上的ECRC。在交换机转发的TLP上,无论交换机是否检查ECRC或ECRC检查失败,交换机都必须保留ECRC作为TLP的组成部分[4]。
A.生成ECRC的规则
使用以下算法为整个TLP(报头和数据有效载荷)计算一个32位的ECRC,并附加到TLP的末尾:
ECRC值的计算方法如下。
ïÂ‑·对数据包输入进行多项式系数xoed,直到得到32位的值。
ï ·TLP的、header和整个数据的不变字段用于ECRC计算
ï ·有效载荷(如果存在)被包括在ECRC计算中,变体字段中的所有位必须设置为1(二进制)
ECRC计算。
o Type字段的第0位是可变的
o EP字段不同
ï ·ECRC计算从字节0的第0位开始,从TLP的每个字节的第0位开始到第7位
对ECRC计算结果进行补位,并将补位结果位映射到32位TLP文摘字段。
ïÂ‑·32位的ECRC值被放置在TLP末端的TLP摘要字段中。
对于包含用于ECRC值的TLP Digest字段的TLP,支持端到端数据完整性检查的接收器,对接收到的TLP应用用于ECRC计算的相同算法,检查TLP Digest字段中的ECRC值,不包括接收到的TLP的32位TLP Digest字段
ï ·将计算结果与收到的TLP的TLP摘要字段中的值进行比较
支持端到端数据完整性检查的接收器将违规行为报告为ECRC错误。

工作实施

对于为TLP包生成ECRC的实现,所使用的工具是:
答:Python
Python是一种广泛使用的通用高级编程语言。它的设计理念强调代码的可读性,它的语法允许程序员用比c语言更少的代码行来表达概念。Python代码可以打包成独立的可执行程序。Python解释器可用于许多操作系统[6][8]。
B.逻辑分析仪
Logic Analyzer为开发人员和评估人员设计,允许半导体、主板和外接卡制造商捕获、分析和查看PCI Express流量,更快地解释和调试PCI Express流量,并在图形显示[9]中使用彩色编码、清晰标记的协议元素。
算法的脚本是用Python语言完成的,输出是通过捕获流量在LA中看到的。该脚本在TLP的不同事务上运行,在LA中观察到正确的结果。

结果与讨论

在图1.9中,它显示了如何在LA中看到捕获的TLP包。当计算出的ECRC错误时,我们会在数据包中看到红色的ECRC字段。
在图1.10中,它显示了如何在LA中看到捕获的TLP包。当计算出的ECRC值正确时,我们看到数据包中的ECRC字段颜色变为白色。

结论

本工作的目的是了解流量如何从PCIe卡移动到CPU,以及它如何用于为数据包生成ECRC。在PCIe的不同数据包上运行相同的脚本,为它们计算正确的ECRC值。这里使用的方法是有效的,并在许多工业环境中使用。通过使用这个ECRC值,我们可以知道错误发生在通往CPU的哪条路径上,这有助于详细了解发生的错误。

数字一览

图1 图2 图3 图4 图5
图1 图2 图3 图4 图5
图6 图7 图8 图9 图10
图6 图7 图8 图9 图10

参考文献

  1. SubhasishMitra, Sanjit A. Seshia, Nicola Nicolici,“后硅验证机会,挑战和最新进展”,设计自动化会议(DAC), 2010年第47届ACM/IEEE
  2. 张彦斌,袁琦,“一种基于循环冗余校验码的多比特纠错方法”,2008年IEEE
  3. Eugin Hyun, Kwang-Su Seong,“PCI Express控制器的设计和验证”,2005年IEEE
  4. PCI规格:http://www.pcisig.com
  5. PCI Express详细信息:http://en.wikipedia.org/wiki/PCI_Express
  6. Python工具:http://www.tutorialspoint.com/python/
  7. Pci-express-tlp-pcie-primer-tutorial-guide-1: http://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-1
  8. Python编程语言:http://en.wikipedia.org/wiki/Python_(programming_language)
  9. 逻辑分析器:http://en.wikipedia.org/wiki/Logic_analyzer
全球科技峰会