本文来自自学过程中所记的笔记,可能有不少错漏与胡言乱语,仅供参考,建议主要以ARM官方文件进行参考。原参考文档官网可下载,为了方便各位,我也上传了,需要的自取;
链接:https://pan.baidu.com/s/1voHyFmkpGqABcKH8OSF_Ng
提取码:izix
传输交错:
传输交错指的是不同流经过同一个传输通路的过程。这个功能可以不被支持,从而节省从机的性能;在某些互联拓扑中,只支持以包为单位的传输交错,以提升传输潜力;
从机可以被设置为允许任意数量通路交汇,这可能会影响传输效率,但不会产生错误;如果需要从机更有效率的处理交错,可以将交错限制在不拆包的情况下,这样从机效率会更高; 后者叙述的情况与主机将TLAST长时间置零的情况不兼容;
从机也可被设置成有限交错。在这种情况下,必须采用以下技术之一,以保证从机的能力不被超过:
- 从机只与一个主机相连,所有的数据流交汇都只与一个主机有关;
- 多个主机访问一个从机,且不会交错数据包。此时可以设置一个更高级的控制机制,来保证单次访问从机的主机数量不会超过从机能处理的极限;
- 多个主机访问一个从机,此时可以设置一个更高级的控制机制,来保证单次访问从机的数据量不会超过从机能处理的极限;
传输顺序:
AXI4-Stream要保证传输的有序进行,不允许对传输的顺序进行变更。这样做的好处是:
- 其保证了不会因为重排序增加从机检测到的数据流交错;
- 系统整体的可预测性变强;
- 可以不使用TID,只通过观察同一主机的后一段数据是否完成传输来确定整段数据是否已完成传输;
- 降低了系统的复杂程度;
/我本来以为这段协议到这就是结束了,但是翻PCIe自动生成的DTIM接口的时候,发现多出来一个Protection相关的接口,这个接口在原文根本没提过。回头一看,发现之前搞到的协议是2010版的老古董,Arm官网把这玩意放在Version A 真是害人不浅。又下载了2021发布的Version B,发现多出了来一章”Interface parity protection”,唉/
保护用奇偶校验:
为了更安全地应用,检测与纠正Soc个别线路产生的错误是有必要的。由于错误在链路中具有传播性,EDC (Error Detection and Correction) 必须端到端地覆盖从信源到目的地的所有线路;
其中一个检测方式是定制一个错误检测方案并直接应用在组件上,从而完成一个简单的识错方案。这些组件之间没有逻辑,单bit错误也不会传为多bit错误。这种检测方式的例子有下面提到的奇偶校验,可以发现单bit的错误;
保护接口配置:
错误检测与纠正的接口方案由Check_Type参数来定义,其有以下两种状态:
False: 接口不设置检查信号;
Odd_Parity_Byte_All: 用奇偶校验覆盖所有信号,每一位奇偶校验位最多关联8 Bits信号;
Check_Type的缺省值为False,检测信号只能被添加到AXI5-Stream上;
奇偶校验:
为端口添加的奇偶校验信号具有如下性质:
- 使用奇数校验,即传输的信号始终为奇数个1;
- 每组送校验数据最多8 Bits,这一极限假定于在规定时间产生的奇偶校验位最多有3个逻辑级别;
- 主要控制路径上的控制信号的奇偶校验位是一个单位数的信号(1Bit - 1Bit),该信号来自于原始控制信号的反转。这一信号的生成时间可能比一般信号更为苛刻;
- 对于宽度超过1 Bit的校验信号而言,检测位 [n] 可以检测 [(8n+7):8n]的信号,如果被检测信号位数不为8位的整倍数,检测位每次可以检测的位数也不可超过8 Bits;
只要检测允许项为True,检测位就必须在每次检测中被正确驱动;校验信号必须被加载到所有位,不论其是否为数据信号;如果检测信号对应信号的接口不存在,则检测信号也应被移除;
错误检测行为:
在校验发现数据错误时,系统并没有依据协议必须完成的行为,尽管错误为可能导致很多严重影响。一般来说,接收端可以采取以下行为之一:
- 拒收;
- 在算法允许的情况下,改正错误位;
额外信号增加:
当想要对各个部分进行校验时,需要增加对应的校验信号,如下:
p.s. 1. 附上几个AXI4_Stream传输示例,示例来自互联网:
p.s. 2. 整条AXI-Stream链路充当数据传输的单向通道;