一键切换ip地址bat_震惊!FPGA配置居然一键完成!
如果你被标题吸引而来,哈哈说明我成功了。
不过先别着急拍砖,这次的主题是使用Tcl脚本在quartus II中完成FPGA的配置。
Tcl(读Tickle) 全称(Tool Command Language),是一种简单易学又十分强大的脚本语言。在数字集成电路设计中应用十分广泛。
利用Tcl脚本,告别在Quartus II界面下用鼠标点来点去的步骤,直接双击,就可以完成工程的创建、综合、布局布线、引脚约束时序约束等过程。
所以一键完成也并非妄言。
Tcl脚本还可以轻松的保存和导出现有工程文件的约束和配置,然后移植到其他工程中。
另外,Tcl脚本在Modelsim仿真中也有着十分广泛的应用,这一部分内容我们在之后的文章中进行讲解。
这篇文章的主要目的,是帮助大家理解Quartus II中Tcl脚本的主要层次结构,破除一下神秘感,文章的一些内容,是我自己整理理解而来。
好啦,闲话少说,为了使大家直观的了解Tcl脚本的应用,不至于一上来就绕晕在各种概念里,这里先带大家完成一个小例子,看一下Tcl脚本的实际作用。
01
首先需要大家检查一下,在环境变量中是否添加了Quartus II。
打开系统属性,点击环境变量。
之后在用户变量 -> Path下把电脑上quartusbin64这个路径添加进去即可。
02
接下来,大家自己找一个已经编译好的小工程,在Quartus II中打开,点击Project -> Generate Tcl File for Project。
这时在工程目录下,大家会看到一个后缀为.tcl的文件。
然后,大家把这个Tcl文件,与这个工程的源文件(.v)复制到一个新的文件夹下,注意文件名不要有中文字符。
在文件下新建一个空白的txt文档,输入“quartus_sh -t xxx.tcl”,注意后面的tcl名需要与自己的tcl文件相同,最终的结果是这样的。
最后,将txt文档的后缀改为.bat
好啦,大功告成!
现在,我们双击这个.bat文件,看看会发生什么?
没错,工程被创建了出来,大家打开工程会发现,和之前自己最早的工程一模一样。
03
其实上述的小例子也是有一定的实用价值的。
比如当你想复制一个很大的工程时,只需要把脚本文件与源文件拷贝即可,这大概只要几十kb,而一个工程目录通常可能得有好几百兆。
不过这个小例子还是更多的让大家找找感觉,理解一下Tcl的流程。
我们来分析一下刚才干了什么。
大家可能已经发现了,从源工程导出的Tcl文件,包含了工程所有的配置与约束信息。
而最后创建的bat文件,其实是所谓的批处理文件,就是让Windows执行了quartus_sh -t xxx.tcl这样一条语句。
大家也可以在命令行下,切换到对应的路径下,直接输入这句话,也能达到一样的效果。
接下来的问题是,Tcl文件里都有什么?quartus_sh -t xxx.tcl这句话是什么意思?我们来分析一下。
04
首先要明确的是,在Quartus II中,Tcl脚本有3个层次,分别是命令行可执行语句(Command-Line Executables)、Tcl内的包(Packages)与包内的命令(Package commands).
理解了这三个层次的内容,就理解了Quartus II中Tcl脚本的基本结构。同时这部分内容也是本文的核心。
大家在命令行中输入quartus_sh --qhelp,可以打开Quartus II自带的关于Tcl脚本的帮助文档。
像下图这样:
左边有两个目录,分别就是可执行命令,与包。而点击任何一个包,右边就会出现包内的命令。这三者各有什么用,它们之间是一个什么样的关系呢?
大家观察一下,命令行可执行语句(Command-Line Executables)的形式全部为quartus_xx,是直接写入批处理脚本中的。
我们刚才往bat文件里写入的是:quartus_sh -t xxx.tcl,意思就是使用了quartus_sh这个可执行命令来执行后面的那个脚本。
每一个可执行命令,其实就代表了FPGA配置或者约束的一个步骤。
比如quartus_fit用来做映射,quartus_sta用来做时序仿真等等。而我们这里用的quartus_sh,其实是所谓的Quartus shell,是为所有的步骤提供了一个入口。
为了实现可执行命令所执行的功能,Quartus II里为每一个可执行命令提供了不同的包。
而包内的命令,是我们真正要往Tcl脚本里写入的。
指令与包之间的关系是这样的。
实心圆代表可执行语句默认加载了这个包。比如说,所有的可执行语句即quartus_xxx都加载了project这个包.
这意味着,不管用任何可执行命令执行Tcl脚本,脚本中都可以调用project包下的指令,如set_global_assignment。
大家可以打开自己刚才生成的Tcl脚本看一下,里面有大量这条语句,这条语句就是对工程进行配置的。
空心圆代表可执行语句无法加载这个包,比如假如用quartus_sh这条语句执行sdc这个包下的语句,就是不行的。
而半空半满圆表示,可执行语句没有默认加载这个包,要是想用的话需要自己进行手动加载。在Tcl脚本内写入 load_package <package name>;之后,就可以使用对应包内的指令了。
比如,使用quartus_sh这个指令去执行脚本,又需要执行flow这个包下的指令,如execute_flow,那么我们就需要在Tcl文件中写入 load_package flow这句话。
总结:批处理文件(.bat)中写可执行指令,如quartus_xxx;
脚本(Tcl)文件中写可执行指令下Tcl包内的指令;
如果没有包没有默认导入的话还要在Tcl文件中导入。
05
好了,有了上面的铺垫,我们打开自己生成的Tcl脚本看一下。
因为大家各自的工程不同,脚本自然也不同,不过结构基本一致。其中带#号的是注释,在这里就不列举了。
我的Tcl脚本主要有两部分,第一部分是
package
这一部分主要是检查目前待创建的工程是否存在,如果不存在的话,就project_new -revision led_test led_test,即创建led_test这个工程。其中-revision后面跟的是一同被创建的qsf文件的名字。
当然如果自己写脚本的话其实没有必要这么多判断,创建工程直接写
project_new -revision <qsf文件名> <工程名>这样即可。
第二部分是
# Make assignments
if {$make_assignments} {set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_filesset_global_assignment -name VERILOG_FILE led_test.vset_global_assignment -name LAST_QUARTUS_VERSION 13.1set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85set_global_assignment -name FAMILY "Cyclone IV E"set_global_assignment -name DEVICE EP4CE75F23C8set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFFset_global_assignment -name CONFIGURATION_VCCIO_LEVEL 3.3Vset_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "AS INPUT TRI-STATED"set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL"set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO"set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO"set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO"set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO"set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO"set_global_assignment -name USE_CONFIGURATION_DEVICE OFFset_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -riseset_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fallset_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -riseset_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fallset_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Topset_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Topset_global_assignment -name PARTITION_COLOR 16764057 -section_id Topset_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to clkset_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top# Commit assignmentsexport_assignments# Close projectif {$need_to_close_project} {project_close}
这主要是对工程进行配置,包含大量的set_instance_assignment语句,每句话的含义,大家可以结合帮助文档理解。
其实只要理解了命令行可执行语句、包与包内语句这三者之间的关系,再结合帮助文档,其实Quartus 中的Tcl脚本是比较容易理解的。
实际使用中使用Tcl脚本主要用于对工程进行约束配置,比如用来做引脚约束就十分方便.
另外Tcl脚本的一大用处就是在Modelsim的仿真中,这部分内容我们之后再聊。
感谢您能看到这里,希望没有浪费您的时间,我们下次见!
欢迎关注公众号[FPGA里的那些事儿],关于FPGA的分享,以及一些闲来无事的唠嗑。
一键切换ip地址bat_震惊!FPGA配置居然一键完成!相关推荐
- 计算机如何输入ip地址,电脑如何切换ip地址_怎么让电脑切换ip地址-win7之家
在每台电脑中,系统中的ip协议都会有提供一种统一的ip地址,能够为为互联网上的每一个网络和每一台主机分配一个逻辑地址,从而达到屏蔽物理地址的差异,同时我们也可以对ip地址进行切换,那么电脑如何切换ip ...
- bat 切换网络适配器_Windows批处理自动切换IP地址设置无线网络和以太网的IP地址...
经常带着笔记本电脑来回公司与家里上网,会碰到要切换本地IP的情况,由于上班公司工作需要设置固定IP才能上网,而在家都是自动获取IP地址的,下面这个bat批处理文件,可以很方便切换IP地址. @echo ...
- 自动为计算机配置ip的协议,电脑自动获取IP地址----DHCP动态主机配置协议
电脑主机要接入网络中就需要有三层IP地址,静态IP地址采用的是管理员手工配置的配置方式,这种方式在设备较少的情况下可以很好控制地址的分配,但是在设备较多的情况下手工配置的方式变得繁琐,而且当分出去的地 ...
- 切换ip地址是什么意思 切换ip地址的快捷方式
切换ip地址是什么意思 切换IP地址是指计算机更换通信地址.这就像我们日常生活中的改变家庭地址一样.每一台计算机都有世界上唯一的IP地址来确定它的位置.切换IP地址通常用于访问不同地区的网络或者改变网 ...
- linux切换ip地址脚本,批处理实现的ip地址切换的复杂脚本
@echo off cls echo **************** echo IP地址切换 echo 版本:070510 echo **************** echo. echo 0705 ...
- win10一键修改IP地址
由于工作需要,经常需要设置电脑的IP地址,子网掩码和网关,一直手动修改特别麻烦.为了简化工作,就搜了一些资料,编写了一个bat脚本,进行一件自动切换. 1.桌面新建文本文档: 2.全部复制以下代码,粘 ...
- IP地址的划分和配置路由
IP地址:是一种在Internet上的给主机编址的方式,也称为网际协议地址.常见的IP地址,分为IPv4与IPv6两大类: 路由:路由器能把不是同一个网段的网络设备连接起来,使它们能够建立通信: IP ...
- 如何配置php的ip地址吗,如何手动配置IP地址及防火墙设置
手动配置电脑IP地址和设置防火墙是很常用的设置.下面是学习啦小编跟大家分享的是如何手动配置IP地址及防火墙设置,欢迎大家来阅读学习. 手动配置IP地址及防火墙设置的方法 方法/步骤 在桌面 右键网络连 ...
- 如何配置php的ip地址吗,linux如何配置IP
linux如何配置IP? IP地址配置 rhel7/centos7添加了新的IP地址配置工具,但之前的老版本没有,所以这里可参考两种方法. 方法一:nmcli工具(新版系统可用) 第1步 查看网卡名称 ...
最新文章
- 当 “HTTP” 先生遇上“S”小姐
- DJango_生命周期
- fedora yum mysql_Fedora14使用yum安装mysql
- 基于融合计算?蚂蚁金服的在线机器学习是如何做的
- jni jvm 内存泄漏_解析Java的JNI编程中的对象引用与内存泄漏问题
- html网页商品销量滞后怎么做,iview 刷新滞后于html问题
- iOS - 个人项目流程(建立项目和提交Git 进行代码迭代管理)
- AD集成DNS区域记录重建及恢复
- 小程序保存图片相册无响应
- ScmTools(CAD自动标注插件)v2.0官方版
- 2020年数学建模国赛E题题目和解题思路
- linux puppy 安装软件,小芭比linux下载
- Excel根据快递单号自动识别快递公司
- 掌薪阁分享:一个人人可做,汇聚了全网不同层次的网赚项目!
- 7-2 排座位 (25 分)
- go语言程序设计学习笔记-1
- html项目的致谢词,毕业论文的致谢词范文(精选5篇)
- 引入echarts的js文件报错——Cannot read properties of null (reading ‘getAttribute‘)
- 亚马逊将推出VR购物应用,支持Vive Rift PSVR三大平台
- arcgis多面体要素转面_【干货】ArcGIS 9.3线转面的方法
热门文章
- vue2.0桌面端框架_vue-element-admin
- python3 manage.py runserver 0.0.0.0:8000 没反应
- 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc
- 【python基础知识】调用C++接口(setup.py运行)出现的各种问题
- 常用的、现成的!正则表达式及基础知识
- python-利用生成器函数生成斐波那契数列
- Bootstrap3代码模板
- solaris php,在Solaris 10 64位上配置PHP
- java 计数器_java并发之计数器CountDownLatch原理
- 学会这个python数字大全,让你不再发愁