Verilator测试夹具API选型咨询:可靠函数及实现方式疑问
Verilator API稳定性与测试夹具实现问题
一、Verilator API稳定性问题
Verilator生成的SystemC或C++类中,Verilated相关API多数无官方文档,不少是后端仿真专用的内部类。版本升级时,以下属于公开稳定的API,可放心使用:
Verilated::gotFinish():检测仿真是否触发结束信号,你的代码中已用来判断是否继续执行,这个接口是稳定的Verilated::flushCall():用于VCD波形刷新,在测试夹具中添加完全没问题,属于公开的辅助函数- 另外像
Verilated::traceEverOn()、Verilated::mkdir()这类接口,也是官方隐含的稳定API,版本更新不会轻易改动
那些无公开说明的内部类或私有成员函数,版本迭代时大概率会变动,不要使用。
二、UART字符模拟代码的正确性与API选择
你这段UART模拟代码逻辑没问题:先拉低起始位,逐位发送数据,最后拉高停止位,每步都通过Verilated::gotFinish()判断避免仿真结束后继续执行,这点考虑得很周全。
关于API选择:
- 如果用Verilator生成SystemC绑定的代码,优先使用SystemC API(比如
sc_signal、sc_start),因为Verilator对SystemC的适配是标准化的,版本兼容性更好 Verilated的API只用来处理全局仿真控制(比如gotFinish()、flushCall()这类状态相关操作),两者混用是合理的,只要不碰Verilated内部的非公开函数即可
你的代码中用sc_signal、sc_start配合Verilated::gotFinish()的方式是正确的,不属于错误用法。
三、测试夹具方案选择
用Verilog写测试夹具确实有局限,没法直接调用外部库、读取系统文件生成复杂测试数据。因此用C++/SystemC编写测试夹具是更灵活的选择,完全可以借助C++标准库、文件IO甚至第三方库生成各类测试数据——比如从文件读取测试向量、用随机数生成器构造边界数据,这些都是Verilog测试夹具做不到的。
内容的提问来源于stack exchange,提问作者artless-noise-bye-due2AI
相关产品推荐
相关产品推荐

