所有提交的电子邮件系统将被重定向到在线稿件提交系统.请作者将文章直接提交给在线稿件提交系统各自期刊的。

PCIe协议tlp报文的ECRC计算

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

浏览更多相关文章国际电气、电子与仪器工程高级研究杂志

摘要

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

关键字

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

介绍

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

文献调查

本文“后硅验证的机遇、挑战和最新进展”阐述了后硅验证的机遇、挑战和最新进展,并概述了前硅验证、后硅验证和制造测试之间的比较研究。后硅验证用于检测和修复集成电路和系统在制造后的缺陷。由于设计的复杂性,几乎不可能在生产前检测和修复所有错误。后硅验证是未来系统的主要挑战。今天,它在很大程度上被视为一门艺术,几乎没有系统的解决方案。因此,后硅验证是一个新兴的研究课题,为电子设计自动化的重大创新提供了几个令人兴奋的机会。硅后验证与硅前设计验证和制造(或生产)测试[1]有很大的重叠。文章《基于循环冗余校验码的多比特纠错方法》和CRC的Wikipedia详细解释了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通过报文实现设备间的数据传输。根复合体可以与端点通信,反之亦然。一个端点可以与另一个端点通信。通信包括通过通道传输和接收称为事务层数据包(TLPs)的数据包。
PCIe事务可以分类如下
1.内存读或内存写:这些报文用于内存和CPU之间的数据传输。
2.I/O事务:这些数据包用于I/O和CPU之间的数据传输。这些事务仅限于支持端点设备。
3.配置读或配置写事务:这些事务用于程序功能,并检查PCI Express配置空间中的状态。
4.消息事务:这些事务用于事件信令和通用消息传递
事务被定义为完成请求者和完成者之间的信息传输所需的一系列一个或多个数据包传输。这些事务可以分为已发布和未发布事务[4][5][7]。
在表1.3中,它显示了TLP的不同类型的PCIe事务。对于non - posts transactions,一个请求者发送一个TLP数据包给一个完成者。稍后,完成程序将TLP完成包返回给请求程序。完成TLP的目的是向请求程序确认完成程序已接收到请求TLP[4][7]。
MRd =内存读请求
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]发送到Receiver。
接收端:
在PCIe协议的物理层,开始和结束符号从来自发送器的数据包中剥离。
在PCIe协议的数据链路层,序列号字段和LCRC字段从来自物理层的数据包中被条纹化。
在PCIe协议的事务层,取出一个包含(报头和数据)的事务层数据包,并将其传输到报头字段中指定的特定目的地。ECRC字段是条纹的,目的是错误检查[3][5][7]。
B. TLP报文的详细信息
TLP报文包含Header和Data Field。
ï© ' Data Field包含要传输的数据。
ï© Header字段包含TLP报文的类型、地址和其他信息。
标题字段的详细描述如下
o报文的格式。
o任何关联数据的长度。
o事务描述符,包括:
事务ID
属性
交通类
o地址/路由信息。
o Byte Enableso消息编码
o竣工情况
o TLP Digest字段包含计算出的报文ECRC值
o Fmt -报头的大小,数据包中是否存在有效载荷取决于此字段。o长度-以DW定义有效载荷大小。
o EP -中毒的钻头。
o TC—流量类。
o TD - TLP文摘- ECRC领域。
o Attr - status(成功,中止)。

生成ecrc

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

工作实施

为TLP数据包生成ECRC所使用的工具有:
答:Python
Python是一种广泛使用的通用高级编程语言。它的设计理念强调代码的可读性,它的语法允许程序员用比c语言更少的代码行来表达概念。Python代码可以打包成独立的可执行程序。Python解释器可用于许多操作系统[6][8]。
B.逻辑分析仪
逻辑分析仪专为开发人员和评估人员设计,允许半导体,主板和附加卡制造商捕获,分析和查看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. 苏哈希米特拉,Sanjit A. Seshia, Nicola Nicolici,“后硅验证的机遇、挑战和最新进展”,设计自动化会议(DAC), 2010年第47届ACM/IEEE
  2. 张彦斌,袁琪,“基于循环冗余校验码的多比特纠错方法”,2008
  3. 宋光洙,“PCI Express控制器的设计与验证”,2005
  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
全球科技峰会