0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

编写动态的验证环境

sanyue7758 来源:验证芯发现 2023-07-17 10:40 次阅读

作为一名DV,开发验证环境,编写验证环境也算是必备基础技能了。虽然每天都会coding,但最终写出来的代码,是一次性代码,还是方法?

何为一次性代码?可以从复用性考虑。

代码的复用可大可小。IP验证内部,写出的代码是否可以在不同case间复用,还是仅针对具体的需求,点对点地写代码。一个简单的例子就是,不同case的实现,是在不停地复制粘贴,还是精简的实现;不同case的仿真,是否需要重新编译验证环境。

system或者soc验证时,写出的case是否可以方便地移植或者为他人所使用。一个长达数百行,for/if/while/fork来回嵌套的函数,大概率会直接打消大家review的念头。其大概率也是一次性代码,复用性不高。

一次性代码和方法的区别,换个角度看,也是是验证环境的静态和动态性的一种体现。如果环境中的某些参数或者特性在编译阶段就已经确定,可认为是静态性的。如果某些参数或者code执行在运行时才会确定,则是动态性的,即runtime。

使用动态性的代码,可以使得验证环境具备较好的灵活性。尽可能少的重新编译环境,尽可能高效的debug case,在芯片规模较大时显得尤为重要。尤其在使用一些如增量编译,MSIE(multi snapshot incremental elaboration),simulation based snapshot方法时,对环境结构和灵活性的要求会更高。这里分享一些静态式和动态式的例子和思路。

ifdef/ifndef双刃剑

条件编译宏在环境开发中经常会使用到,作者此前也分享过相关的总结,读者可参阅:SystemVerilog Macro宏使用场景小结。

testbench中的env部分尽量减少使用条件编译宏。比如下面的例子:

3d6f21ec-2323-11ee-962d-dac502259ad0.png

在环境部分使用ifdef/ifndef,就意味着在不同的场景下,需要重新编译环境,是一种静态式的思路。

去除ifdef/ifndef,可以使用configuration来实现,根据config的结果来决定要不要例化或者启动某个组件。

3d89194e-2323-11ee-962d-dac502259ad0.png

用好plusargs

既然是runtime,动态式,那就从仿真命令中获取数据好了。plusargs有两个函数,plusargs和plusargs。前者检测是否有制定了某个参数,后者用于获取命令行输入的参数值。

使用plusargs,可以在仿真前指定某个参数的取值,如时钟频率、module选择、仿真超时域值等。甚至可以从plusargs中传入对随机参数的约束!而且UVM库中也有uvm_cmdline_processor,用于处理命令行的输入参数。同样的,前面去除ifdef/ifndef的事情,也可以用plusargs来解决。

plusarg的使用可谓"五花八门"。如果后面有机会,作者也会做类似的分享,有兴趣的读者可私信交流和学习。总之,用好plusargs可以在case的调试时,带来效率上的提升。

需求一直在变,做好数据驱动

不直接面向具体的数据编写代码,而是编写对数据的处理和操作方法。比如环境中需要对A0~A9寄存器进行配置,以完成DUT的初始化,或者需要对某些信号进行force和check。需求变化和明天,不知道哪个会先来,虽然今天的需求是配置A0~A9, force a0~a9,明天可能就是变成B0~B9。

这里就可以做好通用的寄存器配置方法,需要配置的寄存器从plusargs或者配置文件中导入,而不是看到具体的A0或者B0寄存器。需要force和check的信号,可以从文件中导入,环境中编写从force到check的逻辑方法。

数据驱动中,联合数组是一个比较好的数据结构,在其他语言中也称为哈希数组或者字典。这种数据结构有key和value两个属性,你所需要的信息可以设置到key和value上,而不用关心key和value具体是什么,是数据驱动的天然好帮手。比如只使用一个int cfg[string]类型的联合数组作为函数的入参,就可以实现多个参数的配置传递,具体的配置参数名体现在cfg的string类型的key中,参数取值体现在cfg的int类型的value中。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18288

    浏览量

    222170
  • 寄存器
    +关注

    关注

    30

    文章

    5032

    浏览量

    117745
  • SoC芯片
    +关注

    关注

    1

    文章

    534

    浏览量

    34477
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18965
  • DUT
    DUT
    +关注

    关注

    0

    文章

    180

    浏览量

    11998

