modelsim/questasim do文件解释以及makefile

do文件解释

  • questasim do文件解释
    • do文件
    • wave.do
    • makefile:makefile其实就是shell一种
      • makefile参数
      • Makefile例子a
      • Makefile例子b
      • 例子c
      • 例子d
      • 例子e
  • Makefile中@作用
  • filelist
      • 参考:

questasim do文件解释

do文件

#开头的是comments;
DO文件实质上是Tcl脚本。可以包含很多Tcl结构,比如程序,条件运算符,数学和三角函数,正则表达式等等。
vsim的参数

  • 参数“-novopt”禁止优化(no vopt),可能会因为vopt的缘故使得一些不重要signal被modelsim自动忽略,一般会保留该参数;
  • -classdebug
  • 参数“-c”表示进入命令行模式,如果没有该参数,则表示进行GUI模式。
  • 参数“-L altera_ver”是添加仿真库,该处是直接使用逻辑库名称,也可以像后面一样使用物理库的名称及路径;若是库与源文件一起编译到work库中的,则不需要该参数;
  • vlog -sv abc.v 按照sv进行编译;
  • -l 小写L, 输出log文件 vsim -l sim.log
  • -do “run 10us” 或者-do vsim.do
  • -wlf保存仿真结果为一个WLF文件。调试时可在GUI查看仿真结果。
  • 在系统提示符后输入vsim –view counter.wlf。
  • +UVM_TESTNAME=my_case0
    +UVM_NO_RELNOTES
    +UVM_TIMEOUT=100000000

