| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> 用于Vivado工程管理的Tcl语法学习 -> 正文阅读 |
|
[开发工具]用于Vivado工程管理的Tcl语法学习 |
??学习一样东西,很重要一点就是要知道学这个是为了什么。Tcl作为一种脚本语言,类似于Python,甚至可以用Tcl来简单地处理一些文件,只是不像Python有那么多库的支持。我也是昨天刚开始学习Tcl的语法,目的是为了用Tcl脚本重建Vivado工程,然后便于做版本管理。Tcl确实和很多人说的一样比较容易学,而且我觉得所有做FPGA开发的人应该都先学Tcl。 学习方式??学习一种语法我觉得最好的方法就是边看边自己敲代码练习,就像RUNOOB上的教程一样,每一条知识点都有一个例子,而且可以在线编辑。学习Tcl也可以采用类似的方法。我比较推崇使用VS Code,下面是我的学习方式。 下载安装??Active Tcl类似于Tcl的一个发行版,在Tcl的官网上能够找到Tcl解释器的源码,Active Tcl在这个基础上又加了一些常用的Package。从官网下载之后再安装一下就可以了。安装的时候,
VS Code配置??VS Code的安装就不多说了,如果想用VS Code便捷地执行Tcl脚本,可以安装“Code Runner”这个插件,除了这个插件,还有Tcl语法高亮的插件也可以装一个,这个就不细说了。
主要知识点??Tcl的官网教程非常精炼,基本上一天就能把这些内容看完。可以一边对着官网的这个教程,一边在VS Code中自己写,这样的学习是最有效的。Tcler’s Wiki可以搜到几乎与Tcl相关的任何问题。我在这里记录一些Vivado工程中主要用到的语法规则,其他的比如数值计算、循环结构、变量作用域等就不写了,需要用到的时候可以再去查阅。 puts - 输出??在控制台输出字符串。带空格的字符串可以用花括号({})或者双引号("")组合起来。
set - 设置变量??set可以设置变量,变量调用需要在前面加“$”,双引号内的“$”开头的变量会被替换,而花括号内的不会。
??再看下面这个例子会发现,变量在双引号里面,但是也被正确替换了。而且结果输出的是correct。查看if相关的说明,我的理解是if指令有两个阶段,一个是变量替换阶段,一个是命令执行阶段。双引号内的变量在变量替换阶段被替换,而花括号内的变量则是在命令执行阶段被替换。对于if结构的判断条件,文档中建议用花括号。
list - 列表??list和变量没有本质区别,都是字符串。list里的不同列表项是靠空格隔开的,没有空格的变量就是长度为1的list。list相关命令汇总,尖括号表示必须的参数,方括号表示可选的参数:
??用下面这个例子可以对list的一些基本操作有一个直观的认识。
??方括号可以用来获取命令的返回值。例如上面第二行,list命令返回一个列表,传到外面后,用set命令来给这个列表命名为“lst”。如果想在每一行加注释,则需要在这一行命令的结尾加上分号,然后再用“#”加注释。 string - 字符串??string是Tcl最基础的数据结构,在Vivado工程里,经常需要用到字符串比较来检验某个设置是否已经存在。
??下面的例子是为了区分string match和string equal。string match给的是模版,string equal是要求两个字符串匹配。
file - 文件??Tcl脚本中偶尔也会需要用到文件操作,比如新建文件夹,删除文件,复制文件,这些都有对应的命令。
??file normalize在Vivado的Tcl脚本中也多次用到,这个命令是在Tcl8.4版本才开始支持的。 info - 检视信息
source - 执行外部Tcl脚本??source跟脚本文件名可以执行另一个Tcl文件中的脚本。这么做可以让一个文件不至于太大,实现模块化设计,更好的模块化设计是用packages进行管理。在Vivado中可以将工程创建和Block Design 的创建分为两个Tcl脚本,工程创建之后source 创建Block Design的脚本就行。 namespace - 名称空间??引入package之后,为了防止不同package之间产生冲突,就有了namespace的概念。::表示全局的名称空间。 后话??如果你跟我一下只是之后准备用Tcl管理Vivao工程,了解了上面的内容基本就行了。Vivado可以导出Tcl脚本,导出的脚本也很容易看懂,如果有不懂的地方再去查就行。我之后准备用Git和Tcl脚本进行Vivado工程的版本管理。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 14:24:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |