PCI Express 的 TLP 处理电路及具备该处理电路的中继设 备 【技术领域】
本发明涉及 PCI Express 的设备, 特别涉及其处理层包 (TLP : Transaction Layer Packet) 的处理电路。背景技术
PCI Express( 注册商标 ) 总线是近年为了传送计算机系统及其他电子设备的数 据而开发的、 基于点对点连接的高速串行接口, 与现有的并行传送相比, 总线的基板占有面 积较小, 能够进一步小型化, 在多个领域中研究其用途。
关 于 该 标 准 的 详 细 内 容, 被 作 为 PCI 标 准 的 制 定 母 体 的 PCI-SIG(Peripheral Component Interconnect-Special Interest Group( 外围组件互连专业组 )) 标准化为 PCI Express Base Specification, 并且还出版了该标准的说明书 ( 例如, 参照非专利文献 1)。 首先, 参照图 1 ~图 3, 对该 PCI Express 系统的概略结构进行说明。例如, 如图 1 所示, PCI Express 系统的结构包括 : 根组件 1, 交换器 2, 及端点 3(3a, 3b, 3c, 3d) 的设备。
此外, 根组件 1 和交换器 2 分别具有多个端口, 用于连接这些端口和端点 3 的相互 间的 PCI Express 总线 7a ~ 7e 具备图 2 所示的 3 层的层结构。
各个层包括处理层 101、 数据链路层 102 和物理层 103, 并以包形式传送所收发的 数据, 该处理层 101 针对最上位的由驱动器及应用软件构成的上位的软件层, 以现有的 PCI 交换服务和点对点方式保证数据的可靠通信, 该数据链路层 102 保障相邻的组件之间的可 靠的数据通信, 该物理层 103 在物理介质上收发通信包。
并且, 根组件 1 位于 PCI Express 系统的树结构的最上位, 用系统总线与 CPU5 连 接, 用存储器总线与存储器 6 连接。
在该结构中, 在根组件 1 和端点 3a 的通信中, 交换器 2 成为 TLP 的中继设备, 在端 点 3a 和端点 3d 的通信中, 交换器 2 和根组件 1 成为中继设备。
这样构成的 PCI Express 系统的设备间的传送路径的连接成为点对点连接, 是使 用两个单向差动放大器的双单工方式, 链路速度具有 2.5Gbps 的带宽, 在双向上具备 5Gbps 的带宽。
并且, 通过将该双向的传送路径 ( 称作线路 (lane)) 从 2 组增加到 3 组, 将总线的 带宽幅度构成为可升级, 通过在该传送路径上收发包, 来执行数据的传送。
如图 2 所示, 各层的包在处理层及数据链路层生成, 分别称作处理层包 (TLP, Transaction Layer Packet) 和数据链路层包 (DLLP, Data Link Layer Packet)。
此 外, 在 物 理 层 中, 为 了 进 行 链 路 控 制, 生 成 物 理 层 包 (PLP, Physical Layer Packet)。
此外, 与通过链路连接的对方的相同的层之间交换各层的包, 如图 3 所示, 在下位 的协议层中各层的包在前后被附加信息后, 最终发送到传送路径。所接收的包在各协议层 中删除前后的信息之后, 被转送到上位的协议层。
具体来说, 进行端对端的通信的 TLP 在处理层中构成 TLP 头、 数据有效载荷及选项 的 TLP 摘要 (ECRC, 称作 End-to-End CRC(Cyclic Redundancy Check : 循环冗余码校验 )), 在数据链路层中发送时被附加序列号和 LCRC(Link-Level or Link Cyclic Redundancy Check) 后, 在接收时检查后被删除序列号和 LCRC。
DLLP 是 TLP 的送达应答 ( 肯定应答 ACK 和否定应答 NAK) 等, 是在链路双方交换信 息的较短的包。
并且, 在各 TLP 上, 在包的两端附加了用于在物理层的接收侧检测开始和结束的 控制字符 (STP 和 END)。
接 着, 对 这 样 构 成 的 PCI Express 系 统 的 处 理 层 中 的 数 据 完 整 性 (Data Integrity : 数据中没有错误的情况 ) 的问题进行说明。
根据 PCI Express 的标准, 在处理层包 (TLP) 的数据错误的检测中使用 LCRC。 LCRC 是数据链路层的功能, 据此检测链路上的传送错误。若 LCRC 为异常, 则通过在由链路连接 的 2 个组件之间谋求再次传送, 来确保基于端对端的 TLP 的通信的可靠性。
通常 TLP 在称作端点 3 或根组件 1 的末端的设备中生成, 经由交换器 2 或根组件 1 发送到最终目的地设备。由于按每个链路来管理对 TLP 附加的序列号, 所以在每次 TLP 通 过中继设备时检查 LCRC, 或者附加新的 LCRC。
因此, 在仅依赖 LCRC 功能进行数据的错误检测时, 在交换器及根组件的中继电路 ( 在此, 将位于数据链路层的上位的电路称作中继电路 ) 中, 在 TLP 的数据中产生了错误的 情况下, 由于在包含错误的 TLP 中正常生成 LCRC, 所以存在 TLP 的接收目的地不能检测到错 误的问题。
在 PCI Express 中, 为了避免该问题, 作为处理层的选项功能, 提供用于保证端对 端的数据完整性的 ECRC。在使用 ECRC 功能的情况下, 在位于 TLP 的后尾的称作 TLP 摘要的 32 比特的字段中保存 ECRC。
但是, 根据 PCI Express 系统的应用, 有时不将 TLP 摘要用于 ECRC, 独自灵活应用 的方式具有更高的有用性 ( 例如, 参照专利文献 1)。
现有技术文献
专利文献
专利文献 1 : 美国专利申请公开第 2009/0006932 号说明书
非专利文献
非专利文献 1 : 荒井信隆, 里美尚志, 田中显裕, “PCI Express 入门讲座” , )( 株 ) 电波新闻社, 2007 年 4 月 1 日发行, 第 1 章~第 5 章 发明内容
本发明所要解决的技术问题
根据现有的 PCI Express 标准, 称作 ECRC 的 TLP 的 CRC 是用于保证端对端的数据 完整性的手段。设在 TLP 的后尾的 TLP 摘要是选项字段, 根据 PCI Express 的标准, 该 TLP 摘要保存 ECRC。
在省略该 TLP 摘要的情况下, 或者将其用于其他目的的情况下, 在经由交换器的、 根组件与端点之间的通信中, 或者在经由交换器或根组件的、 端点之间的通信中, 在对 TLP进行中继的交换器及根组件的中继电路中发生了错误时, 存在不能保证 TLP 的数据完整性 的问题。
本发明是为了解决上述问题而做出的, 提供一种能够通过检测从中继设备发送的 数据的错误来保证 TLP 的数据完整性的 PCI Express 的 TLP 处理电路, 以及具备该 TLP 处 理电路的中继设备。
用于解决技术问题的手段
为了实现上述目的, 本发明的 PCI Express 的 TLP 处理电路如下构成。即, 是一 种 TLP 处理电路, 设在 PCI Express 系统的根组件与端点之间或者对端点之间进行中继的 中继设备上, 其特征在于, 上述 TLP 处理电路具备 : 冗余代码生成电路, 至少对所接收的每 个 TLP 的转送数据附加冗余代码 ; 以及中继电路错误检测电路, 对所附加的上述冗余代码 与所发送的 TLP 进行比对, 检测要发送的该 TLP 的错误, 从而能够保障从上述中继设备发送 的 TLP 的数据完整性。
为了实现上述目的, 进一步本发明的 PCI Express 的 TLP 处理电路如下构成。即, 是一种 TLP 处理电路, 设在 PCI Express 系统的根组件与端点之间或者对端点之间进行中 继的中继设备上, 其特征在于,
在双向上设置的、 关于 1 个方向的上述 TLP 处理电路包括 : 多个接收处理部, 发送处理部, 以及 复用器, 选择上述接收处理部中的某个向上述发送处理部进行发送, 上述接收处理部包括 : 控制字符检测电路, 对所接收的 TLP 的控制字符进行检测, 检测出该包为 TLP 的情况, 冗余代码生成电路, 关于从上述控制字符检测电路输出的上述 TLP 的头、 数据及 TLP 摘要的数据, 按照每个预先设定的数据的单位附加用于检测该设备内的错误的 “冗余代 码” ,
LCRC· 序列号检查电路, 针对由上述冗余代码生成电路处理后的上述 TLP, 检查 “LCRC” 及 “序列号” ,
缓冲器写入电路, 将从上述 LCRC·序列号检查电路输出的 TLP 和所附加的上述冗 余代码相对应地加以存储 ;
该缓冲器写入电路用的缓存器, 以及
包控制电路部, 用 ACK DLLP/NAK DLLP 向上述 TLP 的发送源设备返回是否在存储 于上述缓存器中的 TLP 中检测到错误, 并控制从上述 TLP 处理电路向发送目的地的正常发 送或用于无效化的发送,
上述发送处理部包括 :
缓冲器读取电路, 根据上述包控制电路的转送指示输出, 从上述缓存器读取对应 的 TLP ;
序列号生成电路, 在读取到上述缓冲器读取电路中的上述 TLP 中附加序列号,
LCRC 生成电路, 在上述序列号生成电路的输出中附加 “LCRC” ;
中继电路错误检测电路, 对上述 LCRC 生成电路的输出与所附加的上述冗余代码
进行比对, 判断是否能够修复错误后, 通知给上述包控制电路 ; 以及
控制字符附加电路, 在上述包控制电路部的指令为 “无效 TLP” (Nullified TLP) 的生成的情况下, 使 LCRC 反转, 并在 TLP 的末尾中附加 “EDB” 后输出, 否则附加 “END” 字符 后输出,
上述包控制电路部在上述 LCRC·序列号检查电路或上述缓冲器写入电路中,
从上述 TLP 头读取发送目的地, 若在上述发送处理部中没有发送过程中的包, 则 向缓冲器读取电路通知发送开始指令 ; 若由上述控制字符检测电路检测到 “EDB” , 并从该 发送处理电路向发送目的地开始了发送, 则向上述控制字符附加电路指示生成 “无效 TLP” , 该 “无效 TLP” 将该 TLP 设为无效 ; 若上述 LCRC 序列号检查电路的检查输出为正常, 则在输 出上述中继电路错误检测电路的结果之前保持该正常状态信号 ; 若上述中继电路错误检测 电路的结果为正常, 则向发送源返回 ACK DLLP, 否则向发送源返回 NAK DLLP, 并且, 向上述 控制字符附加电路指示生成用于使发送过程中的上述 TLP 无效的 “无效 TLP” ;
另一方面, 若在上述 LCRC 序列号检查电路的检查输出为异常时, 不等待上述中继 电路错误检测电路的判断输出, 而向上述发送源返回 NAKDLLP, 并且该 TLP 开始被发送到 发送目的地, 则为了使发送过程中的 TLP 无效而向上述控制字符附加电路指示生成 “无效 TLP” ; 通过检测从上述中继设备发送的 TLP 的错误, 即使在 TLP 中不附加 ECRC 的情况下, 也 能够保证数据完整性。 发明的効果 :
根据本发明, 能够提供一种能够通过检测从中继设备发送的数据的错误来保证数 据完整性的 PCI Express 的 TLP 处理电路, 以及具备该 TLP 处理电路的中继设备。
附图说明
图 1 是现有的 PCI Express 系统的结构图。 图 2 是用于说明现有的 PCI Express 的结构的图。 图 3 是用于说明现有的 TLP 格式的图。 图 4 是本发明的中继设备的 TLP 的处理电路图。具体实施方式
下面, 参照附图, 对本发明的一实施例进行说明。
实施例
参照图 4, 对本发明的实施例进行说明。 图 4 是经由作为本发明 PCI Express 系统 的中继设备的交换器 2a, 从端点 3a ~ 3c 向根组件 1 沿着上行流方向发送的数据的 TLP 处 理电路 10 的结构图。下行流方向的 TLP 处理电路 10 是与图 1 的结构相同的电路, 所以予 以省略。
交换器 2a 设在根组件 1 与多个端点 3a ~ 3c 之间, 根组件 1 和端点 3a( 或 3b, 3c) 的路径由 PCI Express 配置软件预先设定。
此外, 在根组件 1 与交换器 2a 之间的链路以及交换器 2a 与端点 3a( 或 3b, 3c) 之 间的链路中, 单独地进行送达确认和流控制。
该流控制不是本申请的发明的主旨, 所以予以省略, 在此, 设端点 3a 和根组件 1 连接到本发明的交换器 2a 来进行说明。
首先, 对交换器 2a 的结构进行说明。对 PCI Express 系统的端点 3a 与根组件 1 之间进行中继的交换器 2a, 在端点 3a 和根组件 1 之间的双向上具备 TLP 处理电路 10。
TLP 处理电路 10 包括 : 多个接收处理部 2a1 ~ 2a3, 发送处理部 2b1, 以及复用器 2c1, 该复用器 2c1 选择接收处理部 2a1 ~ 2a3 中的某个向发送处理部 2b1 进行发送。
接收处理部 2a1 具备 : 控制字符检测电路 11, 检测所接收的 TLP 的控制字符, 对该 包为 TLP 的情况进行识别处理 ; 冗余代码生成电路 12, 关于从控制字符检测电路 11 输出的 TLP 的头、 数据有效载荷及 TLP 摘要数据, 按照每个预先设定的数据单位附加 “冗余代码” , 该冗余代码用于检测在该中继设备的中继电路中产生的错误 ; 以及 LCRC·序列号检查电路 13, 对由冗余代码生成电路 12 处理后的 TLP, 检查 “LCRC” 及 “序列号” 。
并且, 还包括 : 缓冲器写入电路 14 及其缓存器 15, 将从 LCRC· 序列号检查电路 13 输出的 TLP 和所附加的冗余代码相对应地加以存储 ; 以及包控制电路部 16, 关于存储在 缓存器 15 中的 TLP, 将是否检测到错误的情况通过 ACK DLLP/NAK DLLP(Data Link Layer Packet) 返回到端点 3a, 并且, 对从 TLP 处理电路 10 向根组件 10 的正常发送或用于使 TLP 无效化的发送进行控制。 此外, 发送处理部 2b1 包括 : 缓冲器读取电路 18, 根据来自包控制电路部 16 的转 送指示输出, 从缓存器 15 读取对应的 TLP ; 序列号生成电路 19, 在读取到缓冲器读取电路 18 中的 TLP 中附加序列号 ; LCRC 生成电路 20, 在序列号生成电路 19 的输出中附加 “LCRC” ; 中继电路错误检测电路 21, 对 LCRC 的输出与所附加的冗余代码进行比对, 来判断有无在缓 存器 15 产生的错误, 并将该判断结果通知包控制电路部 16 ; 以及控制字符附加电路 22, 在 来自包控制电路部 16 的指令中附加 “EDB” (EnD Bad, 表示无效 TLP(Nullified TLP) 的结 束 ), 或者 “END” 的控制字符之后输出。
并且, 关于发送处理部 2b1, 省略详细说明, 但是其还具备如下功能 : 接收来自多 个包控制电路部 16 的发送请求, 并进行向各个包控制电路部 16 返回发送许可的发送权的 调节。
此外, 包控制电路部 16 包括 : 包控制电路 16a, 针对缓存器 15 中存储的 TLP, 根据 有无发送的指令和所接收的 TLP 的错误, 控制向发送源应答为 TLP 正常或异常 ; ACK DLLP 生成电路 16b, 在包控制电路 16a 的指令中所接收的 TLP 是正常的情况下, 生成 ACK DLLP ; NAK DLLP 生成电路 16c, 在包控制电路 16a 的指令中所接收的 TLP 是异常的情况下, 生成 NAK DLLP ; 以及 DLLP 发送电路 16d, 发送 ACK DLLP 或 NAK DLLP。
接着, 对各电路的详细内容进行说明。控制字符检测电路 11 是在 PCI Express 标 准中定义的部分, 具有表示处理层包 (TLP) 的开始的 “STP” 、 表示该包的结束的 “END” 、 表示 无效包的结束的 “EDB” 等, 在接收到 “STP” 的情况下, 识别为所接收的包是 TLP。
当 TLP 末尾的控制字符不是 “END” 而是 “EDB” 的情况下, 向包控制电路 16a 通知 (s1) 该包为 “无效 TLP” 的情况。
接着, 冗余代码生成电路 12 为了保证从交换器 2a 发送的 TLP 的数据完整性, 根 据 TLP 头、 数据有效载荷、 TLP 摘要, 通常对每个 DW(Double Word) 附加用于错误检测的 “冗 余代码” , 但是数据单位也可以是每字节、 每个文字、 每 2WD 或 TLP 整体等中的某个。此外, 冗余代码也可以是奇偶、 ECC(Error Correcting Cord : 纠错码 ) 或针对 TLP 整体的 CRC 或
SUM( 或 Check SUM) 中的某个。
LCRC 序列号检查电路 13 将所接收的 TLP 的 LCRC 及序列号的检查结果信号 (s2) 通知给包控制电路 16a。
此外, 在其他端点 3b 或端点 3c 在包的发送中正在使用发送处理部 2b1 的情况下, 缓存器 15 暂时把进行中继· 处理的 TLP 保持在缓冲器 15 中, 此外, 也能够用作重试用的缓 冲器。
接着, 发送处理部 2b1 的缓冲器读取电路 18 根据发送开始信号 (s3), 从包控制电 路 16a 读取来自缓存器 15 的 TLP, 开始向根组件 1 发送。
此外, 中继电路错误检测电路 21 针对 TLP 头、 数据有效载荷及 TLP 摘要, 与冗余代 码生成电路 12 中附加的冗余代码进行比对, 无论在正常或异常中的那种情况下, 只要能够 修复, 就将 “正常” 通知包控制电路 16a, 若不能修复, 则将 “异常” 通知包控制电路 16a, 作 为在交换器 2a 内的错误的检测信号 (s4)。
接着, 对这样构成的 TLP 处理电路 10 的动作进行说明。 包控制电路 16a 在 LCRC· 序 列号检查电路 13 或缓冲器写入电路 14 中, 从 TLP 的头读取发送目的地, 若不是正在从交换 器 2a 发送其他包, 则向缓冲器读取电路 18 通知发送开始信号 (s3), 若在控制字符检测电路 11 中检测 (s1) 到 EDB, 当是从发送处理部 2b 向发送目的地进行发送的过程中时, 向控制字 符附加电路 22 指示 (s5) 生成使应答 TLP 无效的 “无效 TLP” , 若是向缓存器 15 保存的过程 中, 则丢弃该 TLP。
并且, 若 LCRC 序列号检查电路 13 的输出 (s2) 正常, 则在输出中继电路错误检测 电路 21 的结果之前, 保持正常状态信号, 若从中继电路错误检测电路 21 发送的信号 (s4) 正常, 则向端点 3a 返回 ACK DLLP, 否则向端点 3a 返回 NAK DLLP, 并且为了使传送中的 TLP 无效, 而向控制字符附加电路 22 指示 “无效 TLP” 的输出。
另一方面, 若 LCRC 序列号检查电路 13 的输出 (s2) 为异常, 则不等待中继电路错 误检测电路 21 的结果输出, 而立即将 NAK DLLP 返回给端点 3a, 并且, 若该 TLP 开始发送给 根组件 1, 则为了使发送过程中的 TLP 无效而向控制字符附加电路 22 指示 “无效 TLP” 的输 出, 若是向缓存器 15 保存过程中, 则丢弃该 TLP。
因此, 根据具备本发明的中继设备的 PCI Express 系统, 即使末端的端点 3a ~ 3c 或根组件 1 没有在 TLP 上附加 ECRC, 也能够保证数据完整性, 所以能够谋求系统的冗余化, 并且具有能够容易地以独自规格来灵活应用 TLP 摘要的效果。
本发明不限定于上述的实施例, 只要在 PCI Express 的 TLP 处理电路中附加冗余 性电路和错误检测电路就可以, 该冗余性电路在所接收的 TLP 中生成 “冗余性代码” 来附 加, 此外, 该错误检测电路针对所发送的 TLP, 与在冗余电路中附加的 “冗余代码” 进行比对 来检查中继设备中的数据完整性。此外, 所收发的包的控制是基于 PIC Express 规格的, 所 检查的数据的单位也可以进行各种变更, 在不脱离本发明的主旨的范围内能够进行各种变 形来实施。
工业实用性
本发明能够用于 PCI Express 的设备, 特别是用于 PCI Express 的设备的处理层 包的处理电路中。
符号说明1 根组件 2, 2a 交换器 2a1 ~ 2a3 接收处理部 2b1 发送处理部 2c1 MUX( 复用器 ) 3, 3a, 3b, 3c, 3d 端点 5 CPU 6 存储器 7a ~ 7e PCI Express 总线 10 TLP 处理电路 11 控制字符检测电路 12 冗余代码生成电路 13 LCRC·序列号检查电路歧路 14 缓冲器写入电路 15 缓存器 16 16a 16b 16c 16d 17 18 19 20 21 22 包控制电路部 包控制电路 ACK 生成电路 NAK 生成电路 DLLP 发送电路 MUX( 复用器 ) 缓冲器读取电路 序列号生成电路 LCRC 生成电路 中继电路错误检测电路 控制字符附加电路