棋子 · 2022年07月25日

CCIX(七)

4. CCIX传输层

开篇中提过,CCIX可以看作两个主要规范,分别是CCIX协议规范和CCIX传输规范。

CCIX 协议规范包含CCIX 协议层和CCIX链接层。这些层规定缓存一致性协议、报文发送、流控和CCIX 传输部分的协议。这正是第三章中的内容。

CCIX 传输规范包含CCIX 和PCIe事务层,PCIe 数据链路层,和CCIX 物理层。这些层负责器件间的物理连接,包括速率和带宽协商,传输包错误检测和重试,和初始包编码协议。这是第四章的主要内容。

开始学习这章之前,再来复习一下CCIX的分层架构。

image.png

从图中可以看出,在CCIX传输规范中,除了添加了CCIX事务层,作为对PCIe事务层的扩展或者替换,而其它各层均遵循复用PCIe标准。按惯例,我们重点看看CCIX事务层,其它部分略过。

4.1 介绍

CCIX规范中使用数据包在CCIX链路层(CCIX Link Layer)和CCIX事务层(CCIX Transaction Layer)之间传递信息。

CCIX传输层(Transport Layer)分为两个部分:一个处理出站(Outbound)信息,另一个处理入站(Inbound)信息。

image.png

CCIX使用数据包在CCIX链路层和CCIX事务层之间传递信息。在发送端,当传输的数据包在事务层(Transaction Layer)、数据链路层(Link Layer)和物理层(Physical Layer)中向下游流动时,它们被扩展,需要加上在这些层处理数据包所需的附加信息。在接收端,发生相反的过程,包从其物理层传输到数据链路层,最后转换为可由接收设备的事务层处理的形式。

image.png
这也是分层架构的基本理念,每一层各司其职,只负责处理本层的任务。在传输端,各层把上一层的数据做为本层的负载,加上本层所需的信息,传输给下一层;在接收端,各层把本层所需要的信息剥离出来,并进行处理,然后把其余的数据传输给上一层。通过分层架构,可以很好的对规范进行划分,从而简化设计。

4.1.1 CCIX事务层

CCIX规范定义了自己的事务层,替换了PCIe的事务层,或者说CCIX事务层是一个简化的PCIe事务层,其中仅支持以下的事务层数据包(Transaction Layer Packets,后面简称TLPs):

  •   优化的TLP
        
  •   PCIe兼容的TLP
        

CCIX事务层的主要职责是组装和拆分TLP。

  •   在接收路径上,CCIX事务层在将TLP转发到CCIX链路层之前,检查TLP的完整性。
        
  •   对于PCIe兼容的TLP,PCIe基本规范中规定的PCIe事务层检查适用。
        
  •   对于优化的TLP,指定了一组新的CCIX事务层检查。
        

CCIX事务层还负责用基于信用的流量控制方式去管理CCIX TLP。在接收路径上,为通过数据完整性检查,并转发到协议层的CCIX TLP返回已发布的流控制信用。在发送路径上,实现了一个信用门(credit gate),以基于可用的发布信用控制CCIX TLP的流量。

4.1.2 PCIe事务层

CCIX规范不修改PCIe事务层。

4.1.3 PCIe数据链路层

CCIX规范不修改PCIe数据链路层,而是按原样使用它。PCIe数据链路层充当PCIe和CCIX事务以及CCIX物理层之间的中间层。数据链路层的主要职责包括链路管理和数据完整性,包括错误检测和错误纠正。

4.1.4 CCIX物理层

CCIX物理层以特定于实现的格式与PCIe数据链路层交换数据包信息。该层负责将从PCIe数据链路层接收的数据包信息转换为适当的序列化格式,并以与连接到链路另一侧的设备兼容的数据速率和PCIe宽度在CCIX链路上传输。

CCIX物理层定义了两种物理层类型。CCIX组件只需要支持其中一种:

  •   PCIe PHY:这种PHY类型符合PCIe基本规范
        
  •   扩展数据速率(Extended Data Rate,EDR):这种PHY类型支持PCIe基本规范的所有要求,具有16.0 GT/s的能力,并将支持的数据速率扩展到20.0 GT/s和25.0 GT/s。
        

