之前的入坑篇是看ADI的Survival-Guide,结果我发现还是不如直接看官方标准来得快啊…又是走了条弯路。之前看的稀里糊涂,这次重新整理下传输层组帧的过程。
首先传输层是用来组帧的,将样本转换为non-scrambled Octects。
映射关系可以分为几种,包括:
- 单转换器(converter)至单通道(lane)链接(link)
- 多转换器(同一器件)至单通道链接
- 单转换器至多通道链接
- 多转换器(同一器件)至多通道链接
目测在使用过程中多是最后一种映射,举例就用它了。注意到一个地方,多通道相对于单通道有一个HD(High Density)参数,HD=1表示一个样本会被分割至多个lanes。
然后明确一个点,就是多数情况下S=1,这样帧时钟等于采样时钟。另外看ADI的datasheet提到K一般取32。
多通道下将样本映射为Octects的过程如下图所示,其中重要的点就在于添加控制位/字和结束位/字。
控制位/字
控制位的添加是在样本映射为字的时候。
控制位的添加有两种方式,一种是按bit放在每个样本的LSB之后;另一种是将多个样本的控制位组为控制字,放在样本的后面。
CF就用于指示用的是哪种方式,CF=0为前者,CF>0为后者。
前者情况下的图示
后者情况下可能能节省lane,如下图,最后一个lane专门用于传输控制字。
注意CF是该链接(link)每帧总共的控制字,也就是说L个lanes被分为CF个组,每个组有L/CF个lanes、传输M/CF的样本(所以CF必须是L和M的公因数),按组添加的控制字,如下图所示
阅读datasheet的时候发现用的AD和DA都是固定CF=0,这样实现方便一些?
结束位/字
结束位的添加是在字(word)扩展为半字节组(nibble group, NG)的时候。
之前我还不太理解NG的概念,看了标准才知道这是相对于老版本204添加的,老版本中结束位的添加只能在帧尾,新版本中通过NG的方式推荐将结束位插在每个样本的后面。当然这样会降低开销。如下图所示
通过上述过程添加好控制位和结束位并做好映射关系后,就以帧为单位至数据链路层做下一步处理了。