您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Quartus命令行及腳本使用介紹是怎樣的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Quartus本身除了GUI以外,還可以在不打開GUI的情況下通過命令行執行命令或者腳本來進行工程創建、指定器件及型號、讀取源碼、引腳分配、編譯、布局布線、約束等操作,本教程涉及工程創建、指定器件及型號、讀取源碼、編譯以及生成blif,至于后面的布局布線、引腳分配、約束等功能可以看完教程后查看相關資料搞定。
認真閱讀完上面的鏈接對應的內容,讀完以后基本就可以掌握了。
首先將quartus的路徑加入到用戶變量中去。
quartus的命令行和腳本功能一共包含兩個部分:可執行命令和包。不同的命令可以調用不同的包,而不同的包有著不同的功能。
先說在前面,flow
包中的execute_module
指令后面可以接map、fit、sim、sta
等選項,其功能與quartus_map、quartus_fit、quartus_sim、quartus_sta
一致,并且后面可以跟-args
選項,這就將外部命令和內部包聯系在了一起,即使在tcl
下面也可以執行外部的命令。
比如,quartus_sh
是一個可執行命令,除了-h、--help等這些所有可執行命令都有的選項以外,quartus_sh
還可以調用project
這個包,而project
這個包內包含的project_new、project_open
等功能都可以被quartus_sh
使用,但每個可執行命令后面跟的選項并沒有包含所有可調用包的所有命令,而僅僅包含了少量包的常用命令,比如在終端輸入quarus_sh --help
,會顯示后面可以跟的選項:
zli@lizhen:~$ quartus_sh --help Quartus Prime Shell Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition Copyright (C) 2018 Intel Corporation. All rights reserved. Usage: ------ quartus_sh [-h | --help[=<option|topic>] | -v] quartus_sh -g | --gui [<project_name>] quartus_sh <other options> quartus_sh -t <script file> [<script args>] quartus_sh -s quartus_sh --tcl_eval <tcl command> Description: ------------ Options: -------- -f <argument file> --archive --clean --flow --ip_upgrade --lower_priority --platform --platform_install --prepare --qboard --qhelp --qslave --relcon --restore --set --simlib_comp --write_flow_template Help Topics: ------------ arguments return_codes tcl For more information on specific options, use --help=<option|topic>.
flow
是一個可以被quartus_sh
調用的包,上面的Option
下面的--flow
就代表了這個包,后面可以接compile
,完整命令是quartus_sh --flow compile xxx
,該命令會打開名為xxx
的project并編譯。
但quartus_sh
后面跟的選項并沒有包含所有包的所有命令,比如flow
包的delete_netlist、execute_module
等功能并沒有在選項中出現,剛剛講過的project
包及功能也沒有在選項中出現,我們如何調用呢?
答案是:進入交互式界面--Tcl Console。
quartus
的每一個可執行命令如quartus_sh、quartus_sta、quartus_map
后面都可以接-s
,回車以后就進入了相應命令的交互式界?,注意是相應命令,意思是該界?下只 能執?該命令對應的包的功能,?如我輸?quartus_sh -s
進?quartus_sh
的交互式界 ?:
zli@lizhen:~$ quartus_sh -s ...... tcl>
在該界面下quartus_sh
所能調用的包的所有命令都可以執行,但不被quartus_sh
調用的包的命令不能被執行,比如: 當我執行check_timing
這條命令時就會顯示不能執行,并且會提示可以調用該命令的可執行命令:
tcl> check_timing ERROR: Quartus Prime Tcl command "check_timing" is only available for use in the following executables: quartus_fit quartus_sta
如果想要執行check_timing
,就需要退出并進入到對應命令的交互式界面,所以這就要求我們操作前想清楚命令屬于哪個模塊。
一條條打命令再回車非常麻煩,所以還可以把所有的包的命令放在一個.tcl
文件中,然后用對應的可執行命令執行這個腳本,比如寫一個創建工程、指定源碼、指定器件、進行編譯的xxx.tcl
,然后用quartus_sh -t xxx.tcl
執行這個腳本,就會自動完成一系列操作。
當然如果你的腳本里面有類似于check_timing
這種專屬命令的話,就需要用對應的可執行命令來執行腳本。
那么如何知道哪些包可以被對應的可執行命令調用呢?兩個辦法:
1.手冊里有講
實心圓代表可執行語句默認加載了這個包。比如說,所有的可執行語句即quartus_xxx
都加載了project
這個包,那么就默認可以執行project
下面的所有命令。這意味著,不管用任何可執行命令執行.tcl
腳本,腳本中的project
包下命令都可以被執行。
空心圓代表可執行語句無法加載這個包,比如假如用quartus_sh
這條語句執行sdc
這個包下的語句,就是不行的。
半空半滿圓表示,可執行語句默認沒有加載這個包,要是想用的話需要自己進行手動加載。在.tcl
腳本內相關命令前面寫入 load_package <package name>
或者package require ::quartus::<package name>
之后,就可以使用對應包內的指令了。
需要注意的一點是,表格里的Tcl Console
應該是指quartus_sh
對應的Tcl Console
,其可調用包比單純的quartus_sh
要多一些,同時也等于GUI界面的Tcl Console
。
2.quartus_sh --qhelp
可以顯示所有的可執行命令及包
###跑個示例 找一個編譯好的工程,從菜單的project那里生成一個xxx.tcl
文件,然后和verilog源碼或者vhdl源碼一起復制到一個新的文件夾,當前文件夾打開終端執行quartus_sh -t xxx.tcl
,就會得到與原先一模一樣的工程。
接下來我們照葫蘆畫瓢手動寫一個xxx.tcl
試一下。
工程叫test_blif,只有一個verilog源碼,頂層模塊叫top,top.v
文件放在src/v
下面。
新建一個test_blif.tcl文件,前兩行載入包并設置一些參數:
package require ::quartus::project set need_to_close_project 0 set make_assignments 1
然后判斷test_blif工程有沒有打開,以及當前目錄下有沒有test_blif工程,沒有就新建一個:
# Check that the right project is open if {[is_project_open]} { if {[string compare $quartus(project) "test_blif"]} { puts "Projec test_blif is not open" set make_assignments 0 } } else { # Only open if not already open if {[project_exists test_blif]} { project_open -revision top test_blif } else { project_new -revision top test_blif } set need_to_close_project 1 }
注意上面的-revision
后面的top
,這是revision
的名字,即.qsf
文件的名字,也是在不設置TOP_ENTITY
時默認的頂層模塊的名字。
注意:
當文件夾內有同樣工程(有qsf文件、qpf文件)的時候,上面的代碼在改動.tcl
腳本的make_assignments
以后,所做的改變并不會同步到原有的qsf
文件,quartus
只會添加原來qsf
沒有的設置,想要每一次運行腳本后qsf
都全部重寫的話需要修改.tcl
前半部分的代碼:
package require ::quartus::project package require ::quartus::flow set need_to_close_project 0 set make_assignments 1 # Check that the right project is open if {[is_project_open]} { if {[string compare $quartus(project) "test_blif"]} { puts "Projec test_blif is not open" set make_assignments 0 } } else { # Only open if not already open #if {[project_exists test_blif]} { # project_open -revision top test_blif #} else { project_new -revision top test_blif -overwrite #} set need_to_close_project 1 }
這樣每一次tcl的改動在執行后都會導致qsf
的完全重寫。
接下來設置器件、型號、讀取verilog代碼、并把設置寫入對應的qsf文件:
# Make assignments if {$make_assignments} { set_global_assignment -name FAMILY "Cyclone V" set_global_assignment -name DEVICE 5CGXFC7C7F23C8 set_global_assignment -name VERILOG_FILE src/v/top.v set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files # Commit assignments export_assignments #execute_flow -compile # Close project if {$need_to_close_project} { project_close } }
這里需要注意:
我沒有設置TOP_ENTITY
,所以默認用revision
的名字top
作為頂層文件,這是可以的。
整個tcl
文件只用到了project
一個包的命令,所以執行后只是復制了工程,沒有編譯。
保存后執行quartus_sh -t test_blif.tcl
,就可以在對應文件夾生成工程。
那想要執行編譯怎么辦呢?可以先quartus_sh -s
進入交互式界面,執行flow
包的execute_flow -compile
指令;也可以在tcl腳本最前面先聲明flow
包:package require ::quartus::flow
,再在關閉工程前面加上一句execute_flow -compile
指令,這樣執行腳本的時候會執行編譯。
上述就是小編為大家分享的Quartus命令行及腳本使用介紹是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。