4.2 事务层

4.2.1 CCIX事务层架构

CCIX事务层中至少要有一个PCIe虚拟通道(Virtual Channel,VC),也就是VC0,用来交换PCIe TLP。

CCIX事务层还应该有一个CCIX虚拟通道(CCIX VC),用来交换CCIX TLP,但不能是VC0。

image.png

4.2.2 事务层协议 – 数据包定义

CCIX事务层必须支持PCIe兼容的TLP,可以选择支持优化的TLP。

PCIe兼容TLP的格式如下:

image.png

  •   消息路由字段必须设置为010b–按ID路由。
        
  •   所有CCIX TLP的供应商ID字段等于CCID。
        
  •   PCIe兼容TLP的总长度大于4 DW。因此,TLP Fmt字段为011b。Length[9:0]是供应商定义消息的负载中DW总数
        
  •   上图TLP头中DW3和数据负载格式在第三章中定义
        

优化的TLP格式,且须遵循的规则:

image.png

  •   优化的TLP要求是4-byte对齐,且4-byte增量
        
  •   优化的TLP由1 DW TLP头部分和最多可包含127 DW的TLP有效载荷部分组成。
        
  •   字节0的第7位始终为0b
        
  •   Type[0]字段指示CCIX硬件规范版本,目前只有1.0版本
        
  •   TC [2:0]字段,Traffic Class,流量分类
        
  •   Length[6:0]是负载包含的DW数目
        

CCIX允许在一个TLP中打包两个或多个协议消息,从而使协议消息传输的开销最小化。只有当所有协议消息都具有公共CCIX链路时,才支持打包协议消息。对于CCIX事务层来说,打包的消息看起来仍然像一个带负载的TLP。多协议消息的信息在CCIX链路层内编码/解码,对事务层透明。

所有CCIX设备都需要支持CCIXVC的PCIe兼容TLP格式。只有当链路两端都支持优化TLP格式功能时,才可以在CCIX VC上交换优化的TLP。

在PCIe设备发现(discovery)过程中,可以通过读取DVSEC寄存器来判断是否支持CCIX。

4.2.3 CCIX虚拟通道

在正常工作条件下,CCIX VC将仅发送和接收CCIX TLP。CCIX VC为CCIXTLP实现了一个先进先出(FIFO)队列。CCIX VC应当规定一个posted流量控制信用值。这样,设计时FIFO队列的大小就可以确定了。

CCIX VC还应当规定一个non-posted流量控制信用值。CCIX VC上一般预计不会有non-posted TLPs,但是一旦接收到这些TLP,就需要一些资源处理他们。

插播一段,Non-posted(非转发)事务和Posted(转发)事务都是PCIe TLP(事务层包)类型。Non-posted事务分为两个部分,首先是发送端向接收端发送TLP请求,接收端接收到请求完成后向发送端发送完成TLP。Non-posted事务必须等待接收到完成TLP,PCIe总线才能结束当前的TLP。PostedTLP不需要完成TLP返回,此种方式中,TLP还没达到最终目的地之前,PCIe总线就可以结束当前的事务。

4.2.4 接收到的TLP的处理

CCIX事务层接收到的TLP处理流程如下图:

image.png

从数据链路层接收到TLP后,先通过TC[2:0]判断是分发给PCIe虚拟通道还是CCIX虚拟通道。

