19 / 24 · 概念
在清空和复位期间保持事务计数
区分取消与交付,并使有效状态和预期队列一致。
课时内容可免费阅读,选课后可保存学习进度。
取消是明确的设计事件
复位将控制返回已知状态;清空取消指定的尚未完成工作。只清除数据不够。如果 valid 仍为高,零可能变成虚假事务。valid 为零的旧数据位则无害。应清除相应的所有权状态:单槽缓冲的 full、FIFO 的 count 和指针,或 FSM 状态和结果 valid。
本课程的同步单时钟约定规定,两端在复位时钟沿都不进行接收或交付,并在该沿取消全部未完成工作。只复位一端,而另一端将旧 valid 计为交付,会违反约定。记录复位范围和 ready 策略。复位后的新输入属于新的事务区间。
| 事件 | accepted | delivered | canceled | outstanding |
|---|---|---|---|---|
| 接收 A,B,C | 3 | 0 | 0 | 3 |
| 交付 A | 3 | 1 | 0 | 2 |
| 清空 B,C | 3 | 1 | 2 | 0 |
| 接收 D | 4 | 1 | 2 | 1 |
| 交付 D | 4 | 2 | 2 | 0 |
存在取消时,应使用 accepted-delivered-canceled=outstanding。每个未交付事务恰好取消一次。参考队列也必须移除已取消的工作,同时检查没有陈旧结果进入新区间。
外部存储器请求可能在内部清空之后仍然存在。应使用代际标识区分迟到响应,或等待旧请求完成后再重新开始。过早复用较小的代际字段,可能把旧响应误认为当前响应。综合项目没有外部延迟响应,只取消内部缓冲。
选择性清空可以保留早于分支的工作,移除较年轻的错误路径操作。这需要明确的顺序和提交规则。无效工作不得更新存储或参与转发。测试空闲、停顿、已满以及可能同时传送时的复位。仅测试启动复位,无法覆盖未完成工作取消。
自己试试
接收五个事务、交付两个,再清空剩余三个。然后接收两个、交付一个。求累计 accepted、delivered、canceled 和 outstanding。
阅读解释
Accepted=7、delivered=3、canceled=3、outstanding=1。计数关系为 7-3-3=1。被取消的数据项不是成功交付。