欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: modelsim仿真平臺(tái)的搭建教程-非常詳細(xì) [打印本頁(yè)]

作者: piaolin    時(shí)間: 2015-11-1 16:15
標(biāo)題: modelsim仿真平臺(tái)的搭建教程-非常詳細(xì)
--------------《modelsim仿真平臺(tái)的搭建——理論篇》--------------------------


一、簡(jiǎn)介

通常情況下,每當(dāng)用硬件描述語(yǔ)言(HDL)設(shè)計(jì)完邏輯電路之后,我們接著要做的一件非常重要的事情就是對(duì)邏輯電路的功能進(jìn)行仿真。那用什么軟件對(duì)其進(jìn)行仿真呢?筆者用得比較多的是Mentor公司的modelsim,他是業(yè)界最優(yōu)秀的HDL仿真軟件。而大多數(shù)人習(xí)慣基于它的圖形界面操作來(lái)對(duì)邏輯電路進(jìn)行仿真。這些操作看似簡(jiǎn)單方便,殊不知圖形界面仿真會(huì)消耗很多時(shí)間,尤其仿真大量數(shù)據(jù)時(shí)該現(xiàn)象會(huì)特別明顯。這時(shí)我就在想,有沒(méi)有什么辦法既可以達(dá)到仿真的目的又可以減少仿真的時(shí)間呢?想了想,辦法還是有的,就是搭建一個(gè)統(tǒng)一的驗(yàn)證平臺(tái),即需要觀察仿真波形時(shí),用圖形界面方式;當(dāng)仿真大量數(shù)據(jù)時(shí),用命令形式。

二、驗(yàn)證平臺(tái)的架構(gòu)

該平臺(tái)是基于批處理、腳本、一鍵化的可運(yùn)行于圖形界面或命令形式的仿真機(jī)制的。圖1所示為驗(yàn)證平臺(tái)的文件組織架構(gòu),下面將分別對(duì)各文件夾的作用進(jìn)行介紹。

圖1 驗(yàn)證平臺(tái)文件組織結(jié)構(gòu)

1、 test

驗(yàn)證平臺(tái)的頂層文件夾。

2、 rtl

存放rtl的文件夾。

3、 verify

存放與驗(yàn)證相關(guān)的文件夾。

4、 run

存放與啟動(dòng)modelsim仿真相關(guān)的批處理文件。

5、 script

存放與modelsim仿真相關(guān)的腳本文件。

6、 testbench

存放測(cè)試文件。

7、 log

存放modelsim仿真過(guò)程中產(chǎn)生的垃圾文件。

三、驗(yàn)證平臺(tái)的運(yùn)行機(jī)制

驗(yàn)證平臺(tái)的運(yùn)行機(jī)制如圖2所示,通過(guò)批處理和腳本文件之間的調(diào)用、傳遞參數(shù)來(lái)啟動(dòng)仿真的。其中do文件的執(zhí)行順序如圖3所示。

圖2 驗(yàn)證平臺(tái)運(yùn)行機(jī)制

圖3 do文件執(zhí)行順序










-------------《modelsim仿真平臺(tái)的搭建——額外篇》-----------------------




為了下一篇博文《驗(yàn)證平臺(tái)的搭建——實(shí)現(xiàn)篇》更好地描述,這里需要增加額外的一篇博文來(lái)介紹altera器件庫(kù)的編譯,并以quartusII13.0器件庫(kù)編譯為例。

1、在modelsim安裝目錄下新建文件夾altera_lib_1(altera_lib文件夾之前在我的電腦上已經(jīng)建立過(guò),并存放著器件庫(kù))用于器件庫(kù)編譯的地方(用戶(hù)可在任意路徑下新建該庫(kù)文件),如圖1所示。

圖1 新建庫(kù)文件夾

2、選擇電腦“開(kāi)始”菜單,找到quartusII13.0的器件庫(kù)編譯工具并左鍵單擊,如圖2所示。

圖2 器件庫(kù)編譯工具

3、在彈出的對(duì)話(huà)框中設(shè)置庫(kù)編譯參數(shù)的設(shè)置,包括仿真軟件modelsim、需要編譯的器件、庫(kù)語(yǔ)言以及庫(kù)文件夾的選擇,如圖3所示。設(shè)置好參數(shù)后點(diǎn)擊Start Complation開(kāi)始器件庫(kù)的編譯,如圖4所示。

圖3 庫(kù)編譯參數(shù)設(shè)置

圖4 正在編譯器件庫(kù)

4、當(dāng)庫(kù)編譯完成后,將彈出如圖5所示的對(duì)話(huà)框。點(diǎn)擊OK、Close完成器件庫(kù)的編譯。

圖5 器件庫(kù)編譯完成

6、器件庫(kù)編譯后,在庫(kù)文件夾altera_lib_1中產(chǎn)生相應(yīng)的器件庫(kù),如圖6和圖7所示。也可以打開(kāi)modelsim.ini文件看里面生成的內(nèi)容,如圖8所示,很明顯與生成的器件庫(kù)一一對(duì)應(yīng)。

