久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

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


一、簡介

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

二、驗證平臺的架構(gòu)

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

圖1 驗證平臺文件組織結(jié)構(gòu)

1、 test

驗證平臺的頂層文件夾。

2、 rtl

存放rtl的文件夾。

3、 verify

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

4、 run

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

5、 script

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

6、 testbench

存放測試文件。

7、 log

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

三、驗證平臺的運行機制

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

圖2 驗證平臺運行機制

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










-------------《modelsim仿真平臺的搭建——額外篇》-----------------------




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

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

圖1 新建庫文件夾

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

圖2 器件庫編譯工具

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

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

圖4 正在編譯器件庫

4、當(dāng)庫編譯完成后,將彈出如圖5所示的對話框。點擊OK、Close完成器件庫的編譯。

圖5 器件庫編譯完成

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

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

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

圖8 打開modelsim.ini文件











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




一、簡介

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

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

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

圖1 新建各批處理文件

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

1、sim.bat

打開sim.bat文件,開始內(nèi)容的編寫。首先是關(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è)置變量的默認值,包括器件庫的確定、modelsim界面啟動與否、使用幫助、清除日志等,如程序清單3所示。

程序清單3

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

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

程序清單4

cd %log_path%

判斷是否有參數(shù)傳遞過來(包括是否需要編譯器件庫、是否基于圖形界面仿真、是否啟動幫助顯示信息以及是否清楚垃圾文件)并做相應(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è)置仿真庫,以上一篇博文《驗證平臺的搭建——額外篇》為基礎(chǔ),該平臺目前以只支持altera器件庫為例,如程序清單6所示。

程序清單6

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

啟動modelsim軟件并根據(jù)參數(shù)決定驗證平臺運行于圖形界面下或命令行下,如程序清單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 加上該參數(shù)表示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

調(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īng)用篇》進行詳細介紹。

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

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

圖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

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

程序清單17

view wave
add wave *
#log -r /*

四、總結(jié)

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


~~










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





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

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

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

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

其次是設(shè)置需要用到哪些器件庫,打開do腳本文件vsim.do,可根據(jù)具體需求進行設(shè)置(這里用到的器件庫有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è)置一次。

二、驗證平臺啟動參數(shù)設(shè)置

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

圖2 顯示幫助信息

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

程序清單2

call sim

程序清單3

call sim -lib altera

程序清單4

call sim -gui

程序清單5

call sim -lib altera -gui

接下來,舉一個簡單的例子并通過驗證它的功能來介紹驗證平臺的使用。此次要驗證的是altera的PLL核,輸入時鐘為50MHz,輸出時鐘為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)的測試代碼如程序清單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

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

程序清單8

call sim -lib altera -gui

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

圖3 PLL仿真結(jié)果

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

圖4 編譯錯誤

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








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




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品揄拍一区二区 | 成人精品鲁一区一区二区 | 国产视频线观看永久免费 | 国产精品我不卡 | 精品一区二区三区在线视频 | 久久久久免费精品国产小说色大师 | 欧美一二精品 | 亚洲成人黄色 | 久久中文字幕视频 | 涩爱av一区二区三区 | 一级毛片网| 国产日韩欧美在线观看 | 99视频在线免费观看 | 欧美日韩国产一区二区 | 久久99视频精品 | 成人亚洲精品久久久久软件 | 国产精品国产亚洲精品看不卡15 | 天天影视色综合 | 农村真人裸体丰满少妇毛片 | 夜夜草导航 | 中国av在线免费观看 | 国产成人免费在线 | a亚洲精品 | 日韩1区 | 天天天天操| 欧美午夜精品久久久久免费视 | 天天弄天天操 | 国产精品欧美一区二区三区不卡 | 天天色天天色 | 成人在线视频一区二区三区 | 国产日韩亚洲欧美 | 久久视频精品 | 五月婷婷丁香 | 久久国产一区二区三区 | 99精品国产一区二区三区 | 天久久 | 一级大黄 | 国产亚洲精品美女久久久久久久久久 | 日韩福利在线 | 在线观看成人小视频 | 久久99精品久久久久 |