问题的提出:开发板的管脚很多是固定的,例如某个管脚连着LED或者开关,这些管脚分配是不需要修改的,那么如何把其他工程文件的管脚分配方案导入进来呢
思路:建立一个工程需要配置的内容:
1. 器件类型(如Cyclone)
2. 器件型号(如EP1C12Q240C8)
3. 顶层实体名
4. 设计文件路径
如果针对具体的电路板,还要设置
1. 引脚分配(往往是内容最多的一项)
2. 未使用的引脚功能(通常设为输入三态)
3. 引脚电平类型
4. 生成第三方编程文件类型(如.ttf文件)
5. 配置方式(主动串行或被动串行)
此外,还有针对第三方EDA工具接口的配置、编译过程的配置等。
这些选项虽然可以在IDE界面中逐级设置,可是毕竟繁琐费时,稍不留神就会漏掉几项。其实,所有的IDE界面中的选项,都有其在ASCII文件中的具体语句对应。Quartus II运行时需要读取ASCII文件而不是IDE的界面。掌握了这一规律,就可以按照Quartus II软件的运行方式,找到对应的ASCII文件,直接对其操作来修改或复制其内容。
方法:把其他工程的qsf文件打开,经过修改,另存为TCL文件,并且添加到当前工程下。
修改实践:
以下是一个QSF文件:
set_global_assignment -name FAMILY "Cyclone III"
set_global_assignment -name DEVICE EP3C16F484C6
set_global_assignment -name TOP_LEVEL_ENTITY DE0_Default
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "8.0 SP1"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "15:56:36 MARCH 06, 2009"
set_global_assignment -name LAST_QUARTUS_VERSION 9.0
set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_id eda_palace
……
# Pin & Location Assignments
# ==========================
set_location_assignment PIN_A3 -to DRAM_ADDR[1]
set_location_assignment PIN_C4 -to DRAM_ADDR[0]
………
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BUTTON[2]
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BUTTON[1]
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to UART_RXD
……
CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name USE_CONFIGURATION_DEVICE ON
set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE EPCS4
set_global_assignment -name MISC_FILE "D:/TERASIC_TEST/DE0/DE0_Default/DE0_Default.dpf"
set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON
set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL ON
set_global_assignment -name MISC_FILE "E:/DE0/DE0_Default/DE0_Default.dpf"
set_global_assignment -name VERILOG_FILE V/VGA_Ctrl.v
set_global_assignment -name VERILOG_FILE V/Reset_Delay.v
set_global_assignment -name VERILOG_FILE V/IMG_RAM.v
由上述文件内容可以知道,一个QSF文件分成4个部分
第一部分:芯片说明,和系统总体配置(修改)
第二部分:管脚分配
第三部分:电压设置
第四部分:下载,文件关系(删除)
经过测试 以上方法是可以的