原文标题:编写动态的验证环境

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于VMM验证方法学的MCU验证环境

    。本文主要提出了一种基于SystemVerilog的VMM验证方法学的验证环境。在这个验证环境中,验证
    发表于 03-24 14:07 2963次阅读

    什么是动态链接库?如何编写、生成DLL

    什么是动态链接库?如何编写、生成DLL
    发表于 01-17 09:54

    arduino开发环境不能编写

    arduino的开发环境不能编写时什么问题呢?急用跪求大神指导。。。情况描述:界面呈灰色不能编写但是历程什么的还可以编译上传。。。
    发表于 01-10 20:04

    基于VMM的验证环境验证MCU指令实现设计

    验证结构,以及以功能覆盖率为指标的验证流程。在本文中,围绕Synopsys的VMM(Verification Methodology Manual)构建了一个MCU验证环境
    发表于 07-01 08:15

    基于VMM验证方法学的MCU验证环境实现方法介绍

    验证结构,以及以功能覆盖率为指标的验证流程。在本文中,围绕Synopsys的VMM(VerificationMethodology Manual)构建了一个MCU验证环境
    发表于 07-03 07:40

    为什么要使用动态编写安卓广播的案例呢

    经过这几次的篡写主要还是安卓广播的案例,望大家见谅。这也是多写几个案例更好的体现安卓广播的特点。接下来还是老规矩,运用动态编写广播,在这之前我上一篇已经提到了为什么要使用动态编写,在这
    发表于 12-30 06:16

    如何验证用CodeWarrior工具编写的软件?

    如何验证用 CodeWarrior 工具编写的软件?有没有可用的单元测试,软件测试工具?
    发表于 04-14 08:03

    SoC验证环境搭建方法的研究

    本文从SoC (System on a Chip)验证环境外在的框架结构、内在的验证数据的组织与管理和体现其工作原理的系统脚本的设计思想三方面出发,讨论SoC 验证
    发表于 12-14 09:52 22次下载

    LINUX环境下CLIPS动态链接库的实现方法

    在LINUX环境下,为了简便、快捷地制作出CLIPS动态链接库,本文采用了CNU AUTOTOOLS把CLIPS嵌入式高级语言编译成动态链接库的实现方法,重点研究如何编写配置信息,利用
    发表于 04-14 21:18 30次下载

    一种基于UVM的混合信号验证环境

    一种基于UVM的混合信号验证环境_耿睿
    发表于 01-07 21:39 1次下载

    基于GameGAN的动态环境模拟

    对于任何机器人系统,模拟都是关键的一环。为正确地进行模拟,我们需要编写复杂的环境规则,如:动态代理的行为,以及每个代理的行为会如何影响其他代理的行为。
    的头像 发表于 07-08 15:26 1813次阅读

    第4章:程序编写和调试环境简介PPT下载

    第4章:程序编写和调试环境简介PPT下载
    发表于 10-08 14:49 13次下载

    怎么用脚本产生一个验证环境

    之前有朋友问我怎么用脚本产生一个验证环境,这个问题今天和大家介绍下两种做法。
    的头像 发表于 08-11 09:07 1107次阅读

    基于UVM验证环境开发测试流程

    验证环境用户需要创建许多测试用例来验证一个DUT的功能是否正确,验证环境开发者应该通过以下方式提高测试用例的开发效率
    的头像 发表于 06-09 11:11 636次阅读
    基于UVM<b class='flag-5'>验证</b><b class='flag-5'>环境</b>开发测试流程

    C和C++编写环境下LabVIEW如何调用动态库?

    与C语言编写动态链接库相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 这一导出语句,在C代码中没有”C” ,而在C++代码中多了一个”C”。
    发表于 06-11 09:15 4305次阅读
    C和C++<b class='flag-5'>编写</b><b class='flag-5'>环境</b>下LabVIEW如何调用<b class='flag-5'>动态</b>库?