0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用Python實(shí)現(xiàn)Vivado和ModelSim仿真自動(dòng)化?

FPGA開源工作室 ? 來(lái)源:網(wǎng)絡(luò)交換FPGA ? 作者:網(wǎng)絡(luò)交換FPGA ? 2021-05-03 10:06 ? 次閱讀

芯片設(shè)計(jì)從RTL代碼一直到最后流片的GDSII文件,都是文本文件,因此,掌握文本分析處理語(yǔ)言是集成電路設(shè)計(jì)的一項(xiàng)重要的基本功。本公眾號(hào)一直致力于推廣采用文本分析工具來(lái)提升仿真和綜合效率的方法。詳見本公眾號(hào)專輯《芯片設(shè)計(jì)課程及相關(guān)實(shí)驗(yàn)》。本文是孫義雯同學(xué)采用Python語(yǔ)言實(shí)現(xiàn)的Vivado和Modelsim聯(lián)合仿真的自動(dòng)化腳本,已經(jīng)在實(shí)際項(xiàng)目中經(jīng)過較長(zhǎng)時(shí)間的檢驗(yàn),今天開源出來(lái),供大家學(xué)習(xí),歡迎留言交流心得體會(huì)和改進(jìn)建議。同時(shí),后續(xù)我們會(huì)陸續(xù)推出基于Python的Verilog代碼智能化分析處理文章,敬請(qǐng)期待。

