在大多数的应用场景,对寄存器的访问完全可以通过write(value) & read()这样的组合来完成,也可以选用set(value)先修改期望值,然后在通过update()函数去做同步。这样的好处是,如果RTL寄存器的值已经是我们的期望值,那么就不会也没有必要再浪费总线资源去重新配置一遍。
Explicit Prediction相对于Implicit Prediction,除了监视通过寄存器模型API对寄存器的访问操作,还可以覆盖到其他测试序列(sequence)通过总线对寄存器的直接访问,这一点会使它更加通用。
prediction的分类
auto prediction
如果在环境中没有集成独立的predictor的情况下,利用寄存器操作来自动记录每一次寄存器的读写值,并在后台自动调用predict()来保持寄存器模型中的值与RTL中的值保持一致。但是如果对于寄存器的操作是直接由总线层面进行的,如跳过寄存器模型的wirte()/read(),自动预测则捕捉不到这些寄存器行为,有可能导致DUT和registermodel两边的值不一致。
前门访问(write()/read()— 针对寄存器的)或者后门访问(peek()/poke())都可以触发隐式预测
register_model_inst.default_map.set_auto_predict(1);
explicit prediction
通过monitor在物理总线上捕捉总线事务,并将bus_transaction 传到外部predictor中,predi