Quartus QSF约束文件定义与使用
在Quartus 生成的众多文件中有一个扩展名为” .qsf”的文件,该扩展名是Quartus Prime Setting File的缩写,其含义为Quartus 主设置文件。主要负责在整个工程范围内的各种设定,如管脚锁定,IO管脚电平标准,电气接口等内容,而且每个修订版本都对应一个特定QSF文件。
一.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建议不要修改该文件,因为任何修改可能会丢失或被覆盖。
该文件的后半部分主要是工程设定,如:顶层文件名,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部分匹配。
注意: 在新创建的quartus 工程中,往往会出现以下的警告:

图1
我们需要根据自己的计算机的情况设置以下 命令可以消除这个警告
set_global_assignment -name NUM_PARALLEL_PROCESSORS 4
或者
set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL
-
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 IO_STANDARD “3.3-V LVCMOS” -to inclk |
| 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, breakpoint name, clock name, debug hub name, I/O bank name, or timegroup name for the assignment.
为LogicLock region, EDA tool type, 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),显示所有指定的注释项(增加别名)为”Carry chain comment.”. |
| -disable | set_instance_assignment -name auto_global_memory_controls off -to clock -disable | 注释赋值,使后续处理不起作用,可以使用在分段处理上。 |
四、 QSF调用其它的QSF文件
利用source关键字可以调用其它的QSF文件,例如:
set_global_assignment -name family arria10
source new_assignments.qsf
-
注意事项
修改QSF文件建议在工程关闭的情况下进行,修改完成后重启工程,各项修改才会生效。
五、总结:
理解和使用QSF文件,可以方便快速完成各种设定,加速系统设计定制。