如何设计脚本语言 IC设计之脚本语言介绍
冬天来了,天气好冷,钻在被窝里不肯出来,不知不觉2020年就过去了,时间过得真快
本文主要是想简单介绍一些常用的脚本(script)语言,学以致用,一个看似复杂的脚本,其实也是由很多简单的linux指令&语法构成,掌握后,对提高学习工作效率有很大帮助
目前,我在工作中接触得最多脚本&编程类语言如下
Cshell bashell perl tcl skill makefile C++ Verilog
我当时自学的时候发现把以上的电子书初略看了一下 ,发现对于初学者来说确实不那么友好,看完后久了没接触就忘得差不多了,现在脑子里回忆下,就只剩下一个大概印象,语言的这种东西啊,真的还是得平时积累memo,多看多写。
后来发现很多脚本语言都与C语言类似,后悔当初没有好好学习C++
什么是shell?
Shell 是一个用 C 语言编写的程序,既是一种命令语言,又是一种程序设计语言。
Linux 的 Shell 种类有很多,我常见的是Bashell 和 Cshell
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
先简单介绍一下Bashell吧,Bash 也是大多数Linux系统默认的Shell
下图是以synopsys的hspice工具环境变量设置
我用bashell写的
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序
从脚本第一句能看出来#!/bin/bash,是用bashell写的,一般读脚本前我都会有意识看一下
alias命令
Linux alias命令用于设置指令的别名。
export命令
Linux export命令用于设置或显示环境变量。
比如:export Synopsys_Dir=/opt/synopsys
export的效力仅及于该次登陆操作。注销或者重新开一个窗口,export命令给出的环境变量都不存在了
输入export可以查看当前的所有环境变量。
如果你要在某个环境变量(比如PATH)中加入一些新的路径(如/bin/bash),可以使用如下命令格式
export PATH=/bin/bash:$PATH
执行命令
执行一个bashell脚本
1 bash filename
source命令
source命令是bash shell的内置命令,从c shell而来
. shell 与source命令相同,从Bourne shell而来
source 会强制执行脚本中的全部权限,忽略文件的权限
source 可以影响脚本的父shell权限,export只能影响子shell权限
其实上图的Bashell也可换用Cshell来写,里面的命令也有所不同
export换成setenv,其实类似
关于shell的话卡盟,我觉得最容易入手的脚本,也是我目前最常用的脚本语言
比如下图我用cshell,写的一个calibre lvs验证脚本
linux指令结合cshell语法,(foreach/if else/pushd popd sed awk )等,在工作中用处实在是太广了
接下来是perl语言
我觉得perl是真的强大如何设计脚本语言,有秒杀shell的感觉,唯一缺点就是语法太苦涩了,看完我表示太难了
现在,我只会写一些简单的perl脚本,下图举了一个例子
#! /usr/bin/perl
如果一直都需要警告(warning),可以在 #! 这一行加上-w,如: #! /usr/bin/perl –w
$line就是变量 ,STDIN是用户输入的内容 eq 就是 = 的意思
当输入内容是n时,那么结果输出:That was just a blank line!n
如果输入是123时,那么结果输出:That line of input was: 123
上图举了个简单的例子,perl的语法中有很多函数,调用子程序,特别有意思
比如用perl写一个tree的脚本
[crazy@crazy_one calibre]$ tree -L 2
.
├── a.csh
├── cds.lib -> ../cds.lib
├── celllist
perl用途:在IC设计中一些需要统计仿真结果,文本格式转换的地方非常适用,执行速度快,比如用perl来处理各种log,在模拟IC中统计LPE抽出信息&各种条件下的仿真结果等
关于tcl脚本
Tcl = Tool Command Language (tickle) ,接触mentor和synopsy的工具的人应该有所了解
tcl脚本中一些语法还是比较容易理解,在数字ic后端中分析时序,desin的信息等,非常推荐初学者学习
关于skill
Cadence提供二次开发的SKILL语言,它是一种基于通用人工智能语言—Lisp的交互 式高级编程语言 。SKILL可以与底层系统交互,也提供了访问Cadence各个工具的丰富接口。用户可以通过Skill语言来访问,并且可以开发自己的基于Cadence平台的工具。
下图是一个 Skill 程序的栗子,这个程序是用来把版图中不在格点上的图形,移到格点上
skill的话用途也很广泛如何设计脚本语言,在一些需要鼠标点击操作的地方,可以通过skill实现脚本自动化操作,提高效率,自动化,这个也是未来IC设计发展的趋势。
之前看过一篇关于将人工智能机器学习应用在IC设计中的文章,事实也不是没有可能,目前看来不成熟,没有大数据还是有点难以实现,涉及到专利的问题,核心技术非公开
关于makefile
Linux 的程序员应该很了解,主要是GNU make的用法、语法 ,使用Makefile的好处是能够使用一行命令来完成“自动化编译” ,make 是一个命令工具,它解释 Makefile 中的指令(应该说是规则),Makefile 中描述了工程中所有文件的编译顺序、规则。
makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、 功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能 操作,因为 makefile 就像一个 Shell 脚本一样,其中也可以执行操作系统的命令。
makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率
之前有用makefile写过仿真教程 ,北冥有鱼:VCS和Verdi联合仿真教程
其实很多脚本语言深入的用法,我也不是很清楚,时间和精力有限,个人建议掌握一种常用的脚本语言,在工作中的话,正好可以学以致用。
来源:【九爱网址导航www.fuzhukm.com】
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!