diff --git a/非对称可靠串行传输技术规范.md b/非对称可靠串行传输技术规范.md index 64a8ee3..055b628 100644 --- a/非对称可靠串行传输技术规范.md +++ b/非对称可靠串行传输技术规范.md @@ -2,7 +2,7 @@ **Asymmetric Reliable Serial Transport Technical Specification** -**版本:V1.1**
+**版本:V1.2**
**日期:2026-10-02**
**作者:周爽** @@ -12,6 +12,7 @@ | 版本 | 日期 | 说明 | |---|---|---| +| V1.2 | 2026-10-02 | 修正同步确认中正常TRAIN处理、初始RETRY_REQ状态响应、中心点边界确认、非均匀窗口选择及会话终止后的发送缓存释放;明确Transaction示例定位、UL调度性能边界和训练时间;补充性能、恢复及BER验收要求。 | | V1.1 | 2026-10-02 | 删除CRC参考代码及其实现专用说明和验证引用;保留CRC参数、覆盖范围、位序、状态递推及结果封装的规范性定义。 | | V1.0 | 2026-10-02 | 统一重新训练为UL校准、DL校准、双向同步确认及新会话建立的完整流程;取消DL单向重训和人为UL异常通知;明确训练失败与单点失败的区别;加入独立等价的1-bit串行CRC模块及32-bit自定义CRC参考函数,完善关键要求和验证索引。 | | V0.9 | 2026-10-01 | 完善分层接口的确定性语义;补充诊断可观察性、接口时序、重新训练握手、验证验收与互操作声明要求。 | @@ -133,7 +134,7 @@ CRC比较通过只表示满足本规范的完整性检查,不能证明不存 |---|---| | 基础规范要求 | 第9~36章的编码与运行行为,以及第37~48章的分层、接口和适用验证要求,按角色实现;不得通过采用示例配置改变固定规则 | | 物理配置约束 | 第5~7章规定外部兼容条件及实现声明;具体器件内部结构不属于统一实现要求 | -| 可选配置 | 第7.3节典型物理配置仅适用于声明采用该配置的设备;第39.3节Transaction业务配置仅适用于声明支持该业务配置的设备 | +| 典型配置与示例 | 第7.3节物理配置仅约束声明采用它的设备;第39.3节为非规范性业务封装/分片示例,业务语义由配套业务文档定义 | | 实现指导与示例 | 标明“建议”“示例”或“典型”的内容用于解释;不替代其引用的精确规则 | 实现可使用功能等价的内部接口、并行算法或状态编码,但必须保持规定的线路编码、事件顺序、接收提交条件及层间接口语义。示意图只展示所标明的路径;未画出的公共优先级和异常行为仍按正文执行。 @@ -282,7 +283,7 @@ flowchart LR 在`UL`方向,从端按循环序号发送业务帧,但不保存待确认副本,也不等待主端确认。主端对通过格式和`CRC32`检查的帧正常提交,对损坏帧直接丢弃;序号跳变或重复不触发`UL`重传。`UL`承载的`CTRL`用于支持`DL`可靠传输,不改变`UL DATA`自身的无确认属性。 -`DATA`、`CTRL`和固定同步类帧均以完整帧为单位仲裁。一帧开始发送后必须连续发送至帧尾;当没有其他帧可发送时,发送端持续发送`IDLE`。线路帧格式及编码规则见第8章至第17章,可靠传输和重传的精确算法见第28章至第36章。 +`DATA`、`CTRL`和固定同步类帧均以完整帧为单位仲裁。正常有效链路上一帧开始发送后必须连续发送至帧尾,link_up撤销时按第26.2.3节中止;当没有其他帧可发送时,发送端持续发送`IDLE`。线路帧格式及编码规则见第8章至第17章,可靠传输和重传的精确算法见第28章至第36章。 ### 4.5 同步监测与异常恢复 @@ -290,7 +291,7 @@ flowchart LR 空闲期间如果不能持续检测到合法`IDLE`,或者帧结束后的预期边界不能恢复,数据链路层按规定门限判定同步异常。任何需要启动新一轮重新训练的异常均从UL校准开始,依次重新校准UL和DL并完成双向同步确认,不跳过已校准方向;训练入口及对端通知按第26章执行。 -任一方向同步丢失都会终止当前双向传输协议会话,并使双方传输协议层复位。重新训练一律执行完整UL→DL流程;可信方向仅用于在途帧排空及训练入口通知,不用于跳过校准。同步恢复后,主端通过`POLL_REQ`取得从端当前的`WIN_BYTES`并确认控制帧通路可用;从端必须在初始响应中发送`ACK_NEXT=0`,主端把实际收到的`ACK_NEXT`作为新会话起始序号,不将其解释为旧会话累计确认。完成新会话初始化后,传输协议层才允许对业务发送接口置位`app_tx_ready`。详细规则见第26.2节、第35章和第46章。 +任一方向同步丢失都会终止当前双向传输协议会话,并使双方传输协议层复位。重新训练一律执行完整UL→DL流程;link_up撤销同时关闭旧普通帧发送通路,协议层观察到低电平后可释放旧会话发送缓存,不等待排空;训练入口通知不用于跳过校准。同步恢复后,主端通过`POLL_REQ`取得从端当前的`WIN_BYTES`并确认控制帧通路可用;从端必须在初始响应中发送`ACK_NEXT=0`,主端把实际收到的`ACK_NEXT`作为新会话起始序号,不将其解释为旧会话累计确认。完成新会话初始化后,传输协议层才允许对业务发送接口置位`app_tx_ready`。详细规则见第26.2节、第35章和第46章。 ### 4.6 后续内容索引 @@ -452,7 +453,7 @@ T_{有效}=UI-T_{tx\_jitter}-T_{rx\_jitter}-T_{channel\_ISI}-T_{skew}-T_{setup/h T_{margin,side}\approx\frac{T_{有效}}{2} \] -最终最小窗口、中心保护量和重训阈值必须由发送/接收抖动、PCB/连接器损耗、差分偏斜、电源噪声、延迟 DNL/INL、PVT、ASIC 建立保持时间和 AC 耦合基线漂移共同确定。 +窗口及中心保护量的实现配置须依据发送/接收抖动、PCB/连接器损耗、差分偏斜、电源噪声、延迟DNL/INL、PVT、ASIC建立保持时间及AC耦合基线漂移确定,并满足第23章规定的下限和判据。重训练门限及固定计数按第27章执行,不得由物理配置任意改变。 #### 7.6.2 主要实现风险 @@ -498,7 +499,7 @@ T_{margin,side}\approx\frac{T_{有效}}{2} - 所有帧均以 32位字为单位,长度为 4 字节整数倍。 - 在没有其他帧可发送时,连续发送`IDLE`。帧之间可以直接相接,不要求额外`IDLE`。 -- 一帧开始后必须连续发送至结束。不得在帧内插入`IDLE`、控制帧、等待字或其他填充。 +- 正常有效链路上一帧开始后必须连续发送至结束;link_up撤销时按第26.2.3节中止旧普通帧。不得在帧内插入`IDLE`、控制帧、等待字或其他填充。 - 不使用字节转义、位填充、EOF、8b/10b 或 64b/66b 编码。 - `PAYLOAD`不自动补齐;提交给编码器的数据长度必须满足本规范。`DATA`和`CTRL`的逻辑帧不包含CRC;数据链路层追加4字节CRC后再执行等长扰码,因此其线路帧比对应逻辑帧增加4字节。 - 正常接收解析以已建立的32位字对齐为前提。训练期间按第21章及第24章建立对齐;运行期按第25.5节保持当前字相位恢复帧边界,恢复失败后重新训练。本规范不规定器件内部的对齐实现方法。 @@ -692,7 +693,7 @@ W(2+LEN/4) = CRC32 ### 13.2 由用户业务定义的内容 -基础传输机制不解释`PAYLOAD`内部字段,也不强制规定统一的`PAYLOAD`格式。未采用本规范可选业务应用配置时,通信双方自行约定以下内容: +基础传输机制不解释`PAYLOAD`内部字段,也不强制规定统一的`PAYLOAD`格式。通信双方应在配套业务文档中约定以下内容: - 操作码、命令类型或事务类型; - 寄存器地址、寄存器宽度、读写方向及连续访问格式; @@ -700,7 +701,7 @@ W(2+LEN/4) = CRC32 - 业务状态码、权限检查和执行结果; - 业务数据的版本、子协议或应用级校验。 -通信双方自行定义的业务格式不得改变`DATA`逻辑帧格式,不得引入新的线路`SOF`,也不得改变本规范规定的确认、窗口和重传语义。声明采用第39.3节Transaction应用配置时,必须遵守该节规定;未声明采用时,第39.3节不构成基础传输规范的强制要求。 +通信双方自行定义的业务格式不得改变`DATA`逻辑帧格式,不得引入新的线路`SOF`,也不得改变本规范规定的确认、窗口和重传语义。第39.3节只提供封装与分片示例,不规定业务协议;Transaction的字段含义、路由、操作和长度语义由具体业务文档定义,不增加基础传输互操作要求。 ### 13.3 传输成功与业务执行的边界 @@ -774,7 +775,7 @@ W3 = CRC32 | `POLL_REQ` | 主端→从端 | 检查CRC、`FLAGS`、方向及当前会话状态;忽略`ACK_NEXT`和`WIN_BYTES`的数值,不检查其范围或对齐,不更新UL序号或窗口 | | 运行期`ACK/UPDATE` | 从端→主端,已初始化会话 | `WIN_BYTES`须4字节对齐;`ACK_NEXT`须通过第31.6节累计ACK检查 | | 运行期`RETRY_REQ` | 从端→主端,已初始化会话 | 与状态ACK执行相同检查,再按第32.3节及第35章处理重传请求 | -| 初始`ACK/UPDATE` | 从端→处于`M_WAIT_STATUS`的主端 | `WIN_BYTES`须4字节对齐;绕过运行期ACK区间检查,以`ACK_NEXT`初始化新会话序号 | +| 初始状态响应,FLAGS为ACK/UPDATE或RETRY_REQ | 从端→处于M_WAIT_STATUS的主端 | CRC、方向及FLAGS合法,WIN_BYTES须4字节对齐;绕过运行期ACK区间检查,以ACK_NEXT初始化序号;RETRY_REQ仅作为状态,不触发重传 | 主端发送POLL_REQ时按第31.2节将两个占位字段置0;从端不得以占位字段非零或不对齐拒绝CRC及其他适用检查均合法的POLL_REQ。CRC始终覆盖实际收到的全部`CTRL`字段。 @@ -951,7 +952,7 @@ flowchart LR 固定同步帧直接输出对应`SOF`和四个固定 PRBS 字;`IDLE`直接输出一个码字。两者都不经过 CRC 和业务扰码路径。 -本节只规定固定同步类帧和`IDLE`的线路生成方式。固定同步类帧的发送种类、次数和时机由第四篇的链路训练与同步状态机决定;`DATA`和`CTRL`的发送调度及优先级由第35章规定。数据链路层只在完整帧边界选择下一帧;没有固定同步类帧或传输协议层逻辑帧需要发送时,持续发送`IDLE`。 +本节只规定固定同步类帧和`IDLE`的线路生成方式。固定同步类帧的发送种类、次数和时机由第四篇的链路训练与同步状态机决定;`DATA`和`CTRL`的发送调度及优先级由第35章规定。正常有效链路上,数据链路层只在完整帧边界选择下一帧;link_up撤销时中止旧普通帧并按第26.2.2节执行训练入口保护;没有固定同步类帧或传输协议层逻辑帧需要发送时,持续发送`IDLE`。 ### 17.2 接收解析 @@ -1036,17 +1037,18 @@ flowchart LR ## 18. 总体同步流程 -每条链路独立执行以下顺序,必须先校准`UL`,再校准`DL`。上电和每一轮重新训练均执行完整流程;重新训练前先按第26.2.2节完成旧会话终止、可信在途帧排空及对端训练入口通知。主端在UL扫描期间持续请求发送DL `IDLE`,不发送DL `TRAIN`,从端在`S_TRAIN`中持续发送UL `TRAIN`。 +每条链路独立执行以下顺序,必须先校准`UL`,再校准`DL`。上电和每一轮重新训练均执行完整流程;重新训练前先按第26.2.2节完成旧会话终止、旧普通帧中止及对端训练入口通知。主端在UL扫描期间持续请求发送DL `IDLE`,不发送DL `TRAIN`,从端在`S_TRAIN`中持续发送UL `TRAIN`。 ```mermaid sequenceDiagram participant M as 主端 participant S as 从端 - Note over M,S: 时钟、串行及延迟资源就绪;完成可信在途排空 + Note over M,S: 时钟、串行及延迟资源就绪;旧普通帧发送已关闭 M->>S: DL可发送时,完整发送20个SYNC_RESET S-->>M: 持续TRAIN Note over M: UL扫描期间DL持续请求发送IDLE Note over M: 每个IDELAY最多检测200帧
连续50个TRAIN正确则该点通过 + Note over M: 装载UL中心并等待配置就绪
200帧内连续ALIGN_CONFIRM_FRAMES个TRAIN建立边界 loop 每个DL ODELAY测试点 Note over M: 设置ODELAY并等待当前配置就绪 M->>S: 持续TRAIN,单点最多200帧时间 @@ -1075,7 +1077,7 @@ sequenceDiagram 1. 从端的时钟和串行资源有效后自动发送`TRAIN`,不等待控制命令; 2. 主端设置每个`IDELAY`后必须等待当前延迟配置就绪,再清除历史并开始该点测量; 3. 每个`IDELAY`点最多检测200个固定帧时间;连续正确检测50个`TRAIN`则该点通过,否则超时失败; -4. `UL`窗口中心装载且配置就绪后,主端扫描`DL` `ODELAY`; +4. UL窗口中心装载、配置就绪并通过第21.2节中心字边界确认后,主端扫描DL ODELAY; 5. 主端设置每个`ODELAY`后必须等待当前延迟配置就绪,再清除ACK历史并开始发送该点的`TRAIN`; 6. 每个`ODELAY`点持续发送`TRAIN`,单点最多200个固定帧时间; 7. 从端连续正确检测50个`TRAIN`后固定发送50个`TRAIN_ACK`;应答期间不累计下一轮`TRAIN`; @@ -1096,6 +1098,8 @@ sequenceDiagram 固定帧时间为`160/LINE_RATE`。连续帧数量判据与线路速率无关,具体时间必须按所选物理配置换算。采用第7.3节的750 Mbps典型配置时,一个固定帧为213.333 ns;50帧约10.667 μs,200帧约42.667 μs,10000帧`SYNC`约2.133 ms/方向,20帧`SYNC_ACK`约4.267 μs。400个32位`IDLE`为12800 bit,约17.067 μs;20个32位`IDLE`为640 bit,约0.853 μs。 +在无错误、无需重试的750 Mbps典型配置下,DL和UL各连续检测10000个160位`SYNC`所占线路时间合计约4.267 ms。这只是双向同步确认长序列的时间,不包含`SYNC_ACK`发送及状态切换、训练入口保护、延迟扫描、资源等待、失败重试、运行入口和新会话初始化。完整恢复时间随实现配置和故障条件而变化;资源持续未就绪时不能给出固定的最坏恢复时间。项目若要求恢复时限,须结合资源就绪上界及完整训练和会话建立路径给出预算并验证。 + ### 18.1 连续计数、超时与帧切换公共规则 “连续N个目标固定帧”表示在同一已确认接收边界上,相邻N个160位帧位置全部完整匹配目标固定帧。任一位置出现目标帧不匹配、其他固定帧、`IDLE`、普通协议帧、未知内容、接收数据无效或边界改变时,连续计数立即清零。 @@ -1109,7 +1113,7 @@ sequenceDiagram 5. 状态离开后清零该状态专用计数器; 6. 计数器达到终值后饱和或立即转换,不允许回卷。 -当重新训练仍需使用某个可信方向传递`TRAIN`、`SYNC_RESET`或其他固定帧时,该方向必须保持完整线路帧原子性。已经开始发送的普通帧必须完整结束,随后从下一个帧边界开始发送训练固定帧。若物理资源已经失效而无法完整结束当前帧,可以立即中止,但该方向必须被判为不可信,不得依赖它完成可信帧排空或训练入口通知。重新训练范围不因方向可信与否而改变。 +普通传输期间必须保持完整帧发送;link_up撤销是普通帧原子性的异常退出条件,链路层必须关闭旧帧输入和发送,不要求排空旧普通帧。训练固定帧之间的正常状态切换仍在完整固定帧边界执行;资源失效可中止固定帧。训练入口通知及旧帧被对端暂时当作候选内容的情况按第26.2.2节处理。 ## 19. 主端顶层状态机 @@ -1121,15 +1125,16 @@ sequenceDiagram stateDiagram-v2 [*] --> M_WAIT_RESOURCE: power_on M_WAIT_RESOURCE --> M_RETRAIN_PREP: resources_ready - M_RETRAIN_PREP --> M_SYNC_RESET_TX: DL发送资源可发送完整固定帧 + M_RETRAIN_PREP --> M_SYNC_RESET_TX: DL可用且入口保护完成或可省略 M_RETRAIN_PREP --> M_RX_TRAIN: DL不可用,依靠对端监测进入训练 M_SYNC_RESET_TX --> M_RX_TRAIN: 20个完整SYNC_RESET发送结束 - M_RX_TRAIN --> M_TX_TRAIN: UL窗口合格且中心配置就绪 + M_RX_TRAIN --> M_TX_TRAIN: UL窗口合格且中心字边界确认通过 M_RX_TRAIN --> M_RX_TRAIN: UL扫描无合格窗口,重新扫描 M_TX_TRAIN --> M_DL_CONFIRM: DL窗口合格且中心配置就绪 M_TX_TRAIN --> M_RETRAIN_PREP: DL整轮扫描失败或UL失效 M_DL_CONFIRM --> M_UL_CONFIRM: 10个连续SYNC_ACK - M_DL_CONFIRM --> M_RETRAIN_PREP: 完整TRAIN、确认超时或同步异常 + M_DL_CONFIRM --> M_DL_CONFIRM: 完整TRAIN / 清ACK连续计数,保持总体计时 + M_DL_CONFIRM --> M_RETRAIN_PREP: 确认超时或同步异常 M_UL_CONFIRM --> M_RUN_ENTRY: 10000个连续UL SYNC M_UL_CONFIRM --> M_RETRAIN_PREP: 完整TRAIN、确认超时或同步异常 M_RUN_ENTRY --> M_RUN: 首个完整UL IDLE @@ -1146,11 +1151,11 @@ stateDiagram-v2 | 状态 | 主要动作 | 离开条件 | |---|---|---| | `M_WAIT_RESOURCE` | 等待公共资源可用;保持`link_up=0` | 资源就绪后进入`M_RETRAIN_PREP` | -| `M_RETRAIN_PREP` | 撤销链路可用状态,终止旧会话,清除本轮训练上下文;若可信方向已有在途帧,先完整排空;禁止新普通帧 | 准备及排空完成后,DL发送资源可用则进入`M_SYNC_RESET_TX`,否则按第26.2.2节依靠对端监测并进入`M_RX_TRAIN` | +| `M_RETRAIN_PREP` | 关闭旧普通帧输入和发送,撤销link_up,清除训练上下文;按第26.2.2节完成入口保护 | 入口准备完成后,DL资源可用则发送SYNC_RESET;否则等待或依靠对端监测进入训练 | | `M_SYNC_RESET_TX` | 连续完整发送20个`SYNC_RESET`;不因收到TRAIN提前停止;不发送普通协议帧 | 20个完整发送结束后无条件进入`M_RX_TRAIN` | -| `M_RX_TRAIN` | DL持续请求发送IDLE;执行UL延迟扫描、窗口分析和中心点装载;只以TRAIN作UL测量目标 | UL合格后进入`M_TX_TRAIN`;整轮无合格窗口时重新执行完整UL扫描 | +| `M_RX_TRAIN` | DL持续请求发送IDLE;执行UL延迟扫描、窗口分析和中心点装载;只以TRAIN作UL测量目标 | UL窗口合格且中心字边界确认通过后进入M_TX_TRAIN;整轮无合格窗口时重新执行完整UL扫描 | | `M_TX_TRAIN` | 执行DL延迟扫描、每点400个IDLE隔离、窗口分析和中心点装载 | DL合格后进入`M_DL_CONFIRM`;整轮失败或UL失效时进入统一重训练入口 | -| `M_DL_CONFIRM` | DL持续发送SYNC,等待从端返回SYNC_ACK | 连续10个正确SYNC_ACK;失败时进入统一重训练入口 | +| `M_DL_CONFIRM` | DL持续发送SYNC,允许正常UL TRAIN;TRAIN只清ACK连续计数,不改变总体超时 | 连续10个正确SYNC_ACK;确认超时或同步异常时进入统一重训练入口 | | `M_UL_CONFIRM` | DL继续持续发送SYNC;忽略残余SYNC_ACK,从首个UL SYNC开始连续计数 | 连续10000个正确SYNC;失败时进入统一重训练入口 | | `M_RUN_ENTRY` | DL持续发送IDLE;允许残余UL SYNC,等待首个完整UL IDLE | 首个完整UL IDLE通过;失败时进入统一重训练入口 | | `M_RUN` | 发送IDLE或普通协议帧;运行期监测 | 需要重训练时进入统一入口;公共资源失效则等待资源 | @@ -1158,17 +1163,17 @@ stateDiagram-v2 ### 19.3 主端的确定性要求 - 每一轮重新训练必须从`M_RX_TRAIN`开始重新校准UL,随后执行DL校准、双向同步确认和运行入口;不得利用旧延迟配置跳过任一阶段。 -- 所有重训练触发先按`M_RETRAIN_PREP`及第26.2.2节处理对端训练入口和可信在途帧排空;DL可发送完整固定帧时,主端先完整发送20个SYNC_RESET,包括上电统一入口,不因从端已经发送TRAIN而提前结束。 +- 所有重训练触发先按`M_RETRAIN_PREP`及第26.2.2节处理中止旧普通帧及对端训练入口保护;DL可发送完整固定帧时,主端先完整发送20个SYNC_RESET,包括上电统一入口,不因从端已经发送TRAIN而提前结束。 - 主端在UL扫描期间只请求发送DL IDLE,不发送DL TRAIN,避免从端产生TRAIN_ACK干扰UL测量。旧固定帧事件不得带入新点统计;只有连续50个正确UL TRAIN才能使当前点通过。 - 每个接收或发送延迟配置必须就绪后才可开始测量;具体就绪判断仍由物理实现提供。 - 单个扫描点失败只记录该点并继续扫描,不启动新一轮训练。UL整轮扫描无合格窗口时从首点重新扫描UL;DL整轮扫描无合格窗口、UL失效或确认/运行入口失败时,经统一入口重新开始UL校准。 -- `M_DL_CONFIRM`、`M_UL_CONFIRM`和`M_RUN_ENTRY`收到完整TRAIN时放弃当前轮次,经统一入口重新开始UL校准。`M_RX_TRAIN`中的TRAIN是正常测量数据,`M_TX_TRAIN`及点间隔中的TRAIN是正常从端训练流,不作为重复重训请求。 +- M_DL_CONFIRM等待从端累计10000个DL SYNC时,完整合法UL TRAIN属于正常等待流,不触发重训练;它使SYNC_ACK连续计数清零,但不重新开始、不暂停总体确认超时。主端继续发送SYNC,连续10个正确SYNC_ACK才通过。M_UL_CONFIRM或M_RUN_ENTRY收到完整TRAIN则放弃本轮,经统一入口重新校准UL;此时从端已退出已完成的确认阶段。M_RX_TRAIN、M_TX_TRAIN及点间隔中的正常TRAIN也不触发重复重训练。 - SYNC_ACK只在`M_DL_CONFIRM`统计,连续10个正确帧通过;进入`M_UL_CONFIRM`后允许忽略剩余SYNC_ACK,从首个完整SYNC开始连续累计10000个。 - `M_RUN_ENTRY`在已知边界匹配首个完整UL IDLE后立即进入`M_RUN`。入口超时不再依据UL是否仍收到SYNC选择不同恢复范围,一律重新执行完整训练。 - `M_RUN`收到完整TRAIN时撤销`link_up`并进入统一训练入口;该事件可来自从端DL异常、从端协议故障或从端重新启动,不需要区分具体来源。 - 延迟点隔离仍固定发送400个完整IDLE,期间忽略测试应答;UL失效则退出DL扫描,重新开始完整流程。 - 任一训练状态失败不使状态机永久停止;训练重试计数仅用于诊断。全局资源不可用时等待恢复,不把资源异常当作普通失败点。 -- 任一重新训练均终止整个旧协议会话;可信在途帧按第26.2.3节排空,已提交接收数据及已形成发送结果按原接口契约保留。 +- 任一重新训练均终止整个旧协议会话;旧普通帧按第26.2.3节中止,观察到link_up=0后释放旧发送缓存,已提交接收数据及已形成发送结果按原接口契约保留。 - 完整训练和运行入口完成后,通过初始POLL_REQ/ACK建立新会话,才允许接受新的业务发送请求。 ## 20. 从端顶层状态机 @@ -1191,7 +1196,7 @@ stateDiagram-v2 S_RUN_ENTRY_IDLE_TX --> S_WAIT_RESOURCE: common resource lost S_RUN --> S_TRAIN: sync_lost, unexpected fixed frame, or SYNC_RESET S_RUN --> S_WAIT_RESOURCE: common resource lost - S_RUN --> S_TRAIN: 本地协议故障请求 / 排空可信在途帧后发送TRAIN + S_RUN --> S_TRAIN: 本地协议故障请求 / 中止旧普通帧后持续TRAIN S_TRAIN --> S_TRAIN: SYNC_RESET / clear training history ``` @@ -1208,7 +1213,7 @@ stateDiagram-v2 -从端因DL异常、本地协议故障或完整SYNC_RESET进入`S_TRAIN`时,均撤销`link_up`并终止旧会话。可信UL已开始的帧必须先排空,随后持续发送TRAIN;不再输出人为异常码流,也不等待主端先宣告UL失步。状态可先进入`S_TRAIN`,但TRAIN发送必须等待可信排空结束;资源不可用时等待资源。该公共入口规则也适用于训练、确认和运行入口状态中的重新训练事件。 +从端因DL异常、本地协议故障或完整SYNC_RESET进入S_TRAIN时,均关闭旧普通帧输入和发送并撤销link_up,随后持续发送TRAIN。协议层观察到link_up=0即可清理旧发送上下文,不等待tx_frame_done。资源不可用时先等待资源;恢复后的持续TRAIN必须使主端最终退出旧候选解析并进入训练。该规则适用于确认及运行入口状态中的重新训练事件。 ### 20.3 `TRAIN_ACK`调度 @@ -1220,7 +1225,7 @@ stateDiagram-v2 2. 连续计数达到50时,锁存`train_ack_active=1`。已经开始的UL `TRAIN`须完整结束,随后连续发送固定50个`TRAIN_ACK`。 3. 每个`TRAIN_ACK`完整发送结束才计数;第50个完整结束后立即清除活动标志和`TRAIN`连续计数,并从下一完整帧恢复持续发送`TRAIN`。 4. `TRAIN_ACK`发送期间不累计下一轮`TRAIN`;`IDLE`及后续`TRAIN`检测错误均不提前缩短本批50帧,不延长或重新启动本批应答。恢复`TRAIN`后从零重新累计,上一批计数不得沿用。 -5. 进入同步确认状态时清除`TRAIN`相关计数;完整`SYNC_RESET`、同步异常或资源失效按第18.1节优先级处理。资源仍可用的可信发送方向须完整结束当前帧后切换;无法完成时将该方向判为不可信。 +5. 进入同步确认状态时清除`TRAIN`相关计数;完整`SYNC_RESET`、同步异常或资源失效按第18.1节优先级处理。正常训练状态切换须完整结束当前固定帧后切换;资源失效可中止固定帧。旧普通帧会话终止按第26.2.3节中止,不适用固定帧正常切换规则。 从端不需要知道ODELAY档位或主端测试点编号。固定50帧应答取代等待`IDLE`结束应答,不再设置ACK活动超时保护。主端按第22.3节固定发送400个`IDLE`隔离相邻测试点。 @@ -1257,7 +1262,9 @@ stateDiagram-v2 RX_NEXT_POINT --> RX_ANALYZE_WINDOW: scan complete RX_ANALYZE_WINDOW --> RX_LOAD_CENTER: valid window found RX_ANALYZE_WINDOW --> RX_SET_DELAY: no valid window, restart scan - RX_LOAD_CENTER --> [*]: center ready and boundary rebuilt + RX_LOAD_CENTER --> RX_CENTER_ALIGN: rx_delay_ready / 清历史并开始200帧计时 + RX_CENTER_ALIGN --> [*]: ALIGN_CONFIRM_FRAMES个连续TRAIN + RX_CENTER_ALIGN --> RX_SET_DELAY: 200帧未通过 / 清本轮结果,从首点重扫UL ``` 图中的结束节点表示`UL`扫描成功,控制权返回主端顶层状态机并进入`M_TX_TRAIN`。任一子状态下公共资源失效时,立即中止扫描并进入`M_WAIT_RESOURCE`;该全局异常转移未逐条画出。尚未记录的当前点不得写入扫描位图,已有扫描结果在重新训练时失效。 @@ -1271,10 +1278,13 @@ stateDiagram-v2 | `RX_RECORD` | 按第21.3节记录通过、失败和错误数 | 下一拍 | | `RX_NEXT_POINT` | 选择下一个延迟档位 | 仍有测试点则继续,否则分析 | | `RX_ANALYZE_WINDOW` | 找最长连续通过区间并选择中心 | 有合法窗口或失败 | -| `RX_LOAD_CENTER` | 请求装载中心延迟档位,等待`rx_delay_ready`并重新建立字边界 | 完成后进入`DL`扫描 | +| RX_LOAD_CENTER | 请求装载中心档位,等待rx_delay_ready | 配置就绪后进入RX_CENTER_ALIGN | +| RX_CENTER_ALIGN | 清旧边界历史,从首个测量单位开始200帧总计时;搜索完整TRAIN并累计连续匹配 | 连续ALIGN_CONFIRM_FRAMES个TRAIN则完成UL校准;200帧仍未通过则清本轮结果,从首点重扫UL | `rx_delay_ready`是抽象就绪条件,表示当前请求的`IDELAY`配置已经生效且接收路径可以开始有效测量。本规范不规定它由器件状态信号、固定等待周期、配置回读还是其他机制产生。设置请求未被接受或就绪条件长期无效时,状态机可以保持在`RX_SET_DELAY`、`RX_WAIT_DELAY_READY`或`RX_LOAD_CENTER`,本规范不要求统一超时;挂起期间必须保持`link_up=0`和`session_ready=0`,不得启动200帧单点计时、搜索候选边界、累计`TRAIN`、更新扫描位图或发送普通协议帧。资源全局就绪状态撤销时进入`M_WAIT_RESOURCE`,不得把该事件记录为普通失败点。 +RX_CENTER_ALIGN使用现有ALIGN_CONFIRM_FRAMES判据,不新增眼图复验门限。确认计数包含第一个正确TRAIN,错误或候选位置改变时清零;计时不因错误或换候选重新开始,通过与超时同周期时通过优先。配置已就绪却无法重建边界,不能按资源未就绪无限等待。资源失效仍优先进入M_WAIT_RESOURCE。 + ### 21.3 测试点判定 `IDELAY`用于调整串行数据的采样相位,接收对齐搜索用于建立并行字及32位协议字的分组边界,两者属于相互独立的搜索维度。每个`IDELAY`测试点都必须清除旧边界历史,并在该点的200帧总计时内重新完成边界搜索和连续`TRAIN`判定。接收对齐候选位置的形成和切换方法属于物理接口适配实现,本规范不作限定。 @@ -1366,17 +1376,17 @@ stateDiagram-v2 ## 23. 通过窗口与中心点选择 -### 23.1 扫描位图 +### 23.1 扫描位图与确定性窗口选择 -每个扫描点产生一个 `pass[i]`。主端: +每个点记录pass[i]、唯一档位编号及实际延迟/相位映射。均匀步进时N个连续通过点的首尾跨度为(N-1)×步进,点数与时间跨度比较等效;非均匀步进必须用实际映射,不以点数代替宽度。 -1. 若全部扫描点均通过,按第23.2节的`ALL_PASS`规则处理,不执行基于失败边界的中心点计算; -2. 否则按照实现配置采用环形或线性窗口算法找出全部连续通过区间;环形算法必须先合并跨越最小和最大延迟档位的同一窗口; -3. 选择长度最大的区间; -4. 多个区间等长时,选择最接近标称延迟档位的区间; -5. 仍相同时选择延迟档位编号较小的区间; -6. 偶数点窗口有两个中心点时,选择更接近标称延迟档位者,仍相同则取较小延迟档位; -7. 装载所选点;`UL`所选点随后用于接收`TRAIN_ACK`和`UL` `SYNC`,`DL`所选点随后用于发送`TRAIN`和`DL` `SYNC`。 +1. ALL_PASS按第23.2节选择标称点,不推断失败边界。 +2. 按声明的线性或环形模式识别全部连续通过段。环形段先在模UI排序的一周序列上合并,再展开为连续时间坐标;左右失败采样点也采用同一展开坐标。 +3. 对每段按第23.2节检查点数、实际时间跨度及边界完整性,并找出距离左右失败采样点均满足声明保护量的通过点。没有合格中心候选的段必须剔除;不能先选最长段再发现不合格而放弃其他合格段。 +4. 每段几何中心为首尾通过点展开坐标的平均值。在合格中心候选中选择距几何中心最近的通过点;平局时选距标称相位最近者,仍相同取唯一档位编号较小者。 +5. 在合格段中选择实际首尾通过点时间跨度最大的段;平局时比较各段已选中心到标称相位的距离,仍相同取中心档位编号较小者。 +6. 线性距离为同一展开坐标下的绝对差;环形距离为min(abs(phi1-phi2), UI-abs(phi1-phi2)),phi1和phi2均归一化到[0,UI)。与跨界段几何中心比较时使用展开坐标,不直接相减原始档位编号。 +7. 装载所选中心。不同物理映射不要求选择相同档位,但相同配置和扫描结果必须得到确定选择,并满足所有窗口判据。中心点装载后的UL边界重建按第21.2节执行。 ### 23.2 最小窗口判据 @@ -1417,7 +1427,7 @@ RX\_MIN\_PASS\_TAPS=\left\lceil\frac{MIN\_PASS\_WINDOW\_TIME}{RX\_DELAY\_STEP\_T TX\_MIN\_PASS\_TAPS=\left\lceil\frac{MIN\_PASS\_WINDOW\_TIME}{TX\_DELAY\_STEP\_TIME}\right\rceil+1 \] -加1是因为连续通过`N`个等间隔采样点时,首尾采样点之间只有`N-1`个延迟间隔。若延迟步进不均匀,必须使用物理实现提供的实际延迟映射计算首尾通过点的时间跨度;上述等步进公式仅用于得到保守的点数下限。 +加1是因为连续通过`N`个等间隔采样点时,首尾采样点之间只有`N-1`个延迟间隔。非均匀扫描必须用实际相位映射计算首尾跨度。点数下限按ceil(MIN_PASS_WINDOW_TIME / DELAY_INTERVAL_MAX)+1派生,其中DELAY_INTERVAL_MAX为该方向扫描序列全部相邻实际相位间隔的最大值,环形模式包括首尾间隔。该点数条件只是必要下限,不能替代实际跨度和中心保护量检查;均匀扫描时它自然退化为上述等步进公式。所有相位时间及保护量须以声明的精度表示,同精度内相等才作平局,不得依赖未声明的浮点容差。 ### 23.3 跨延迟档位回卷 @@ -1596,7 +1606,7 @@ CRC_ERROR_RETRAIN_THRESHOLD = 8 - 主端主动重训练或从端收到完整SYNC_RESET; - 公共资源失效后恢复,或任一端重启需要重建链路。 -主端按第26.2.2节统一入口从UL校准开始;从端撤销link_up并进入S_TRAIN,可信UL在途帧排空后持续发送TRAIN。公共资源不可用时先等待资源恢复。 +主端按第26.2.2节统一入口从UL校准开始;从端撤销link_up并进入S_TRAIN,旧UL普通帧中止后持续发送TRAIN。公共资源不可用时先等待资源恢复。 单个延迟点失败只记录并继续本轮扫描,不属于新一轮重新训练。UL扫描整轮无合格窗口时从首点重新扫描UL;DL整轮扫描失败不能只重扫DL,必须重新执行完整UL→DL流程。单个CRC错误、可恢复的边界错误及业务层错误不直接触发重新训练,仍按各自既定处理机制执行。 @@ -1628,29 +1638,40 @@ link_up = ul_sync_up && dl_sync_up && run_entry_complete ```text 撤销link_up并终止旧会话 -→ 可信在途帧排空及对端训练入口通知 +→ 旧普通帧中止及对端训练入口通知 → UL扫描、窗口选择和延迟装载 → DL扫描、窗口选择和延迟装载 → DL同步确认 → UL同步确认 → 运行入口 → 初始POLL_REQ/ACK → 新会话业务传输 ``` -主端通过`M_RETRAIN_PREP`准备入口,清除训练上下文并禁止新普通帧。可信已开始帧按第26.2.3节完整排空;公共资源不可用时进入`M_WAIT_RESOURCE`。DL发送资源能够发送完整固定帧时,主端随后连续完整发送20个SYNC_RESET,再无条件进入`M_RX_TRAIN`;不能发送时依靠DL异常或资源不可用的对端可见性使从端进入S_TRAIN,资源具备UL测量条件后执行UL扫描。实现必须保证对端能够获知训练入口,不能一边在本地重训,一边持续输出会让对端保持运行状态的合法普通流。 +主端通过M_RETRAIN_PREP关闭旧普通帧接受和发送,再撤销link_up。公共资源不可用时等待资源;资源恢复后执行入口保护及完整训练。DL能发送固定帧时,按下述入口保护保证从端已退出旧候选解析,再完整发送20个SYNC_RESET,随后进入M_RX_TRAIN。不得依赖有限的SYNC_RESET被对端当作旧帧内容接收后,自行恢复为IDLE运行流。 -从端因DL异常或本地协议故障启动训练时,先撤销link_up并终止旧会话;可信UL在途帧排空后,从下一完整帧边界直接持续发送TRAIN。主端运行期完整检测到TRAIN后进入统一入口,执行完整UL→DL训练。TRAIN在该处就是训练通知,不需要先人为制造UL边界丢失。UL资源失效时从端等待资源恢复,主端通过同步监测进入统一入口。 +若旧DL普通帧被中途截断,或主端不能确定从端已退出旧候选解析,必须在SYNC_RESET之前维持不包含合法IDLE或SOF的入口保护码流。保护码型须由实现声明确定,满足电气约束,且在对端可能保持的32位字相位上不能被识别为IDLE或任何SOF;重复32'hAAAAAAAA可作为字相位保持时的示例。保护持续时间必须满足: -主端在UL扫描期间持续请求发送DL IDLE,不发送DL TRAIN。从端S_TRAIN中的IDLE不累计TRAIN资格,因此不会产生新的TRAIN_ACK;只有主端进入DL扫描并实际发送TRAIN后,才开始正常的50帧资格与应答机制。新轮次之前的TRAIN_ACK或SYNC事件不得用作新UL点通过证据。 +```text +T_ENTRY_GUARD > T_PEER_FRAME_REMAIN_MAX + + T_PEER_RECOVERY_MAX + T_NOTIFY_PIPE_MARGIN +T_PEER_FRAME_REMAIN_MAX = 1044 × 8 / LINE_RATE +T_PEER_RECOVERY_MAX = PEER_RECOVERY_SEARCH_LIMIT_WORDS × 32 / LINE_RATE +``` -只有当前轮次的UL和DL都完成校准并通过完整同步确认,才允许重新置位link_up。旧延迟值可供诊断保留,但不得据此跳过扫描或确认。可信方向不保留旧会话业务资格,仅允许在途排空及训练过程规定的固定帧。 +所有时间按最坏情况及实际时钟向上取整;计时仅在物理输出有效时推进。双方的边界恢复上限和通知流水线裕量必须纳入实现声明,不在线协商。保护码流是链路重新训练入口行为,不是新增协议帧;它使对端完成受限旧LEN计数并在边界恢复失败后退出运行。进入训练后仍按原规则发送20个SYNC_RESET,不能用保护码流替代这些固定帧。若已确定从端处于S_TRAIN或正常帧边界且能够识别SYNC_RESET,可省略入口保护。 + +从端关闭旧UL普通帧并撤销link_up后,资源可用时直接持续发送TRAIN。主端可能先按旧LEN消费部分TRAIN;持续发送不能提前终止,必须覆盖对端旧帧剩余解析及边界恢复时间,使主端最终识别完整TRAIN或进入UL失步路径。无需人为异常UL通知或新增CTRL。主端运行期收到完整TRAIN后执行完整UL→DL训练。 + +UL扫描期间主端持续请求发送DL IDLE,不发送DL TRAIN。从端S_TRAIN中的IDLE不累计TRAIN资格,因此不会产生新的TRAIN_ACK。只有主端进入DL扫描并发送TRAIN后才执行50帧资格与应答;旧TRAIN_ACK或SYNC不得作为新UL点通过证据。 + +只有当前轮次的UL和DL都完成校准、双向确认和运行入口,才允许link_up重新置位。旧延迟值仅供诊断,不得跳过训练;旧普通帧和发送上下文不得带入新会话。 #### 26.2.3 协议复位动作 任意传输状态下,只要`link_up`撤销或本地协议故障要求重新训练,传输协议层必须立即撤销`session_ready`,不得开始接受新的业务发送帧,并进入协议复位保持状态。已经完成首字握手但尚未完成末字握手的当前业务发送帧,按第45.1节继续接收到`app_tx_last`并报告中止。必须执行以下动作: 1. 停止并清除`T_ACK_WAIT`、`T_POLL_INTERVAL`、`T_PROGRESS_LIMIT`以及连续失败计数; -2. 立即终止旧会话语义,停止新普通帧请求。资源仍可用的可信发送方向须继续将已开始的普通帧完整发送至CRC末位;保留该帧读取数据及上下文至不再使用。该排空行为不推进旧会话序号、窗口或成功结果;方向不可用而无法完成时立即中止,并将该方向判为不可信; +2. 立即终止旧会话语义,停止新普通帧请求。本地协议故障先撤销session_ready并请求重训;链路层关闭旧帧接受及发送后撤销link_up。在协议层首次观察link_up=0的时钟沿及之后,不得再发生旧帧字握手或依赖旧协议发送存储的读取。此后协议层可释放旧发送上下文,不等待tx_frame_done。跨时钟域时必须保证关闭先于低电平可见;不能仅异步拉低状态却让读取继续; 3. 回滚所有尚未得到最终CRC结论的接收候选帧,不产生业务应用层可见提交; -4. 主端清零`SND_UNA`、`SND_NXT`、`OUTSTANDING_BYTES`和`PEER_WIN_BYTES`,逻辑上清空重传缓存、未发送描述符及控制请求快照;仍被可信在途发送器读取的存储延迟回收,不得复用; +4. 主端清零SND_UNA、SND_NXT、OUTSTANDING_BYTES及PEER_WIN_BYTES;观察到link_up=0后清除旧未确认/未发送帧、描述符、控制快照及发送上下文并释放其存储。本地协议故障尚未等到链路层关闭时,先逻辑失效,仍可能被读取的存储保留至link_up=0可见。第45.1节已接受首字但尚未收完的业务输入帧按该节继续接收至末字并报告中止,其保留存储不在此时提前释放; 5. 从端清零`RCV_NEXT`、UL发送`TX_SEQ`、`ACK_PENDING`和`RETRY_PENDING`,丢弃尚未提交的接收候选帧及控制响应快照; 6. 从端释放由未提交候选帧占用的传输协议接收资源,并根据复位后的实际可用接收容量重新计算`WIN_BYTES`,不得无条件把窗口设置为实现最大值; 7. 已协议提交的接收数据及其未交付部分不回滚;正在业务接收接口输出的帧须保留至末字握手。已形成但尚未输出的发送完成结果保持不变,结果队列继续按接受顺序输出。尚未形成最终结果的已接受发送请求形成一次中止结果,不得自动带入新会话。 @@ -1659,7 +1680,7 @@ link_up = ul_sync_up && dl_sync_up && run_entry_complete #### 26.2.4 重新训练期间的行为 -传输协议层在`link_up=0`期间保持复位,不得开始新的普通`DATA`或`CTRL`,不得接受普通接收候选,不推进业务序号或协议超时。唯一发送例外是第26.2.3节可信方向在途帧的完整排空;排空结束后数据链路层只执行训练、同步及运行入口序列;从端本地协议故障按第46.2节在可信UL排空后持续发送TRAIN,主端据此启动完整训练。 +传输协议层在`link_up=0`期间保持复位,不得开始新的普通`DATA`或`CTRL`,不得接受普通接收候选,不推进业务序号或协议超时。不存在旧普通帧发送例外:链路层只执行入口保护、训练、同步及运行入口序列;从端关闭旧发送通路后持续发送TRAIN,主端据此启动完整训练。 从端持续发送UL TRAIN通知训练入口;主端在运行期收到完整TRAIN后从UL开始完整重新训练,不再判断故障属于UL、DL还是从端协议层。该通知属于数据链路层,不得解释为普通协议业务;已处于UL或DL扫描时按当前训练状态解释TRAIN。 @@ -1670,11 +1691,11 @@ link_up = ul_sync_up && dl_sync_up && run_entry_complete 1. 双方数据链路层重新置位各自的`link_up`;双方传输协议状态仍保持第26.2.3节规定的初始值,`session_ready`保持为0; 2. 主端进入`M_WAIT_STATUS`并置位`POLL_PENDING`; 3. 从端进入`S_EXPECT`。收到合法`POLL_REQ`后,以`ACK_NEXT=0`和当前实际`WIN_BYTES`形成状态`CTRL`; -4. 从端必须在该初始状态响应中发送`ACK_NEXT=0`。主端只接受格式和CRC合法的初始ACK/UPDATE,不使用`ACK_NEXT`的数值作为新会话准入条件;主端把收到的`ACK_NEXT`解释为新会话起始序号,原子设置`SND_UNA=ACK_NEXT`和`SND_NXT=ACK_NEXT`,保持`OUTSTANDING_BYTES=0`及重传缓存为空,并装载响应中的`WIN_BYTES`; -5. 主端收到合法初始ACK/UPDATE后进入`M_TRANSPORT_RUN`并置位内部`master_session_ready`;从端在初始状态`CTRL`完整发送后置位内部`slave_session_ready`; +4. 从端必须在该初始状态响应中发送`ACK_NEXT=0`。主端只接受格式和CRC合法的初始状态响应(ACK/UPDATE或RETRY_REQ),不使用`ACK_NEXT`的数值作为新会话准入条件;主端把收到的`ACK_NEXT`解释为新会话起始序号,原子设置`SND_UNA=ACK_NEXT`和`SND_NXT=ACK_NEXT`,保持`OUTSTANDING_BYTES=0`及重传缓存为空,并装载响应中的`WIN_BYTES`; +5. 主端收到合法初始状态响应(ACK/UPDATE或RETRY_REQ)后进入`M_TRANSPORT_RUN`并置位内部`master_session_ready`;从端在初始状态`CTRL`完整发送后置位内部`slave_session_ready`; 6. 只有内部`session_ready=1`后,协议层才允许在新业务帧边界置位`app_tx_ready`。业务应用层不读取`session_ready`。合规新会话从`SEQ=0`开始;若收到非零初始`ACK_NEXT`,按第46.3节执行兼容对齐。 -初始响应中的`ACK_NEXT`只定义新会话从哪个序号开始,不表示对旧会话帧的累计确认。该响应必须绕过正常运行期的ACK合理性检查,不得释放任何缓存;此时旧会话缓存已经清空。`POLL_REQ/ACK`同时用于确认控制帧通路可用并取得真实接收窗口。单端重启也按本节处理,不需要从该值推断重启前的会话状态。 +初始状态响应的FLAGS只能为ACK/UPDATE或RETRY_REQ;处于M_WAIT_STATUS时,RETRY_REQ只提供初始化状态,不触发Go-Back-N。初始响应中的`ACK_NEXT`只定义新会话从哪个序号开始,不表示对旧会话帧的累计确认。该响应必须绕过正常运行期的ACK合理性检查,不得释放任何缓存;此时旧会话缓存已经清空。`POLL_REQ/ACK`同时用于确认控制帧通路可用并取得真实接收窗口。单端重启也按本节处理,不需要从该值推断重启前的会话状态。 ### 26.3 `SYNC_RESET` @@ -1686,11 +1707,11 @@ link_up = ul_sync_up && dl_sync_up && run_entry_complete 进入任一新训练轮次时,必须清除固定帧连续计数、固定帧匹配历史、候选边界、普通帧剩余长度、CRC和解扰状态、暂定边界标志、当前扫描点统计、已失效的窗口扫描结果以及运行期CRC错误统计。诊断计数和最近一次成功延迟值可以保留,但仅用于诊断;旧UL和DL窗口结果均不得作为新轮次跳过训练的依据。 -当可信方向承担训练状态通知时,训练固定帧必须从该方向的完整帧边界开始。物理资源仍可用时,已经开始的普通帧先完整发送结束;物理资源失效导致无法完成时,必须中止该帧并把该方向一并判定为不可信。 +训练入口允许中止旧普通帧,不依赖原帧CRC末位完成;链路层必须先关闭旧请求再输出入口保护或固定训练帧。对端可能仍在旧候选内部,不得假定第一个训练标记立即可见;入口可见性按第26.2.2节的时间约束证明。正常固定训练帧之间的切换仍保持完整固定帧边界。 ## 27. 同步机制配置参数 -所有参数必须在RTL集成前给出确定值并纳入版本控制。 +所有参数必须在RTL集成前给出确定值并纳入版本控制;入口保护还须声明对端边界恢复上限及通知流水线裕量,见第26.2.2节。 | 参数 | 单位 | 约束/来源 | |---|---:|---| @@ -1709,8 +1730,8 @@ link_up = ul_sync_up && dl_sync_up && run_entry_complete | `T_ACK_TAIL_BOUND` | 时间 | 实现声明的最坏附加延迟及裕量;必须满足第22.3节400个`IDLE`保护上界 | | `MIN_PASS_WINDOW_RATIO` | 无量纲(UI比例) | 实现配置值;建议基线为0.4,必须由目标时序预算确认,不允许运行期任意修改 | | `MIN_PASS_WINDOW_TIME` | ps | 派生值:`MIN_PASS_WINDOW_RATIO × UI`,不得独立配置 | -| `RX_MIN_PASS_TAPS` | 延迟档位 | 派生值:均匀步进时为`ceil(MIN_PASS_WINDOW_TIME / RX_DELAY_STEP_TIME) + 1` | -| `TX_MIN_PASS_TAPS` | 延迟档位 | 派生值:均匀步进时为`ceil(MIN_PASS_WINDOW_TIME / TX_DELAY_STEP_TIME) + 1` | +| RX_MIN_PASS_TAPS | 延迟档位 | 派生值:均匀步进按原公式;非均匀步进按最大实际相邻间隔派生,见第23.2节 | +| TX_MIN_PASS_TAPS | 延迟档位 | 派生值:均匀步进按原公式;非均匀步进按最大实际相邻间隔派生,见第23.2节 | | `DL_SYNC_PASS_COUNT` | 帧 | 固定为10000个连续正确`SYNC` | | `SYNC_ACK_TX_COUNT` | 帧 | 固定为20;从端定量发送 | | `SYNC_ACK_PASS_COUNT` | 帧 | 固定为10个连续正确`SYNC_ACK` | @@ -1999,7 +2020,9 @@ ACK_NEXT = 0 WIN_BYTES = 以当前ACK_NEXT为锚点、当前能够承诺的协议层逻辑帧接收总额度 ``` -主端收到合法初始响应前不得发送`DATA`。合法初始ACK/UPDATE到达后即完成主端会话初始化并进入`M_TRANSPORT_RUN`,即使`WIN_BYTES`为0也不继续留在`M_WAIT_STATUS`。存在队首待发送帧且窗口不足时,按第32.6.1节执行窗口查询;没有待发送请求时不必仅因窗口为0持续查询。 +初始查询默认返回ACK/UPDATE;若从端已因错误DATA候选置位RETRY_PENDING,重复查询可返回RETRY_REQ。主端在M_WAIT_STATUS接受这两种格式及CRC合法的状态响应,仅装载ACK_NEXT及WIN_BYTES,不执行重传、不分配SEQ、不增加失败计数,也不清除从端的RETRY_PENDING。下一正确期望DATA由从端按正常规则清除RETRY_PENDING。初始ACK损坏后,主端继续按T_POLL_INTERVAL查询,不能因后续响应为RETRY_REQ而永久等待ACK/UPDATE。 + +主端收到合法初始响应前不得发送`DATA`。合法初始状态响应(ACK/UPDATE或RETRY_REQ)到达后即完成主端会话初始化并进入`M_TRANSPORT_RUN`,即使`WIN_BYTES`为0也不继续留在`M_WAIT_STATUS`。存在队首待发送帧且窗口不足时,按第32.6.1节执行窗口查询;没有待发送请求时不必仅因窗口为0持续查询。 ### 31.3 新`SEQ`帧的首次传输 @@ -2028,7 +2051,7 @@ WIN_BYTES = 以当前ACK_NEXT为锚点、当前能够承诺的协议层逻辑 7. 如果未确认集合从空变为非空,在该帧最后一位发送完成后启动ACK进度计时。 -一帧开始后必须连续发送至结束。窗口不足时停止首次发送新业务帧,但`CTRL`仍可发送。 +正常有效链路上一帧开始后必须连续发送至结束;link_up撤销时按第26.2.3节中止旧普通帧。窗口不足时停止首次发送新业务帧,但`CTRL`仍可发送。 ### 31.4 从端接受并提交业务帧 @@ -2487,7 +2510,7 @@ T_PROGRESS_LIMIT: ACK仍未推进,启动或判定一轮Go-Back-N | 计时、轮次进展及三轮失败 | 第32.8~32.9节、第33章 | | 缓存或窗口承诺故障 | 第32.7.2节及第35.2.3节 | | 同周期并发 | 第35.2.4节 | -| 会话终止与可信在途帧排空 | 第26.2.3节及第44章 | +| 会话终止、发送关闭与缓存释放 | 第26.2.3节及第44章 | ### 34.2 从端事件表 @@ -2527,7 +2550,7 @@ T_PROGRESS_LIMIT: ACK仍未推进,启动或判定一轮Go-Back-N | 主端 | 可靠传输控制器、主端→从端发送调度器、`CTRL`接收处理器、定时器 | | 从端 | 业务帧接收控制器、状态报告生成逻辑、从端→主端发送调度器 | -发送调度器只在完整帧边界接受新请求。任何帧一旦开始发送,必须连续发送到结束。重传控制器只产生协议帧请求,不负责生成`IDLE`;无协议帧请求时由数据链路层维持连续线路输出。 +发送调度器只在完整帧边界接受新请求。正常有效链路上一帧开始后必须连续发送到结束;link_up撤销是规定的异常中止条件。重传控制器只产生协议帧请求,不负责生成`IDLE`;无协议帧请求时由数据链路层维持连续线路输出。 ### 35.2 主端可靠传输控制器 @@ -2558,7 +2581,7 @@ RETX_PTR = 当前SND_UNA ```mermaid stateDiagram-v2 [*] --> M_WAIT_STATUS - M_WAIT_STATUS --> M_TRANSPORT_RUN: 收到格式和CRC合法的初始ACK/UPDATE + M_WAIT_STATUS --> M_TRANSPORT_RUN: 收到格式和CRC合法的初始状态响应(ACK/UPDATE或RETRY_REQ) M_WAIT_STATUS --> M_WAIT_STATUS: T_POLL_INTERVAL无合法状态 / 请求POLL M_TRANSPORT_RUN --> M_TRANSPORT_RUN: 新业务帧完成或合法ACK更新 @@ -2599,9 +2622,9 @@ stateDiagram-v2 | 当前状态 | 事件和条件 | 寄存器及控制动作 | 下一状态 | |---|---|---|---| -| 任意非`M_RETRAIN`状态 | `link_up=0` | 按第26.2节中止当前会话;清零序号、窗口和协议计时,清空描述符及重传缓存,撤销`session_ready`,并对每个已接受但尚未形成最终结果的业务请求报告一次中止;所有清空动作遵守第26.2.3节在途存储延迟回收及结果保留规则 | `M_RETRAIN` | +| 任意非`M_RETRAIN`状态 | `link_up=0` | 按第26.2节中止当前会话;清零序号、窗口和协议计时,清空描述符及重传缓存,撤销`session_ready`,并对每个已接受但尚未形成最终结果的业务请求报告一次中止;所有清空动作遵守第26.2.3节发送关闭后存储释放及结果保留规则 | `M_RETRAIN` | | 已初始化的非`M_RETRAIN`状态 | 收到合法状态`CTRL` | 按第14.2节及第31.6节检查ACK和窗口后解释`FLAGS`;`M_WAIT_STATUS`不执行此通用分支 | 按下列事件判断 | -| `M_WAIT_STATUS` | 收到格式和CRC合法的初始ACK/UPDATE | 绕过运行期ACK合理性检查;原子设置`SND_UNA=ACK_NEXT`和`SND_NXT=ACK_NEXT`,保持`OUTSTANDING_BYTES=0`及重传缓存为空;装载`PEER_WIN_BYTES`并清除本次`POLL_REQ`等待 | `M_TRANSPORT_RUN`,即使`WIN_BYTES`为0 | +| `M_WAIT_STATUS` | 收到格式和CRC合法的初始状态响应(ACK/UPDATE或RETRY_REQ) | 绕过运行期ACK合理性检查;原子设置`SND_UNA=ACK_NEXT`和`SND_NXT=ACK_NEXT`,保持OUTSTANDING_BYTES=0及重传缓存为空;装载PEER_WIN_BYTES并清除本次POLL_REQ等待;本次RETRY_REQ不触发任何重传动作 | `M_TRANSPORT_RUN`,即使`WIN_BYTES`为0 | | `M_WAIT_STATUS` | `T_POLL_INTERVAL`无合法状态 | 置位`POLL_PENDING`;保持当前新会话初始状态不变 | `M_WAIT_STATUS` | | `M_TRANSPORT_RUN` | `OUTSTANDING_BYTES==0`且队首待发送帧`FRAME_COST > AVAILABLE_BYTES` | 保持该请求未分配`SEQ`且不写重传缓存;按第32.6.1节启动单纯窗口问询计时 | `M_TRANSPORT_RUN` | | `M_TRANSPORT_RUN` | 单纯窗口问询达到`T_POLL_INTERVAL`且窗口仍不足 | 置位一次`POLL_PENDING`并暂停窗口问询计时;不得启动重传相关计时或失败计数 | `M_TRANSPORT_RUN` | @@ -2626,7 +2649,7 @@ stateDiagram-v2 | `M_RETX_WAIT` | `T_PROGRESS_LIMIT`无进展 | 当前轮失败计数加一;小于3时令`RETX_PTR=SND_UNA`开始下一轮;形成第3次连续失败时置位`retrain_request` | 小于3时进入`M_RETX_PREP`,否则进入`M_RETRAIN` | | `M_RETRAIN` | 本轮已观察到`link_up=0`,随后`link_up`重新置位 | 保持第31.2节规定的初始协议状态;保持`session_ready=0`;置位`POLL_PENDING` | `M_WAIT_STATUS` | -正常状态切换只在完整帧边界改变发送上下文。同步丢失或协议故障时立即终止旧会话,但可信方向的在途帧仍按第26.2.3节排空;其缓存及上下文不能提前复用,排空不产生旧会话成功记账。 +正常状态切换只在完整帧边界改变发送上下文;同步丢失或协议故障是异常退出,按第26.2.3节关闭旧发送通路。协议层观察link_up=0后释放旧缓存和上下文,不等待完成事件;本地故障在关闭确认前不得复用仍可能被读取的存储。 重传准备或发送时的重复RETRY_REQ只合并状态,不倒退当前在途帧或增加轮次。`M_RETX_WAIT`收到ACK未推进的合法RETRY_REQ时保持等待,不重启、不暂停、不延长本轮观察期。观察期到期且仍无进展,必须按本轮失败处理,即使同周期收到重复请求。若RETRY_REQ带来合法ACK推进,本轮成功并清零失败计数;仍需重传时按最新确认点进入新轮次,否则返回正常状态。同周期ACK推进抑制失败判定;同一轮最多判败一次。 @@ -2671,10 +2694,13 @@ ACK释放的是协议上的未确认资格;缓存仍被发送器读取时必 ```mermaid stateDiagram-v2 - [*] --> M_TX_BOUNDARY + [*] --> M_TX_HOLD + M_TX_HOLD --> M_TX_BOUNDARY: link_up=1 / 等待新会话允许的请求 M_TX_BOUNDARY --> M_TX_FRAME: 在帧边界选中一个完整帧请求 - M_TX_FRAME --> M_TX_BOUNDARY: frame_done - M_TX_FRAME --> M_TX_FRAME: frame_done之前保持当前帧 + M_TX_FRAME --> M_TX_BOUNDARY: link_up=1且frame_done + M_TX_FRAME --> M_TX_FRAME: link_up=1且frame_done未到 + M_TX_BOUNDARY --> M_TX_HOLD: link_up=0 / 清旧请求 + M_TX_FRAME --> M_TX_HOLD: link_up=0 / 释放旧上下文,不等完成 ``` 在 `M_TX_BOUNDARY` 按以下顺序选择请求: @@ -2764,10 +2790,13 @@ ACK_PENDING_next = NEW_STATUS_EVENT ```mermaid stateDiagram-v2 - [*] --> S_TX_BOUNDARY + [*] --> S_TX_HOLD + S_TX_HOLD --> S_TX_BOUNDARY: link_up=1 / 等待新会话允许的请求 S_TX_BOUNDARY --> S_TX_FRAME: 在帧边界选中一个完整帧请求 - S_TX_FRAME --> S_TX_BOUNDARY: frame_done - S_TX_FRAME --> S_TX_FRAME: frame_done之前保持当前帧 + S_TX_FRAME --> S_TX_BOUNDARY: link_up=1且frame_done + S_TX_FRAME --> S_TX_FRAME: link_up=1且frame_done未到 + S_TX_BOUNDARY --> S_TX_HOLD: link_up=0 / 清旧请求 + S_TX_FRAME --> S_TX_HOLD: link_up=0 / 释放旧上下文,不等完成 ``` 在 `S_TX_BOUNDARY` 按以下顺序选择请求: @@ -2777,7 +2806,9 @@ stateDiagram-v2 选择状态`CTRL`时按第35.4.3节锁存字段。当前正在发送的从端业务帧不得被新到达的ACK、`RETRY_REQ`状态或`POLL_REQ`响应中断;这些事件只置位`ACK_PENDING`,并在下一个完整帧边界参与仲裁。发送调度状态不得阻塞第35.4节接收控制器。 -会话终止后不开始新的普通`CTRL`或UL `DATA`。可信UL的在途帧仍完整排空,所用数据和快照仅保留至排空结束,不再成为新会话请求;排空产生的`tx_frame_done`不得形成旧会话成功结果。方向不可用时中止并判为不可信。尚未形成最终发送结果的完整业务请求按第45.2节报告中止。 +状态`CTRL`严格优先于UL业务`DATA`;累计ACK允许合并,但持续到来的状态事件仍可能使`ACK_PENDING`在连续多个帧边界保持有效,造成UL业务帧长时间等待。本规范不保证UL业务的最低带宽或最大等待时间。项目若有相应性能要求,须按DL业务到达率、状态`CTRL`生成率和UL业务负载评估,并通过业务发送速率控制及实测验证满足要求;不得因此改变规定的`CTRL`优先级或抑制必须发送的状态响应。 + +会话终止后不开始新的普通CTRL或UL DATA;link_up撤销时链路层中止旧帧并关闭输入,协议层观察到低电平后释放旧发送数据和快照,不等待tx_frame_done。已接受但未形成最终结果的业务请求按第45.2节报告中止;已形成结果不改写。 ### 35.6 RTL接口事件契约 @@ -3059,7 +3090,7 @@ CRC失败时必须回滚全部候选数据: `CTRL`检查的唯一字段及方向定义见第14.2节。数据链路层只提供候选流和CRC结论;传输协议层在CRC通过后执行适用检查,`RESERVED`始终忽略,POLL_REQ的`ACK_NEXT`和`WIN_BYTES`不进行数值或对齐检查。 -`M_WAIT_STATUS`只接受初始ACK/UPDATE,并先于运行期通用`CTRL`分支处理;初始响应不使用运行期已发送区间检查。合法初始响应完成会话初始化,即使窗口为0也进入正常传输控制状态,`DATA`等待则按第32.6.1节执行。 +`M_WAIT_STATUS`只接受初始状态响应(ACK/UPDATE或RETRY_REQ),并先于运行期通用`CTRL`分支处理;初始响应不使用运行期已发送区间检查。合法初始响应完成会话初始化,即使窗口为0也进入正常传输控制状态,`DATA`等待则按第32.6.1节执行。 ### 38.7 协议接受条件 @@ -3163,9 +3194,9 @@ LINE_FRAME_BYTES = FRAME_COST + CRC32 4 B ### 39.3 典型业务应用:基于Transaction帧结构的业务应用层处理 -本节定义一种可选的典型业务应用配置,不属于基础传输规范的强制要求。只有声明支持本Transaction应用配置的设备才必须遵守本节。在本应用场景中,主端为FPGA,从端为用于SPI扇出的ASIC。 +本节是非规范性的业务封装及分片示例,不定义可选业务协议,也不作为基础传输的互操作或验收条件。示例假设主端为FPGA、从端为SPI扇出ASIC。具体Transaction的命令、ARD FLAG、CID、地址、路由、长度上限、零长度及读写执行语义由独立业务实现文档规定;本规范不要求各产品采用同样业务格式。下述字段和操作均为示例约定。 -Transaction是业务应用层的数据单元。一个完整Transaction作为`PAYLOAD`,由传输协议层封装进第12章定义的`DATA`逻辑帧;数据链路层随后追加`CRC32`并执行扰码,形成在线路上传输的`DATA`线路帧。为避免与传输协议层的`DATA`逻辑帧混淆,本节将Transaction内部的数据区统一称为`T_DATA`。 +Transaction是业务应用层的数据单元。长度适配后的Transaction或其独立分片作为`PAYLOAD`,由传输协议层封装进第12章定义的`DATA`逻辑帧;数据链路层随后追加`CRC32`并执行扰码,形成在线路上传输的`DATA`线路帧。为避免与传输协议层的`DATA`逻辑帧混淆,本节将Transaction内部的数据区统一称为`T_DATA`。 #### 39.3.1 Transaction帧结构 @@ -3176,16 +3207,16 @@ Transaction是业务应用层的数据单元。一个完整Transaction作为`PAY | `CMD` | `W/R` | 1 bit | `[63]` | 读写标识,0表示写,1表示读 | — | | `CMD` | `ARD FLAG` | 1 bit | `[62]` | 主动回读数据标志 | 主动回读模块根据读出芯片的读请求读出实验数据 | | `CMD` | `CID` | 5 bits | `[61:57]` | 芯片组中每个芯片的ID标识 | 包括量子测控芯片组及其他需要配置的芯片组 | -| `CMD` | `ADDR` | 25 bits | `[56:32]` | 目标设备中的字节地址 | 必须4字节对齐,即`ADDR[1:0] == 2'b00` | +| `CMD` | `ADDR` | 25 bits | `[56:32]` | 目标设备中的字节地址 | 应4字节对齐,即`ADDR[1:0] == 2'b00` | | `CMD` | `EXADDR` | 12 bits | `[31:20]` | 设备及通道路由字段 | `[11:8]`预留,`[7:3]`选择设备,`[2:0]`选择从端通道 | -| `CMD` | `LENGTH` | 20 bits | `[19:0]` | `T_DATA`的长度,单位为字节 | 必须是4字节的整数倍,最大支持1 MByte | +| `CMD` | `LENGTH` | 20 bits | `[19:0]` | `T_DATA`的长度,单位为字节 | 应是4字节的整数倍,20位且4字节对齐可表示至1,048,572 B;实际业务上限由业务文档规定 | | 数据区 | `T_DATA` | `N*4` bytes | — | 写入数据或读响应数据 | 读请求不包含该字段 | `LENGTH`始终表示`T_DATA`字段的字节数,不包括8字节`CMD`。`CMD`按64位小端序封装,先发送`CMD[7:0]`,最后发送`CMD[63:56]`。`T_DATA`中的每个32位字同样按小端序传输,即低字节先发送;多个32位字按照业务提供的先后顺序传输。 #### 39.3.2 请求和响应封装 -承载Transaction的`DATA`逻辑帧,其`LEN`与Transaction字段之间必须满足以下关系: +承载Transaction的`DATA`逻辑帧,其`LEN`与Transaction字段之间应满足以下关系: | Transaction类型 | 传输方向 | `DATA`逻辑帧的`LEN` | Transaction `LENGTH` | Transaction数据区 | |---|---|---:|---:|---| @@ -3193,13 +3224,13 @@ Transaction是业务应用层的数据单元。一个完整Transaction作为`PAY | 读请求 | `DL` | `8` | 期望读取的字节数 | 不包含`T_DATA` | | 读响应 | `UL` | `8 + LENGTH` | 返回数据的字节数 | 包含`LENGTH`字节`T_DATA` | -读响应的`CMD`必须与对应读请求的`CMD`逐位完全一致,并返回该命令指定的全部`LENGTH`字节数据,不支持部分响应。`DL`中的`W/R=1`表示读请求,`UL`中的`W/R=1`表示读响应。 +读响应的`CMD`应与对应读请求的`CMD`逐位完全一致,并返回该命令指定的全部`LENGTH`字节数据,不支持部分响应。`DL`中的`W/R=1`表示读请求,`UL`中的`W/R=1`表示读响应。 -本应用配置不增加事务编号,也不要求多个读请求的响应按请求顺序返回。多个完全相同的读请求同时在途时不进行特殊区分,其读响应允许按任意顺序返回。读响应仍遵守本规范规定的`UL`无确认传输机制,本节不为其增加确认或重传能力。 +本示例不增加事务编号,也不要求多个读请求的响应按请求顺序返回。多个完全相同的读请求同时在途时不进行特殊区分,其读响应允许按任意顺序返回。读响应仍遵守本规范规定的`UL`无确认传输机制,本节不为其增加确认或重传能力。 #### 39.3.3 设备与通道路由 -`EXADDR[7:3]`用于设备路由:`5'd0`代表主端,`5'd1`~`5'd31`代表从端。因此,本应用配置最多表示31个从端。 +`EXADDR[7:3]`用于设备路由:`5'd0`代表主端,`5'd1`~`5'd31`代表从端。因此,本示例最多表示31个从端。 基础传输规范中的各从端分别使用独立的点对点物理链路。主端业务应用层根据`EXADDR[7:3]`选择对应的物理链路;Transaction进入选定链路后,不依靠`EXADDR`完成线路层寻址。读响应保持请求CMD不变,因此其`EXADDR`仍保留被访问从端的编号。 @@ -3216,11 +3247,11 @@ Transaction是业务应用层的数据单元。一个完整Transaction作为`PAY | `3'b110` | A-SPI5 | | `3'b111` | B-SPI[1:0] | -一个确定的`EXADDR`值只映射到一个确定设备的一个确定通道。一次Transaction及其全部分片不得跨设备、跨SPI通道或跨地址空间边界。 +本表仅示意路由编码;B-SPI[1:0]表示两条通道还是接口信号组合,以及是否通过CID选择,由具体业务文档明确,不在本规范中规定。一次Transaction及其全部分片不跨设备、跨SPI通道或跨地址空间边界。 #### 39.3.4 Transaction分片 -Transaction的`LENGTH`最大支持1 MByte,可能超过`DATA`逻辑帧允许的最大载荷。`DATA`逻辑帧允许的最大`PAYLOAD`长度为1032字节,因此每个Transaction分片最多包含8字节`CMD`和1024字节`T_DATA`。 +本示例20位LENGTH按4字节对齐可表示至1,048,572 B;实际业务上限及零长度语义由业务文档规定。较长Transaction可能超过`DATA`逻辑帧允许的最大载荷。`DATA`逻辑帧允许的最大`PAYLOAD`长度为1032字节,因此每个Transaction分片最多包含8字节`CMD`和1024字节`T_DATA`。 以下示意图以4200字节`T_DATA`为例,展示主端业务应用层的分片结果: @@ -3244,9 +3275,9 @@ flowchart TB 图中的每个分片都包含独立的8字节`CMD`。`ADDR`只按此前已经分片的`T_DATA`累计字节数递增,`CMD`长度不参与地址计算。 -对于写请求,当原始Transaction的`T_DATA`超过1024字节时,主端业务应用层必须将其拆分为多个写请求,每个分片的`LENGTH`不得大于1024。例如,一个包含8字节`CMD`和4200字节`T_DATA`的Transaction,应拆分为4个包含1024字节`T_DATA`的分片和1个包含104字节`T_DATA`的分片;承载这些分片的`DATA`逻辑帧,其`LEN`依次为1032、1032、1032、1032和112字节。 +对于写请求,当原始Transaction的`T_DATA`超过1024字节时,主端业务应用层应将其拆分为多个写请求,每个分片的`LENGTH`不大于1024。例如,一个包含8字节`CMD`和4200字节`T_DATA`的Transaction,应拆分为4个包含1024字节`T_DATA`的分片和1个包含104字节`T_DATA`的分片;承载这些分片的`DATA`逻辑帧,其`LEN`依次为1032、1032、1032、1032和112字节。 -对于读请求,其自身只携带8字节`CMD`。当`LENGTH`大于1024时,主端业务应用层必须将其拆分为多条读请求,每条读请求的`LENGTH`不得大于1024,以保证承载对应读响应的`DATA`逻辑帧之`LEN`不超过1032字节。 +对于读请求,其自身只携带8字节`CMD`。当`LENGTH`大于1024时,主端业务应用层应将其拆分为多条读请求,每条读请求的`LENGTH`不大于1024,以保证承载对应读响应的`DATA`逻辑帧之`LEN`不超过1032字节。 以下示意图以从地址`A`开始读取4200字节为例。五条分片读请求均只携带8字节`CMD`,所以承载请求的`DATA`逻辑帧之`LEN`均为8;每条读响应回显对应请求的`CMD`,并携带该分片指定长度的`T_DATA`: @@ -3273,7 +3304,7 @@ flowchart TB S --> R4 --> P4 ``` -图中的五组请求与响应相互独立。图示连线只表示对应关系,不表示各读响应必须按照请求编号顺序返回。 +图中的五组请求与响应相互独立。图示连线只表示对应关系,不表示各读响应应按照请求编号顺序返回。 除`ADDR`和`LENGTH`外,每个分片的`W/R`、`ARD FLAG`、`CID`和`EXADDR`均复制原始Transaction。第`i`个分片的地址按此前各分片`T_DATA`的累计字节数计算: @@ -3281,7 +3312,7 @@ flowchart TB fragment_ADDR[i] = original_ADDR + sum(fragment_LENGTH[0 .. i-1]) ``` -8字节`CMD`不参与地址递增。发起方必须保证地址计算不会发生25位`ADDR`溢出;地址溢出不进入`EXADDR`,本应用配置不定义溢出后的处理。 +8字节`CMD`不参与地址递增。发起方应保证地址计算不会发生25位`ADDR`溢出;地址溢出不进入`EXADDR`,本示例不定义溢出后的处理。 接收端将每个分片作为独立Transaction分别执行,不重组原始长Transaction,也不保证全部分片构成一个原子操作。 @@ -3356,7 +3387,7 @@ SOF → 解扰 → 外层LEN → 流式输出 → CRC通过 5. 外层`LEN`非法而无法定位CRC时,必须产生`rx_frame_abort`;该候选帧不再产生`rx_data_last`或`rx_crc_valid`。 6. 接收接口不得使用能够暂停物理数据流的反压。 7. 发送接口必须具有帧开始前及帧间反压能力。 -8. 一帧开始后不得在帧内暂停tx_data流。 +8. 正常有效链路上一帧开始后不得在帧内暂停tx_data流;link_up撤销是规定的中止例外。 9. 数据链路层必须生成CRC和扰码;传输协议层不得重复实现CRC。 10. `DATA`载荷的全部业务语义和执行结果必须由业务应用层处理。 11. 主端重传缓存必须保存CRC生成前、加扰前的协议帧内容。 @@ -3368,7 +3399,7 @@ SOF → 解扰 → 外层LEN → 流式输出 → CRC通过 第37~41章定义分层职责和处理契约,第43~46章定义具体接口。接收候选流、最终CRC结果和协议提交是不同阶段;发送请求接受、线路发送完成和业务结果形成也是不同阶段。具体信号时序以第43~46章为准,不从概念流程图推导额外端口。 -物理实现的眼图预算及实现风险集中见第7.6节;第26.2.3节定义会话终止、可信在途排空和结果保留,接口章节引用这些规则而不改变它们。典型业务应用仍在第39.3节,其载荷语义不增加基础传输层义务。 +物理实现的眼图预算及实现风险集中见第7.6节;第26.2.3节定义会话终止、发送中止、缓存释放和结果保留,接口章节引用这些规则而不改变它们。典型业务应用仍在第39.3节,其载荷语义不增加基础传输层义务。 ## 43. 数据链路层与传输协议层接收接口 @@ -3515,8 +3546,8 @@ tx_frame_done 为了避免物理帧中断,必须满足: 1. 数据链路层可以在`SOF`握手前反压; -2. 一旦接受一帧`SOF`,数据链路层必须保持`tx_data_ready`有效直到接受`tx_data_last`;会话终止但发送方向可信时仍保持该承诺,物理发送方向不可用而无法完成时才允许中止; -3. 传输协议层一旦开始一帧,必须连续提供逻辑帧的全部字; +2. link_up有效且没有会话中止时,一旦接受SOF,链路层必须保持tx_data_ready直至接受tx_data_last;link_up撤销是异常退出,必须关闭普通帧输入并中止旧帧,不再要求帧内ready承诺; +3. 正常有效链路上传输协议层一旦开始一帧,必须连续提供全部字;观察到link_up=0时撤销旧tx_data_valid并清旧上下文,作为规定的中止例外; 4. 数据链路层可以在接受`tx_data_last`后拉低就绪,用于发送CRC字段; 5. 下一帧`SOF`只能在数据链路层重新置位就绪后握手。 @@ -3528,12 +3559,12 @@ tx_frame_done `tx_frame_done`必须是发送接口时钟域中的单周期脉冲,并满足: -1. 正常发送及可信方向在途排空时,每个完整发送的`DATA`或`CTRL`产生一次且仅一次`tx_frame_done`;`link_up`=0排空期间该事件仅释放读取占用,不形成协议成功; +1. 正常有效链路上,每个完整发送的DATA或CTRL产生一次且仅一次tx_frame_done;中止帧不得产生该事件;link_up=0期间不产生旧普通帧完成事件; 2. `tx_frame_done`必须晚于对应帧的`tx_data_last`握手,不得与尚未接受完整逻辑帧的请求关联; -3. 每个方向只允许存在一个已经由数据链路层接受、但尚未产生`tx_frame_done`的普通逻辑帧;传输协议层必须从该帧`SOF`握手起保存帧类别、业务`SEQ`及请求上下文,直至收到按序返回的`tx_frame_done`;会话中止但可信方向仍在排空时须继续保留读取上下文,资源失效中止则释放该上下文;数据链路层无需接收或返回帧标识; +3. 每个方向只允许存在一个已经由数据链路层接受、但尚未产生`tx_frame_done`的普通逻辑帧;传输协议层必须从该帧`SOF`握手起保存帧类别、业务`SEQ`及请求上下文,直至收到按序返回的`tx_frame_done`;会话中止且link_up=0已可见时释放旧上下文,不等待tx_frame_done;数据链路层无需接收或返回帧标识; 4. 未完成CRC发送的帧、被中止的帧以及仅完成`tx_data_last`握手的帧不得产生有效完成事件; 5. 新帧可以在`tx_frame_done`同周期或后续周期开始,但新帧的锁存信息不得覆盖本周期完成事件对应的信息; -6. `link_up`撤销与`tx_frame_done`同周期发生时,会话终止具有最高优先级,该完成脉冲不得推进旧会话序号或产生业务成功结果,但必须允许结束发送上下文并回收不再使用的存储。 +6. `link_up`撤销与`tx_frame_done`同周期发生时,会话终止具有最高优先级,该完成脉冲不得推进旧会话序号或产生业务成功结果,并按发送关闭契约清理旧上下文,不依赖本周期完成脉冲释放缓存。 确定性时序示例如下: @@ -3548,27 +3579,24 @@ tx_frame_done: 0 1 重传计时、首次发送记账、重传指针推进、状态`CTRL`上线确认、`POLL_REQ`间隔重启,以及无确认方向的线路发送完成通知,均必须以有效的`tx_frame_done`脉冲为边界。`tx_data_ready`只表示逻辑字接受能力,不得代替`tx_frame_done`。 -### 44.5 会话终止时的可信在途帧排空 +### 44.5 会话终止时的发送中止与存储释放 ```mermaid sequenceDiagram participant P as 传输协议层 participant L as 数据链路层 - participant R as 对端 - P->>L: 当前普通帧已开始发送 + Note over P,L: 旧普通帧正在发送或追加CRC + Note over L: 触发重训;关闭旧字接受及发送
禁止再依赖旧协议发送存储 L->>P: link_up=0 - Note over P: 立即终止旧会话;禁止新业务帧
保留发送器仍在读取的存储 - alt 当前发送方向仍可信且资源可用 - P->>L: 仅提供当前帧尚未接受的逻辑字 - L->>R: 发送到完整CRC边界 - L->>P: tx_frame_done=1 - Note over P: 仅清理读取占用;不产生旧会话成功 - else 当前发送方向资源失效 - Note over P,L: 中止发送并结束读取上下文
不要求继续发送,不产生tx_frame_done - end + Note over P: 观察低电平后释放旧发送缓存与上下文
不等待tx_frame_done,不产生旧会话成功 + Note over L: 执行入口保护及完整UL到DL训练 + L->>P: 完成运行入口后link_up=1 + Note over P: 通过初始状态查询建立新会话 ``` -会话终止、可信排空与资源失效的权威规则见第26.2节;该图不授权在`link_up=0`期间启动新的普通帧。 +link_up低电平是旧发送通路已关闭的保证,不只是开始关闭的通知。跨时钟域实现须保证协议层观察到低电平时旧读请求及旧字握手已停止;旧流水线、完成事件或旧帧数据不得在新会话恢复后再次出现。协议层本地故障先停止新请求并置位retrain_request,等待该关闭保证后回收可能仍在读取的存储。 + +中止可发生在逻辑帧中途或CRC发送期间;两者均不要求完成旧CRC,不产生中止帧的tx_frame_done。已形成的业务结果及已提交接收数据仍按第45章保留。对端训练入口可见性按第26.2.2节保证;仅停止本端发送不足以证明对端已进入训练。 ## 45. 传输协议层与业务应用层接口 @@ -3709,9 +3737,9 @@ link_up link_up = ul_sync_up && dl_sync_up && run_entry_complete ``` -普通帧因发送资源失效而无法完成CRC末位时,不产生`tx_frame_done`,并撤销`link_up`、将该方向判为不可信。若`link_up`因另一方向异常或协议故障已撤销,而当前方向仍可信,则继续排空当前线路帧;排空完成仍可产生`tx_frame_done`用于释放发送上下文,但不能推进旧会话记账或形成成功结果。 +link_up撤销时,链路层必须中止全部旧普通帧,包括正在追加CRC的帧,并先关闭普通帧接受和旧存储读取,再使低电平对协议层可见。协议层观察link_up=0即可释放旧发送缓存和上下文,不等待tx_frame_done;中止帧不产生完成事件。跨时钟域实现必须满足相同顺序。 -`link_up`从1变为0时,传输协议层必须立即按第26.2.3节终止并复位当前会话;`link_up`=0期间不得开始新普通帧或接受普通接收候选,可信在途发送仅按第26.2.3节排空,不运行协议定时器。`link_up`重新变为1后,主端进入`M_WAIT_STATUS`并发起初始`POLL_REQ`,从端进入`S_EXPECT`并等待该请求。`ul_sync_up`、`dl_sync_up`、`sync_lost`、`retrain_busy`和`retrain_done`可以作为数据链路层内部状态或诊断输出,但不得作为传输协议状态机的独立控制输入。 +低电平期间不接受普通接收候选,不开始旧普通帧,不运行协议定时器。已提交接收数据及已形成结果继续保留。link_up重新置位后,主端进入M_WAIT_STATUS发起查询,从端进入S_EXPECT等待POLL_REQ。ul_sync_up、dl_sync_up、sync_lost及重训诊断状态不作为额外协议层控制端口。 ### 46.2 传输协议层向数据链路层 @@ -3727,15 +3755,15 @@ retrain_request 4. 数据链路层完成规定的重新训练和运行入口过程后重新置位`link_up`; 5. 协议层只有在已经观察到本次`link_up=0`、随后又观察到`link_up=1`时,才能退出重新训练保持状态并开始新会话初始化。 -主端数据链路层处理retrain_request时,经统一入口终止旧会话并排空可信在途帧;DL具备完整固定帧发送条件时先连续完整发送20个SYNC_RESET,随后从M_RX_TRAIN开始完整UL→DL训练,资源异常时按第26.2.2节处理。从端处理本地retrain_request时,撤销link_up、终止旧会话并排空可信UL在途帧,然后直接持续发送TRAIN;主端运行期收到完整TRAIN即执行完整重训练,不需要人为异常码流或额外CTRL通知。从端不得在重新训练期间开始旧会话新普通帧。上述通知不触发全局复位,也不需要增加协议层请求接口。 +主端处理retrain_request时先关闭旧帧并撤销link_up,再按第26.2.2节完成入口保护及20个SYNC_RESET,从UL校准开始完整训练。若资源不可用先等待资源。从端关闭旧UL输入及发送后撤销link_up,资源可用时直接持续发送TRAIN,使主端最终退出旧候选解析并开始完整训练。不得继续旧普通帧,不新增CTRL类别或全局复位请求。 ### 46.3 新会话恢复门控 传输协议层内部维护`session_ready`,用于表示业务序号、窗口及控制帧通路已经完成新会话初始化。该状态不是层间端口,也不要求输出给业务应用层;业务发送能力必须统一反映到`app_tx_ready`。 -进入重新训练时,传输协议层必须停止新普通协议帧请求及接收接受并执行第26.2.3节的协议复位,同时清零内部`session_ready`。任一重新训练均执行完整UL→DL流程;仍可信的发送方向仅允许按第26.2.3节排空旧在途帧,之后只承载训练过程规定的固定帧,不能开始原会话普通帧。 +进入重新训练时,传输协议层必须停止新普通协议帧请求及接收接受并执行第26.2.3节的协议复位,同时清零内部`session_ready`。任一重新训练均执行完整UL→DL流程;链路层中止旧普通帧并关闭输入;低电平可见后协议层释放旧发送上下文,之后只执行入口保护及训练过程,不能继续原会话普通帧。 -`link_up`重新置位后,主端进入`M_WAIT_STATUS`并发送`POLL_REQ`;从端必须以`ACK_NEXT=0`和当前真实接收容量返回初始状态。主端必须确认响应为CRC和格式合法的初始`ACK/UPDATE`,但不以`ACK_NEXT`的具体取值决定是否进入`M_TRANSPORT_RUN`;主端把收到的值作为新会话起始序号,同时设置`SND_UNA`和`SND_NXT`,不得把它按运行期累计ACK处理。 +`link_up`重新置位后,主端进入`M_WAIT_STATUS`并发送`POLL_REQ`;从端必须以`ACK_NEXT=0`和当前真实接收容量返回初始状态。主端必须确认响应为CRC和格式合法的初始状态响应(`ACK/UPDATE`或`RETRY_REQ`),但不以`ACK_NEXT`的具体取值决定是否进入`M_TRANSPORT_RUN`;主端把收到的值作为新会话起始序号,同时设置`SND_UNA`和`SND_NXT`,不得把它按运行期累计ACK处理。 主端内部状态按以下规则维护: @@ -3759,9 +3787,9 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: 1. 每组层间接口必须在具体实现中声明所属时钟域和复位极性;跨时钟域时必须使用可靠的同步器、握手或异步队列,不得直接跨域传递单周期事件。 2. `link_up`和`retrain_request`为保持型电平;`rx_frame_abort`、`rx_crc_valid`、`tx_frame_done`、`app_tx_completed`和`app_tx_aborted`为各自接口时钟域中的单周期事件。 -3. 对带`valid/ready`握手的发送接口,发送方在`valid=1 && ready=0`期间必须保持`data`和`last`稳定;一次传输只在`valid && ready`同周期有效时发生。 -4. 全局硬件复位期间valid、所有结果事件及`link_up`为0,并初始化接口队列。协议会话复位不同于全局复位:`session_ready`为0,不接受新请求;已开始的业务输入继续接至末字,已提交接收数据继续交付,已形成结果和新形成中止结果仍按顺序输出,可信方向在途帧继续排空。恢复普通新请求须完成训练和会话初始化。 -5. `link_up`撤销或本地协议故障与`tx_frame_done`、接收完成、ACK或定时器到期同周期时,会话终止优先,不形成新的旧会话成功结果。此前已经形成的完成结果不撤销;`tx_frame_done`仍可用于结束可信排空和回收所用存储。 +3. 对带valid/ready握手的发送接口,正常等待期间须保持data和last稳定,一次传输只在valid且ready同周期有效时发生。链路层发送接口在link_up撤销时关闭握手并取消旧请求;业务发送接口已接受首字的输入按第45.1节继续接收至末字,不适用该取消规则。 +4. 全局硬件复位期间valid、所有结果事件及`link_up`为0,并初始化接口队列。协议会话复位不同于全局复位:`session_ready`为0,不接受新请求;已开始的业务输入继续接至末字,已提交接收数据继续交付,已形成结果和新形成中止结果仍按顺序输出,旧普通帧按发送关闭契约中止,观察到link_up=0后释放旧发送上下文。恢复普通新请求须完成训练和会话初始化。 +5. `link_up`撤销或本地协议故障与`tx_frame_done`、接收完成、ACK或定时器到期同周期时,会话终止优先,不形成新的旧会话成功结果。此前已经形成的完成结果不撤销;中止帧不产生tx_frame_done,存储释放以link_up=0的关闭保证为依据。 # 第七篇 实现、诊断与验证 @@ -3822,15 +3850,19 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: 14. 主端以`DL IDLE`结束同步;从端收到首个完整`DL IDLE`后连续发送20个`UL IDLE`,只在全部发送完成后置位本端`link_up`;主端收到首个完整`UL IDLE`后进入`M_RUN`并置位本端`link_up`; 15. 所有训练通过条件与超时条件同周期成立时,通过条件优先; 16. 延迟配置未就绪时状态机保持等待且不开始测量;就绪丢失时进入资源恢复,不把该点记录为普通失败点; -17. M_DL_CONFIRM、M_UL_CONFIRM和M_RUN_ENTRY收到完整TRAIN时,经统一入口从UL校准开始;M_RX_TRAIN和M_TX_TRAIN中的正常TRAIN不得触发重复重训; +17. M_DL_CONFIRM在从端累计10000个SYNC期间收到正常TRAIN不重训,只清ACK连续计数且保持总体超时;持续TRAIN至确认超时仍须退出。M_UL_CONFIRM和M_RUN_ENTRY收到TRAIN时从UL重训;扫描期正常TRAIN不触发重复重训; 18. M_RUN_ENTRY超时后无论UL是否仍收到SYNC,都经统一入口重新执行UL及DL校准;DL整轮扫描失败也不得只重新扫描DL; 19. 主端单独复位时,DL退出合法运行流并使从端确定进入`S_TRAIN`; -20. 可信方向从普通帧切换到训练固定帧时保持完整帧边界; -21. 从端协议故障请求在可信UL在途帧排空后直接持续发送TRAIN,主端据此终止旧会话并执行完整UL→DL训练;不依赖人为UL异常通知; +20. link_up撤销先关闭旧普通帧输入和发送;模拟对端仍按最大LEN接收时,入口保护覆盖剩余解析和边界恢复预算,随后20个SYNC_RESET可见; +21. 从端协议故障关闭旧UL帧后持续TRAIN,主端从旧候选解析中最终退出并进入完整训练;不等待旧帧完成或依赖人为UL异常通知; 22. 多从端处于不同训练和运行状态时,各自的状态、延迟配置、计数和结果互不影响; 23. 单个延迟点失败继续扫描,不重新训练;DL整轮扫描无合格窗口时退出扫描,从UL重新开始; 24. 主端触发完整训练时,DL可用则完整发送20个SYNC_RESET,不能因提前收到TRAIN缩短;资源异常时等待资源,恢复后仍执行完整流程; -25. UL扫描期间DL只发送IDLE,不触发新的TRAIN_ACK;残余TRAIN_ACK不计作UL TRAIN通过证据。 +25. UL扫描期间DL只发送IDLE,不触发新的TRAIN_ACK;残余TRAIN_ACK不计作UL TRAIN通过证据; +26. UL中心点装载后,rx_delay_ready已有效但始终不能建立字边界时,RX_CENTER_ALIGN在200个固定帧时间到期后清除本轮UL扫描结果,并从首个扫描点重新进入RX_SET_DELAY;不得按资源未就绪无限等待; +27. RX_CENTER_ALIGN连续正确TRAIN达到ALIGN_CONFIRM_FRAMES与200帧超时同周期成立时,通过优先;错误或候选位置改变只清连续匹配计数,不重启总体计时; +28. 非均匀扫描中,构造通过点数最多的窗口与实际首尾时间跨度最大的窗口不同的结果,验证按第23.1节选择实际跨度最大的合格窗口,而不是点数最多的窗口; +29. 构造实际跨度最大的窗口不满足中心保护量、其他较短窗口满足全部判据的结果,验证先筛选合格窗口再排序;另覆盖跨UI窗口的展开中心,以及中心候选和窗口选择平局时的确定性规则。 #### 48.1.2 普通帧、边界及层间接口 @@ -3846,8 +3878,8 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: 8. 连续4个CRC承载帧错误或最近256个CRC承载帧中达到8个错误时,触发完整UL→DL重新训练;单个CRC错误不得直接撤销`link_up`; 9. 正常候选帧的逻辑末字与`rx_data_last`、`rx_crc_valid`和`rx_crc_pass`同周期输出,CRC字不得出现在`rx_data`中; 10. 从端收到`DL DATA`的`rx_frame_abort`时回滚并置位`RETRY_PENDING`和`ACK_PENDING`;主端收到`UL DATA`时只丢弃;任意`CTRL`中止时不更新协议状态; -11. `tx_data_valid && !tx_data_ready`期间数据和末字标志保持稳定;一帧`SOF`被接受后链路层持续接受到`tx_data_last`,帧内不得反压; -12. `tx_data_last`握手后只有CRC最后一位完成线路发送才产生一个`tx_frame_done`;每个方向最多存在一个尚未完成的普通逻辑帧;会话终止后可信在途帧保持读取上下文直至排空,所用存储不复用; +11. 正常有效链路上tx_data_valid且未就绪时数据和末字保持稳定;SOF被接受后持续接受到tx_data_last。link_up撤销时关闭握手,协议层取消旧有效请求,不适用正常帧内连续发送承诺; +12. 正常帧只有CRC末位完成后产生一次tx_frame_done;帧中途及CRC期间中止均不产生完成事件。协议层首次观察link_up=0时旧握手和读请求必须已停止,允许立即释放旧发送缓存;跨时钟域和恢复后不得出现迟到旧事件; 13. 已接受的普通逻辑帧未能完整发送时不产生`tx_frame_done`并撤销`link_up`,协议层不得对该帧记账或报告完成; 14. `link_up`撤销与`tx_frame_done`、接收完成、合法ACK或定时器到期同周期发生时,会话终止优先; 15. 对每个跨时钟域接口分别验证单周期事件不丢失、不重复,多位状态读取一致,且不会产生非法握手。 @@ -3861,7 +3893,7 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: 3. `SEQ`跨越`16'hFFFF`回绕时,累计ACK合理性判断、缓存释放和Go-Back-N范围均正确; 4. 分别丢弃或破坏`ACK/UPDATE`、`RETRY_REQ`、`POLL_REQ`及其响应,验证累计确认、周期查询和超时重传能够恢复; 5. 从端收到`POLL_REQ`时只依据CRC、`FLAGS`、方向和当前状态处理,不解析或检查其中的`ACK_NEXT`和`WIN_BYTES`,也不以其更新任何状态; -6. 新会话初始`ACK/UPDATE`绕过运行期ACK区间检查;合规从端以`ACK_NEXT=0`初始化,另注入非零初始值并验证主端以该值同时初始化`SND_UNA`和`SND_NXT`且不恢复旧状态; +6. 新会话初始状态响应(`ACK/UPDATE`或`RETRY_REQ`)绕过运行期ACK区间检查;合规从端以`ACK_NEXT=0`初始化,另注入非零初始值并验证主端以该值同时初始化`SND_UNA`和`SND_NXT`且不恢复旧状态; 7. 验证零窗口、非零但不足以容纳队首帧、窗口恢复及单纯窗口长期不足;单纯窗口等待不得启动Go-Back-N或重新训练; 8. ACK进度计时与单纯窗口问询计时在最后一个未确认帧被确认和首个新帧完成发送时原子切换,任一时刻只有一种计时解释有效; 9. 重传帧中途收到部分或全部前进ACK时更新确认记账但不释放所用存储,当前帧完整结束后正确选择下一序号且不跳过帧;重传中重复RETRY_REQ按状态合并,本轮发送阶段的ACK进展不被误判为失败; @@ -3875,7 +3907,8 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: 17. 业务发送接口分别验证1字和258字有效载荷、帧间反压及帧内`app_tx_valid`间隙;`app_tx_valid && !app_tx_ready`期间数据与末字标志保持稳定; 18. 首字握手后、末字握手前发生会话终止时,协议层继续接收到`app_tx_last`,不向新会话发送该帧,并按接受顺序产生一次`app_tx_aborted`; 19. 一个累计ACK或一次会话终止同时形成多个业务结果时,结果按业务帧接受顺序每周期最多输出一个,不丢失、不重复,`app_tx_completed`和`app_tx_aborted`不得同周期有效; -20. 会话终止不改写已形成且排队的完成结果;协议会话复位期间继续交付结果,保持全局复位与会话复位的区别。业务接收接口被反压时保持`app_rx_valid`、`app_rx_data`和`app_rx_last`稳定,并保留尚未输出的完整业务帧。协议会话复位不截断已提交业务接收流。 +20. 会话终止不改写已形成且排队的完成结果;协议会话复位期间继续交付结果,保持全局复位与会话复位的区别。业务接收接口被反压时保持`app_rx_valid`、`app_rx_data`和`app_rx_last`稳定,并保留尚未输出的完整业务帧。协议会话复位不截断已提交业务接收流; +21. 从端已完整发送初始ACK但主端因响应丢失或CRC错误仍处于M_WAIT_STATUS时,注入错误DL DATA候选使从端置位RETRY_PENDING;随后重复POLL_REQ得到合法RETRY_REQ,主端必须以ACK_NEXT同时初始化SND_UNA和SND_NXT、装载WIN_BYTES并进入M_TRANSPORT_RUN,保持未确认字节数为0且重传缓存为空,不触发Go-Back-N或增加失败计数;首个正确期望DATA由从端正常接收并清除RETRY_PENDING。 ### 48.2 门级、时序与板级验证 @@ -3886,6 +3919,9 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: - 验证AC耦合基线漂移、终端匹配和目标误码环境; - 注入位错误、CRC错误、长度错误、边界丢失、接收资源不可用和固定帧丢失; - 验证任一同步丢失都会使双方协议状态复位;所有重新训练均须依次完成UL校准、DL校准、双向确认、运行入口及初始POLL_REQ/ACK,不得复用旧窗口跳过训练。合规从端以`ACK_NEXT=0`建立新会话,主端还必须通过非零初始值的防御性对齐测试。 +- 在项目声明的双向混合负载、短帧与最大帧比例、窗口及缓存配置下,记录DL和UL的有效载荷吞吐率、UL业务帧等待时间、重传额外线路开销;覆盖持续密集DL短帧和UL状态`CTRL`持续待发的情况,不能由有限测试时长推断规范保证UL最低带宽。 +- 在项目声明的故障注入和物理条件下,记录重训开始至新会话可发送业务的完整恢复时间及其分布、重训频率;分别记录延迟扫描、同步确认、入口保护、资源等待、训练重试和初始查询耗时。资源就绪时间不受约束的场景应单独标注,不得据此声明固定的最坏恢复时间。 +- 按项目设定的BER目标、置信要求和物理测试条件执行长时间比特错误测量,直接比较可对齐的发送和接收比特。记录完整预定观察区间的实际比较比特数和错误数,包括失败训练及重训期间仍可比较的比特;无法比较的失锁区间另计,不能作为零错误样本。CRC错误计数及最终通过的连续`SYNC`帧不能代替BER测量。双向均应覆盖最坏载荷、线路长度、温度、电压及AC耦合条件。 ### 48.3 运行准入条件 @@ -3896,7 +3932,7 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: - 从端精确发送20个`SYNC_ACK`后持续发送`SYNC`,主端连续正确检测10000个`UL SYNC`; - 从端识别首个完整`DL IDLE`后精确发送20个`UL IDLE`,主端识别首个完整`UL IDLE`后进入`M_RUN`; - 双方`link_up=1`; -- 主端发送初始`POLL_REQ`并收到CRC、格式和类型合法的初始`ACK/UPDATE`,双方内部`session_ready`均已建立; +- 主端发送初始`POLL_REQ`并收到CRC、格式和类型合法的初始状态响应(`ACK/UPDATE`或`RETRY_REQ`),双方内部`session_ready`均已建立; - 业务发送能力已按第45章正确反映到`app_tx_ready`。 `link_up`只表示UL、DL及运行入口过程均已就绪;系统业务可用还要求初始`POLL_REQ/ACK`完成。实现不得用未定义的固定保持时间代替这些确定条件。 @@ -3905,9 +3941,11 @@ M_TRANSPORT_RUN、M_RETX_PREP、M_RETX_SEND、M_RETX_WAIT: 运行准入只说明当前链路完成训练和会话建立,不能替代实现验收。面向交付的实现必须完成第48.1节按角色适用的RTL验证,以及第48.2节按物理配置适用的时序和实测验证,并提供可复核结果。验收记录至少包含规范修订基线、实现配置、验证环境、输入条件、预期行为、实际结果和未覆盖项目。 +项目验收计划应列明适用负载、物理条件、测试时长、吞吐与UL等待目标、恢复时间或频率目标,以及BER目标和统计口径;这些项目指标由具体实现确定。第18章的同步长序列时间只是估算组成项,运行准入条件也不等同于长期误码率证明。 + 必须验证:重复且ACK不推进的RETRY_REQ持续到来时,本轮观察期仍在原截止时间到期,连续三轮无进展最终终止会话;ACK推进与超时同周期时按进展处理。正常路径通过不能替代该异常活性验证。 -CRC验证必须分别检查位序、初值、逐位反馈、逐字状态继承及结果封装,并对并行更新逻辑与第15.2节递推做等价比较。验证应覆盖任意初始状态、全0/全1输入、每个位置的单独置位、连续多字及最大长度逻辑帧。接口验证必须覆盖第43~45章时序图,包括候选末字与CRC同周期、中途abort、累计ACK期间读取占用、会话终止排空、结果排队和已提交接收数据的反压保留。 +CRC验证必须分别检查位序、初值、逐位反馈、逐字状态继承及结果封装,并对并行更新逻辑与第15.2节递推做等价比较。验证应覆盖任意初始状态、全0/全1输入、每个位置的单独置位、连续多字及最大长度逻辑帧。接口验证必须覆盖第43~45章时序图,包括候选末字与CRC同周期、中途abort、累计ACK期间读取占用、会话终止时发送中止与安全释放、结果排队和已提交接收数据的反压保留。 ### 48.5 关键要求与验证索引 @@ -3920,7 +3958,7 @@ CRC验证必须分别检查位序、初值、逐位反馈、逐字状态继承 | `REQ-TRN-002` | [第22.3节](#req-trn-002) | 固定400个IDLE隔离、残留应答时序上界 | | `REQ-TRN-003` | [第26.2.2节](#req-trn-003) | 全部重训从UL开始、对端入口通知、扫描失败及正常TRAIN解释 | | `REQ-RCV-001` | [第25.5节](#req-rcv-001) | 固定字相位搜索、单个IDLE恢复、候选接受契约 | -| `REQ-SES-001` | [第26.2节](#req-ses-001) | 会话立即终止、可信排空与存储延后回收 | +| `REQ-SES-001` | [第26.2节](#req-ses-001) | 会话立即终止、发送关闭及低电平可见后的安全释放 | | `REQ-WIN-001` | [第31.7节](#req-win-001) | 最大容量与动态窗口区别、字节和描述符承诺 | | `REQ-ARQ-001` | [第32.8节](#req-arq-001) | 重复请求不延长观察期、三轮失败闭环 | | `REQ-IF-001` | [第43.4节](#req-if-001) | CRC末字同周期、候选abort与最终接受时机 | @@ -3941,7 +3979,7 @@ CRC验证必须分别检查位序、初值、逐位反馈、逐字状态继承 每个符合本规范的设备或IP至少应提供以下声明: -1. 本规范版本:V1.1; +1. 本规范版本:V1.2; 2. 主端或从端角色; 3. 物理承载类型、电气接口、线路速率、同源时钟关系、线路位序和连续比特流接口约束; 4. 确认支持本规范固定的1032 B最大`DATA PAYLOAD`、帧格式、固定码字、CRC和扰码规则; @@ -3951,6 +3989,7 @@ CRC验证必须分别检查位序、初值、逐位反馈、逐字状态继承 8. `SYNC_RESET`、完整UL→DL重新训练、`retrain_request`握手及同步丢失后协议复位的实现方式; 9. 第43章至第46章层间接口的位宽、时钟域、复位极性和CDC映射; 10. 第47章诊断信息的访问方式、位宽、编码和清零规则; -11. 第48章运行准入条件、实现验收要求及关键要求验证索引的完成情况。 +11. 第48章运行准入条件、实现验收要求及关键要求验证索引的完成情况; +12. 具体项目另附实现配置文档,填写角色、物理接口、线路速率、参考及接口时钟、CDC/复位、延迟映射、缓存与描述符和超时预算;若采用Transaction/SPI业务,另附其业务实现文档。本规范不自动把750 Mbps FPGA/ASIC示例作为项目基线。 互操作要求两端的外部物理接口、电气特性、线路速率、位序、同源时钟关系、线路编码和方向行为相互兼容,不要求两端使用相同的内部串并转换结构、并行宽度、工作时钟、延迟资源或状态编码。实现可以采用不同的流水线、RAM组织和时钟域结构,但不得改变线路比特序列、接收接受条件、确认语义、状态转换或错误恢复行为。