Quartus命令行及脚本使用介绍是怎样的

这期内容当中小编将会给大家带来有关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[=] | -v]
quartus_sh -g | --gui []
quartus_sh 
quartus_sh -t  []
quartus_sh -s
quartus_sh --tcl_eval 

Description:
------------


Options:
--------

	-f 
	--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=.

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 require ::quartus::之后,就可以使用对应包内的指令了。

需要注意的一点是,表格里的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命令行及脚本使用介绍是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


文章标题:Quartus命令行及脚本使用介绍是怎样的
文章地址:http://pwwzsj.com/article/pjccgo.html