3.8 KiB
3.8 KiB
专利交底书
CDR串行采样还原模块设计
在无时钟串行采样的需求下,使用16相位时钟对串行输入信号进行过采样
- 串行输入信号分别使用16个相位时钟进行采样,为防止亚稳态,16个相位都是使用移位寄存器打两拍后使用
- 对采样后的信号,在各自相位时钟下再采样8次,重新排序后,即可获得相当于在16倍时钟下的8*16个采样点,
- 毛刺滤波,为了防止潜在的采样毛刺,认为连续3个采样点中2个以上为1,则中间的采样点才为1.
- 在主时钟下,当CDR在解锁状态时,监控中间部分的采样点,当发现跳变时,进入上锁状态,将相位指针
arbCali指向跳变点。 - 每个主时钟的下的采样值为
arbCali+ 8相(半个时钟周期)
时钟频率容错
由于在硬件上不能保证发送方和接收方电路板上时钟源频率的完全一致,在长时间数据传输过程中,采样点有可能向正/负方向偏移,因此设计上需要有足够的裕量保证在最坏的频率偏差下完成最长的一次传输
- 每16个周期有机会检查一次跳变沿的偏移,当跳变沿向前或者向后移动时,相应地
arbCali加1或者减1.这样可以保证采样点不会跳变 - 采样点足够多,可以保证完成一次完整的传输解锁前,采样指针不会移出采样范围
- 传输数据使用8b10b编码,可以增加传输数据的跳变,增加跳变沿偏移时被检测到的机会
- 传输完成后,数据线长时间处于0值状态,CDR解锁。下次传输上锁时,采样指针重新重新初始化到采样点的中间位置
内存单元队列
- 内存单元队列是一个使用FIFO形式组织的SRAM功能单元,其内部包含读指针,写指针,提交指针。
- 写操作根据写指针进行,写入指定的SRAM块
- 读操作根据读指针进行,从指定SRAM块中读出
- 当传输完整完成,提交指针移动到写指针位置,当传输没有成功完成,写指针恢复到提交指针位置
从站的数据接收、转发、处理
数据包分常规包和嗅碳包, 传输分为下行方向和上行方向,系统的物理连接方式为主站-从站1- 从站2-从站3-... 从主站发出,向远离主站的远端从站方向传输的为下行方向。相反的,从远端从站向靠近主站方向传输的方向为上行方向
嗅探包
- 首个嗅碳包由主站主动发出
- 每个从站在接收到下行方向的嗅探包时 (1) 将该嗅探包下行转发给下一级从站 (2) 用嗅碳包上行回复上一级设备表示自己的存在
- 当从站向下行方向发送嗅碳包后进行计时,若超时没有接收到上行的嗅碳包回复,则认为是最后一级从站而闭合其下行发送链路和上行接收链路
常规包
常规包用于完成主要系统功能,常规包传输时,包含大量不同长度的子包,每个子包含对单个或者多个从站的同步控制,数据读和(或)写等功能
系统同步
由于主站和各个从站的上电(复位)时刻不一致,总线传输延迟不一致。为了将所有从站的时间同步到和主站一致,需要使用系统同步功能。主站将向所有从站下发:
- 主站发送同步子包的本地时间
- 主站完成一次数据传输所需要的时间 每个从站依据:
- 上一次传输的下行发送时刻
- 上一次传输的上行接收时刻
- 从站本地时间
根据公式
recoTimeStamp = io.timeStamp + mstTimeStamp - downTimeStamp + (mstDeltaTimeStamp - (upTimeStamp - downTimeStamp)) >> 1
将本地时间校准到和主站时间一致