【无标题】UVM搭建简单加法器

UVM搭建简单加法器

参考: 博客https://blog.csdn.net/qq_38113006/article/details/126686692?spm=1001.2014.3001.5502

1. 项目文件结构

##一个八位加法器的uvm验证实例
uvm_adder
├── rtl
│   └── adder.v
└── sim
    ├── run
    |   ├── makefile
    |   └── runlist
    │   
    └── tb
        ├── env
        │   ├── agent_in.sv
        │   ├── agent_out.sv
        │   ├── env.sv
        │   ├── driver_dut.sv
        │   ├── driver_in.sv
        │   ├── ref_model.sv
        │   ├── monitor_in.sv
        │   ├── monitor_out.sv
        │   ├── scoreboard.sv
        │   ├── sequencer.sv
        │   ├── virtual_sqr.sv
        │   ├── transaction_in.sv
        │   └── transaction_out.sv
        |
        ├── seq
        │   └── add_base_sequence.sv
        |          
        ├── interface
        │   └── interface.sv
        |
        ├── tests
        |   ├── base_test.sv
        |   ├── order_data_add_test.sv
        |   └── random_data_add_test.sv
        |
        └── top
            ├── tb_top.sv
            ├── rtl.f
            └── test_top.sv
            
##创建完这个结构可以直接喂给ChatGPT 调教它写一个shell脚本直接生成对应的目录

2. uvm框架

在这里插入图片描述

3. 设计描述

  • input:reg [7:0] data0, data1 ; in_valid
    output:reg [8:0] data ; out_valid

4. 验证中遇到的问题

4.1 用Verdi打开波形文件出现错误, 错误信息如下:

在这里插入图片描述

  • 提示找不到.fsdb文件。查看对应的makefile文件
verdi:
        verdi -ssf tb.fsdb -simflow -simBin ./simv &       
  • 原因是.fsdb 文件的路径有问题,按照文件生成的.fsdb文件的路径进行更改如下
verdi:
       verdi -ssf /home/lzc/practice/uvm_adder/sim/run/order_data_add_test_sim_dir/${TESTNAME}.fsdb -simflow -simBin ./simv &
  • 经过上面的更改可以正常的打开Verdi。但是, 是不是可以用相对路径呢?
  • 查询相关的Makefile语法:可以通过 $(CURDIR)获取当前工作目录的路径
  • 所以上面还可以这样修改:
FSDB_DIR = $(CURDIR)/order_data_add_test_sim_di 
        verdi -ssf $(FSDB_DIR)/$(TESTNAME).fsdb -simflow -simBin ./simv &
        ###  先声明一个变量保存.fsdb的前缀路径。在-ssf 后面进行路径拼接即可
4.2 randc变量报错
randc int data0 = -1;
randc int data1 = -1; 
randc int ntrans = 10;
  • 原因:
    由于randc变量的值是由系统时钟和其他因素决定的,因此无法添加软约束。如果需要对randc变量进行约束,可以考虑使用其他随机变量类型,如rand或randc数组。
4.3 用Verdi打开覆盖率报错
COV?=0
ifeq (${COV},1)
  COV_COMP_OPT= -cm line+cond+fsm+branch+tgl -cm_dir ./coverage/sim_${TESTNAME}.vdb -cm_hier ./cov.cfg
  COV_SIM_OPT= -cm line+cond+fsm+branch+tgl -cm_dir ./coverage/sim_${TESTNAME}.vdb -cm_name ${TESTNAME}
else
  COV_COMP_OPT=
  COV_SIM_OPT=
endif
verdi:
        verdi -ssf $(FSDB_DIR)/$(TESTNAME).fsdb -simflow -simBin ./simv &

merge.vdb:
        urg -full64 -format both -dir ./coverage/*.vdb -dbname merge.vdb

cov: merge.vdb
        firefox urgReport/dashboard.html &
        verdi -cov -covdir merge.vdb &
  • 报错提示:
No source data
  No source data was supplied to URG.
  You may use options like '-dir', '-plan' or '-trend' to specify the source 
  data. Please run 'urg -help' for information.
  • 意思是找不到 ./coverage/*.vdb文件查看文件夹在run目录下有simv.vdb文件, 所以修改Makefile中第十三行
merge.vdb:
       @echo $(CURDIR) #输出当前的运行的位置(判断依据)
       #urg -full64 -format both -dir ./coverage/*.vdb -dbname merge.vdb
       urg -full64 -format both -dir ./*.vdb -dbname merge.vdb
  • 代码覆盖率如下:在这里插入图片描述
4.4 功能覆盖率
  • 修改对应的sequence中 for循环的值 ,按道理来说功能覆盖率会提升,但是查了半天功能覆盖率都保持不变?
  • 原因: tests 目录下有两个文件order_data_add_test.sv 和random_data_add_test.sv 这两个文件的内容完全一样,除了文件名。在test_top.sv文件中先include的文件是random… 文件 所以会执行random 文件,而之前一直修改的文件是order… 文件。在这里插入图片描述
  • 覆盖率截图:

在这里插入图片描述

4.5 新的问题:

用新的transaction_1 和test_1 利用factory机制与override机制 执行新的transaction结果没有发生变化?? (按道理对其加入的约束会生效)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值