crazybird

【原创】验证平台的搭建——实现篇

0
阅读(3207)

一、简介

    在前面的博文中已经介绍了“验证平台”搭建的原因、理论基础以及结构框架,那么今天就以最简单功能(即modelsim既可运行于图形界面模式下也可运行于命令模式下,更多功能只能靠自己去扩展了)来介绍一下该验证平台是如何搭建的!

二、批处理文件内容介绍

    根据理论篇的验证平台架构可知,验证平台的启动以及参数的传递是从run目录下的批处理文件开始的。那就先从这里开始吧。在run目录下新建如图1所示的批处理文件。

新建各批处理文件.bmp

图1  新建各批处理文件

    各批处理文件的作用正如命名那样,其中sim.bat主要设置各种变量、参数的判断及执行相应的功能等,sim_start.bat起到启动验证平台并传递参数的功能。下面对各批处理文件内容的实现进行介绍。

1、sim.bat

    打开sim.bat文件,开始内容的编写。首先是关闭显示信息和清屏,如程序清单1所示。

程序清单1

@echo off
cls

    设置各文件夹路径变量,如程序清单2所示。

程序清单2

set verify_path=..\..\verify
set run_path=..\run
set script_path=..\script
set rtl_path=..\..\rtl
set tb_path=..\testbench
set log_path=..\log
if not exist %log_path% (md %log_path%)

    设置变量的默认值,包括器件库的确定、modelsim界面启动与否、使用帮助、清除日志等,如程序清单3所示。

程序清单3

set LIBRARY=nolib
set GUI=0
set usage=0
set clr=0

    进入log目录,让垃圾文件都产生在log目录下,如程序清单4所示。

程序清单4

cd %log_path%

    判断是否有参数传递过来(包括是否需要编译器件库、是否基于图形界面仿真、是否启动帮助显示信息以及是否清楚垃圾文件)并做相应的处理,如程序清单5所示。

程序清单5

:decode_parameter
if not "%1" == "" (
    if "%1" == "-lib" (set LIBRARY=%2)
    if "%1" == "-gui" (set GUI=1)
    if "%1" == "help" (set usage=1)
    if "%1" == "clean" (set clr=1)
    SHIFT /1
    goto decode_parameter
)

    设置仿真库,以上一篇博文《验证平台的搭建——额外篇》为基础,该平台目前以只支持altera器件库为例,如程序清单6所示。

程序清单6

if "%LIBRARY%" == "altera" (
    xcopy /Y C:\modeltech64_10.2c\altera_lib_1\modelsim.ini .\
    set MODELSIM=.\modelsim.ini
    echo "use altera lib"
)

    启动modelsim软件并根据参数决定验证平台运行于图形界面下或命令行下,如程序清单7所示。

程序清单7

if "%usage%" == "0" (
    if "%clr%" == "0" (
        if "%GUI%" == "1" (
            vsim -do ../script/full_sim.do
        ) else (
            vsim -c -do ../script/full_sim.do
        )
    )
)

    显示帮助信息,如程序清单8所示。

程序清单8

if "%usage%" == "1" (
    echo 脚本使用方法
    echo "call sim "
    echo options:
    echo "-lib 指定仿真库,默认值为nolib,目前仅支持altera器件库"
    echo "-gui 加上该参数表示modelsim运行在界面下,否则运行在命令下"
    echo "help 显示帮助信息"
    echo "clean 清除log目录下所有文件"
)

    返回run目录,如程序清单9所示。

程序清单9

cd %run_path%

    清除垃圾文件,如程序清单10所示。

程序清单10

if "%clr%" == "1" (
    rd %log_path% /s /q
    md %log_path%
)

2、显示帮助信息.bat

    调用sim.bat并传递help参数,如程序清单11所示。

程序清单11

call sim help
pause

3、清除log目录下的文件.bat

    调用sim.bat并传递clean参数,如程序清单12所示。

