使用TCL脚本快速创建Quartus工程

news/2025/10/15 13:40:13/文章来源:https://www.cnblogs.com/charlesfpga/p/19143132

在刚开始学习FPGA的时候,使用Quartus Prime的GUI界面创建工程是一个再平常不过的事儿,但是随着项目的增多,有很多项目可能会用到之前项目的代码,如果用GUI界面添加代码也可以,但是总觉得这种方法效率太低(点击New Project Wizard->选择工程目录,输入工程名,顶层文件名->添加工程代码及所需的IP文件->选择器件型号->管脚约束……)。

后面在网上找相关的更高效的方法,最终找到了一种使用TCL脚本快速创建Quartus工程的方法,这里直接贴TCL脚本的一个示例:

点击查看代码
# 创建工程
project_new -revision TGLV26 -overwrite TGLV26# 添加源码文件# 顶层文件
set_global_assignment -name VERILOG_FILE ../src/TGTop.v
# a文件夹
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
set_global_assignment -name VERILOG_FILE ../src/a/xxx.v
# b文件夹
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
set_global_assignment -name VERILOG_FILE ../src/b/xxx.v
# Position文件夹
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
set_global_assignment -name VERILOG_FILE ../src/c/xxx.v
# TransportCtr文件夹
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v
set_global_assignment -name QXP_FILE ../src/d/xxx.qxp
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v
set_global_assignment -name VERILOG_FILE ../src/d/xxx.v# 添加IP核
set_global_assignment -name QSYS_FILE ../ip/xxx.qsys
set_global_assignment -name QIP_FILE ../ip/RAM/xxx.qip
set_global_assignment -name QIP_FILE ../ip/ID/xxx.qip
set_global_assignment -name QIP_FILE ../ip/PLL/xxx.qip
set_global_assignment -name QSYS_FILE ../ip/DUALBOOT/xxx.qsys
# 头文件
set_global_assignment -name SOURCE_FILE ../src/xxx.h
set_global_assignment -name SOURCE_FILE ../src/xxx.h# 添加时序约束文件
set_global_assignment -name SDC_FILE ../src/xxx.sdc# TCL脚本
set_global_assignment -name TCL_SCRIPT_FILE ../src/xxx.tcl
set_global_assignment -name TCL_SCRIPT_FILE ../src/xxx.tcl
set_global_assignment -name TCL_SCRIPT_FILE ../src/xxx.tcl# 设置工程的顶层模块
set_global_assignment -name TOP_LEVEL_ENTITY TGTop
#------------------GLOBAL--------------------#
set_global_assignment -name FAMILY "MAX 10"
set_global_assignment -name DEVICE 10M16SAU169I7G
set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 00000000
set_global_assignment -name USE_CONFIGURATION_DEVICE OFF
set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "DUAL IMAGES"
set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER ON# 输出bitstream文件夹
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name VERILOG_INPUT_VERSION SYSTEMVERILOG_2005
# 设置seed值
set_global_assignment -name SEED 7
# 预处理脚本
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:../src/VersionGen.tcl"
# 后处理脚本
set_global_assignment -name POST_FLOW_SCRIPT_FILE "quartus_sh:../src/BitstreamGen.tcl"
# 并行编译可使用的最大处理器数
set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL#------------------ 引脚约束 --------------------#source "../src/xxx.tcl"#--------------------------------------------#
# 将所有约束写入qsf文件
export_assignments# 关闭工程
# project_close

只需创建一个工程文件夹,并在TCL脚本中描述所需的verilog源码文件和IP文件的路径,然后再打开quartus软件,并打开TCL Console窗口,在指令行中输入cd E:/Work/Project_Beta/TGTemp/prj(这里改为脚本所在文件路径),然后输入source xxx.tcl(xxx代表tcl脚本的文件名),即可快速创建工程,具体如下图:

微信图片_2025-10-13_194902_551-801x1024

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真家宽IP vs 数据中心IP:Cliproxy为何成为跨境电商首选? - 详解

真家宽IP vs 数据中心IP:Cliproxy为何成为跨境电商首选? - 详解2025-10-15 13:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !im…

kv cache缓存

计算自注意力时,Q(查询)向量在每次解码步骤中都是全新的,而 K(键)和 V(值)向量大部分是重复的,缓存 K 和 V 可以避免大量的重复计算。 下面通过一个具体的例子来详细解释为什么。 自注意力机制 在解码(生成)…

为什么笔记本电脑突然变得很卡?固态硬盘突然变慢是什么原因?

软件介绍 Wise Disk Cleaner清理系统垃圾、整理磁盘的工具。它能识别多达50种垃圾文件,可以让你轻松地把垃圾文件请出你的计算机,界面友好快速简便,支持简体中文多语言界面,支持XP下透明界面。 安装 点击以下获取安…

用 Uni-app 开发 C3 继续教育题库系统:静态资源导入、响应式交互与考试逻辑实现全解析

基于 Uni-app 开发的 C3 继续教育题库系统是一个功能完整的移动端学习应用,专注于提供高质量的在线练习和模拟考试体验。系统采用现代化的技术栈,具备良好的用户体验和稳定的性能表现。 一、核心功能模块题库练习系统…

