溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Quartus命令行及腳本使用介紹是怎樣的

發(fā)布時間:2021-11-11 18:02:41 來源:億速云 閱讀:591 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Quartus命令行及腳本使用介紹是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Quartus本身除了GUI以外,還可以在不打開GUI的情況下通過命令行執(zhí)行命令或者腳本來進行工程創(chuàng)建、指定器件及型號、讀取源碼、引腳分配、編譯、布局布線、約束等操作,本教程涉及工程創(chuàng)建、指定器件及型號、讀取源碼、編譯以及生成blif,至于后面的布局布線、引腳分配、約束等功能可以看完教程后查看相關(guān)資料搞定。

認真閱讀完上面的鏈接對應(yīng)的內(nèi)容,讀完以后基本就可以掌握了。

首先將quartus的路徑加入到用戶變量中去。

quartus的命令行和腳本功能一共包含兩個部分:可執(zhí)行命令和包。不同的命令可以調(diào)用不同的包,而不同的包有著不同的功能。

先說在前面,flow包中的execute_module指令后面可以接map、fit、sim、sta等選項,其功能與quartus_map、quartus_fit、quartus_sim、quartus_sta一致,并且后面可以跟-args選項,這就將外部命令和內(nèi)部包聯(lián)系在了一起,即使在tcl下面也可以執(zhí)行外部的命令。

比如,quartus_sh是一個可執(zhí)行命令,除了-h、--help等這些所有可執(zhí)行命令都有的選項以外,quartus_sh還可以調(diào)用project這個包,而project這個包內(nèi)包含的project_new、project_open等功能都可以被quartus_sh使用,但每個可執(zhí)行命令后面跟的選項并沒有包含所有可調(diào)用包的所有命令,而僅僅包含了少量包的常用命令,比如在終端輸入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調(diào)用的包,上面的Option下面的--flow就代表了這個包,后面可以接compile,完整命令是quartus_sh --flow compile xxx,該命令會打開名為xxx的project并編譯。

quartus_sh后面跟的選項并沒有包含所有包的所有命令,比如flow包的delete_netlist、execute_module等功能并沒有在選項中出現(xiàn),剛剛講過的project包及功能也沒有在選項中出現(xiàn),我們?nèi)绾握{(diào)用呢?

答案是:進入交互式界面--Tcl Console。

quartus的每一個可執(zhí)行命令如quartus_sh、quartus_sta、quartus_map后面都可以接-s,回車以后就進入了相應(yīng)命令的交互式界?,注意是相應(yīng)命令,意思是該界?下只 能執(zhí)?該命令對應(yīng)的包的功能,?如我輸?quartus_sh -s 進?quartus_sh 的交互式界 ?:

zli@lizhen:~$ quartus_sh -s
......
tcl>

在該界面下quartus_sh所能調(diào)用的包的所有命令都可以執(zhí)行,但不被quartus_sh調(diào)用的包的命令不能被執(zhí)行,比如: 當(dāng)我執(zhí)行check_timing這條命令時就會顯示不能執(zhí)行,并且會提示可以調(diào)用該命令的可執(zhí)行命令:

tcl> check_timing
ERROR: Quartus Prime Tcl command "check_timing" is only available for use in the following executables:
	quartus_fit
	quartus_sta

如果想要執(zhí)行check_timing,就需要退出并進入到對應(yīng)命令的交互式界面,所以這就要求我們操作前想清楚命令屬于哪個模塊。

一條條打命令再回車非常麻煩,所以還可以把所有的包的命令放在一個.tcl文件中,然后用對應(yīng)的可執(zhí)行命令執(zhí)行這個腳本,比如寫一個創(chuàng)建工程、指定源碼、指定器件、進行編譯的xxx.tcl,然后用quartus_sh -t xxx.tcl執(zhí)行這個腳本,就會自動完成一系列操作。

當(dāng)然如果你的腳本里面有類似于check_timing這種專屬命令的話,就需要用對應(yīng)的可執(zhí)行命令來執(zhí)行腳本。

那么如何知道哪些包可以被對應(yīng)的可執(zhí)行命令調(diào)用呢?兩個辦法:

1.手冊里有講 Quartus命令行及腳本使用介紹是怎樣的

實心圓代表可執(zhí)行語句默認加載了這個包。比如說,所有的可執(zhí)行語句即quartus_xxx都加載了project這個包,那么就默認可以執(zhí)行project下面的所有命令。這意味著,不管用任何可執(zhí)行命令執(zhí)行.tcl腳本,腳本中的project包下命令都可以被執(zhí)行。

空心圓代表可執(zhí)行語句無法加載這個包,比如假如用quartus_sh這條語句執(zhí)行sdc這個包下的語句,就是不行的。

半空半滿圓表示,可執(zhí)行語句默認沒有加載這個包,要是想用的話需要自己進行手動加載。在.tcl腳本內(nèi)相關(guān)命令前面寫入 load_package <package name>或者package require ::quartus::<package name>之后,就可以使用對應(yīng)包內(nèi)的指令了。

需要注意的一點是,表格里的Tcl Console應(yīng)該是指quartus_sh對應(yīng)的Tcl Console,其可調(diào)用包比單純的quartus_sh要多一些,同時也等于GUI界面的Tcl Console

2.quartus_sh --qhelp可以顯示所有的可執(zhí)行命令及包 Quartus命令行及腳本使用介紹是怎樣的

###跑個示例 找一個編譯好的工程,從菜單的project那里生成一個xxx.tcl文件,然后和verilog源碼或者vhdl源碼一起復(fù)制到一個新的文件夾,當(dāng)前文件夾打開終端執(zhí)行quartus_sh -t xxx.tcl,就會得到與原先一模一樣的工程。

接下來我們照葫蘆畫瓢手動寫一個xxx.tcl試一下。

工程叫test_blif,只有一個verilog源碼,頂層模塊叫top,top.v文件放在src/v下面。

新建一個test_blif.tcl文件,前兩行載入包并設(shè)置一些參數(shù):

package require ::quartus::project
set need_to_close_project 0
set make_assignments 1

然后判斷test_blif工程有沒有打開,以及當(dāng)前目錄下有沒有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文件的名字,也是在不設(shè)置TOP_ENTITY時默認的頂層模塊的名字。

注意:

當(dāng)文件夾內(nèi)有同樣工程(有qsf文件、qpf文件)的時候,上面的代碼在改動.tcl腳本的make_assignments以后,所做的改變并不會同步到原有的qsf文件,quartus只會添加原來qsf沒有的設(shè)置,想要每一次運行腳本后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的改動在執(zhí)行后都會導(dǎo)致qsf的完全重寫。

接下來設(shè)置器件、型號、讀取verilog代碼、并把設(shè)置寫入對應(yīng)的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
        }
}

這里需要注意:

  1. 我沒有設(shè)置TOP_ENTITY,所以默認用revision的名字top作為頂層文件,這是可以的。

  2. 整個tcl文件只用到了project一個包的命令,所以執(zhí)行后只是復(fù)制了工程,沒有編譯。

保存后執(zhí)行quartus_sh -t test_blif.tcl,就可以在對應(yīng)文件夾生成工程。

那想要執(zhí)行編譯怎么辦呢?可以先quartus_sh -s進入交互式界面,執(zhí)行flow包的execute_flow -compile指令;也可以在tcl腳本最前面先聲明flow包:package require ::quartus::flow,再在關(guān)閉工程前面加上一句execute_flow -compile指令,這樣執(zhí)行腳本的時候會執(zhí)行編譯。

上述就是小編為大家分享的Quartus命令行及腳本使用介紹是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI