潘伟涛 · 2022年05月07日

IC工程师的通用技能:文本处理

  • 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】,中文译名“程序员修炼之道——从小工到专家”。

09ad54cf385d2422090a5ffe7ddabf4a.jpg

值得借鉴

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工程师可能会遇到的一些实际问题。

  1. 检查不同用户目录下的大文件,如果超过2天没用就发邮件通知用户。比如常见的后仿真波形文件,core dump文件。
  2. 把netlist拆分成以多个文件,每个文件包含一个模块。在手动ECO的时候方便阅读。
  3. 去除verilog代码中的注释:包括/* .. */和//...
  4. 根据配置文件,去除verilog代码中的ifdef
  5. 根据veirlog设计模块自动生成testbench
  6. 生成通用模块的代码,比如滤波器,CRC,总线接口等
  7. 生成源文件列表filelist.f
  8. 给一个verilog模块重命名,并且修改代码中所有的实例化代码。
  9. 监测代码提交,自动运行sanity test,生成报告,邮件通知相关用户。 10. 自动生成寄存器相关代码与文档。
  10. 汇总各个corner下的时序分析报告。

以上抛砖引玉,欢迎大家一起交流。

作者:不忘出芯
原文链接:网络交换FPGA

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
19610
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息