Repository navigation
zh guides coverage transactions
“ready 连续低了两拍”是信号上的时序;“编号 7 的请求等了三拍才返回”是事务的属性。 前者只需观察连续采样,后者还要记住请求,并按编号找回对应响应。 不要把这两件事混成一个计数。
from toffee.declarative import Bin, CoverPoint, OverlapPolicy, coverpoint
@coverpoint(overlap=OverlapPolicy.ALLOW)
class ReadyPoint(CoverPoint[bool]):
stalled = Bin.values(False)
accepted = Bin.values(True)
waited_two_then_accepted = Bin.transition(False, False, True)连续三次有效采样为 False, False, True 时,最后一个 bin 命中一次。
前两次也命中 stalled,最后一次也命中 accepted,因此显式允许重叠命中。
示例只在请求有效时采样。无效周期会打断 transition 历史,不能跨过空闲周期拼接命中。 这种覆盖不能说明某个请求是否收到了正确响应。
组的采样条件不一定是每个时钟沿,也可以是一个 Sequence:
from toffee import RisingEdge, Sequence, Wait, Within, xtrigger
from toffee.ir import signal_expr
@xtrigger(sample=RisingEdge("clock"))
def tag_one_roundtrip(pins, *, maximum=4):
return Sequence(
Wait(signal_expr(pins.request.valid) & signal_expr(pins.request.ready)
& (signal_expr(pins.request.tag) == 1)),
Within(1, maximum,
signal_expr(pins.response.valid) & signal_expr(pins.response.ready)
& (signal_expr(pins.response.tag) == 1)),
)这里等待编号 1 的请求被接收,再等待随后 1~4 拍内同编号的响应被接收。
把它作为 coverage.bind(trigger=...) 的采样条件后,字段取自响应完成那一拍。
其他编号不能完成这个 Sequence,超出窗口也不会命中。
这是固定编号的匹配,不会自动记住任意请求编号。 若要让每个 bin 使用各自的 Sequence 或 FSM,使用时序覆盖点。
示例中的 Monitor 在稳定采样点保存请求和响应,Collector 再按以下顺序处理:
- 请求握手时,保存编号、操作码和接收时刻。
- 响应握手时,用编号找回原请求。
- 计算延迟,检查数据,并判断是否乱序完成。
- 生成一条
CompletedTransaction,对这条完成事务采样一次。
TransactionCoverage 对操作码、延迟、数据是否正确、是否乱序分桶,
也可以统计操作码与延迟的交叉覆盖。关联过程在 Python 中进行,不由原生 bin 自动完成。
Monitor 只有一个消费入口。需要同时检查与采样覆盖率时,在该入口处分发同一条记录,
不要让两个任务竞争 recv()。保存的是采样时的快照,不能等异步处理时再重读引脚。
没有响应就不会产生完成事务,也就没有延迟样本。 “正确数据”bin 命中,不代表其他请求都返回了正确结果。 漏响应、错误数据、未知编号和重复响应仍应由检查器或 Scoreboard 报错。
调整窗口长度、采样条件或字段含义后,不能直接合并旧结果。 只切换 Python 或原生执行策略,不会改变同一组数据的含义。
python3 -m examples.coverage.declarative_protocol --engine memory --strategy python
python3 -m examples.coverage.declarative_protocol --engine xcomm --strategy native \
--output output/transactions示例输出请求、完成时采样和事务覆盖三类结果。 先比较它们各自在数什么,再把相同结构用到项目自己的 Monitor 和检查器中。
内容由 CI 自动同步;请编辑主仓库文档。 Automatically synced by CI; edit the source documentation.
- 首页
- 教程
- 操作指南
- 参考
- 原理说明
- Home
-
Tutorials
- Learning path
- 0. Prepare your environment
- 1. Your first PASS and FAIL
- 2. Inputs and clocks
- 3. More cases and boundaries
- 4. Extract a Driver
- 5. Delayed output and a Monitor
- 6. Assemble an Agent
- 7. Models and the test environment
- 8. Pipelines, batches, and cancellation
- 9. Understand failures
- 10. Functional coverage
- Optional: out-of-order responses
- Optional: native clocks and project DUTs
-
How-to guides
- Find your task
- Simulation and events
- Verification components
- Coverage and regressions
- Migration and maintenance
- Runnable examples
- Reference
- Explanation