【原创】验证平台的搭建——实现篇
0赞一、简介
在前面的博文中已经介绍了“验证平台”搭建的原因、理论基础以及结构框架,那么今天就以最简单功能(即modelsim既可运行于图形界面模式下也可运行于命令模式下,更多功能只能靠自己去扩展了)来介绍一下该验证平台是如何搭建的!
二、批处理文件内容介绍
根据理论篇的验证平台架构可知,验证平台的启动以及参数的传递是从run目录下的批处理文件开始的。那就先从这里开始吧。在run目录下新建如图1所示的批处理文件。
图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脚本文件。下面将对各脚本的内容进行介绍。
图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脚本文件的内容,里面具体什么意思不重要,关键是如何把它给运用起来,否则一切都是浮云。请留意下一篇博文《验证平台的搭建——应用篇》。
首创于电子技术应用网站,未经同意不得转载~~