cxs (credited extensible stream)是一个流接口协议,主要用于点到点(point-to-point)的数据包通信。cxs接口的主要使用情形是在片上互连和pcie控制器。cxs中的数据传输是单向的,因此一般cxs接口是收/发成对出现的。
看到这里,是不是想起了什么?没错,就是axi-stream,同样也是点到点的流接口传输,比如中断控制器gic的组件之间就采用了axi-stream。axi-stream在 fpga中应用较多,尤其是多媒体领域。
cxs接口的数据传输是单向的,两端是transmitter(tx)和receiver(rx)。一个时钟周期内传输的数据称作flit。一个数据包可以占用一个或多个flit组成。
cxs的接口信号分为两部分,一部分是必须包含的,另一部分是可选信号。其中必须实现的信号如下(以下用正粗体表示信号,斜粗体表示属性):
从接口信号上看,并没有ready信号,也就是说cxs不像其它的amba总线,比如axi,是通过“valid - ready”来控制流量。
正如名字中的含义,cxs接口上的流量控制(flow control)通过信用交换机制实现。其信用机制规则如下:
仅当tx有信用值时才能发送数据当接口刚完成复位或者是第一次active,tx没有信用值,不能发送数据rx通过cxscrdgnt信号授予tx信用在cxscrdgnt被rx置位的每个时钟周期,rx授予一个信用值给tx。每个信用值可用作一次flit传输。rx必须保证每释放一个信用值,即可接收一个flittx置位 cxsvalid ,每个时钟周期发送一个flit,占用一个信用值rx可以授予tx的最大信用值数由cxs_max_credit属性决定tx只有等到cxscrdgnt被置位之后,得到信用才能发送flit可选,tx可以通过cxscrdrtn返还信用值给rx,无需发送flitrx不能重用已消耗或返回的信用如果tx在发送flit或者返回给rx信用的同时接收到一个信用,则tx端的可用信用数不变正常情况下,tx发送一个flit给rx,同时消耗一个信用值;rx接收到flit,如果有能力接收更多的flit,则可以授予tx一个信用值;随后,tx得到新的信用值。从tx消耗信用值到得到新的信用值,这段时间称为信用延迟(credit latency)。为保证tx能够源源不断的发送数据,则需要设计好最大可用的信用数量,以保证不会由于信用延迟造成的断流。
cxs接口的属性包括以下:
其中,tx和rx的属性可以单独设置。
cxs的完整接口信号列表如下:
其中,cxslast用于连续传输;cxsprcltype用于支持多种协议类型。
当cxschecktype 属性被设置成odd_byte_parity,cxs接口上会增加额外的信号线,用于增强接口信号的完整性。对于单bit信号线,增加一个bit,比如 cxsvalid ,增加一个信号 cxsvalidchk ;对于多bit信号,每8bit增加一个信号,比如256-bit的 cxsdata ,增加一个32-bit信号 cxsdatachk 。增加的信号与原信号相加为奇数。
cxs对每个flit中的数据包放置进行了限制,以简化数据路径实现:
数据包的第一个byte必须是16-byte对齐的边界数据包的后续字节占用flit的后续字节数据包可以在任何4-byte对齐的边界上结束。从字节位置开始的数据包将占用该flit中的每个后续字节,直到数据包结束或flit结束。如果flit结束时数据包中还有剩余字节,则该数据包将从下一个flit的字节[0]开始,并占据随后的每个字节位置,直到数据包结束或flit结束。当数据包在flit中结束时,flit中的剩余字节可以不使用。flit中的任何数据包必须从相对于flit开始或前一数据包结束的第一个可用16-byte边界开始。cxscntl信号总线可以分为五个字段,分别为:start,start[n:0]ptr,end,enderror和end[n:0]ptr。下面分别解释。
下图给出cxscntl信号的组成示例。当属性 **cxsmaxpktperflit ** = 4,属性 **cxsdataflitwidth ** = 512时,cxscntl信号共有36-bit。
cxs接口传输满足以下要求的数据包大小需满足:
至少为4字节为4字节的倍数数据大小没有上限如果cxs用于ccix数据包传输,需要遵守ccix的约定。
协议中给出了数据包传输的例子,看一个比较复杂的示例。属性 ***cxsmaxpktperflit *** = 4, ***cxsdataflitwidth *** = 512, ***cxscontinuousdata *** = true,protocol 0用于可变长数据包,protocol 1用于固定长64-byte数据包。在protocol 0中,p0d和p0e分组必须保持在一起;在protocol 1中,p1b和p1c分组必须保持在一起,p1e,p1f和p1分组必须保持在一起。
当属性 **cxslinkcontrol _ ** = explicit *credit *return,cxs接口上会多出一组信号, cxscrdrtn , cxsactivereq ,cxsactiveack和 cxsdeacthint 。
其中 cxsactivereq ,cxsactiveack实现四相位的握手机制。握手机制共分为四种状态:
stopcxs接口在stop状态时没有任何操作,所有的信用被rx收回stop是一个稳定状态,cxs接口可以无限期保持在stoprx此时不可以接收flit,也不可以授予信用tx此时不可以发送flit,也不可以返还信用如果tx有flit等待发送,需要从stop状态转移到activate状态activate此状态为stop到run的过渡期望进入此状态后,期待cxs通路很快进入run状态此状态下,tx必须接收信用,但还不可以发送flitrx此时不可以接收flit,也不可以授予信用rx不可以在状态activate下发送信用。但是允许rx在进入run状态的同一周期内发送信用。由于存在潜在的竞争条件,因此tx在activate状态下可能会收到信用当rx准备好接收flit时,它可以从activate状态转移到run状态runtx和rx在此状态下传输flitrun状态是稳定状态,cxs通道可以一直保持在run状态rx可以接收flit,授予信用,接收返还的信用tx可以发送flit,,接收信用tx允许返还信用给rxtx可以在某些情况下从run状态切换到deactivate状态,比如tx没有flit可以发送了deactivate此状态用于从run到stop的过渡deactivate是一个中间状态在进入此状态前,tx必须停止发送flit,由于潜在的竞争条件,rx有可能在此状态下接收flitrx可以发送信用,当rx发现tx返还信用时必须停止继续发送信用rx可以接收tx返还的信用tx必须发送信用返回,以便将所有信用返回给rx。只有当所有信用都已返回时,rx才能退出该状态并移至stop状态。四种状态转换的关系如下图:
tx始终负责启动从run到stop,或从stop到run的状态更改,例如:
tx端有flit等待发送,所以需要从stop转移到runtx端没有flit可以发送,可以从run切换到stoptx可以观测一个独立的边带信号,判断是否需要从run移动到stop,或从stop移动到runtx可以观测rx发出的cxsdeacthint来判断是否需要从run转移到stop当接口的一方同时执行两个操作时,即存在竞争条件。cxs规范允许数据流和链路控制信号组之间存在不同的延迟。因此,到达时的操作顺序可能与发出的顺序不同。竞争条件之所以会存在,是因为不要求cxsactivereq和cxsactiveack信号不需要在tx和rx之间的其它信号具有相同的延迟。
cxs接口信号间的时序关系如下。
cxsvalid,cxsdata,cxscntl和cxscrdrtn必须是同步关系,且具有相同的延时cxscrdgnt,cxsactiveack,cxsdeacthint必须是同步,但是可以有任意延时cxsactivereq必须是同步驱动,但是接收端可以异步接收,且可以任意延时来看一个例子。
1.t0时刻,tx和rx都处于stop状态,两边都可以关断时钟,甚至电源;t1时刻,tx置位 cxsactivereq ,从stop转移到activate;tx等待rx启动;3.t6时刻,rx完成启动,置位 cxsactiveack ;4. cxscrdgnt与cxsactiveack**在同一时刻被置位;5. t7时刻,tx接收到一个信用,发送一个flit;6. tx在接收到更多信用后,连续发送flit。某些情况下,cxs通道不能中断数据流,例如pcie。这时,需要tx和rx实现一个存储转发(store-and-forward)buffer。
如果rx内置了这个buffer,数据包可以被下游完整接收。rx必须有足够的空间来存储tx所能发送的最大数据包。这种情况下,tx和rx可以设置属性 *** cxscontinuousdata * ** = false。tx无需缓存数据包。
如果rx没有缓冲区并且需要连续数据,则它会将** *cxscontinuousdata *属性设置为true,并且tx也必须将 *cxscontinuousdata ***设置为true。然后,tx必须能够在不依赖其它接口的情况下发出数据包内的所有flit。
如果需要连续流量,必须确保rx有足够的信用来覆盖最坏情况下的往返信用延迟:
rx和tx之间的cxscrdgnt延迟tx端的cxstxcrdgnt和cxstxvalid之间的最大内部延迟,由tx的cxs_max_credit_latency属性描述rx和tx之间的cxsvalid延迟rx端的cxstxvalid和cxstxcrdgnt之间的最大内部延迟,由rx的cxs_max_credit_latency属性描述rx可以发出的最大信用数取决于其缓冲区的大小,可以通过其** cxs max *credit ***属性来描述。
如果下游接口的时钟比cxs链路慢,则可能不需要每个周期发送一个flit。在这种情况下,rx保持恒定流量所需的信用数可能小于往返延迟。
苹果正研发iPhone X Plus和iPhone X SE两款手机
欧盟打造“星链”网络:该卫星网络将为政府机构提供安全通信
斑点猫W400真实体验分享
艾德克斯为手机相关测试提供专业解决方案
苹果智能电池背壳可以获得多久的续航
ARM系列-CXS基础知识介绍
光电液位开关在水冷系统空气冷却系统两大系统中的应用
压敏电阻吸收多余电流原因
开关电源变压器匝数计算
流体高压成型技术的特点及在高端制造领域的应用
MathWorks 发布 2019a 版 MATLAB 和 Simulink
2023第16届中西部国际电池供应链及新能源装备博览会
讨论基于三电平的单级PFC电路设计
封测设备行业成新“蓝海”,耐科装备IPO上市助力国产化替代
空气质量监测站的用处是什么
中国移动发布的战略级产品大云5.0五大特点详解
工控主板的主要接口有哪些,关于这些接口的详细介绍
NVIDIA不着急 GPU架构比对手领先2年多
三星Galaxy S11配备了三星Exynos 990处理器将成为全新的性能王
DNP发布最新投影用透明显示屏,亮度和透明度大幅提高