log /* -r //该命令可以让modelsim/Questa Sim在进行仿真中,对所有信号同步进行仿真,
从而解决新加入的观测信号没有仿真结果的问题;
在终端> 直接输入 vsim -c 会进入没有gui的questasim

if [file exists "work"] {
     vdel -all}   #有work这个目录 则删除
vlib work   #vlib work ---- 在工作目录下建立一个work目录
#vcom 编译vhd;如果是verilog 则使用vlog
vcom -f dut.f
vlog -f tb.f
vopt top -o top_optimized  +acc +cover=sbfec+tinyalu(rtl).
vsim top_optimized -coverage +UVM_TESTNAME=random_test
set NoQuitOnFinish 1
onbreak {
     resume}
log /* -r  //该命令可以让modelsim/Questa Sim在进行仿真中,对所有信号同步进行仿真,从而解决新加入的观测信号没有仿真结果的问题;
run -all
coverage exclude -src ../../tinyalu_dut/single_cycle_add_and_xor.vhd -line 49 -code s
coverage exclude -src ../../tinyalu_dut/single_cycle_add_and_xor.vhd -scope /top/DUT/add_and_xor -line 49 -code b
coverage save random_test.ucdb


vsim top_optimized -coverage +UVM_TESTNAME=add_test
set NoQuitOnFinish 1
onbreak {
     resume}
log /* -r
run -all
coverage exclude -src ../../tinyalu_dut/single_cycle_add_and_xor.vhd -line 49 -code s
coverage exclude -src ../../tinyalu_dut/single_cycle_add_and_xor.vhd -scope /top/DUT/add_and_xor -line 49 -code b
coverage save add_test.ucdb

vcover merge  tinyalu.ucdb random_test.ucdb add_test.ucdb
vcover report tinyalu.ucdb -cvg -details
quit


#vcom 编译vhd;如果是verilog 则使用vlog

dut.f #设计的文件路径

tinyalu_dut/single_cycle_add_and_xor.vhd
tinyalu_dut/three_cycle_mult.vhd
tinyalu_dut/tinyalu.vhd

tb.f #仿真的文件路径
+incdir+ #意思是include dir 包含一个目录进来

tinyalu_pkg.sv
tinyalu_bfm.sv
top.sv
+incdir+tb_classes

wave.do

在wave窗口 ctrl+s
/home/userid/rst_uvc/rst_agent/wave.do

makefile:makefile其实就是shell一种

makefile其实就是shell;
makefile是另外一种形式替代do,这个可能更加方便;
只要编写一个文件名问Makefile,内容如下
在linux下边可以终端上测试看是否识别vsim命令
如果识别 , 直接 make 就可以运行; 加-c 不启动gui

#前边还可以加参数,参考下边图片
all: create_lib compile simulate  #是后边三个命令的合成

create_lib:  # 可以>make create_lib
	vlib work

compile:
	vlog -timescale "10ps/10ps" -l comp.log -sv ../test_pkg.sv param_pkg.sv rst_agent_pkg.sv dut.sv top_tb.sv 

simulate:
	vsim -l sim.log -c top_tb -novopt  -do "run 10000ns" +UVM_TESTNAME=my_case0
#run -all
#+UVM_TESTNAME=my_case0
clean:
rm -rf work
rm *.log transcript vsim.* *.ucdb

参考
Make命令的-n选项不起作用

makefile参数

modelsim/questasim do文件解释以及makefile_第1张图片
使用下边方法可以动态传递参数到Makefile中
> make all verbosity=UVM_HIGH

Makefile例子a

> make all
> make clean

IFILES = consumer.sv producer.sv sequence_item.sv
FILES=env.sv
UVM_FLAGS=#+incdir+${UVM_HOME}/src ${UVM_HOME}/src/uvm_pkg.sv
VCS_FLAGS= -sverilog -ntb_opts uvm -timescale=1ns/1ns
all: simv
 ./simv -l xx.log
simv: ${
     FILES} ${
     IFILES}
  vcs ${
     UVM_FLAGS} ${
     VCS_FLAGS} ${
     FILES}
clean:
  @rm -rf simv* csr* *.log *.key core.* *.vpd *.vcd

Makefile例子b

TESTNAME ?= my_comp1
all: work tb sim

tb:
  vlog -f filelist.f
sim:
  vsim tb +UVM_TESTNAME=$(TESTNAME) -do "run -all;exit " -c -l $(TESTNAME).log -voptargs=+acc
clean:
  rm -r work
  rm *.log transcript vsim.* *.ucdb

filelist.f例子
modelsim/questasim do文件解释以及makefile_第2张图片

例子c

modelsim/questasim do文件解释以及makefile_第3张图片

例子d

Makefile中变量的定义和使用
TEST、N_ERRS、N_FATALS这三个变量在CHECK中被使用,
CHECK主要的目的是,在仿真结束后检查有没有UVM_ERROR和UVM_FATAL;

TEST = /usr/bin/test
N_ERRS = 0
N_FATALS = 0
vlog -timescale "10ps/10ps" -l comp.log -sv ../test_pkg.sv param_pkg.sv 

CHECK = \
	@$(TEST) \( `grep -c 'UVM_ERROR :    $(N_ERRS)' test_pkg.log` -eq 1 \) -a \
		 \( `grep -c 'UVM_FATAL :    $(N_FATALS)' test_pkg.log` -eq 1 \)
  • 换行:行尾加
    表示下一行和这一行是一个命令行,后面不能有注释、空格。

例子e

张强的例子

#!/bin/csh

source /cad/release/etc/cshrc.mentor
setenv QUESTA_HOME /cad/release/mentor/questasim/10.2/questasim
setenv UVM_HOME ~/uvm/uvm-1.1d
setenv WORK_HOME `pwd`
setenv SIM_TOOL QUESTA 
set path = (/cad/release/mentor/questasim/10.2/questasim/bin ${
     WORK_HOME}/bin $path)
#setenv UVM_HOME /cad/release/mentor/questasim/10.2/questasim/verilog_src/uvm-1.1c
#setenv UVM_DPI_DIR /cad/release/mentor/questasim/10.2/questasim/uvm-1.1c/linux
setenv UVM_DPI_DIR $WORK_HOME/uvm_dpi
mkdir $UVM_DPI_DIR -p
g++ $UVM_HOME/src/dpi/uvm_dpi.cc -D QUESTA -I$UVM_HOME/src/dpi -I$QUESTA_HOME/include -shared -Bsymbolic -o $UVM_DPI_DIR/uvm_dpi.so

#!/bin/csh
if ( $SIM_TOOL == "QUESTA" ) then
vlib work
vlog -f filelist.f
vsim -novopt -sv_lib $UVM_DPI_DIR/uvm_dpi -do $WORK_HOME/bin/vsim.do -c top_tb +UVM_TESTNAME=$1
#vsim -novopt -sv_lib $UVM_DPI_DIR/uvm_dpi -do $WORK_HOME/bin/vsim.do -c top_tb +UVM_TESTNAME=my_case0 +UVM_OBJECTION_TRACE
#vsim -novopt -sv_lib $UVM_DPI_DIR/uvm_dpi -do $WORK_HOME/bin/vsim.do -c top_tb +UVM_TESTNAME=my_case0 +UVM_PHASE_TRACE
#vsim -novopt -sv_lib $UVM_DPI_DIR/uvm_dpi -do $WORK_HOME/bin/vsim.do -c top_tb +uvm_set_config_int="uvm_test_top.env.i_agt.drv,pre_num,'h8" +UVM_TESTNAME=my_case0
#vsim -novopt -sv_lib $UVM_DPI_DIR/uvm_dpi -do $WORK_HOME/bin/vsim.do -c top_tb +UVM_TESTNAME=my_case0 +UVM_CONFIG_DB_TRACE
endif

if ( $SIM_TOOL == "VCS" ) then
vcs +acc +vpi -sverilog $UVM_HOME/src/dpi/uvm_dpi.cc -CFLAGS -DVCS -timescale=1ns/1ps -f filelist.f 
./simv +UVM_TESTNAME=$1
#./simv +UVM_TESTNAME=my_case0 +uvm_set_type_override="my_monitor,new_monitor"
#./simv +UVM_TESTNAME=my_case0 +uvm_set_inst_override="my_monitor,new_monitor,uvm_test_top.env.o_agt.mon"
#./simv +UVM_TESTNAME=my_case0 +UVM_TIMEOUT="300ns, YES"
#./simv +UVM_TESTNAME=my_case0 +UVM_VERBOSITY=UVM_DEBUG
endif

Makefile中@作用

  • @echo不能被shell解析,shell也不存在命令回显;Makefile还是和shell有一些轻微差异
  • @echo能被Makefile解析,@echo和echo都能正常执行命令;
  • @vsim 则不会打印vsim这行命令到屏幕上; vsim则会打印 vsim xxxx 到屏幕上;
  • ()是命令组合
    @(cd ..;\ tar -zcf uvm_ac_config_db.tgz rtl sfr_agent tb sfr_test_pkg sim README.txt )

编译代码时,会进程接触makefile,会涉及到一些符号,由于不明白有些意思经常出现问题,在此归纳一下。

‘@’ 符号的使用
通常makefile会将其执行的命令行在执行前输出到屏幕上。如果将‘@’添加到命令行前,这个命令将不被make回显出来。
例如:@echo --compiling module----; // 屏幕输出 --compiling module----
echo --compiling module----; // 没有@ 屏幕输出echo --compiling module----

filelist

modelsim/questasim do文件解释以及makefile_第4张图片

参考:

Makefile详解——从入门到精通

你可能感兴趣的:(uvm,shell)