- Keep Knowledge in Plain Text
- Use the Power of Command Shells
- Use a Single Editor Well
- Always Use Source Code Control
- Learn a Text Manipulation Language
- Write Code That Writes Code
以上摘录自【The Pragmatic Programmer: From Journeyman to Master】,中文译名“程序员修炼之道——从小工到专家”。 值得借鉴。
1. IC工程师大部分时间是在跟文本打交道。
生产力环境是Linux:大量使用纯文本做配置文件,需要输入命令进行交互。
所有代码都是纯文本:比如设计源码使用Verilog,SystemVerilog,VHDL,C,CPP;比如脚本源码使用Perl,Python,Shell,Tcl。
所有EDA工具都支持文本接口。命令行交互,Tcl,约束文件,输出报告,运行状态信息。
2. 高效的文本处理是IC工程师的必备技能之一。
要用好一个编辑器。
- 比如Vim,Emacs二选一。
- 掌握基本操作:文件打开与保存,文本编辑,文本搜索,文本替换。
- 掌握正则表达式。
- 折腾各种插件与定制。
- 强制使用这个编辑器,强化肌肉记忆。
要用好基本Linux命令。
- 文本查看:cat,more,less,head,tail
- 检索处理:find,grep,awk,sed
- 命令管道:|,>,tee
要学会各种脚本语言。
- 至少一种shell:Bash,Tcsh,Zsh。
- 使用Perl或者Python,熟悉常用模块。
- 使用Tcl,结合各类EDA工具环境。
3. 文本处理技能有三个阶段。
初级阶段是拼手速。
熟练使用文本编辑器,熟练使用各种常用命令,能够快速增删改查。
中级阶段是拼脚本。
熟练各种正则处理,熟悉各种脚本编程,能够完成复杂控制流程。比如代码自动生成,设计实现流程脚本,报告自动汇总,用户提交自动回归测试。
高级阶段是拼脑洞。
如何用更少的代码完成更多的事?如何减少重复编写代码的次数?如何用更好的流程重用之前的代码?
4. 文本处理还要注意几个问题。
文本的编码格式。
- Windows和Linux中换行的问题。比如由于换行导致shell脚本无法执行。
- 非ASCII字符引入的编码问题。比如中文乱码问题。
文本的结构化。
- 可以使用以逗号(,)分隔符的csv文件。
- 可以使用XML,JSON,YML等强制标签/格式的文本。
- 可以使用doxygen,perldoc类似的方式自动生成代码文档。
- 可以使用Markdown,reStructuredText格式写技术文档。
文本的版本管理。
- 源码控制工具是文本的好伴侣。比如git,svn。
- 如有必要,可以使用校验码。比如md5 checksum。
- 如果可能,使用可执行的(executable)文本。比如shell脚本,makefile,可编译的源码。
文本的可视化。
- 使用代码可视化工具。比如编辑器的语法高亮插件,各类调试工具的可视化层次结构图。
- 输出网页、图片、pdf等格式。
- 尽可能使用在线发布,自动更新。
5. IC工程师可能会遇到的一些实际问题。
- 检查不同用户目录下的大文件,如果超过2天没用就发邮件通知用户。比如常见的后仿真波形文件,core dump文件。
- 把netlist拆分成以多个文件,每个文件包含一个模块。在手动ECO的时候方便阅读。
- 去除verilog代码中的注释:包括/* .. */和//...
- 根据配置文件,去除verilog代码中的ifdef
- 根据veirlog设计模块自动生成testbench
- 生成通用模块的代码,比如滤波器,CRC,总线接口等
- 生成源文件列表filelist.f
- 给一个verilog模块重命名,并且修改代码中所有的实例化代码。
- 监测代码提交,自动运行sanity test,生成报告,邮件通知相关用户。
- 自动生成寄存器相关代码与文档。
- 汇总各个corner下的时序分析报告。