Skip to content

zh getting started index

github-actions[bot] edited this page Oct 30, 2026 · 1 revision

源文档 / Source · English

从第一个测试开始

这份教程用一个 8 位累加器,带你从一条断言写到流水输入、参考模型和覆盖率。 先运行例子,再改一个地方看看结果;不需要先读完整 API 手册。

前半部分只需要 Python。仓库提供了一个用 Python 模拟的累加器,方便练习输入和时钟, 不需要先安装 RTL 仿真器。接入真实硬件的方法放在最后一节选读中。

代码在哪里

主要看两个文件:

examples/getting_started/
├── test_accumulator.py   按教学顺序排列的测试、驱动、监视器和模型
└── toy_dut.py            已写好的累加器

每一页会指出当前要看的测试函数,并给出只运行它的命令。 如果使用仓库中的文件,不要重复粘贴页面里的代码。 如果想从空文件跟着写,就按章节顺序追加,保留前面用到的定义和 import。

# region 和 # endregion 是帮助编辑器折叠代码的注释,不影响运行。

按这个顺序学习

步骤 要解决的问题
0. 准备环境 命令在哪里执行?依赖怎么安装?
1. 第一次通过和失败 测试怎么判断结果对不对?
2. 输入与时钟 写了输入,为什么结果还没变?
3. 多组数据与边界 除了一个正常数字,还应该测什么?
4. 提取 Driver 输入时序重复了,怎么写一次、多处使用?
5. 延迟输出与 Monitor 输出只出现一拍,怎样避免漏读?
6. 组装 Agent 怎样连接输入、输出和自动检查?
7. 参考模型与测试环境 长序列的期望值怎么算?怎样为每条测试建立独立环境?
8. 流水、多批次与取消 上一笔还没返回,下一笔能不能发?
9. 看懂失败 算错、漏回、迟到和多回,分别是什么表现?
10. 功能覆盖率 测试通过后,怎么知道还有哪些情况没测到?

先做到第 3 步就可以停下来练习。Driver、Monitor 和 Agent 是整理已有代码的方法, 不需要在第一个测试里同时学会。

完成后,可以选读乱序响应和原生后端与项目 DUT。

先认识四个词

  • DUT:被测设计。这里是累加器,实际项目里也可能是缓存、总线接口或运算单元。
  • 激励:送给 DUT 的输入,例如“加上 3”。
  • 期望值、实际值:按规格算出的结果、从 DUT 读到的结果。测试比较这两个值。
  • 事务:一次完整操作,例如“加上 3 并取得结果”。它可能跨越多个时钟周期。

页面中的 bash 代码块在终端执行,python 代码块对应源文件中的代码;预期输出不用复制。 现在从准备环境开始。

完成教程后

第 3 步后,你能独立编写带输入、时钟和边界断言的测试;完成第 10 步后, 你能把可复用组件、参考模型、流水检查和覆盖率组合进一个测试环境。 接下来按自己的项目任务查操作指南,按名称查API。 想理解时钟与 asyncio 的关系,或覆盖率能说明什么,阅读原理说明。

首页 / Home

中文

English

Clone this wiki locally