0%

Verdi之基本使用

本文主要介绍了Synopsys中波形查看工具Verdi的基本使用,重点在于VCS与verdi联动时生成fsdb波形文件的方法

生成fsdb波形文件

1.基于SV系统函数的方法

1.1 filelist.f

  • 与vcs自带的vpd文件保存方法类似,需要在filelist中先定义一个宏

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Macro define
    //+define+DUMP_VPD
    +define+FSDB

    //Source file
    ./counter.sv

    //Testbench
    ./counter_tb.sv

1.2 Makefile

  • makefile中是vcs+verdi的联合使用相关的配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    all: clean comp sim verdi

    #if you want to delete simv, recommend simv_* to rename
    sim_name = simv_counter

    #set a new vpd file name
    vpd_name = +vpdfile+${sim_name}.vpd

    #Code coverage command
    CM = -cm line+cond+fsm+branch+tgl
    CM_NAME = -cm_name ${sim_name}
    CM_DIR = -cm_dir ./${sim_name}.vdb

    clean:
    rm -rf ./csrc *.daidir *.log simv* *.key *.vpd ./DVEfiles *.vdb
    rm -rf verdiLog *.fsdb *.bak *.conf

    ## VCS and Verdi
    comp:
    vcs -full64 -cpp g++ -cc gcc -LDFLAGS -no-pie -LDFLAGS -Wl,--no-as-needed -CFLAGS -fPIE \
    -sverilog +v2k -timescale=1ns/1ps \
    -debug_acc+all \
    -fsdb \
    -o ${sim_name} \
    -l compile.log \
    -f filelist.f \

    sim:
    ./${sim_name} -l sim.log

    verdi:
    verdi -sv -f filelist.f -ssf *.fsdb &

    ## ONLY VCS
    #comp:
    # vcs -full64 -cpp g++ -cc gcc -LDFLAGS -no-pie -LDFLAGS -Wl,--no-as-needed -CFLAGS -fPIE \
    -sverilog +v2k -timescale=1ns/1ps \
    -debug_acc+all \
    ${vpd_name} \
    ${CM} \
    ${CM_NAME} \
    ${CM_DIR} \
    -o ${sim_name} \
    -l compile.log \
    -f filelist.f \

    #sim:
    # ./${sim_name} \
    ${vpd_name} \
    ${CM} ${CM_NAME} ${CM_DIR} \
    -l sim.log \

    #show the coverage
    cov:
    dve -full64 -covdir *.vdb &
    • 在comp中:
      • -fsdb #表示支持fsdb相应操作
    • 在sim中:
      • -ssf *.fsdb #启动verdi并自动加载fsdb类型的波形
      • 如果语言使用的是SV,则一定要加上-sv,否则某些变量的波形会加载不出来

1.3 Testbench中的相关设置

1
2
3
4
5
6
7
//dump Verdi file
`ifdef FSDB
initial begin
$fsdbDumpfile("count.fsdb"); //count.fsdb is the name of .fsdb file
$fsdbDumpvars(0, counter_tb);
end
`endif
  • 其中$fsdbDumpvars()的使用方法与vcdplusmemon()类似

2.基于ucli/tcl接口的方法

2.1 添加ucli、tcl接口

  • 即编写tcl脚本:fsdb_vcs.tcl
1
2
3
4
5
6
7
8
global env
fsdbDumpfile "env(demo_name).fsdb"
fsdbDumpvars 0 "counter_tb"
run 20ns
fsdbDumpoff
run 10ns
fsdbDumpon
run

2.2 Makefile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
all: clean comp sim verdi

#if you want to delete simv, recommend simv_* to rename
sim_name = simv_counter

#set a new vpd file name
vpd_name = +vpdfile+${sim_name}.vpd

#Code coverage command
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name ${sim_name}
CM_DIR = -cm_dir ./${sim_name}.vdb

## Verdi ucli/tcl def
export demo_name = ${sim_name}

###############################################
clean:
rm -rf ./csrc *.daidir *.log simv* *.key *.vpd ./DVEfiles *.vdb
rm -rf verdiLog *.fsdb *.bak *.conf

## VCS and Verdi
#comp:
# vcs -full64 -cpp g++ -cc gcc -LDFLAGS -no-pie -LDFLAGS -Wl,--no-as-needed -CFLAGS -fPIE \
-sverilog +v2k -timescale=1ns/1ps \
-debug_acc+all \
-fsdb \
-o ${sim_name} \
-l compile.log \
-f filelist.f

#sim:
# ./${sim_name} -l sim.log

# ucli/tcl comp set
comp:
vcs -full64 -cpp g++ -cc gcc -LDFLAGS -no-pie -LDFLAGS -Wl,--no-as-needed -CFLAGS -fPIE \
-sverilog +v2k -timescale=1ns/1ps \
-debug_acc+all \
-LDFLAGS \
-rdynamic \
-P ${VERDI_HOME}/share/PLI/VCS/LINUX64/novas.tab \
${VERDI_HOME}/share/PLI/VCS/LINUX64/pli.a \
-o ${sim_name} \
-l compile.log \
-f filelist.f

sim:
./${sim_name} \
-ucli -i ./fsdb_vcs.tcl \
+fsdb+autoflush \
-l sim.log

verdi:
verdi -sv -f filelist.f -ssf *.fsdb &

## ONLY VCS
#comp:
# vcs -full64 -cpp g++ -cc gcc -LDFLAGS -no-pie -LDFLAGS -Wl,--no-as-needed -CFLAGS -fPIE \
-sverilog +v2k -timescale=1ns/1ps \
-debug_acc+all \
${vpd_name} \
${CM} \
${CM_NAME} \
${CM_DIR} \
-o ${sim_name} \
-l compile.log \
-f filelist.f

#sim:
# ./${sim_name} \
${vpd_name} \
${CM} ${CM_NAME} ${CM_DIR} \
-l sim.log

#show the coverage
cov:
dve -full64 -covdir *.vdb &
  • 其中:

    • -debug_acc+all可以使能ucli命令
    • +fsdb+autoflush为边仿真边dump波形
  • 最终演示结果如下:

    image-20230830215205548


gui界面的操作

  • 使用make compmake simmake verdi操作后,可得到如下gui界面

    image-20230830152004283

  • 基本操作:

    • 信号选择:

      • 模块波形:选择某一模块,按ctrl+4或直接拖拽
      • 某一信号波形:代码界面中选择某一信号,按ctrl+w或者直接拖拽
    • 查看波形:

      • 全局波形,按f键或点击100%按钮
      • 缩小波形:按z键
      • 放大波形:鼠标左键拖选放大范围
      • 显示结构:按h键
      • 删除信号:按delete键
    • 标记时间节点:

      • 按shift+M,再按照如下示例操作

        image-20230830202328178
    • 鼠标左键控制黄色cursor,鼠标中键控制白色cursor

      image-20230830202553237


Reference

欢迎来到ssy的世界