• 【python脚本】用于生成简单握手接口与自测环境的gen_uvm_agent脚本


    前言

    由于后续的工作需要,大概率会进行一些验证的工作,因此我非常机智的先把gen_uvm_agent脚本写好。gen_uvm_agent只用来生成简单的握手型接口的全套代码,同时也会生成一个自测环境用于行为确认。

    脚本使用

    1.键入agent的名字,比如vbn:

    [xiaotu@xiaotu-eda ~/Git_Path/gen_uvm_agent/gen_uvm_agent]$./gen_uvm_agent vbn

    2.如果当前目录有vbn.cfg,则直接读取,否则跳出来一个配置文件,配置一下;可配置选项只有三个:

    1. SIGNAL WIDTH RANDOM(Y/N)
    2. data 32 Y
    3. crc 8 N
    4. last 1 Y

    SIGNAL:接口的信号名,默认所有的transaction的信号都会被打到接口上;

    WIDTH:信号位宽,只支持数字;

    RANDOM:是否为rand信号;

    3.报错cfg文件,之后键入y:

    1. /home/xiaotu/Git_Path/gen_uvm_agent/gen_uvm_agent/./gen_uvm_agent is working
    2. Please input y after complete: y

    4.进入vbn_utils/test/目录,make cmp,检查有无编译问题:

    1. if [ -x .././sim_base/exec/simv ]; then chmod -x .././sim_base/exec/simv; fi
    2. g++ -o .././sim_base/exec/simv -Wl,-rpath-link=./ -Wl,-rpath='$ORIGIN'/simv.daidir/ -Wl,-rpath=./simv.daidir/ -Wl,-rpath='$ORIGIN'/simv.daidir//scsim.db.dir -rdynamic uvm_dpi.o uvm_verdi_dpi.o amcQwB.o _prev_archive_1.so _csrc0.so SIM_l.o _csrc0.so rmapats_mop.o rmapats.o rmar.o rmar_llvm_0_1.o rmar_llvm_0_0.o /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/libzerosoft_rt_stubs.so /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/libvirsim.so /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/liberrorinf.so /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/libsnpsmalloc.so /tools/synopsys/verdi/Verdi3_L-2016.06-1/share/PLI/VCS/LINUXAMD64/pli.a /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/libvcsnew.so /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/libsimprofile.so /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/libuclinative.so -Wl,-whole-archive /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/libvcsucli.so -Wl,-no-whole-archive ./../sim_base/exec/simv.daidir/vc_hdrs.o _vcs_pli_stub_.o /tools/synopsys/vcs/vcs-mx_vL-2016.06/linux64/lib/vcs_save_restore_new.o /tools/synopsys/verdi/Verdi3_L-2016.06-1/share/PLI/VCS/LINUX64/pli.a -ldl -lm -lc -lpthread -ldl
    3. .././sim_base/exec/simv up to date
    4. make[1]: Leaving directory `/home/xiaotu/Git_Path/gen_uvm_agent/gen_uvm_agent/vbn_utils/test/csrc'
    5. CPU time: 4.580 seconds to compile + .153 seconds to elab + .220 seconds to link
    6. Verdi KDB elaboration done and the database successfully generated: 0 error(s), 0 warning(s)
    7. [xiaotu@xiaotu-eda ~/Git_Path/gen_uvm_agent/gen_uvm_agent/vbn_utils/test]$

    5.make run seed=0,之后verdi -ssf sim_base/wave/sanity_case_0.fsdb &打开波形,检查博兴行为是否符合预期:

    目录结构

    1. .
    2. ├── src
    3. │   ├── vbn_agent.sv
    4. │   ├── vbn_driver.sv
    5. │   ├── vbn_interface.sv
    6. │   ├── vbn_monitor.sv
    7. │   ├── vbn_ready_drv.sv
    8. │   ├── vbn_scb.sv
    9. │   ├── vbn_sequencer.sv
    10. │   ├── vbn_sequence.sv
    11. │   └── vbn_transaction.sv
    12. ├── test
    13. │   ├── base_test.sv
    14. │   ├── check_fail.pl
    15. │   ├── harness.sv
    16. │   ├── Makefile
    17. │   ├── run.do
    18. │   ├── sanity_case.sv
    19. │   ├── tr_db.log
    20. │   ├── vbn_env.sv
    21. │   └── vbn_sim.lst
    22. └── vbn_utils.lst

    自测环境

    为了能过完成自测,driver中需要单独增加一个port用于讲transaction直接输出:

    1. `uvm_info("vbn_driver", "drive a pkt start", UVM_HIGH);
    2. `ifdef UTILS_TEST
    3. ap.write(req.clone()));
    4. `endif
    5. this.drive_pkt(req);
    6. seq_item_port.item_done();

     通过UTILS_TEST宏来隔开这个port,因为平常时候时候是不需要这个通道的。

    资源路径

    链接:https://pan.baidu.com/s/1RBj0Qoh7HRrR4MMrKngDoQ 
    提取码:kmtd 
    --来自百度网盘超级会员V5的分享

  • 相关阅读:
    旋转偏心裁切刀切向跟踪及半径补偿
    从源码彻底理解 Prometheus/VictoriaMetrics 中的 relabel_configs/metric_relabel_configs 配置
    PyTorch实现DCGAN(生成对抗网络)生成新的假名人照片实战(附源码和数据集)
    JS-Vue-指令 JSON Ajax
    蓝桥杯官网练习题(谈判)
    架构的演进
    泰迪智能科技大模型数据智能实验室
    如何将wav转为mp3格式,wav中间mp3步骤
    Java毕业设计-二手车交易平台管理系统 二手车交易管理系统 二手汽车交易系统 汽车销售系统 汽车商城
    2023/09/20 day4 qt
  • 原文地址:https://blog.csdn.net/moon9999/article/details/126571855