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

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

3天内不再提示

个性化地定制自己的uvm代码生成器模板和脚本

芯片验证工程师 来源:芯片验证工程师 2023-05-14 16:51 次阅读

在项目上使用uvm代码自动生成可以提高验证环境搭建的效率,你可以:

使用uvm代码生成器创建基本的uvm验证环境框架,然后丢弃代码生成器模板并扩展和维护生成出来的代码。尽管uvm代码生成器仅在项目的初始阶段使用,然后被丢弃,但仍然提高了验证的效率。

团队所有成员的验证环境结构获得了统一,方便了集成和检视。

根据项目的特定需求,个性化地定制自己的uvm代码生成器模板和脚本。

示例

要运行uvm代码生成器,至少需要三个template 文件:

clkndata.tpl    Interface templatefile
common.tpl      Commontemplatefile
pinlist         Pinlistfile

定义 DUT的文件

mydut/mydut.sv  SystemVerilog sourcefilefor the DUT

两个脚本,一个用于运行uvm代码生成器,另一个用于运行仿真(为了避免记住命令行及其参数)。

gen Scripttorunthecodegenerator
run Scripttorunthe simulator

下面是这个示例中使用的 DUT 文件:

mydut/mydut.sv

module mydut (input clk, input byte data);
  always @(posedge clk)
    $display("mydut data = %h", data);
endmodule

Interface template file

我们需要的第一个模板文件是The first template file。此文件表征一个 DUT的接口,指定一些变量名称,诸如UVM transaction中的变量和 SystemVerilog 接口中的变量。

clkndata.tpl

agent_name= clkndata
trans_item =data_tx
trans_var  = rand byte data;


if_port= logic clk;
if_port= byte data;
if_clock= clk

其中变量的含义,见名知意。

agent_nameclkndata将用作生成的许多文件名前缀,例如clkndata_agent、clkndata_if、clkndata_pkg 和 clkndata_config。

实际上,每个 DUT 接口都有一个这样的template file,每个template file都包含唯一的agent名称。

trans_itemdata_tx将用作类名,该类扩展uvm_sequence_item以定义生成的agent中使用事务transaction,即从sequener发送到driver和通过monitor的analysis port发送的transaction。

trans_var “=”后面的rand byta data将包含在生成的transaction类中。注意行尾的“;”:这很重要,因为它将被复制到生成的代码中。另外,如果希望变量随机化,请记住包含 rand 关键字。通常会有多个trans_var行。

if_port“=”后面的logic clk;和if_port= bytedata;将包含在生成的 SystemVerilog interface中。同样,请注意行尾的“;”。即使是最简单的例子,我们也需要一个时钟和一个数据信号。最后,if_clock挑选出其中一个interface变量作为时钟信号。作为if_clock指定的名称必须是同一template文件中if_ports之一。

Common template file

我们需要的第二个 template file是Common template file,必须命名为 common.tpl。uvm代码生成器始终需要一个common.tpl 文件,该文件指定了一些常用设置。只有一个设置是强制的,即dut_top,有大量可选设置可让你对生成的代码进行控制。许多设置具有合理的默认值,因此你可以在开始时忽略这些设置。

common.tpl

dut_top= mydut

dut_top指定DUT top module的名称,在本例中为 mydut。DUT 源文件必须放置在名为 ./dut 的目录中,或者你可以使用common.tpl文件设置dut_source_path选择其他目录名称,也可以在名为 files.f 的单个文件中手动列出文件的位置。

Filename pinlist

第三个template文件是Pinlist file,它指定 DUT 的端口(在 DUT 的 SystemVerilog 代码中指定)和 DUT 接口的变量(在Interface template file

中指定)之间的连接。

Pinlist file

!clkndata_if
clkclk
data data

Pinlist file分为多个部分,每个 DUT 接口一个部分,每个部分以感叹号 “!” 开头,后跟接口名称,该名称始终是agent名称加上后缀_if。在这个示例中,只有一个agent clkndata,因此相应的接口名称为 clkndata_if。其余的每一行都包含 DUT top module的端口名称,后跟相应 DUT 接口中的变量名称。

也可以使用Pinlist file连接不属于任何特定interface的 DUT 端口,例如:

!
clock_port global_clock_var
reset_port global_reset_var

运行uvm代码生成器

在提供了三个template文件(clkndata.tpl,common.tpl,pinlist)和DUT文件(mydut.sv)之后,我们现在可以为这个示例运行uvm代码生成器。我们将命令行放在单行脚本文件中:

perl ../easier_uvm_gen.pl clkndata.tpl

