2 Star 10 Fork 3

william / uvm-s02

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

uvm-s02

介绍

取自张强《UVM实战》第二章的UVM源码

软件架构

uvm_s02/
├── dut
│   └── wrapper.v
├── sim
│   ├── Makefile
│   ├── rtl.list
│   └── uvm.list
└── testbench
    ├── component
    │   ├── agent
    │   │   └── agent.sv
    │   ├── case
    │   │   ├── case0.sv
    │   │   ├── case1.sv
    │   │   └── case2.sv
    │   ├── driver
    │   │   └── driver_dut.sv
    │   ├── env
    │   │   └── env.sv
    │   ├── model
    │   │   └── model.sv
    │   ├── monitor
    │   │   └── monitor.sv
    │   ├── scoreboard
    │   │   └── scoreboard.sv
    │   ├── sequencer
    │   │   └── sequencer.sv
    │   └── transaction
    │       └── transaction_dut.sv
    ├── interface
    │   └── interface_dut.sv
    └── tb_top.sv

安装教程

  1. 开发环境搭建参考:UVM学习之路(1)— CentOS 7虚拟机下安装VCS开发环境
  2. 开发工具使用参考:UVM学习之路(2)— 使用VCS+Verdi进行仿真调试
  3. 开发环境使用说明:UVM学习之路(3)— 基于UVM的第一个Hello程序
  4. 本仓库的代码说明:UVM学习之路(4)— 基本的UVM验证平台

使用说明

修改 sim/Makefile 中的./simv +UVM_TESTNAME=case0中的case0为case1和case2可使用不同的sequence传递方式

  1. case0: 使用default_sequence,通过config_db方式传递
    // ./testbench/component/case/case0.sv 
    
    /* 1. use default_sequence */
    uvm_config_db#(uvm_object_wrapper)::set(this, "env.in_agt.sqr.main_phase", 
                                            "default_sequence", case0_sequence::type_id::get());
  2. case1: 在uvm_test中手动创建sequence,并手动设置starting_phase供uvm_sequence的body()任务使用
    // ./testbench/component/case/case1.sv 
    
    virtual task main_phase(uvm_phase phase);
        /* 2. not use default_sequence */
        case1_sequence seq;
        seq = case1_sequence::type_id::create("seq");
        // set starting_phase for uvm_sequence.body() task
        seq.starting_phase = phase;
        seq.start(env.in_agt.sqr);
    endtask 
  3. case2: 直接在uvm_test的main_phase方法中提起和释放objection,不再uvm_sequence的body()任务里使用
    // ./testbench/component/case/case2.sv 
    
    virtual task main_phase(uvm_phase phase);
        /* 3. not use default_sequence, in addition set objection raise and drop in this */
        case2_sequence seq;
        phase.raise_objection(this);
        seq = case2_sequence::type_id::create("seq");
        seq.starting_phase = phase;
        seq.start(env.in_agt.sqr);
        phase.drop_objection(this);
    endtask art(env.in_agt.sqr);

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/

空文件

简介

取自张强《UVM实战》第二章的UVM源码 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Verilog
1
https://gitee.com/william_william/uvm-s02.git
git@gitee.com:william_william/uvm-s02.git
william_william
uvm-s02
uvm-s02
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891