2025年上海律师服务最新权威推荐榜:经侦律师,民事/刑事律师,经济/婚姻律师,法务律师,负债律师事务所专业解析

2025年上海律师服务最新权威推荐榜:经侦律师,民事/刑事律师,经济/婚姻律师,法务律师,负债律师事务所专业解析一、行业发展趋势与法律服务新格局随着上海国际金融中心建设的深入推进,法律服务市场正经历着前所未有…

2025 年永磁电机厂家推荐台州市台成机电,单相永磁电机,三相永磁电机,变频永磁电机,稀土永磁电机,直流永磁电机,无刷永磁电机,风机永磁电机,节能永磁电机,高效永磁电机公司推荐

行业背景2025 年成为电机行业转型关键节点,新国标将高压电机最低能效要求提升至 IE4 水平,高效节能电机占比需超 70%。永磁同步电机凭借 IE4/IE5 级能效优势,在专用电动机市场份额预计超 65%,广泛应用于工业、石化…

2025年实验室净化/手术室净化/洁净室工程厂家最新权威推荐榜:专业建设与无尘车间装修一站式解决方案

2025年实验室净化/手术室净化/洁净室工程厂家最新权威推荐榜:专业建设与无尘车间装修一站式解决方案行业背景与发展趋势随着生命科学、生物医药、精密制造等行业的快速发展,对洁净环境的需求日益增长。实验室净化、手…

GoBox:跨境电商AI智能选品与运营助手

GoBox:跨境电商AI智能选品与运营助手跨境电商作为全球零售的新兴力量,正在以前所未有的速度增长。然而,面对全球市场的多样化需求与复杂的运营管理,传统的选品与运营方式已难以满足卖家日益增长的需求。为此,跨境…

深入理解 `itertools`:分类解析常用函数 (Effective Python 第36条) - 教程

深入理解 `itertools`:分类解析常用函数 (Effective Python 第36条) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

linux配置环境变量

1、首先打开.bashrc文件 2、添加信息到文件末尾:export JAVA_HOME="/www/server/java/jdk1.8.0_371" export MVN="/root/app/apache-maven-3.9.11" export PATH=$JAVA_HOME/bin:$MVN/bin:$PATH3、…

assert的基本用法

一、assert 是什么 assert 是 Python 提供的一种 调试语句,用于在程序运行时做“自检”, 验证一个表达式是否为真(True)。 它的作用就像一个 自动检测点(checkpoint): 如果条件为 True → 程序继续执行 如果条件…

1688代发铺货规格匹配设置

自动匹配有问题时,可以手动匹配,位置在"分销"->"已铺货商品"页面,商品行"更多"中"匹配规格"操作

2025年整平机厂家最新推荐排行榜,精密整平机,数控整平机,自动整平机,板材整平机源头厂家专业选购指南

2025年整平机厂家最新推荐排行榜:精密整平机、数控整平机、自动整平机、板材整平机源头厂家专业选购指南行业背景与发展趋势随着制造业向智能化、精密化方向快速发展,整平机作为金属板材加工领域的关键设备,其技术水…

task2

任务1#include <stdio.h> #include <stdlib.h>#include <time.h> #define N 5 #define N1 80 #define N2 35 int main(){int cnt;int random_major,random_no;srand(time(NULL));cnt=0;while(cnt &l…

KiloCode 与 Claude Code 在长上下文文件写入操作中的稳定性差异深度解析

KiloCode 与 Claude Code 在长上下文文件写入操作中的稳定性差异深度解析 在人工智能辅助编程领域,工具的稳定性和可靠性对于开发者而言至关重要。随着项目规模和复杂性的增加,开发者越来越依赖这些工具来处理繁琐的…

2025年机械加工厂家最新权威推荐榜:钣金/焊接/零件/非标自动化/精密金属加工,专业定制与技术创新实力解析

2025年机械加工厂家最新权威推荐榜:钣金/焊接/零件/非标自动化/精密金属加工,专业定制与技术创新实力解析随着制造业向智能化、精密化方向加速转型,机械加工行业正经历着深刻的技术变革。在工业4.0和智能制造的推动…

2025年10月15号随笔

2025年10月15号随笔今年是一个崭新的一年也是极具挑战的一年,做了几年的电动车业务也全面转型了,虽然转型路上不是那么平坦。但是也是到了不得不的程度,希望是一个很好的开始,并且我坚信我可以再别的类目茁壮成长发…

Ubuntu20.04安装NVIDIA显卡驱动、CUDA Toolkit、cuDNN步骤(二) - 指南

Ubuntu20.04安装NVIDIA显卡驱动、CUDA Toolkit、cuDNN步骤(二) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

java基础7-ArrayList

1.集合的基本使用: (1)集合和数组的对比:长度:数组长度固定,集合长度可变 存储类型:数组可以存储基本数据类型也可以存引用数据类型,但集合只能存储引用数据类型,如果需要存储基本数据类型需要把它们变成对应的…

两个用于从B站下载视频的Shell脚本

我在下载四郎讲棋的、最多收藏的、时长低于10分钟的 用于人工收集URL的:prev= while clipnotify; do t=`xclip -o` if ! [[ "$t" =~ ^http ]]; then continue; fi if [[ "$t" == $prev ]]; then …