补充一点,TC 是数据包的头内的一个3-bit的字段。用来将流量分成8种(TC0-TC7)不同的类别,本地应用软件和系统软件根据性能要求确定某个TLP使用什么样的TC标志。虚拟通道是物理缓冲区,它通过使用发送和接收虚拟信道缓冲区,提供一种在链路上实现多个独立数据流的方法。PCIe设备可以实现最多8个VC缓冲区(VC0-VC7)。并且必须要实现 VC0,即最通用的服务类别。设备或交换器需要实现TC/VC映射逻辑,通过该逻辑形成对应关系,把给定的TC号的TLP使用特定的VC号的缓冲区通过链路发送出去。多个TC可以对应一个VC,因而可以使用有限数目的VC缓冲区来降低设备成本。系统软件通过配置寄存器设置 TC/VC 的映射。应用软件确定TLP的TC标志以及设置满足性能要求的TC/VC的映射关系。最简单的情况可以将 TC/VC 映射寄存器设置为TC到VC的一对一关系。

CCIX事务层的行为由寄存器TransactionLayerControl(这个寄存器在第六章DVSEC中描述)的比特位OptimizedTLPGenerationReceptionRoutingEnable来控制。如果这个比特位被设定(set),发送方以优化的TLP格式生成CCIXTLP,传输路径中的交换机和接收方接受优化的TLP,所有接收方都将拒绝PCIe兼容的TLP。如果这个比特位被清除(clear),发送方以PCIe兼容TLP格式生成CCIX TLP,传输路径中的交换机和接收方接受PCIe兼容TLP,所有接收方都将拒绝优化的TLP。

4.2.5 事务排序规则

CCIX事务层应遵循PCIe基本规范中对事务排序的所有要求。在正常工作条件下,CCIX VC将仅发送和接收PCIe兼容的TLP或优化的TLP。

4.2.6 虚拟通道机制

CCIX事务层应遵循PCIe基本规范中对虚拟通道机制的所有要求。VC机制不区分PCIe VC和CCIXVC。后面有时间再分析PCIe的VC机制。

4.2.7 事务层流量控制

CCIX事务层应遵循PCIe基本规范中对流量控制的所有要求,除去那些仅适用于CCIX VC行为的异常。

4.2.8 数据完整性

CCIX事务层应遵循PCIe基本规范中对数据中毒(Data Poisoning)机制的所有要求。优化的TLP格式不支持PCIe数据中毒机制。

CCIX事务层应遵循PCIe基本规范中关于基于端到端CRC(End-to-End CRC)的数据完整性机制的所有要求。优化的TLP格式不支持ECRC机制。

4.2.9 完成超时机制

CCIX事务层应遵循PCIe基本规范中对完成超时(Completion Timeout)机制的所有要求。

4.2.10 链接状态依赖

CCIX事务层应遵循PCIe基本规范中对链接状态依赖(Link Status Dependencies)机制的所有要求。

4.3 CCIX数据链路层

是不是叫PCIe数据链路层更为合适?

4.4 CCIX物理层逻辑块

4.4.1 介绍

物理层分为逻辑子块和电气子块。CCIX传输规范扩展了PCIe基本规范中规定的逻辑和电气子块。

4.4.2 CCIX逻辑子模块

CCIX物理层支持16.0 GT/s,20.0 GT/s和25.0 GT/s的传输速率。

支持扩展数据速率的CCIX设备可以通过控制ESMControl.ESMEnable比特位(从0变成1),来进入扩展速率模式(Extended Speed Mode,ESM)。

 4.4.3 重定时器

关于PCIe Retimer,随着PCIe协议的不断升级,频率越来越高,对数据在线路中的传输长度提出了强烈挑战。为了解决这一问题,PCIe协议在4.0版本种提出了Retimer。Retimer实际上是一种协议感知设备,能更好地将信号传输到更远。

总结:CCIX 传输规范包含CCIX事务层和PCIe 事务层,PCIe 数据链路层,和CCIX 物理层。这些层负责器件间的物理连接,包括速率和带宽协商,传输包错误检测和重试,和初始包编码协议。除去CCIX事务层,其它层均遵循PCIe标准。

老秦谈芯
老秦谈芯

推荐阅读
IC验证er一起学点设计模式(1)---单例模式
怎么在sequence中调用agent中的函数以及如何快速实验你的想法?
验证仿真提速系列--认识“时间”与平台速度定量分析

更多IC设计技术干货请关注IC设计技术专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
19610
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息