Common template file的名称默认为 common.tpl(但可以使用 -m 开关从命令行进行设置。现在我们可以运行uvm代码生成器:

94cb3c28-f22c-11ed-90ce-dac502259ad0.png

生成的结构如下所示。弄清楚代码生成器到底是做什么的最好方法是自己运行它!

top_tb (module)
 ↳ top_th (module instance)
   ↳ clkndata_if (interface instance)
     mydut (module instance)
   top_config (class uvm_object)


 ↳ top_test (object, class uvm_test)
    ↳ top_env (uvm_env)
       ↳ clkndata_config (uvm_object)
         clkndata_agent (uvm_agent)
          ↳ clkndata_sequencer
            clkndata_driver (uvm_driver)
            clkndata_monitor (uvm_monitor)
         clkndata_coverage (uvm_subscriber)


       ↳ top_default_seq (created in run_phase, class uvm_sequence)
          ↳ clkndata_default_seq (uvm_sequence)
             ↳ data_tx (uvm_sequence_item)

审核编辑:汤梓红

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

    关注

    0

    文章

    181

    浏览量

    18965
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66772
  • 生成器
    +关注

    关注

    7

    文章

    302

    浏览量

    20217
  • 代码生成器
    +关注

    关注

    0

    文章

    25

    浏览量

    8996
  • 环境搭建
    +关注

    关注

    0

    文章

    51

    浏览量

    8985

原文标题:Easier UVM Code Generator Part 1: 入门

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SQL语句生成器

    SQL语句生成器SQL数据库语句生成及分析器(支持表结构、索引、所有记录到SQL脚本)可用于数据数的备份和恢复!功能不用多说,试试就知道了
    发表于 06-12 16:15

    基于STRAIGHT算法的个性化语音生成方法

    算法对相关参数进行修改;通过STRAIGHT合成器生成新的个性化的语音。实验结果表明,该方法可以得到高质量的个性化合成语音,MOS得分为4.18分。【关键词】:语音合成;;STRAIG
    发表于 04-23 11:28

    求LabVIEW C代码生成器2014版,谢谢

    虚心请教。本人使用的是NI Labview2014版,想要把VI转换成C代码,目前在官网中找到的LabVIEW C代码生成器最高版本是2013版,请问有没有LabVIEW C代码
    发表于 09-10 16:26

    AllJoyn C++代码生成器

    AllJoyn 团队非常激动地向广大开发商宣布,一款新工具已经问世——代码生成器。如果您拥有定义的 AllJoyn 服务接口规范,即可通过运行此代码生成器,为您的服务端和客户端
    发表于 09-19 18:11

    python生成器

    了,但是函数并没有结束请看如下代码,我定义了一个 generator_factory 函数,当我执行 gen = generator_factory() 时,gen 就是一个生成器对象>>>
    发表于 02-24 15:56

    利用LabVIEW代码生成器简化应用项目

    利用LabVIEW代码生成器简化应用项目
    发表于 02-26 14:01 24次下载
    利用LabVIEW<b class='flag-5'>代码</b><b class='flag-5'>生成器</b>简化应用项目

    LED段码生成器

    本文提供的LED段码生成器,希望对你的学习有所帮助!
    发表于 06-03 15:19 96次下载

    代码生成器的应用

    jeesite框架代码生成器,可以很方便的生成代码,挺不错的。
    发表于 01-14 15:19 0次下载

    数码管代码生成器

    数码管代码生成器,迅速生成数码管的相应代码
    发表于 04-25 10:54 40次下载

    STM32库函数代码自动生成器V1.2

    stm32库函数代码自动生成器是STM32学习的小工具。 stm32库函数代码自动生成器可以根据你的配置生成相应的库函数
    发表于 06-17 17:55 0次下载

    STM32库函数代码自动生成器正式版

    STM32库函数代码自动生成器正式版,感兴趣的可以看看。
    发表于 07-13 16:55 0次下载

    STM32库函数代码自动生成器正式版

    STM32库函数代码自动生成器正式版 STM32库函数代码自动生成器正式版
    发表于 07-25 18:52 0次下载

    基于UVM代码生成器的开发设计

    不一相互矛盾的UVM代码。对于这些问题UVM 代码生成器基本都可以解决,更为关键的是,这对于项目的开发效率提高也是一件极有意义的事情。 简单
    发表于 09-15 17:18 22次下载
    基于<b class='flag-5'>UVM</b>的<b class='flag-5'>代码</b><b class='flag-5'>生成器</b>的开发设计

    python生成器是什么

    python生成器 1. 什么是生成器生成器(英文名 Generator ),是一个可以像迭代器那样使用for循环来获取元素的函数。 生成器的出现(Python 2.2 +),实现
    的头像 发表于 02-24 15:53 3082次阅读

    Easier UVM Code Generator Part 1: 运行仿真

    在运行uvm代码生成器后,我们现在可以开始运行仿真。同样,我们将命令行放入脚本文件中
    的头像 发表于 05-19 09:18 481次阅读