程序清单12

call sim clean

4、sim_start.bat

    该批处理文件的使用,将在下一篇博文《验证平台的搭建——应用篇》进行详细介绍。

三、do脚本文件内容介绍

    在script目录下新建如图2所示的do脚本文件。下面将对各脚本的内容进行介绍。

新建各do脚本文件.bmp

图2  新建各do脚本文件

1、full_sim.do

    该脚本文件的作用是获取批处理文件传递过来的变量、获取文件列表、编译、仿真、添加波形、运行等,如程序清单13所示。

程序清单13

transcript off
onbreak {resume}
set lib         $::env(LIBRARY)
set gui         $::env(GUI)
set notb        $::env(notb)
se et verify_path $::env(verify_path)
set run_path    $::env(run_path)
set script_path $::env(script_path)
set rtl_path    $::env(rtl_path)
set tb_path     $::env(tb_path)
set log_path    $::env(log_path)
set verify_path     [string map {"\\" "/"} $verify_path]
set run_path        [string map {"\\" "/"} $run_path]
set script_path     [string map {"\\" "/"} $script_path]
set rtl_path        [string map {"\\" "/"} $rtl_path]
set tb_path         [string map {"\\" "/"} $tb_path]
set log_path        [string map {"\\" "/"} $log_path]
do $script_path/filelist.do
do $script_path/vlog.do
do $script_path/vsim.do
do $script_path/wave.do
run -all
quit

2、filelist.do

    该脚本文件的作用是获取文件列表,如程序清单14所示。

程序清单14

proc search_ver_rtl {dir_name file_ver_id} {
    set dirlist [glob -directory $dir_name -nocomplain -type d *]
    foreach fname [glob -directory $dir_name -nocomplain -types f "*.v" "*.sv"] {
        puts $file_ver_id $fname
    }
    foreach dir $dirlist {
        search_ver_rtl $dir $file_ver_id
    }
}
set file_list_ver [file join $log_path "filelist_ver.f"]
if {[file exist $file_list_ver]} {
    file delete $file_list_ver
}
set file_ver_id [open $file_list_ver w]
search_ver_rtl $rtl_path $file_ver_id
search_ver_rtl $tb_path $file_ver_id
close $file_ver_id

3、vlog.do

    该脚本文件的作用是编译库和列表文件,如程序清单15所示。

程序清单15

if {[file exists $log_path/rtl_work]} {
    vdel -lib $log_path/rtl_work -all
}
vlib $log_path/rtl_work
vmap work $log_path/rtl_work
vlog -sv -incr +initreg=r+0 +notimingchecks -quiet -timescale 1ns/1ps -cover bcestf -work work -f $file_list_ver

4、vsim.do

    该脚本文件的作用是启动仿真并判断是否需要用到器件库,如程序清单16所示。

程序清单16

if {$lib == "altera"} {
    vsim -suppress 3009 -t 1ps -quiet -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cyclone_ver -L cycloneii_ver -L cycloneiii_ver -L cycloneiiils_ver -L cycloneive_ver -L cycloneiv_hssi_ver -L cycloneiv_pcie_hip_ver -L cycloneiv_ver -L work -voptargs="+acc" -wlf $log_path/vsim.wlf work.testbench 
} else {
    vsim -suppress 3009 -t 1ps -quiet -L work -voptargs="+acc" -wlf $log_path/vsim.wlf work.testbench 
}

5、wave.do

    该脚本文件的作用是在图形模式下调用波形窗口和添加波形信号等,如程序清单17所示。

程序清单17

view wave
add wave *
#log -r /*

四、总结

    上面简单介绍了验证平台中批处理和do脚本文件的内容,里面具体什么意思不重要,关键是如何把它给运用起来,否则一切都是浮云。请留意下一篇博文《验证平台的搭建——应用篇》。


                                                首创于电子技术应用网站,未经同意不得转载~~