圖6 編譯產(chǎn)生的器件庫(kù)1

圖7 編譯產(chǎn)生的器件庫(kù)2

圖8 打開(kāi)modelsim.ini文件











----------------《modelsim仿真平臺(tái)的搭建——實(shí)現(xiàn)篇》---------------------------------------------------




一、簡(jiǎn)介

在前面的博文中已經(jīng)介紹了“驗(yàn)證平臺(tái)”搭建的原因、理論基礎(chǔ)以及結(jié)構(gòu)框架,那么今天就以最簡(jiǎn)單功能(即modelsim既可運(yùn)行于圖形界面模式下也可運(yùn)行于命令模式下,更多功能只能靠自己去擴(kuò)展了)來(lái)介紹一下該驗(yàn)證平臺(tái)是如何搭建的!

二、批處理文件內(nèi)容介紹

根據(jù)理論篇的驗(yàn)證平臺(tái)架構(gòu)可知,驗(yàn)證平臺(tái)的啟動(dòng)以及參數(shù)的傳遞是從run目錄下的批處理文件開(kāi)始的。那就先從這里開(kāi)始吧。在run目錄下新建如圖1所示的批處理文件。

圖1 新建各批處理文件

各批處理文件的作用正如命名那樣,其中sim.bat主要設(shè)置各種變量、參數(shù)的判斷及執(zhí)行相應(yīng)的功能等,sim_start.bat起到啟動(dòng)驗(yàn)證平臺(tái)并傳遞參數(shù)的功能。下面對(duì)各批處理文件內(nèi)容的實(shí)現(xiàn)進(jìn)行介紹。

1、sim.bat

打開(kāi)sim.bat文件,開(kāi)始內(nèi)容的編寫(xiě)。首先是關(guān)閉顯示信息和清屏,如程序清單1所示。

程序清單1

@echo off
cls

設(shè)置各文件夾路徑變量,如程序清單2所示。

程序清單2

set verify_path=....erify
set run_path=.. un
set script_path=..script
set rtl_path=.... tl
set tb_path=.. estbench
set log_path=..log
if not exist %log_path% (md %log_path%)

設(shè)置變量的默認(rèn)值,包括器件庫(kù)的確定、modelsim界面啟動(dòng)與否、使用幫助、清除日志等,如程序清單3所示。

程序清單3

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

進(jìn)入log目錄,讓垃圾文件都產(chǎn)生在log目錄下,如程序清單4所示。

程序清單4

cd %log_path%

判斷是否有參數(shù)傳遞過(guò)來(lái)(包括是否需要編譯器件庫(kù)、是否基于圖形界面仿真、是否啟動(dòng)幫助顯示信息以及是否清楚垃圾文件)并做相應(yīng)的處理,如程序清單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
)

設(shè)置仿真庫(kù),以上一篇博文《驗(yàn)證平臺(tái)的搭建——額外篇》為基礎(chǔ),該平臺(tái)目前以只支持altera器件庫(kù)為例,如程序清單6所示。

程序清單6

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

啟動(dòng)modelsim軟件并根據(jù)參數(shù)決定驗(yàn)證平臺(tái)運(yùn)行于圖形界面下或命令行下,如程序清單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 指定仿真庫(kù),默認(rèn)值為nolib,目前僅支持altera器件庫(kù)"
echo "-gui 加上該參數(shù)表示modelsim運(yùn)行在界面下,否則運(yùn)行在命令下"
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

調(diào)用sim.bat并傳遞help參數(shù),如程序清單11所示。

程序清單11

call sim help
pause

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

調(diào)用sim.bat并傳遞clean參數(shù),如程序清單12所示。

程序清單12

call sim clean

4、sim_start.bat

該批處理文件的使用,將在下一篇博文《驗(yàn)證平臺(tái)的搭建——應(yīng)用篇》進(jìn)行詳細(xì)介紹。

三、do腳本文件內(nèi)容介紹

在script目錄下新建如圖2所示的do腳本文件。下面將對(duì)各腳本的內(nèi)容進(jìn)行介紹。

圖2 新建各do腳本文件

1、full_sim.do

該腳本文件的作用是獲取批處理文件傳遞過(guò)來(lái)的變量、獲取文件列表、編譯、仿真、添加波形、運(yùn)行等,如程序清單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

該腳本文件的作用是編譯庫(kù)和列表文件,如程序清單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

該腳本文件的作用是啟動(dòng)仿真并判斷是否需要用到器件庫(kù),如程序清單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

該腳本文件的作用是在圖形模式下調(diào)用波形窗口和添加波形信號(hào)等,如程序清單17所示。

程序清單17

view wave
add wave *
#log -r /*

四、總結(jié)

上面簡(jiǎn)單介紹了驗(yàn)證平臺(tái)中批處理和do腳本文件的內(nèi)容,里面具體什么意思不重要,關(guān)鍵是如何把它給運(yùn)用起來(lái),否則一切都是浮云。請(qǐng)留意下一篇博文《驗(yàn)證平臺(tái)的搭建——應(yīng)用篇》。


~~










---------------------《modelsim仿真平臺(tái)的搭建——應(yīng)用篇》------------------------------------------------





