• 【无标题】


    Questasim仿真脚本

    1.仿真目录层级:

    D:.
    ├─run
    │      clean.sh
    │      compile.sh
    │      filelist.f
    └─tb
        │  case_List.txt
        │  monitor.sv
        │  tb_top.sv
        └─case
                tc001.sv
                tc002.sv
                tc003.sv
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    run下面保存的是仿真相关的脚本或者makefile,tb下是case列表,tb的顶层,激励driver,monitor等模块。仿真时,在run目录下执行make vcs或者bash compile.sh等命令启动仿真,make clean或者执行clean.sh清空run下仿真生成的中间文件。

    2.compile.sh脚本

    rm wave.vcd
    vlib work
    vmap work work
    vlog -f filelist.f -work work
    if [ $# -ge 1 ];then
    vsim -gui -novopt work.tb_top -do “run -all”
    else
    vsim -c -novopt work.tb_top -do “run -all”
    fi

    • 先删除生成的vcd波形文件
    • 创建一个库work,映射工作区到work库(这个我不知道该怎么描述)
    • 用vlog -f filelist.f -work work去编译所有的源文件。如果有fpga的ip,也可以在这里写相应的vlog去编译。编译ip库常见的有2种,编译ip目录下的行为级仿真模块,_sim.v结尾的,另一种是编译源文件,可以用vivado工具导出questasim的脚本,查看具体需要编译哪些文件,拷贝过来即可。
    • vsim就是启动仿真,-c是不启动gui,可以靠查看仿真中的判断打印来了解仿真信息。-gui启动gui。 -do后面跟do文件,或者双引号内直接引用命令,run -all是一直运行,直到stop或者finish。

    3. tb的编写

    大多数前端设计或者FPGA开发都不需要用uvm,但可以借鉴uvm的思路。

    • tb里可以用include把case的代码引用进来
    • tb顶层只有dut模块和driver 2个模块。
    • case的.v文件里是task。task修改driver内部的寄存器配置,使driver发数据。
    • monitor模块去获取dut的输出,做数据的获取,counter的锁存等。
    • case里还有check模块,检查数据,检查counter,检查每个关键值,如fifo的写满,读空,错误的计数等。
    • 每个case task内部就是,control driver,wait end,check。

    4. filelist的编写

    还没详细看过questasim的手册,不知道questasim如何支持filelist的相对路径嵌套。synopsis的工具都支持用-F调用相对路径的filelist,用-f调用绝对路径。我比较推荐使用相对路径,拷贝时可以不用做修改。
    例如如下的filelist.f

    +define+SIM
    +incdir+../../../src/include
    ../../../src/include/BUS_DEFINE.sv
    ../../../src/1553b_app/1553b_app.sv
    ../../../src/1553b_app/APP_rx.sv
    ../../../src/1553b_app/APP_tx.sv
    ../../../src/1553b_app/AXIS_pack.sv
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    filelist中最重要的就是3种定义:

    • +define+ 定义宏
    • +incdir+定义include的路径
    • .v .sv 指定加源文件

    Questasim仿真vivado ip核

    compile脚本需要修改,加入work.top和work.glbl,一定要加work.glbl,不然仿真会报找不到glbl,哪怕你编译到work里了。

    vsim -c -novopt work.tb_top work.glbl -do “run -all”

    filelist.f中要加入以下库文件:

    +libext+.v
    -y /opt/Xilinx/Vivado/2019.2/data/verilog/src/retarget
    -y /opt/Xilinx/Vivado/2019.2/data/verilog/src/unisims
    -y /opt/Xilinx/Vivado/2019.2/data/verilog/src/unimacro
    -y /opt/Xilinx/Vivado/2019.2/data/verilog/src/retarget

    -f filelist2.f

    设计文件可以写到filelist2.f里,也可以直接追加到filelist.f的内容后面。filelist2.f中加入ip目录下的xxx_sim_netlist.v,该文件下有所有这个ip要用到的模块。该模块只能仿真用,是行为级的代码。有的ip核仿真用这个文件会有功能问题。ddr4仿真,就会出现init_done一直不拉高。需要导出questasim仿真脚本,用脚本中添加的源文件来仿真。
    -y 是指编译这个文件夹下面的文件,+libext+指识别.v的扩展文件
    要特别注意,vhdl和verilog混合仿真时,vhdl和verilog代码中会调用同一个组件,但是他们分别来自不同的library,如unisim和unisim_ver,它们相互并不通用,及verilog不能调用unisim_ver的组件,会造成组件找到却没办法绑定的错误,如:“Port ‘Q’ not found in the connected module”?所以当仿真时,由于vhdl代码中会指定从那个库文件里面提取,而verilog代码中没有,所以使用vsim命令时,把verilog所需的库放在第一个,而后放vhdl所需的库,这样,verilog会从unisim_ver代码开始查询组件。引用自MODELISM 仿真遇到glbl问题

    如果要仿真加密的ip核,还需要根据仿真报告加入缺少的库,例如仿真gtp时还要加入以下几个源文件。

    /opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_common/gtpe2_common_001.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_common/gtpe2_common_002.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_channel/gtpe2_channel_001.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_channel/gtpe2_channel_002.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_common/gtxe2_common_001.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_common/gtxe2_common_002.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_channel/gtxe2_channel_001.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_channel/gtxe2_channel_002.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/pcie_2_1/pcie_2_1_001.vp
    /opt/Xilinx/Vivado/2019.2/data/secureip/pcie_2_1/pcie_2_1_002.vp

  • 相关阅读:
    基于Maven的Mybatis开发环境搭建
    Windows下安装RabbitMQ的步骤
    自己动手写乞丐版线程池
    在 Ubuntu Server 上配置静态 IP 地址
    嵌入式 Linux 入门 环境篇(二、安装虚拟机 — 体验 Ubuntu 22.04)
    关于MyBatisPlus框架下出现xml里面定义的方法无法被正确识别以及提示调用mysql存储过程时参数无效的问题
    【C++】根据字符切割字符串
    【Vue简介+搭建Vue开发环境+Hello小案例】
    bootstrap.xml 和applicaiton.properties和applicaiton.yml的区别和联系
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
  • 原文地址:https://blog.csdn.net/q774318039a/article/details/126645791