中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-11-11 18:02:41 來源:億速云 閱讀:605 作者:柒染 欄目:互聯網科技

這期內容當中小編將會給大家帶來有關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命令行及腳本使用介紹是怎樣的

實心圓代表可執行語句默認加載了這個包。比如說,所有的可執行語句即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可以顯示所有的可執行命令及包 Quartus命令行及腳本使用介紹是怎樣的

###跑個示例 找一個編譯好的工程,從菜單的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
        }
}

這里需要注意:

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

  2. 整個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命令行及腳本使用介紹是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卫辉市| 新巴尔虎左旗| 桃园市| 贵定县| 蓬安县| 遵义县| 平顶山市| 龙海市| 台中县| 合江县| 滁州市| 二连浩特市| 额敏县| 新巴尔虎右旗| 博爱县| 清涧县| 肇州县| 南华县| 永吉县| 麻城市| 那曲县| 东兰县| 延边| 宣威市| 龙陵县| 增城市| 唐河县| 沂南县| 安图县| 罗城| 宁津县| 依兰县| 循化| 屯留县| 南木林县| 商洛市| 五河县| 西和县| 松江区| 武鸣县| 正宁县|