DUT处理延迟 对Monitor采数和验证环境结束机制的影响分析

1. 问题背景

一句话描述: 验证环境中,当激励完成发送时,由于DUT存在处理延迟,monitor在延迟一段时间后才能采集到DUT完整的输出,如何设计验证环境的结束机制?

此处的验证环境结束机制,可以认为是main_phase的结束控制,但并不单纯指UVM中phase的raise_objection和drop_objection机制,还包括由哪个组件完成raise和drop,组件之间如何进行结束握手,如何保证monitor能够采集到DUT完整的输出。

在uvm的框架结构里,sequence,sequencer,driver,monitor,scoreboard的逻辑关系如下。

sequence激励启动sequencer,通过driver发送到DUT中;monitor采集DUT的输出数据或状态,主动或被动地发送到scoreboard;scoreboard将RM和monitor地数据做比对,判断DUT的行为是否符合预期。
上述UVM组件在最后一个激励发送结束后,在时间轴上的大致顺序如下。

一般来说,验证环境的raise_objection和drop_objection会由sequence发起,避免在多个组件中raise和drop,以免带来控制上的混乱。而如果只在sequence激励发送结束后,通过raise和drop结束仿真,由于DUT存在处理延迟,monitor不能保证接收到完整的DUT输出。即上图中环境结束点应该在t5,而不应该在t2结束。

2. 影响因素和应对思路

2.1 DUT处理延迟

原则: sequence参与环境结束投票,根据DUT的处理延迟,触发环境结束。
在DUT接收到激励后,其处理延迟和业务特点强相关,可以按如下类别进行分析。

2.1.1 固定延迟

对于固定延迟类模块,在接收到最后的激励后,延迟固定个数cycle后,处理完成,monitor可以接收到完整数据。此种场景下可以仅由sequence控制raise_objection和drop_objection,driver在发送完最后的激励后,延迟N个cycle后再调用seq_item_port.item_done()即可。

  1. 如果scoreboard和RM是On-line形式,也无需要控制raise_objection和drop_objection。如果是Off-line形式,因为monitor已经完整地采集DUT地输出,也可以进行完整的比对。

  2. 如果模块的处理延迟是根据模式控制,或者根据测试用例不同,也可以使用该思路。不同模式或用例的延迟范围,可以随sequence激励一同送给driver。

  3. 处理延迟建议使用时钟cycle为单位,而不是具体的绝对时间,如2us,1ms。如果延迟确实是绝对的时间值,则此部分的延迟也可以放到sequence完成,收到driver的item_done之后,延迟固定延迟时间。

  4. 该类型的结束机制也可以使用scoreboard参与raise_objection和drop_objection,见后续分析。

2.1.2 不定延迟

如果所验证模块的处理延迟是不固定的,如CPU流水线收到的指令,跳转指令,算术指令和store/load指令,则pipeline执行结束的时钟数就不再是固定值。此类模块一般都具有“累积效应”,即当前激励的执行和历史激励相关。
验证环境在发送完最后一个激励,需要确认DUT的处理已经完成,才可以结束当前仿真。此时可以考虑使用DUT的工作状态指示。

假设DUT模块存在着工作状态上报,可以通过总线回读获取或者通过interface连接DUT内部信号获取。

  1. 如果还是通过driver获取DUT状态指示,仍可以仅由sequence发起raise_objection和drop_objection。driver获取DUT的工作状态指示,当确认DUT处于idle时,发起seq_item_port.item_done(),结束激励发送,进而结束验证环境。

  2. 如果通过monitor或者其他组件获取该状态,该组件需要参与raise_objection和drop_objection。但该组件的main_phase需要小心处理。由于激励可以是间歇性发送,DUT的状态也可以是间歇性busy和idle。因此该组件只有在最后一个激励发送完成后,获取到DUT状态为idle,才可以结束验证环境了。此种办法还需要增加额外的握手,使得该组件“知道”当前处于尾部激励处理过程。

如果不能使用DUT的状态指示,可以考虑在Scoreboard中使用RM驱动的结束机制,见后续因素分析。

2.2 Scoreboard和On-line RM

原则: Scoreboard参与环境结束投票,On-line RM的队列数据决定比对完成,进而触发环境结束。
除了sequence外,scoreboard也发起raise_objection和drop_objection。使用On-line RM,可以认为scoreboard在尾部激励发送完成时,就已经获得golden的数据队列。在main_phase中,RM的数据和monitor的数据一一比对完成,才会发起drop_objection,否则等待monitor接收到足够多且正确的数据。

在这种方式下,driver侧可以无需考虑DUT的处理延迟特点,激励发送完成,即可以发起seq_item_port.item_done()。

2.3 Scoreboard和Off-line RM

如果RM是Off-line的方式,即在验证结束后根据monitor结果才进行数据的比对。此时,scoreboard没有RM数据队列,也不能完全决定DUT是否处理完成,环境是否可以结束。Scoreboard也常常不再是一个环境的组件,而由仿真控制脚本代替。
如果此时DUT是一种不定处理延迟,而且又没有状态指示,建议将Off-line RM先于验证环境运行,将RM数据存储到文件中,再由验证环境读取,达到On-line Rm的效果。同时该模式需要RM的激励输入也要先于验证环境运行前产生。

2.4 总结

基于前述的因素分析,可以有如下的抉择考量:

还有,记得在验证环境中设置WatchDog,以免结束机制不当造成环境挂死。

验证芯发现:


 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SystemVerilog中,使用interface链接DUT(设计单元)和验证环境有以下几个好处: 1.简化代码和模块化:使用interface可以将DUT验证环境的通信功能封装在一个相对独立的接口中。这样可以提高代码的可读性和可维护性,减少冗余代码,使得验证环境更加模块化和容易理解。 2.共享信号:interface可以定义信号的类型和方向,将DUT验证环境共享的信号统一管理,方便工程师之间的协同开发。通过接口,可以规范信号的名称、宽度、方向以及其他属性,避免了不同工程师定义不同名称和属性的问题。 3.验证环境的复用:使用interface可以将验证环境独立于DUT,使得验证环境可以在不同的项目中进行复用。工程师可以根据不同的DUT,只需更改interface和需要的配置参数,而不需要大量修改验证环境的代码。 4.灵活性和扩展性:当使用interface时,可以定义不同的实例来管理不同的信号和通信接口。这使得验证环境在连接不同类型的DUT、使用不同的接口协议或扩展功能等特定需求时更加灵活和可扩展。 5.抽象层级的管理:通过使用interface,可以将验证环境DUT之间的抽象层级明确化。接口定义了在设计和验证之间的抽象层级,提供了对DUT的高层次访问,同时隐藏了内部的实现细节。 总的来说,使用interface链接DUT验证环境可以提供更好的模块化、协同开发、代码复用和灵活性,帮助工程师更加高效地进行验证工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值