在Quartus 生成的众多文件中有一个扩展名为” .qsf”的文件,该扩展名是Quartus Prime Setting File的缩写,其含义为Quartus 主设置文件,而且每个修订版本都对应一个特定QSF文件。主要负责在整个工程范围内的各种设定,如管脚锁定,IO管脚电平标准,电气接口等内容,该文件是Quartus约束文件的一种,是物理约束文件(physical constraint file)。在Quartus创建的文件中 还有一个文件为SDC文件,即扩张名为.sdc的文件,该文件为时序约束文件,在随后的章节中会介绍。
一.QSF的创建与构成
-
QSF文件中的语法格式
QSF文件中的命令格式遵循tcl的语法格式,具体内容参考tcl语法与命令
-
QSF文件生成:
QSF文件当创建工程时就会生成,初步给定工程的创建信息和设定,以后每次启动工程时都会读取该文件对工程进行配置。初次创建工程后的QSF文件内容如下:
# https://fpgasoftware.intel.com/eula.
#
# ————————————————————————– #
#
# Quartus Prime
# Version 20.1.1 Build 720 11/11/2020 SJ Lite Edition
# Date created = 13:18:17 September 10, 2021
#
# ————————————————————————– #
#
# Notes:
#
# 1) The default values for assignments are stored in the file:
# test_qsf_assignment_defaults.qdf
# If this file doesn’t exist, see file:
# assignment_defaults.qdf
#
# 2) Altera recommends that you do not modify this file. This
# file is updated automatically by the Quartus Prime software
# and any changes you make may be lost or overwritten.
#
# ————————————————————————– #以上部分为注释说明
set_global_assignment -name FAMILY “Cyclone 10 LP”
set_global_assignment -name DEVICE 10CL006YE144C8G
set_global_assignment -name TOP_LEVEL_ENTITY test_qsf
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 20.1.1
set_global_assignment -name PROJECT_CREATION_TIME_DATE “13:18:17 SEPTEMBER 10, 2021”
set_global_assignment -name LAST_QUARTUS_VERSION “20.1.1 Lite Edition”
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name DEVICE_FILTER_PACKAGE “ANY QFP”
set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V
set_global_assignment -name EDA_SIMULATION_TOOL “ModelSim-Altera (Verilog)”
set_global_assignment -name EDA_TIME_SCALE “1 ps” -section_id eda_simulation
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT “VERILOG HDL” -section_id eda_simulation
set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST OFF -section_id eda_board_design_timing
set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST OFF -section_id eda_board_design_symbol
set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST OFF -section_id eda_board_design_signal_integrity
set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST OFF -section_id eda_board_design_boundary_scan
#=========================================以上为命令部分
该文件的前半部分为注释,提供创建该工程时的信息,如:创建日期,创建工程对应的Quartus的版本号,以及主要事项,Altera建议不要修改该文件,因为任何修改可能会丢失或被覆盖。在QSF文件中以 #作为注释语句的标志,表示从#开始到本行结束为注释,可以在文件中的任何位置使用。
该文件的后半部分主要是工程设定,如:顶层文件名,FPGA器件的选型,封装,温度设定等设定。文件中的设定命令遵循tcl的语法。有关tcl的语法请参照tcl的语法与使用部分。
在上面的文件中,仅使用了一条命令“set_global_assignment”, 后面跟“-name”参数,参数之后都是Quartus中可以解析的名称,如:命令set_global_assignment -name FAMILY “Cyclone 10 LP”中的FAMILY;Quartus在读取QSF文件,解析该命令时见到FAMILY就会用”Cyclone 10 LP”名称与Qurtus内的器件库中FAMILY部分匹配。
-
QSF命令自动追加
在利用Quartus进行开发的过程中,利用各种向导生成的内容都会在给文件的尾部追加相关的内容。在工程中新建文件并添加PLL,观察QSF文件的变化可以看出在文件尾部增加了两条命令如下:
set_global_assignment -name VERILOG_FILE test_qsf.v
set_global_assignment -name QIP_FILE PLL1.qip
当利用pin planner进行管脚锁定后,在QSF文件尾部添加如下命令:
set_location_assignment PIN_91 -to inclk
set_location_assignment PIN_80 -to divf
set_instance_assignment -name IO_STANDARD “3.3-V LVCMOS” -to divf
set_instance_assignment -name IO_STANDARD “3.3-V LVCMOS” -to inclk
-
QSF文件手动添加
Altera建议尽量不要修改QSF的内容,但如能掌握修改技巧对于项目的开发会有很大的帮助,特别是对于管脚锁定等内容,如果在同一个硬件板卡上开发的不同工程,QSF的内容基本相似,可以从一个QSF复制后进行局部修改后作为另一个工程的QSF文件。或复制部分内容到新生成QSF,完成整个项目的设置。
二、QSF常用赋值命令
序号 | 赋值类型 | 命令 |
1 | Global Assignment
全局赋值 |
set_global_assignment |
2 | Instance Assignment | set_instance_assignment
例 set_instance_assignment -name multicycle 8 -from clock -to timeo |
3 | Location Assignment | set_location_assignment |
4 | Parameter Assignment | set_parameter
例: set_parameter -name WIDTH 8 |
三、 QSF中命令常用参数
参数(可选)
名称 |
示例 | 描述 |
-name -value | set_global_assignment -name family -value Stratix®
set_global_assignment -name family Stratix® |
-value 是可选项,有没有”-value” 都可以,不写”-value”默认 value的值为Stratix |
-to | set_instance_assignment -name multicycle 8 -from clock -to timeo | |
-from | set_instance_assignment -name multicycle 8 -from clock -to timeo | |
-entity | set_global_assignment -name ll_auto_size on
-entity filtref -section Region_0 |
这项设置是针对某个实体文件,而不是顶层文件,如果该文件不存在,这个设置会应用到顶层文件上 |
-section_id | set_global_assignment -name
eda_map_illegal_characters on -section_id eda_simulation |
Specifies the LogicLock region, EDA tool type, clique name, breakpoint name, clock name, debug hub name, I/O bank name, or timegroup name for the assignment.
为LogicLock region, EDA tool type, clique name, breakpoint name, clock name, debug hub name, I/O bank name, or timegroup name 指定section_id的名称。 |
-comment | set_instance_assignment -name auto_carry_chains on -to accel -comment “Carry chain comment.”. | 在加速显示(accel),显示所有指定的注释项 |
-disable | set_instance_assignment -name auto_global_memory_controls off -to clock -disable | 注释赋值,使后续处理不起作用,可以使用在分段处理上。 |
四、 QSF调用其它的QSF文件
利用source关键字可以调用其它的QSF文件,例如:在x.qsf中有如下语句:
set_global_assignment -name family arria10
source new_assignments.qsf
在x.qsf可以使用assignments.qsf中的任何内容,但并没有把内容复制到x.qsf中,assignments.qsf中的内容可以单独维护。例如可以生成数码管的QSF文件”dis.qsf”,在工程的全局QSF中用source调用。
-
注意事项
修改QSF文件建议在工程关闭的情况下进行,修改完成后重启工程,各项修改才会生效。
五、总结:
理解和使用QSF文件,可以方便快速完成各种设定,加速系统设计定制。