基于上一篇博文《驗(yàn)證平臺(tái)的搭建——實(shí)現(xiàn)篇》的基礎(chǔ)上,講講該驗(yàn)證平臺(tái)的使用方法。

一、基本參數(shù)設(shè)置

針對(duì)不同的計(jì)算機(jī)以及軟件的安裝路徑,需要對(duì)驗(yàn)證平臺(tái)的一些參數(shù)進(jìn)行設(shè)置。首先是器件庫(kù)的路徑設(shè)置,打開(kāi)批處理文件sim.bat,根據(jù)具體情況進(jìn)行設(shè)置,如圖1所示。

圖1 庫(kù)路徑的設(shè)置

其次是設(shè)置需要用到哪些器件庫(kù),打開(kāi)do腳本文件vsim.do,可根據(jù)具體需求進(jìn)行設(shè)置(這里用到的器件庫(kù)有altera_ver、lpm_ver、sgate_ver、altera_mf_ver、altera_lnsim_ver等),如程序清單1所示。

程序清單1

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
}

一般情況下,以上參數(shù)只需設(shè)置一次。

二、驗(yàn)證平臺(tái)啟動(dòng)參數(shù)設(shè)置

關(guān)于驗(yàn)證平臺(tái)的啟動(dòng)參數(shù)說(shuō)明可雙擊批處理文件“顯示幫助信息.bat”進(jìn)行查看,如圖2所示。

圖2 顯示幫助信息

而參數(shù)的設(shè)置是在批處理文件“sim_start.bat”中進(jìn)行的。驗(yàn)證平臺(tái)運(yùn)行于命令下且不需要器件庫(kù),如程序清單2所示;驗(yàn)證平臺(tái)運(yùn)行于命令下且需要器件庫(kù),如程序清單3所示;驗(yàn)證平臺(tái)運(yùn)行于圖形界面下且不需要器件庫(kù),如程序清單4所示;驗(yàn)證平臺(tái)運(yùn)行于圖形界面下且需要器件庫(kù),如程序清單5所示。

程序清單2

call sim

程序清單3

call sim -lib altera

程序清單4

call sim -gui

程序清單5

call sim -lib altera -gui

接下來(lái),舉一個(gè)簡(jiǎn)單的例子并通過(guò)驗(yàn)證它的功能來(lái)介紹驗(yàn)證平臺(tái)的使用。此次要驗(yàn)證的是altera的PLL核,輸入時(shí)鐘為50MHz,輸出時(shí)鐘為100MHz和50MHz,IP核參數(shù)設(shè)置如程序清單6所示。

程序清單6

altpll_component.bandwidth_type = "AUTO",
altpll_component.clk0_divide_by = 1,
altpll_component.clk0_duty_cycle = 50,
altpll_component.clk0_multiply_by = 2,
altpll_component.clk0_phase_shift = "0",
altpll_component.clk1_divide_by = 1,
altpll_component.clk1_duty_cycle = 50,
altpll_component.clk1_multiply_by = 1,
altpll_component.clk1_phase_shift = "0",
altpll_component.compensate_clock = "CLK0",
altpll_component.inclk0_input_frequency = 20000,
altpll_component.intended_device_family = "Cyclone IV E",

相應(yīng)的測(cè)試代碼如程序清單7所示。

程序清單7

`timescale 1ns/1ps
module testbench;
reg rst;
reg clk_in_50M;
wire clk_out_100M;
wire clk_out_50M;
wire locked;

parameter CLK_CYCLE = 20;
initial
begin
clk_in_50M = 0;
forever #(CLK_CYCLE/2)
clk_in_50M = ~clk_in_50M;
end

sys_pll u_sys_pll (
.areset ( rst ),
.inclk0 ( clk_in_50M ),
.c0 ( clk_out_100M),
.c1 ( clk_out_50M ),
.locked ( locked )
);

initial
begin
rst = 1;
#(CLK_CYCLE*10);
rst = 0;
#(CLK_CYCLE*1000);
$stop;
end

endmodule

由于需要查看輸入輸出時(shí)鐘的波形關(guān)系,因此PLL功能的驗(yàn)證主要基于圖形界面。又因?yàn)閷?duì)PLL的仿真需要器件庫(kù),故驗(yàn)證平臺(tái)的仿真參數(shù)設(shè)置如程序清單8所示。

程序清單8

call sim -lib altera -gui

雙擊sim_start.bat批處理文件,啟動(dòng)仿真,仿真結(jié)果如圖3所示。輸入50MHz的時(shí)鐘、輸出100MHz和50MHz的時(shí)鐘,很顯然,PLL的功能是正確的。

圖3 PLL仿真結(jié)果

如果不指定器件庫(kù)的話(huà),將出現(xiàn)錯(cuò)誤,如圖4所示。

圖4 編譯錯(cuò)誤

好像講完了,其他的就自己去創(chuàng)造吧。哈哈*^_^*








作者: JasonCry    時(shí)間: 2017-9-12 10:10
非常棒哦,學(xué)習(xí)了。先按博主的方法試試。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1