我們?cè)赪indows系統(tǒng)下使用Vivado的默認(rèn)設(shè)置調(diào)用第三方仿真器比如ModelSim進(jìn)行仿真時(shí),一開始仿真軟件都會(huì)默認(rèn)在波形界面中加載testbench頂層的信號(hào)波形,并自行仿真1000ns后停止。當(dāng)我們想查看對(duì)應(yīng)模塊的波形時(shí),需要自己去手動(dòng)添加,并且為了防止跑一段時(shí)間仿真后,添加新模塊或者信號(hào)卻發(fā)現(xiàn)沒有記錄波形,就要提前手動(dòng)在控制臺(tái)上執(zhí)行l(wèi)og -r 。/*命令來(lái)實(shí)現(xiàn)對(duì)全部信號(hào)波形的記錄。但是每當(dāng)我們修改完代碼,關(guān)閉重啟仿真器再一次仿真時(shí),就需要將之前的操作(刪改添加對(duì)應(yīng)模塊信號(hào),執(zhí)行l(wèi)og -r 。/*等)重新完成一遍才能繼續(xù)跑出想看的信號(hào)波形。

盡管可以通過將仿真時(shí)添加的模塊信號(hào)保存為*.do文件,下次仿真通過執(zhí)行do *.do的形式來(lái)快速添加之前波形;但在頻繁修改代碼,需要經(jīng)常重新仿真的情況下,每次都手動(dòng)去添加信號(hào)的操作會(huì)比較影響到我們的情緒,那么能否通過腳本語(yǔ)言比如Python來(lái)實(shí)現(xiàn)一鍵仿真并自動(dòng)添加好所需要的模塊信號(hào)呢?首先我們需要對(duì)Vivado軟件實(shí)現(xiàn)第三方仿真的過程進(jìn)行分析,弄清楚其中的步驟。 Vivado軟件第三方仿真分析

1.1 Vivado調(diào)用第三方軟件方式

參考之前的文章:用Modelsim獨(dú)立仿真帶Vivado IP核的仿真工程,我們可以知道Vivado軟件執(zhí)行和生成仿真文件是在工程的仿真目錄工程名.sim/下,然后我們打開一個(gè)示例工程的仿真目錄,如圖所示

7d464730-9d17-11eb-8b86-12bb97331649.png

結(jié)合圖片和文章我們可以看出,Vivado軟件調(diào)用第三方仿真器的方式,是根據(jù)之前在工程文件中設(shè)置的仿真器路徑和聯(lián)調(diào)庫(kù)路徑等參數(shù),在工程仿真目錄下生成一系列仿真用的Tcl腳本和系統(tǒng)的批處理腳本(Linux下就是shell),通過系統(tǒng)命令執(zhí)行上面的批處理腳本(先compile,再elaborate,最后simulate),來(lái)調(diào)用第三方仿真軟件實(shí)現(xiàn)仿真功能。

1.2 Vivado仿真腳本分析

上面圖片中共有三個(gè)批處理腳本:compile.bat、elaborate.bat、simulate.bat。依次分別實(shí)現(xiàn)了三種功能:compile、elaborate、simulate。下面我們對(duì)每個(gè)批處理腳本的內(nèi)容分別進(jìn)行分析。

1.2.1 compile相關(guān)腳本

compile.bat腳本全部?jī)?nèi)容如下:

@echo offset bin_path=C:questasim64_10.6cwin64call %bin_path%/vsim -c -do “do {xxxxxxxx_compile.do}” -l compile.logif “%errorlevel%”==“1” goto ENDif “%errorlevel%”==“0” gotoSUCCESS:ENDexit 1:SUCCESSexit 0

本工程設(shè)置的第三方仿真器為Questasim,腳本中具體功能實(shí)現(xiàn)在第2和第3行:

設(shè)置二進(jìn)制文件路徑bin_path;

調(diào)用該路徑下的vsim程序執(zhí)行do {xxxxxxxx_compile.do}命令。

其中的xxxxxxxx_compile.do是跟批處理腳本同一目錄下的Tcl腳本文件,文件內(nèi)容如下(已添加注釋):

######################################################################## File name : xxxxxxxx_compile.do# Created on: Fri Aug 14 1609 +0800 2020## Auto generated by Vivado for ‘behavioral’ simulation########################################################################新建work庫(kù)vlib work#新建msim庫(kù)vlib msim

#新建msim/xil_defaultlib庫(kù)vlib msim/xil_defaultlib

#將目前的邏輯工作庫(kù)xil_defaultlib和實(shí)際工作庫(kù)msim/xil_defaultlib映射對(duì)應(yīng)vmap xil_defaultlib msim/xil_defaultlib

#編譯verilog代碼文件(VHDL文件需要用vcom命令),編譯到xil_defaultlib庫(kù)下vlog -64 -incr -work xil_defaultlib #vivado的官方IP核提供的仿真代碼文件“。。/。。/。。/xxxxxxxxxxxx.srcs/sources_1/ip/xxxxxxxxxxxx/xxxxxxxxxxxx_sim_netlist.v” “。。/。。/。。/xxxxxxxxxxxx.srcs/sources_1/ip/xxxxxxxxxxxx/xxxxxxxxxxxx_sim_netlist.v” “。。/。。/。。/xxxxxxxxxxxx.srcs/sources_1/ip/xxxxxxxxxxxx/xxxxxxxxxxxx_sim_netlist.v” “。。/。。/。。/xxxxxxxxxxxx.srcs/sources_1/ip/xxxxxxxxxxxx/xxxxxxxxxxxx_sim_netlist.v” “。。/。。/。。/xxxxxxxxxxxx.srcs/sources_1/ip/xxxxxxxxxxxx/xxxxxxxxxxxx_sim_netlist.v” #工程中自行編寫的代碼文件“。。/。。/。。/。。/rtl/xxx/xxxxxxx.v” “。。/。。/。。/。。/rtl/xxxx/xxxxxxx.v” 以下省略若干行的代碼文件。。.。。.。。

# compile glbl modulevlog -work xil_defaultlib “glbl.v”

#強(qiáng)制退出quit -force

看過上述代碼和注釋,我們可以了解到compile腳本通過調(diào)用第三方仿真器執(zhí)行對(duì)應(yīng)的Tcl腳本xxxxxxxx_compile.do實(shí)現(xiàn)了對(duì)工程中代碼文件的編譯,其中xxxxxxxx_compile.do中會(huì)寫入全部工程代碼文件的路徑。

1.2.2 elaborate腳本

elaborate.bat腳本全部?jī)?nèi)容如下:

@echo offset bin_path=C:questasim64_10.6cwin64call %bin_path%/vsim -c -do “do {xxxxxxxx_elaborate.do}” -l elaborate.logif “%errorlevel%”==“1” goto ENDif “%errorlevel%”==“0” goto SUCCESS:ENDexit 1:SUCCESSexit 0

同樣可以看出,該腳本中實(shí)現(xiàn)的具體功能為:

設(shè)置二進(jìn)制文件路徑bin_path;

調(diào)用該路徑下的vsim程序執(zhí)行do {xxxxxxxx_elaborate.do}命令。

其中xxxxxxxx_elaborate.do腳本的內(nèi)容如下(已加注釋):

######################################################################## File name : xxxxxxxx_elaborate.do# Created on: Fri Aug 14 1615 +0800 2020## Auto generated by Vivado for ‘behavioral’ simulation########################################################################vopt是在使用vcom或vlog編譯設(shè)計(jì)后對(duì)其執(zhí)行全局優(yōu)化vopt -64 +acc=npr -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm -work xil_defaultlib xil_defaultlib.xxxxxxxxx xil_defaultlib.glbl -o xxxxxxxxx_opt#強(qiáng)制退出quit -force

可以看出上述腳本主要實(shí)現(xiàn)的功能是對(duì)代碼編譯后的設(shè)計(jì)文件進(jìn)行全局優(yōu)化。

1.2.3 simulate腳本

simulate.bat腳本全部?jī)?nèi)容如下:

@echo offset bin_path=C:questasim64_10.6cwin64call %bin_path%/vsim -do “do {xxxxxxxx_simulate.do}” -l simulate.logif “%errorlevel%”==“1” goto ENDif “%errorlevel%”==“0” goto SUCCESS:ENDexit 1:SUCCESSexit 0

該腳本中實(shí)現(xiàn)的具體功能為:

設(shè)置二進(jìn)制文件路徑bin_path;

調(diào)用該路徑下的vsim程序執(zhí)行do {xxxxxxxx_simulate.do}命令。

其中xxxxxxxx_simulate.do腳本的內(nèi)容如下(已加注釋):

######################################################################## File name : xxxxxxxx_simulate.do# Created on: Fri Aug 14 1622 +0800 2020## Auto generated by Vivado for ‘behavioral’ simulation########################################################################指定vsim查找設(shè)計(jì)單元的默認(rèn)工作庫(kù)為xil_defaultlib,并對(duì)指定的優(yōu)化后的設(shè)計(jì)開始仿真vsim -lib xil_defaultlib xxxxxxxx_opt

#設(shè)置變量NumericStdNoWarnings為1,即禁用在加速的numeric_std和numeric_bit包中生成的警告set NumericStdNoWarnings 1#設(shè)置變量StdArithNoWarnings為1,即禁用在加速Synopsys標(biāo)準(zhǔn)軟件包中生成的警告set StdArithNoWarnings 1

#執(zhí)行xxxxxxxx_wave.do文件中的tcl指令do {xxxxxxxx_wave.do}

#打開wave窗口view wave#打開structure窗口view structure#打開signals窗口view signals

#執(zhí)行xxxxxxxx.udo文件中的tcl指令do {xxxxxxxx.udo}

#仿真1000nsrun 1000ns

該腳本中實(shí)現(xiàn)了調(diào)用第三方仿真軟件對(duì)優(yōu)化后的設(shè)計(jì)開始仿真,調(diào)出仿真界面,執(zhí)行xxxxxxxx_wave.do腳本,打開仿真相關(guān)窗口,并繼續(xù)執(zhí)行xxxxxxxx.udo腳本。下面我們接著給出xxxxxxxx_wave.do腳本的內(nèi)容:

######################################################################## File name : `xxxxxxxx_wave.do# Created on: Fri Aug 14 1622 +0800 2020## Auto generated by Vivado for ‘behavioral’ simulation########################################################################添加當(dāng)前模塊內(nèi)(即仿真頂層模塊)信號(hào)add wave *#添加GSR(全局復(fù)置位信號(hào))add wave /glbl/GSR

可知xxxxxxxx_wave.do腳本文件主要功能是實(shí)現(xiàn)對(duì)仿真波形的添加。而另一個(gè)xxxxxxxx.udo腳本中無(wú)實(shí)際內(nèi)容:

######################################################################## File name : xxxxxxxx.udo# Created on: Wed Jun 10 1649 +0800 2020## Auto generated by Vivado for ‘behavioral’ simulation#######################################################################

說(shuō)明在默認(rèn)設(shè)置下,Vivado是不通過xxxxxxxx.udo腳本執(zhí)行命令的。

1.2.4 仿真腳本總結(jié)

至此,我們基本弄清楚了這三個(gè)腳本的功能以及與其他腳本文件之間的關(guān)系:

compile.bat腳本主要實(shí)現(xiàn)對(duì)仿真代碼文件的編譯;

elaborate.bat腳本主要對(duì)編譯后的設(shè)計(jì)進(jìn)行全局的優(yōu)化,并生成優(yōu)化后的結(jié)果;

simulate.bat腳本則是具體調(diào)出仿真軟件界面對(duì)優(yōu)化后的設(shè)計(jì)進(jìn)行仿真,控制仿真軟件相關(guān)窗口的顯示、模塊信號(hào)的添加等等其他與最終波形仿真相關(guān)的操作。

于是,如果想通過python腳本實(shí)現(xiàn)仿真自動(dòng)化添加波形等的操作,那么就需要在simulate.bat腳本及其相關(guān)的do腳本文件上做文章。

1.3 Vivado仿真功能選項(xiàng)

在進(jìn)一步分析Vivado仿真操作,思考如何使用python腳本實(shí)現(xiàn)我們想要的自動(dòng)化之前,我們可以先問這樣一個(gè)問題:難道Vivado軟件真的沒有提供仿真自動(dòng)添加自定義波形等等方便仿真操作的功能嗎?關(guān)于這個(gè)問題,我們可以先去查看Vivado軟件仿真功能自帶的仿真選項(xiàng),就在設(shè)置第三方仿真器路徑和聯(lián)調(diào)庫(kù)路徑的地方,如圖所示:

7d57386a-9d17-11eb-8b86-12bb97331649.png

可以看到在下面紅框中有三個(gè)標(biāo)簽頁(yè)Compilation、Elaboration、Simulation,分別對(duì)應(yīng)仿真時(shí)的三個(gè)步驟和生成的相關(guān)腳本文件。打開Simulation標(biāo)簽頁(yè),我們可以看到下面有多行選項(xiàng),其中就有runtime仿真時(shí)間,默認(rèn)是1000ns。然后下一行紅橫線上內(nèi)容是log_all_signals,“記錄全部信號(hào)”,那這個(gè)是仿真自動(dòng)執(zhí)行l(wèi)og -r 。/*命令的選項(xiàng)嗎?我們先將該選項(xiàng)打勾。然后接著向下看,有個(gè)custom_wave_do的選項(xiàng),在上面腳本分析中我們知道xxxxxxxx_wave.do腳本文件實(shí)現(xiàn)的是仿真添加模塊信號(hào)的功能,那這里是仿真添加自定義信號(hào)的選項(xiàng)嗎?這里我將之前該工程仿真保存的一版信號(hào)文件wave.do拷貝到仿真腳本所在behave目錄的上一級(jí)目錄下:

7d8f4d5e-9d17-11eb-8b86-12bb97331649.png

然后如上面仿真選項(xiàng)圖中所示寫入custom_wave_do選項(xiàng)的路徑為:。。/wave.do,然后重新開始仿真。出現(xiàn)仿真波形界面如圖:

7dc763ce-9d17-11eb-8b86-12bb97331649.png

該界面中添加的信號(hào)分組與。。/wave.do文件中設(shè)置的信號(hào)相同,說(shuō)明這里實(shí)現(xiàn)了對(duì)自定義信號(hào)的自動(dòng)添加。接著我們?cè)俅蜷_仿真目錄下的xxxxxxxx_simulate.do腳本查看,其內(nèi)容如下:

######################################################################## File name : xxxxxxxx_simulate.do# Created on: Fri Aug 14 2140 +0800 2020## Auto generated by Vivado for ‘behavioral’ simulation#######################################################################vsim -lib xil_defaultlib xxxxxxxx_opt

set NumericStdNoWarnings 1set StdArithNoWarnings 1

do {。。/wave.do}

view waveview structureview signals

log -r /*

do {xxxxxxxx.udo}

run 1000ns

可以看到在Vivado生成的該腳本中第14行和第20行,已經(jīng)自動(dòng)添加上了do {。。/wave.do}和log -r /*的命令,說(shuō)明的確在仿真時(shí)就可以實(shí)現(xiàn)自動(dòng)記錄全部信號(hào)波形和自動(dòng)添加自定義信號(hào)的操作。因此,Vivado本身就已經(jīng)提供了這樣方便的仿真操作選項(xiàng),如果只是想實(shí)現(xiàn)自動(dòng)記錄全部信號(hào)波形和自動(dòng)添加保存的自定義信號(hào)波形操作的話,我們直接設(shè)置修改仿真選項(xiàng)中的log_all_signals和custom_wave_do兩個(gè)選項(xiàng)的內(nèi)容即可。但是初出茅廬的我并沒有想到向Vivado提出問題,而是按照自己的想法開始了Python腳本的折騰之路。

7dd495c6-9d17-11eb-8b86-12bb97331649.jpg

初步設(shè)想功能的Python實(shí)現(xiàn)在1.2節(jié)對(duì)仿真腳本的分析中,我們知道了如果想實(shí)現(xiàn)仿真自動(dòng)添加和記錄信號(hào)的功能,就需要對(duì)仿真最后一步simulate.bat相關(guān)的腳本進(jìn)行對(duì)應(yīng)的修改。但首先,這些腳本都是Vivado仿真時(shí)自動(dòng)生成的,那如果一開始沒有腳本,或者我們添加了一些代碼文件后,腳本需要更新怎么辦?(compile.bat相關(guān)的.do腳本中沒有新加入的代碼文件的路徑,自然就無(wú)法去編譯新的代碼)因此我們就需要首先讓Vivado來(lái)產(chǎn)生仿真相關(guān)的最新腳本,再去實(shí)現(xiàn)對(duì)腳本的更改。

2.1 Vivado軟件仿真腳本生成

參考實(shí)驗(yàn)室張仲禹同學(xué)的這篇文章

實(shí)驗(yàn)室自研工具Vivado Batch Mode Tool介紹!

https://mp.weixin.qq.com/s/EcrZl8iM0SZbpLrlXUJ6CA,我們可以了解到Vivado軟件在運(yùn)行上提供了批處理模式batch mode,通過批處理模式和Tcl腳本可以讓Vivado軟件對(duì)特定工程執(zhí)行具體功能。因此這里只要利用批處理模式讓Vivado軟件對(duì)當(dāng)前工程生成仿真腳本即可。那么如何去查找生成仿真腳本的對(duì)應(yīng)指令呢?當(dāng)我們點(diǎn)擊Vivado工程GUI界面的仿真按鈕時(shí),界面底部的控制臺(tái)Tcl Console便會(huì)立刻顯示并執(zhí)行l(wèi)aunch_simulation的命令,如圖所示:

7de10388-9d17-11eb-8b86-12bb97331649.png

我們打開Vivado的Tcl命令手冊(cè)UG835,查找到launch_simulation命令詞條如下:

7e02f9a2-9d17-11eb-8b86-12bb97331649.png

launch_simulation命令是運(yùn)行仿真的命令,可以看到語(yǔ)法中有一個(gè)-scripts_only選項(xiàng),其描述是:僅生成腳本。這里的腳本自然是相關(guān)的仿真腳本。只要利用這個(gè)命令選項(xiàng)就能實(shí)現(xiàn)對(duì)工程仿真腳本的生成。當(dāng)然,我們想實(shí)現(xiàn)的是功能仿真,因此在執(zhí)行該命令時(shí),最好在上面的-mode選項(xiàng)中選擇behavioral。那么,實(shí)現(xiàn)對(duì)功能仿真腳本生成功能的命令就應(yīng)該是:launch_simulation -mode behavioral -scripts_only,為了驗(yàn)證命令正確性,我們可以利用Vivado工程的GUI界面提前進(jìn)行測(cè)試,在刪除仿真目錄下的文件后,在命令控制臺(tái)Tcl Console輸入并執(zhí)行該命令,執(zhí)行完后檢測(cè)仿真目錄下是否生成了相關(guān)腳本,經(jīng)過驗(yàn)證,該命令可以生成仿真腳本。

2.2 功能實(shí)現(xiàn)思路

至此,我們針對(duì)功能的實(shí)現(xiàn)思路做如下總結(jié):

使用Python調(diào)用Vivado軟件的批處理模式batch mode執(zhí)行l(wèi)aunch_simulation -mode behavioral -scripts_only命令,來(lái)生成當(dāng)前工程的功能仿真腳本;

利用python可以對(duì)生成的simulate.bat相關(guān)的腳本內(nèi)容進(jìn)行修改,添加log -r 。/*以實(shí)現(xiàn)自動(dòng)記錄全部信號(hào)波形,添加執(zhí)行自定義wave.do腳本命令或?qū)⑾胩砑拥男盘?hào)文件內(nèi)容替換進(jìn)默認(rèn)生成的xxxxxxxx_wave.do腳本中,完成仿真時(shí)對(duì)自定義信號(hào)的自動(dòng)化添加;

使用python中的系統(tǒng)函數(shù)庫(kù)依次執(zhí)行compile.bat、elaborate.bat、simulate.bat腳本,調(diào)出仿真界面執(zhí)行仿真。

2.3 具體實(shí)現(xiàn)

2.3.1 使用Python調(diào)用Vivado軟件生成仿真腳本

具體實(shí)現(xiàn)代碼和注釋如下:

import os

# 指定工程xpr文件路徑XprFilePath = ‘xxxxxxxx_project.xpr’# 指定Tcl腳本路徑SimTclFilePath = ‘sim.tcl’

# 命令-在使用命令行調(diào)用Vivado軟件前需要運(yùn)行的批處理文件SourceSettingsFileCmd = ‘call C:/Xilinx/Vivado/2017.2/settings64.bat’ # 命令-調(diào)用Vivado軟件的batch mode打開當(dāng)前工程文件并執(zhí)行Tcl腳本中的生成仿真腳本命令VivadoBatchModeScriptsCmd = ‘vivado -mode batch -source ’ + SimTclFilePath + ‘ -nojournal -nolog ’ + XprFilePath

# 組合前兩條命令并調(diào)用系統(tǒng)函數(shù)依次執(zhí)行os.system(SourceSettingsFileCmd + ‘ && ’ + VivadoBatchModeScriptsCmd)

其中上面代碼中用到的sim.tcl文件內(nèi)容為:

#僅生成仿真腳本launch_simulation -mode behavioral -scripts_only

將兩個(gè)腳本放置于工程xpr文件的同目錄下,使用Python3執(zhí)行,執(zhí)行后仿真目錄結(jié)果如下:

7e317d9a-9d17-11eb-8b86-12bb97331649.png

接下來(lái)我們依次對(duì)生成的腳本進(jìn)行檢查,查看本次使用Vivado的batch mode生成的仿真腳本與第一章中腳本內(nèi)容是否存在差別。經(jīng)過對(duì)比,發(fā)現(xiàn)除了xxxxxxxx_simulate.do文件和simulate.bat腳本存在一點(diǎn)差別外,其他腳本內(nèi)容完全相同,存在差別的腳本內(nèi)容如下xxxxxxxx_simulate.do內(nèi)容:

######################################################################## File name : xxxxxxxx_simulate.do# Created on: Sat Aug 15 1541 +0800 2020## Auto generated by Vivado for ‘behavioral’ simulation#######################################################################vsim -lib xil_defaultlib xxxxxxxx_opt

set NumericStdNoWarnings 1set StdArithNoWarnings 1

do {xxxxxxxx_wave.do}

view waveview structureview signals

do {xxxxxxxx.udo}

run 1000ns

quit -force

內(nèi)容差別在最后一行,相比Vivado的GUI界面下點(diǎn)擊仿真按鈕生成的腳本,batch mode下使用仿真選項(xiàng)-scripts_only生成腳本xxxxxxxx_simulate.do的最后一行額外添加了強(qiáng)制退出的命令quit -force,這會(huì)導(dǎo)致調(diào)出的仿真程序在執(zhí)行完全部的仿真命令后,立刻關(guān)閉界面并退出程序,所以仿真時(shí),我們需要在該腳本執(zhí)行前刪除掉該命令。simulate.bat內(nèi)容:

@echo offset bin_path=C:questasim64_10.6cwin64call %bin_path%/vsim -c -do “do {xxxxxxxx_simulate.do}” -l simulate.logif “%errorlevel%”==“1” goto ENDif “%errorlevel%”==“0” goto SUCCESS:ENDexit 1:SUCCESSexit 0

內(nèi)容差別在第三行,在vsim命令后多出了一個(gè)-c的選項(xiàng),查找QuestaSim命令手冊(cè)中vsim詞條的-c選項(xiàng)描述如圖:

7e438594-9d17-11eb-8b86-12bb97331649.png

可以看出-c選項(xiàng)是以命令行模式command-line mode執(zhí)行vsim命令,也就是說(shuō),該選項(xiàng)執(zhí)行后打開的不是仿真軟件的GUI界面,而是黑乎乎的命令行界面,這將導(dǎo)致我們無(wú)法實(shí)時(shí)查看跑出的仿真波形,所以在仿真時(shí),-c也需要?jiǎng)h除掉。內(nèi)容差別總結(jié)因此,在后續(xù)對(duì)腳本的處理中,我們除了添加log -r 。/*命令和將想添加的信號(hào)替換進(jìn)xxxxxxxx_wave.do腳本中之外,還需要額外刪除腳本xxxxxxxx_simulate.do最后一行的quit -force,以及腳本simulate.bat中vsim命令后的-c。

2.3.2 使用Python修改并執(zhí)行仿真腳本

具體實(shí)現(xiàn)代碼和注釋如下:

import os

# 仿真目錄路徑SimDirPath = ‘xxxxxxxx.sim/sim_1/behav/’# compile批處理腳本名稱CompileBatName = ‘compile.bat’# elaborate批處理腳本名稱ElaborateBatName = ‘elaborate.bat’# simulate批處理腳本名稱SimulateBatName = ‘simulate.bat’# 由于所執(zhí)行的腳本內(nèi)容里存在一些相對(duì)路徑,所以在執(zhí)行腳本前,需要將系統(tǒng)路徑切換到所執(zhí)行腳本所在的目錄下# 執(zhí)行Compile腳本os.system(‘cd ’ + SimDirPath + ‘ && ’ + ‘call ’ + CompileBatName)# 執(zhí)行Elaborate腳本os.system(‘cd ’ + SimDirPath + ‘ && ’ + ‘call ’ + ElaborateBatName)

# 修改xxxxxxxx_simulate.do腳本,刪除run 1000ns和quit -force,添加log -r 。/*SimulateDoFile = open(SimDirPath + ‘xxxxxxxx_simulate.do’, ‘r’)SimulateDoFileAllLines = SimulateDoFile.readlines()SimulateDoFile.close()SimulateDoFile = open(SimDirPath + ‘xxxxxxxx_simulate.do’, ‘w’)for EachLine in SimulateDoFileAllLines: if EachLine.find(‘run 1000ns’) == -1 and EachLine.find(‘quit -force’) == -1: SimulateDoFile.writelines(EachLine)SimulateDoFile.writelines(‘

log -r 。/*

’)SimulateDoFile.close()

# 刪除simulate.bat腳本中的-c選項(xiàng)內(nèi)容SimulateBatFile = open(SimDirPath + SimulateBatName, ‘r’)SimulateBatFileAllLines = SimulateBatFile.readlines()SimulateBatFile.close()SimulateBatFile = open(SimDirPath + SimulateBatName, ‘w’)for EachLine in SimulateBatFileAllLines: if EachLine.find(‘%bin_path%/vsim -c -do’) != -1: EachLine = EachLine.replace(‘%bin_path%/vsim -c -do’, ‘%bin_path%/vsim -do’) SimulateBatFile.writelines(EachLine)SimulateBatFile.close()

# 將當(dāng)前目錄下信號(hào)文件wave.do中的內(nèi)容覆寫到仿真目錄下的xxxxxxxx_wave.do文件中SimWaveDoFile = open(‘wave.do’, ‘r’)SimWaveDoFileAllLines = SimWaveDoFile.readlines()SimWaveDoFile.close()SimWaveDoFile = open(SimDirPath + ‘xxxxxxxx_wave.do’, ‘w’)SimWaveDoFile.writelines(SimWaveDoFileAllLines)SimWaveDoFile.close()

# 執(zhí)行Simulate腳本os.system(‘cd ’ + SimDirPath + ‘ && ’ + ‘call ’ + SimulateBatName)

上述代碼中涉及到的信號(hào)文件wave.do依舊是之前第1.3節(jié)測(cè)試仿真選項(xiàng)時(shí)使用的文件,將其放置在腳本所在的目錄下,然后使用Python3運(yùn)行腳本,運(yùn)行結(jié)果截圖如下:

7e504392-9d17-11eb-8b86-12bb97331649.png

可以看到成功實(shí)現(xiàn)了對(duì)仿真軟件的調(diào)用以及波形的自動(dòng)添加,而且在使用時(shí)也不需要打開Vivado工程的GUI界面。2.4 實(shí)現(xiàn)總結(jié)與展望上述代碼功能的具體實(shí)現(xiàn)主要分以下幾個(gè)步驟:

使用Python系統(tǒng)函數(shù)調(diào)用Vivado的batch mode對(duì)當(dāng)前工程執(zhí)行sim.tcl腳本中的launch_simulation -mode behavioral -scripts_only命令,生成功能仿真的相關(guān)腳本;

使用Python系統(tǒng)函數(shù)在仿真目錄下依次執(zhí)行生成的compile.bat和elaborate.bat腳本,實(shí)現(xiàn)對(duì)仿真代碼文件的編譯和后續(xù)的全局優(yōu)化;

讀取生成的xxxxxxxx_simulate.do腳本文件內(nèi)容,刪除其中的run 1000ns和quit -force,并添加上log -r 。/*后重新覆寫xxxxxxxx_simulate.do腳本;

讀取生成的simulate.bat腳本文件內(nèi)容,刪除其中vsim命令后的-c選項(xiàng)后,重新覆寫simulate.bat腳本;

讀取Python腳本所在目錄下wave.do文件的內(nèi)容,覆寫到仿真目錄下xxxxxxxx_wave.do腳本文件中,實(shí)現(xiàn)在仿真時(shí)對(duì)自定義信號(hào)的添加;

使用Python的系統(tǒng)函數(shù)在仿真目錄下執(zhí)行simulate.bat腳本,調(diào)出仿真程序界面。

至此,我們就用總計(jì)約60行不到的Python代碼外加1行的Tcl代碼實(shí)現(xiàn)了最初設(shè)想的目標(biāo)。但是,這樣的腳本還存在著許多粗糙的缺陷或有待發(fā)展之處:

代碼各種變量如工程文件路徑、軟件版本路徑、仿真目錄路徑等的賦值都是固定賦值,那么在將腳本遷移到另一個(gè)工程下使用時(shí),就需要根據(jù)版本和工程目錄名等環(huán)境自行去修改腳本,無(wú)法做到傻瓜式操作;

代碼從調(diào)用Vivado的batch mode生成仿真腳本,再到compile、elaborate,最后到simulate,總共的耗時(shí)較長(zhǎng),對(duì)于簡(jiǎn)單的修改代碼后進(jìn)行仿真,不涉及到代碼文件添加或IP核添加時(shí),是不需要重新生成仿真腳本的,直接從compile開始就行;而對(duì)于無(wú)代碼修改的情況,直接執(zhí)行simulate腳本進(jìn)行最后一步即可,就更不需要前面這些花費(fèi)時(shí)間較長(zhǎng)的步驟;

除去仿真功能外,我們平時(shí)進(jìn)行Vivado開發(fā)時(shí),還存在許多本可以用腳本自動(dòng)化實(shí)現(xiàn)的繁瑣操作,這些均可以整合進(jìn)一個(gè)或一組腳本中。

優(yōu)化功能的Python實(shí)現(xiàn)第二章最后總結(jié)給出了初始腳本的缺陷和有待發(fā)展之處,其中第二項(xiàng)缺陷可以通過提供多種條件選項(xiàng)的方式,實(shí)現(xiàn)多種仿真步驟,解決較為簡(jiǎn)單。本章將主要針對(duì)第二章總結(jié)的第一項(xiàng)缺陷進(jìn)行分析,并加以解決。

3.1 優(yōu)化功能分析

我們期望將腳本拷貝到另一版工程時(shí),可以不經(jīng)修改直接運(yùn)行,這就要求腳本可以自動(dòng)提取到其運(yùn)行所需的一系列參數(shù),從而直接對(duì)環(huán)境進(jìn)行匹配。首先讓我們總結(jié)一下初步功能的Python實(shí)現(xiàn)中的具體缺陷,有哪些地方在遷移到另一工程后需要修改。

3.1.1 參數(shù)分析

這里以流水賬的形式,對(duì)初步功能的Python代碼中用到的全部參數(shù)進(jìn)行羅列和分析:

3.1.1.1 指定的工程xpr文件路徑

# 指定工程xpr文件路徑XprFilePath = ‘xxxxxxxx.xpr’

該參數(shù)的作用是能夠讓Vivado軟件針對(duì)當(dāng)前指定的工程實(shí)現(xiàn)具體功能,每當(dāng)腳本拷貝到另一個(gè)不同的工程時(shí),該參數(shù)基本肯定會(huì)改變,所以最好能進(jìn)行自動(dòng)識(shí)別。每個(gè)工程在其工程目錄下默認(rèn)都只有一個(gè)xpr文件,而Python也提供了返回指定系統(tǒng)目錄下文件名列表的函數(shù)os.listdir,可以很方便的實(shí)現(xiàn)對(duì)特定文件名稱的獲取,只需對(duì)文件名進(jìn)行判別是否是xpr文件即可實(shí)現(xiàn)自動(dòng)識(shí)別。

3.1.1.2 指定的Tcl腳本路徑

# 指定Tcl腳本路徑SimTclFilePath = ‘sim.tcl’

由于指定Tcl腳本是跟隨Python腳本一起的,與實(shí)際仿真哪個(gè)工程無(wú)關(guān),名稱和位置都固定,因此這里可以繼續(xù)使用固定賦值。

3.1.1.3 執(zhí)行的系統(tǒng)命令

# 命令-在使用命令行調(diào)用Vivado軟件前需要運(yùn)行的批處理文件SourceSettingsFileCmd = ‘call C:/Xilinx/Vivado/2017.2/settings64.bat’ # 命令-調(diào)用Vivado軟件的batch mode打開當(dāng)前工程文件并執(zhí)行Tcl腳本中的生成仿真腳本命令VivadoBatchModeScriptsCmd = ‘vivado -mode batch -source ’ + SimTclFilePath + ‘ -nojournal -nolog ’ + XprFilePath

可以將執(zhí)行的系統(tǒng)命令中新用到的路徑分解為以下幾部分:

系統(tǒng)執(zhí)行腳本命令:call

Xilinx軟件的安裝目錄:C:/

Vivado工程的版本:2017.2

需要調(diào)用的settings腳本名稱:settings64.bat

第二個(gè)生成仿真腳本命令VivadoBatchModeScriptsCmd涉及到的Tcl腳本路徑和工程xpr文件路徑已經(jīng)說(shuō)過。此處暫時(shí)只考慮Windows系統(tǒng)實(shí)現(xiàn),因此上述分解部分中可以考慮自動(dòng)識(shí)別的是:安裝目錄C:/和工程版本2017.2其中安裝目錄在同一個(gè)系統(tǒng)中都是固定的,不需要頻繁修改,所以此處僅需要讀取xpr工程文件內(nèi)容,實(shí)現(xiàn)版本的自動(dòng)識(shí)別。

3.1.1.4 仿真目錄路徑(Vivado 2017.2)

# 仿真目錄路徑SimDirPath = ‘xxxxxxxx.sim/sim_1/behav/’

對(duì)上述路徑進(jìn)行分解得:

工程名:xxxxxxxx

仿真集名稱:sim_1

仿真腳本所在目錄(2017.2版本):behav

同樣由于工程名與xpr工程文件名默認(rèn)相同,并且在工程目錄下默認(rèn)只有一個(gè)后綴名為.sim的目錄,因此同樣可以很容易的實(shí)現(xiàn)對(duì)該目錄名的識(shí)別;對(duì)于仿真集名稱,由于同一版工程中可以設(shè)置多個(gè)不同的仿真集,但在xpr文件內(nèi)容中對(duì)當(dāng)前有效的仿真集有專門的參數(shù)表示,因此可以通過解析xpr文件內(nèi)容的形式識(shí)別出當(dāng)前仿真集名稱;值得注意的是:不同版本的VIvado在仿真子目錄的路徑上存在一些差別,例如2017.2的仿真腳本全部生成在behav目錄下,但2018.2版本則在behav目錄下還有針對(duì)每個(gè)仿真器的子目錄,目錄名為小寫的仿真器名稱,所以我們還需要讀取xpr文件內(nèi)容,識(shí)別出當(dāng)前設(shè)置的目標(biāo)仿真器,才能最終實(shí)現(xiàn)對(duì)仿真目錄的正確組合。

3.1.1.5 批處理腳本名稱

# compile批處理腳本名稱CompileBatName = ‘compile.bat’# elaborate批處理腳本名稱ElaborateBatName = ‘elaborate.bat’# simulate批處理腳本名稱SimulateBatName = ‘simulate.bat’

在同一類型的系統(tǒng)下,Vivado軟件默認(rèn)生成的仿真相關(guān)批處理腳本的名稱均為固定,因此此處無(wú)需修改。

3.1.1.6 總結(jié)

在初步功能代碼實(shí)現(xiàn)的基礎(chǔ)上,我們至少要對(duì)如下參數(shù)實(shí)現(xiàn)自動(dòng)識(shí)別:

工程xpr文件路徑(主要是工程名)

工程文件版本

工程有效仿真集名稱

工程當(dāng)前仿真器名稱

3.1.2 xpr文件解析

3.1.2.1 xpr文件結(jié)構(gòu)介紹xpr文件是包含了Vivado工程核心配置內(nèi)容的文本文件,采用的是xml的內(nèi)容格式,下面給出一個(gè)xpr文件結(jié)構(gòu)示例:

《?xml version=“1.0” encoding=“UTF-8”?》《!-- Product Version: Vivado v2017.2 (64-bit) --》《!-- --》《!-- Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. --》

《Project 。。.。。.。。.。。.?!?《Configuration 》 。。.。。.。。.。。.。 《/Configuration》 《FileSets 》 。。.。。.。。.。。.。 《/FileSets》 《Simulators 》 。。.。。.。。.。。.。 《/Simulators》 《Runs 》 。。.。。.。。.。。.。 《/Runs》《/Project》

可以看到整個(gè)xpr文件內(nèi)容基本全部包含在一個(gè)根節(jié)點(diǎn)Project內(nèi),根節(jié)點(diǎn)內(nèi)部又包含四個(gè)子節(jié)點(diǎn)Configuration、FileSets、Simulators、Runs。經(jīng)過對(duì)實(shí)際的工程xpr文件內(nèi)容進(jìn)行分析,我們可以了解到四個(gè)子節(jié)點(diǎn)的主要內(nèi)容為:

Configuration:Vivado工程的一系列配置參數(shù),例如:FPGA芯片型號(hào)、仿真聯(lián)調(diào)庫(kù)路徑、目標(biāo)仿真器等等;

FileSets:添加進(jìn)該工程的全部代碼、IP核或約束文件路徑,及一系列相關(guān)的文件屬性:設(shè)定的頂層模塊名稱、代碼是否用于綜合、實(shí)現(xiàn)、仿真等;

Simulators:包含對(duì)當(dāng)前類型系統(tǒng)下能夠使用的仿真器的描述等;

Runs:包含需要進(jìn)行Synthesis、Implementation的IP核文件、代碼設(shè)計(jì)的一系列參數(shù)配置。

下面我們結(jié)合上一節(jié)優(yōu)化分析的結(jié)論,對(duì)所需要的xpr文件內(nèi)容進(jìn)行進(jìn)一步的分析和查找。需要解析xpr得到的參數(shù)有:工程版本、有效仿真集名稱、當(dāng)前仿真器名稱。

3.1.2.2 工程版本

經(jīng)過一番查找,在根節(jié)點(diǎn)Project中并沒有發(fā)現(xiàn)跟Vivado版本相關(guān)的參數(shù),唯一與版本相關(guān)的內(nèi)容僅出現(xiàn)在內(nèi)容第二行:

《?xml version=“1.0” encoding=“UTF-8”?》《!-- Product Version: Vivado v2017.2 (64-bit) --》《!-- --》《!-- Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. --》

因此我們只能將該行Vivado v后的內(nèi)容2017.2提取為版本號(hào)使用。

3.1.2.3 有效仿真集名稱

表示當(dāng)前工程的仿真集的參數(shù)名為ActiveSimSet,在子節(jié)點(diǎn)Configuration中,示例內(nèi)容如下:

《Option Name=“ActiveSimSet” Val=“sim_1”/》

3.1.2.4 當(dāng)前仿真器名稱

內(nèi)容中表示當(dāng)前仿真器名稱的參數(shù)名為TargetSimulator,同樣在子節(jié)點(diǎn)Configuration中,示例內(nèi)容如下:

《Option Name=“TargetSimulator” Val=“Questa”/》

在具體針對(duì)xml格式文件的解析上,Python提供了一個(gè)xml函數(shù)庫(kù),使用其中的parse函數(shù)可以對(duì)xml文本進(jìn)行簡(jiǎn)單高效的處理。

3.2 功能實(shí)現(xiàn)思路

根據(jù)上述分析,總結(jié)優(yōu)化功能的實(shí)現(xiàn)思路如下:

利用Python的os庫(kù)函數(shù)實(shí)現(xiàn)對(duì)特定路徑下工程文件尤其是xpr文件的查找;

在查找到xpr工程文件后,讀取文件內(nèi)容獲取版本號(hào);

使用Python的xml庫(kù)函數(shù)對(duì)查找到的xpr文件文本內(nèi)容進(jìn)行解析,提取出有效仿真集名稱和當(dāng)前仿真器名稱;

根據(jù)上述步驟獲取到的信息,組合相關(guān)參數(shù),繼續(xù)完成第二章實(shí)現(xiàn)的功能。

3.3 具體實(shí)現(xiàn)

首先利用Python的os庫(kù)中的相關(guān)函數(shù)實(shí)現(xiàn)對(duì)工程文件路徑的查找,相關(guān)代碼和注釋如下:

import os

# 獲取并返回對(duì)應(yīng)文件或目錄路徑名列表def getProjFilePathList(Path = ‘。/’, FilePartName = ‘.xpr’): # 判斷傳入?yún)?shù)是否為字符串 if type(Path) != str or type(FilePartName) != str: print(‘Error: The type of parameter is wrong! Please ensure each input parameter is a string!’) return [] # 判斷傳入的路徑參數(shù)是否存在 if os.path.isdir(Path) == False: print(‘Error: The path does not exist!’) return [] # 查找目標(biāo)文件,并將查找結(jié)果路徑記錄到FilePathList的列表中

FilePathList = [] for FileName in os.listdir(Path): if FileName.find(FilePartName) != -1: FilePathList.append(Path + FileName) # 判斷是否查找到對(duì)應(yīng)文件或目錄路徑 if len(FilePathList) == 0: print(‘Error: Can not find any file or dir whose name including “’ + FilePartName + ‘” in “’ + Path + ‘”’) return FilePathList

# 獲取并返回對(duì)應(yīng)文件或目錄路徑名列表中的第一個(gè)路徑def getProjFilePath(Path = ‘。/’, FilePartName = ‘.xpr’): # 獲取并返回對(duì)應(yīng)文件或目錄路徑名列表 FilePathList = getProjFilePathList(Path, FilePartName) # 返回列表中第一個(gè)元素 if len(FilePathList) == 0: return ‘’ else: return FilePathList[0]

然后根據(jù)查找到的xpr工程文件路徑,讀取內(nèi)容,從中提取版本號(hào):

# 獲取并返回當(dāng)前工程版本def getProjVersion(XprFilePathName): VivadoProjVerLine = ‘’ VivadoProjVer = ‘’ VivadoProjVerLoc = -1 # 打開工程文件查找版本號(hào)所在行 XprFile = open(XprFilePathName, “r”) for string in XprFile.readlines(): if string.find(‘Product Version: Vivado v’) != -1:

VivadoProjVerLoc = string.find(‘Product Version: Vivado v’) + len(‘Product Version: Vivado v’) VivadoProjVerLine = string break XprFile.close() if VivadoProjVerLoc == -1: VivadoProjVer = ‘’ print(‘Error: Can not find the version of proj, please ensure the xpr file is ok!’)

return VivadoProjVer # 判斷查找到的版本號(hào)字符串是否合法 for CharVer in VivadoProjVerLine[VivadoProjVerLoc :]: if CharVer == ‘ ’ and VivadoProjVer != ‘’: break elif CharVer 》= ‘0’ and CharVer 《= ‘9’: VivadoProjVer = VivadoProjVer + CharVer elif CharVer == ‘?!?VivadoProjVer = VivadoProjVer + CharVer else: VivadoProjVer = ‘’ print(‘Error: Can not identify the version of this xpr file!’) return VivadoProjVer return VivadoProjVer

使用Python的xml庫(kù)函數(shù)解析xpr文件,提取出有效仿真集名稱ActiveSimSet和當(dāng)前仿真器名稱TargetSimulator:

from xml.dom.minidom import parse

# 解析xpr工程文件doc = parse(XprFilePath)root = doc.documentElement# 記錄解析出的四個(gè)節(jié)點(diǎn)Configuration = root.getElementsByTagName(‘Configuration’)[0]FileSets = root.getElementsByTagName(‘FileSets’)[0]Simulators = root.getElementsByTagName(‘Simulators’)[0]Runs = root.getElementsByTagName(‘Runs’)[0]# 創(chuàng)建節(jié)點(diǎn)

Configuration中Option的關(guān)鍵詞字典,初始化為空

ConfigurationOptionDict = {}# 創(chuàng)建并初始化節(jié)點(diǎn)Configuration中Option的Name關(guān)鍵詞集合

ConfigurationOptionNameSet = {‘Part’, ‘CompiledLibDir’, ‘TargetSimulator’, ‘ActiveSimSet’, ‘DefaultLib’}# 查找xpr工程文件中Configuration節(jié)點(diǎn)中的關(guān)鍵詞并記錄到關(guān)鍵詞字典中Options = Configuration.getElementsByTagName(‘Option’)for Option in Options:

if Option.hasAttribute(‘Name’) and Option.hasAttribute(‘Val’): for keyword in ConfigurationOptionNameSet: if Option.getAttribute(‘Name’) == keyword: ConfigurationOptionDict[keyword] = Option.getAttribute(‘Val’)

至此我們就完成了對(duì)優(yōu)化功能的實(shí)現(xiàn),與第二章的代碼進(jìn)行整合,就可以自行實(shí)現(xiàn)對(duì)不同版本不同名稱工程的自動(dòng)識(shí)別,并進(jìn)行仿真。

后記

前一、二、三章主要按照時(shí)間順序,詳細(xì)介紹了使用Python腳本實(shí)現(xiàn)對(duì)仿真自動(dòng)化操作功能時(shí),一系列的學(xué)習(xí)研究過程。對(duì)整個(gè)過程中所涉及到的關(guān)鍵點(diǎn)都進(jìn)行了說(shuō)明與分析。當(dāng)然,按照上述過程最終編寫出的腳本還是較為粗糙,實(shí)現(xiàn)的功能也很有限。在后續(xù)的學(xué)習(xí)中,筆者根據(jù)使用體驗(yàn)對(duì)該腳本做了重構(gòu)和多次迭代,加入了一些新的功能,同時(shí)也拓寬了使用場(chǎng)景,增強(qiáng)了可擴(kuò)展性。當(dāng)然受限于筆者的個(gè)人水平,目前為止腳本仍然很粗糙,不過已經(jīng)可以為項(xiàng)目中Vivado工程開發(fā)的特殊需求提供一個(gè)簡(jiǎn)單的輔助框架,可以比較自由地添加一些簡(jiǎn)單功能,筆者打算結(jié)合后續(xù)項(xiàng)目開發(fā)中遇到的問題和使用體驗(yàn),繼續(xù)對(duì)其進(jìn)行優(yōu)化,爭(zhēng)取讓其能成為一個(gè)比較可依賴的好助手。

原文標(biāo)題:【源碼】手把手教你用Python實(shí)現(xiàn)Vivado和ModelSim仿真自動(dòng)化

文章出處:【微信公眾號(hào):FPGA開源工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4003

    瀏覽量

    133240
  • ModelSim
    +關(guān)注

    關(guān)注

    5

    文章

    174

    瀏覽量

    47065
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4759

    瀏覽量

    84296
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    803

    瀏覽量

    66141

原文標(biāo)題:【源碼】手把手教你用Python實(shí)現(xiàn)Vivado和ModelSim仿真自動(dòng)化

文章出處:【微信號(hào):leezym0317,微信公眾號(hào):FPGA開源工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    modelsim獨(dú)立仿真vivado平臺(tái)工程

    如果只是純的.v文件仿真那很容易操作,主要是涉及到IP核,那么就必須要對(duì)vivado的IP核的庫(kù)文件進(jìn)行編譯和添加了,難點(diǎn)也在于此.
    的頭像 發(fā)表于 10-24 15:31 ?55次閱讀
    <b class='flag-5'>modelsim</b>獨(dú)立<b class='flag-5'>仿真</b><b class='flag-5'>vivado</b>平臺(tái)工程

    機(jī)械自動(dòng)化和電氣自動(dòng)化區(qū)別是什么

    機(jī)械自動(dòng)化和電氣自動(dòng)化是現(xiàn)代工業(yè)生產(chǎn)中兩個(gè)重要的領(lǐng)域,它們?cè)谠S多方面有著密切的聯(lián)系,但也存在一些明顯的區(qū)別。 一、基本概念 機(jī)械自動(dòng)化 機(jī)械自動(dòng)化是指利用機(jī)械設(shè)備、傳感器、控制系統(tǒng)等技
    的頭像 發(fā)表于 07-01 09:33 ?3215次閱讀

    機(jī)械自動(dòng)化自動(dòng)化的一種嗎

    引言 自動(dòng)化技術(shù)是指利用控制裝置對(duì)生產(chǎn)過程進(jìn)行控制,以實(shí)現(xiàn)生產(chǎn)過程的自動(dòng)化。機(jī)械自動(dòng)化自動(dòng)化技術(shù)的一種,它主要涉及到使用機(jī)械設(shè)備和控制系統(tǒng)
    的頭像 發(fā)表于 07-01 09:32 ?1346次閱讀

    如何實(shí)現(xiàn)PLC的自動(dòng)化控制邏輯

    在工業(yè)自動(dòng)化領(lǐng)域,PLC(Programmable Logic Controller,可編程邏輯控制器)扮演著至關(guān)重要的角色。PLC通過編程實(shí)現(xiàn)自動(dòng)化控制邏輯,使設(shè)備能夠按照預(yù)定的程序進(jìn)行工作,極大
    的頭像 發(fā)表于 06-15 16:44 ?908次閱讀

    機(jī)械制造與自動(dòng)化自動(dòng)化類嗎

    機(jī)械制造與自動(dòng)化自動(dòng)化領(lǐng)域的一個(gè)重要分支,它涉及到機(jī)械設(shè)計(jì)、制造、檢測(cè)、控制等多個(gè)方面,是現(xiàn)代制造業(yè)的核心組成部分。 機(jī)械制造與自動(dòng)化是指利用計(jì)算機(jī)、機(jī)器人、傳感器等自動(dòng)化設(shè)備和技術(shù)
    的頭像 發(fā)表于 06-11 11:18 ?1308次閱讀

    工業(yè)自動(dòng)化自動(dòng)化區(qū)別是什么

    工業(yè)自動(dòng)化自動(dòng)化是兩個(gè)密切相關(guān)但又有所區(qū)別的概念。在這篇文章中,我們將詳細(xì)探討它們之間的區(qū)別,以及它們?cè)诂F(xiàn)代工業(yè)生產(chǎn)中的應(yīng)用。 一、自動(dòng)化的定義 自動(dòng)化是指通過使用機(jī)器、計(jì)算機(jī)和其他
    的頭像 發(fā)表于 06-11 11:13 ?1400次閱讀

    如何使用 ModelSim 進(jìn)行設(shè)計(jì)仿真

    ModelSim為HDL仿真工具,我們可以利用該軟件來(lái)實(shí)現(xiàn)對(duì)所設(shè)計(jì)的VHDL或Verilog程 序進(jìn)行仿真,支持IEEE常見的各種硬件描述語(yǔ)言標(biāo)準(zhǔn)。可以進(jìn)行兩種語(yǔ)言的混合
    發(fā)表于 01-14 09:47 ?0次下載

    自動(dòng)化仿真系統(tǒng)搭建實(shí)踐

    今天我們分享TIAV17+PLCSIM+PS+SIMIT:自動(dòng)化仿真系統(tǒng)搭建實(shí)踐。
    的頭像 發(fā)表于 01-04 11:28 ?1735次閱讀
    <b class='flag-5'>自動(dòng)化</b><b class='flag-5'>仿真</b>系統(tǒng)搭建實(shí)踐

    電源測(cè)試怎么自動(dòng)化?電源模塊自動(dòng)化測(cè)試系統(tǒng)如何實(shí)現(xiàn)?

    納米軟件在電測(cè)行業(yè)深耕十余年,在行業(yè)的大背景下,為了進(jìn)一步完善自動(dòng)化測(cè)試,開發(fā)出了新的智能的電源模塊自動(dòng)化測(cè)試系統(tǒng)ATECLOUD-POWER,實(shí)現(xiàn)
    的頭像 發(fā)表于 12-15 14:40 ?749次閱讀
    電源測(cè)試怎么<b class='flag-5'>自動(dòng)化</b>?電源模塊<b class='flag-5'>自動(dòng)化</b>測(cè)試系統(tǒng)如何<b class='flag-5'>實(shí)現(xiàn)</b>?

    LabVIEW與Tektronix示波器實(shí)現(xiàn)電源測(cè)試自動(dòng)化

    LabVIEW與Tektronix示波器實(shí)現(xiàn)電源測(cè)試自動(dòng)化 在現(xiàn)代電子測(cè)試與測(cè)量領(lǐng)域,自動(dòng)化測(cè)試系統(tǒng)的構(gòu)建是提高效率和精確度的關(guān)鍵。本案例介紹了如何利用LabVIEW軟件結(jié)合Tektronix
    發(fā)表于 12-09 20:37

    怎樣單獨(dú)使用modelsim仿真xilinx呢?

    直接在modelsim軟件內(nèi)執(zhí)行.do文件進(jìn)行仿真,不通過vivado調(diào)用modelsim,vivado僅用于生成IP核。
    的頭像 發(fā)表于 12-04 18:26 ?1212次閱讀
    怎樣單獨(dú)使用<b class='flag-5'>modelsim</b><b class='flag-5'>仿真</b>xilinx呢?

    淺析中國(guó)工業(yè)自動(dòng)化與智能應(yīng)用

    自動(dòng)化驅(qū)動(dòng)產(chǎn)品與智能操控系統(tǒng)主要用于工業(yè)自動(dòng)化中的設(shè)備自動(dòng)化領(lǐng)域,其中自動(dòng)化驅(qū)動(dòng)產(chǎn)品是實(shí)現(xiàn)設(shè)備單機(jī)自動(dòng)化
    發(fā)表于 12-01 10:11 ?835次閱讀
    淺析中國(guó)工業(yè)<b class='flag-5'>自動(dòng)化</b>與智能<b class='flag-5'>化</b>應(yīng)用

    Python 模擬鍵盤鼠標(biāo)的方式實(shí)現(xiàn)自動(dòng)化

    在某些情況下,如果我們需要進(jìn)行自動(dòng)化操作的應(yīng)用沒有提供相應(yīng)的接口,我們無(wú)法直接通過Python來(lái)調(diào)用API實(shí)現(xiàn)自動(dòng)化。這種情況下,Python
    的頭像 發(fā)表于 11-02 14:48 ?1237次閱讀
    <b class='flag-5'>Python</b> 模擬鍵盤鼠標(biāo)的方式<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>自動(dòng)化</b>

    何用Python自動(dòng)套用模板批量生成PDF文檔

    日常辦公中,經(jīng)常會(huì)使用PDF文檔,難免需要對(duì)PDF文檔進(jìn)行編輯,有時(shí)候PDF文檔中的大部分內(nèi)容都是一樣的,只是發(fā)送對(duì)象不同。 這種模板套用的場(chǎng)景下,使用Python進(jìn)行自動(dòng)化就尤為方便,用最短的時(shí)間
    的頭像 發(fā)表于 10-31 10:56 ?1387次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>Python</b><b class='flag-5'>自動(dòng)</b>套用模板批量生成PDF文檔

    何用Python來(lái)實(shí)現(xiàn)文件系統(tǒng)的操作功能

    近幾年隨著 Python 的熱度不斷上漲,人們漸漸使用這門編程語(yǔ)言來(lái)進(jìn)行一些自動(dòng)化操作,以節(jié)省重復(fù)勞動(dòng)帶來(lái)的效率低下,那么必定會(huì)涉及到對(duì) 文件系統(tǒng)的操作 ,包括文件的 增、刪、改、查 等等,今天小編
    的頭像 發(fā)表于 10-30 14:27 ?357次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>Python</b>來(lái)<b class='flag-5'>實(shí)現(xiàn)</b>文件系統(tǒng)的操作功能