crazybird

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

0
阅读(3095)

一、简介

在前面的博文中已经介绍了“验证平台”搭建的原因、理论基础以及结构框架,那么今天就以最简单功能(即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脚本文件的内容,里面具体什么意思不重要,关键是如何把它给运用起来,否则一切都是浮云。请留意下一篇博文《验证平台的搭建——应用篇》。


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

Baidu
map