chiseltest测试框架中initSource、initSink和setSinkClock的作用是什么?
Decoupled接口测试初始化方法用途说明
你示例中调用的四个方法都是chiseltest为Decoupled握手接口提供的内置驱动方法,作用如下:
dut.input.initSource() dut.input.setSourceClock(dut.clock) dut.output.initSink() dut.output.setSinkClock(dut.clock)
initSource():针对测试台作为数据发送方的Decoupled输入端口做初始状态配置,会自动将端口的valid信号拉低、所有bits字段置为默认值,避免仿真启动时信号为未定义X态,导致握手逻辑判断异常。dut.input是DUT的输入口,测试台需要向这个端口发送数据,因此作为数据源调用source类初始化方法。initSink():针对测试台作为数据接收方的Decoupled输出端口做初始状态配置,会自动将端口的ready信号拉低,同样避免初始X态影响握手逻辑。dut.output是DUT的输出口,测试台需要从这个端口接收数据,因此作为数据接收端调用sink类初始化方法。setSourceClock()/setSinkClock():为对应的Decoupled驱动绑定DUT的工作时钟,后续调用enqueue()、dequeue()、expectDequeue()这类封装好的自动握手API时,驱动会自动按照绑定的时钟沿做信号驱动和采样,不需要开发者手动编写时钟同步逻辑,大幅简化测试代码。
不执行初始化操作可能会出现仿真启动阶段握手信号状态异常,导致仿真结果不符合预期;如果不绑定时钟,所有的自动握手API都无法正常工作,需要开发者手动控制valid/ready信号的时序。
内容的提问来源于stack exchange,提问作者FabienM
相关产品推荐
相关产品推荐

