金母鸡量化教学场如何搭建可重用的验证环境?

如何对一个比较复杂的RTL进行验证?怎么一步一步搭建其验证环境?下面,我们以一个例子来做简单的说明。

金母鸡量化教学场如何搭建可重用的验证环境?

top模块中包含子模块A、B和C,包括4个interface,分别是①②③④。

我们的目标,即完成对top模块作为RTL的验证工作。但为了保证项目的进度,在设计人员的RTL还没有ready的时候,我们的工作就已经开始。

可以看到这里的interface①②③其实都属于模块A的interface,但是为了后期管理方便和避免重复工作,我们至少会把interface按照与其他模块的接口进行划分,比如这里就将模块A的interface划分成了①②③。

简单小结下此时我们面临的情况:

(1)RTL还没有ready,即此时还没有RTL,可能需要我们去写一个能够driver interface的RTL model。

(2)该RTL(这里的top模块)包含多个子模块,以及内部有多个interface,包括①②③④。

(3)该RTL对外的interface只有一个即①,但我们根据其内部的子模块,将其涉及到的interface进行了划分,而不是揉到一个interface里,这样做的好处前面已经说了。

金母鸡量化教学场如何搭建可重用的验证环境?

如果让你开始搭建验证环境,你该如何入手?

首先分析该RTL的interface功能连接和依赖关系,整个RTL的req激励都是来自于interface①的输入端,由interface①的输入引出一连串的interface②③④上的时序功能交互。假如经过分析后(具体项目具体分析),发现模块B是其中依赖关系相对较弱的地方,即interface③和④相对独立,因此我们应该先从模块B入手。

第一步

将interface③和④各自封装成两个agent,这至少包括以下工作:

编写interface

编写transaction

编写driver

编写monitor

编写sequencer

编写agent_config

封装agent

编写package

以上代码仔细分析,有很多内容其实可以是通过脚本来完成的,你可以手写,当然为了效率建议使用脚本来根据你的配置文件来自动产生,那么你的工作可能就只剩下:

对产生出来的driver的修改,加入驱动逻辑,将transaction驱动到interface

对产生出来的monitor的修改,加入monitor,与上面相反,将interface封装成transaction

如果脚本写的比较好的话,理论上可以大大减少你的重复性工作。

金母鸡量化教学场如何搭建可重用的验证环境?

第二步

重用上一步建立好的两个agent,另外你至少还需要完成以下工作:

编写env,对上一步编写好的两个agent进行配置、例化和连接

编写virtual_sequence,完成对上一步两个不同interface的sequence驱动(可选)

编写reference_model和RTL_model

编写scoreboard

编写env_config,注意此时两个agent都应配置成active的模式

编写test,启动sequence

编写package

注意这里的重点是编写reference_model和RTL_model。由于当前还没有RTL,又要确保env环境能够先跑起来,那么你需要这样来搭建你的环境:

金母鸡量化教学场如何搭建可重用的验证环境?

reference_model和RTL_model建议分两个class来写,区别在于ref_model不用将结果驱动到interface,而RTL_model则需要,其中很多代码是重复的,写完一个之后,写另一个应该会很快。

可以通过传递仿真参数来切换是带RTL还是RTL_model来仿真。

写一些简单的sequence来做env的初步调试。注意这里不使用virtual_sequence也是可以的,直接在test里启动对应agent的sequence即可。

金母鸡量化教学场如何搭建可重用的验证环境?

第三步

接下来,我们来写模块B的env。

首先还是,类似第一步的过程,将interface②封装成agent,具体步骤不再赘述。

第四步

重用第二步建立好的env以及第三步建立好的agent,另外你至少还需要完成以下工作:

类似第二步的过程,只不过这一步编写的env将对第二步建立好的env以及第三步建立好的agent进行配置、例化和连接,其他不再赘述

注意将interface④对应的agent配置成passive模式,因为这里不需要将激励驱动到interface④上,将interface②和③对应的agent配置成active模式

这一步的reference_model和RTL_model只需要写module C的对应部分就可以了

第五步

类似上面重用的过程。

将interface①封装成agent,并将其配置成active模式,并且将其余的interface都配置成passive模式。

类似的,这一步编写的env将对上一步建立好的env以及interface①封装的agent进行配置、例化和连接,其他不再赘述。

另外这里不再需要使用virtual sequence。

这一步的reference_model和RTL_model只需要写module A的对应部分就可以了。

金母鸡量化教学场如何搭建可重用的验证环境?

通过以上的步骤,我们就像搭积木似的,一层层搭建起来了一个完整的可重用的验证环境。

接下来,我们就需要来思考验证计划里需要包含对RTL哪些特性的验证,以及如何去实现。

实现方式有很多,基于覆盖率、基于断言、基于随机约束以及编写定向test case等,根据需要综合采用这些验证方法工具。但前提是有一份完整详细的验证计划。

一般会包括以下两大块:

常见case的验证

边界case的验证

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/75141
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 12 日
下一篇 2024 年 7 月 12 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注