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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16373|回復: 1
打印 上一主題 下一主題
收起左側

modelsim仿真平臺的搭建教程-非常詳細

[復制鏈接]
跳轉到指定樓層
樓主
--------------《modelsim仿真平臺的搭建——理論篇》--------------------------


一、簡介

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

二、驗證平臺的架構

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

圖1 驗證平臺文件組織結構

1、 test

驗證平臺的頂層文件夾。

2、 rtl

存放rtl的文件夾。

3、 verify

存放與驗證相關的文件夾。

4、 run

存放與啟動modelsim仿真相關的批處理文件。

5、 script

存放與modelsim仿真相關的腳本文件。

6、 testbench

存放測試文件。

7、 log

存放modelsim仿真過程中產生的垃圾文件。

三、驗證平臺的運行機制

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

圖2 驗證平臺運行機制

圖3 do文件執行順序










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




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

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

圖1 新建庫文件夾

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

圖2 器件庫編譯工具

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

圖3 庫編譯參數設置

圖4 正在編譯器件庫

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

圖5 器件庫編譯完成

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

圖6 編譯產生的器件庫1

圖7 編譯產生的器件庫2

圖8 打開modelsim.ini文件











----------------《modelsim仿真平臺的搭建——實現篇》---------------------------------------------------




一、簡介

在前面的博文中已經介紹了“驗證平臺”搭建的原因、理論基礎以及結構框架,那么今天就以最簡單功能(即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=....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%)

設置變量的默認值,包括器件庫的確定、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.2caltera_lib_1modelsim.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腳本文件的內容,里面具體什么意思不重要,關鍵是如何把它給運用起來,否則一切都是浮云。請留意下一篇博文《驗證平臺的搭建——應用篇》。


~~










---------------------《modelsim仿真平臺的搭建——應用篇》------------------------------------------------





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

一、基本參數設置

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

圖1 庫路徑的設置

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

一般情況下,以上參數只需設置一次。

二、驗證平臺啟動參數設置

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

圖2 顯示幫助信息

而參數的設置是在批處理文件“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核參數設置如程序清單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",

相應的測試代碼如程序清單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

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

程序清單8

call sim -lib altera -gui

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

圖3 PLL仿真結果

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

圖4 編譯錯誤

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







分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:232568 發表于 2017-9-12 10:10 | 只看該作者
非常棒哦,學習了。先按博主的方法試試。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 涩在线| 国产一区二 | 国产99久久 | 99亚洲精品视频 | 久久久国产一区二区三区 | 久久久久九九九女人毛片 | 国产精品久久久久久久久久免费看 | 黑人一级黄色大片 | 国产成人av在线 | 国内在线视频 | 国产一区91精品张津瑜 | 国产成人亚洲精品 | 在线播放国产一区二区三区 | 久久99精品久久久久久秒播九色 | 黄色在线免费观看 | 在线欧美日韩 | 精品免费| 亚洲九色| 成人在线视频一区 | 欧美极品在线观看 | 北条麻妃99精品青青久久 | 日韩爱爱网 | 免费午夜电影 | 99精品观看| 97精品国产 | 黄色国产大片 | 97影院在线午夜 | 久夜精品| 久久久久久电影 | 欧美综合一区二区 | 国产精品久久久久久久久久 | 人人性人人性碰国产 | 一区在线视频 | 黄视频国产 | 91精品久久久久久久久 | 成人免费在线小视频 | 国产一区久久 | 91精品综合久久久久久五月天 | 天堂网中文字幕在线观看 | 偷拍自拍网站 | 精品区一区二区 |