有位学生朋友发了条微信私聊,说IC相关的知识点太多了,又是git,又是Linux,又是EDA软件,还没开始看Verilog就已经一头雾水了。
是的。
某种意义上说,IC前端设计工程师需要的技能是全面的,或者说是零散的。
除了这位朋友提到的一些基础知识准备,真的深入学习代码的时候,还会发现很多领域专业(domain-specific)知识。
比如要深入学习蜂鸟开源内核,就需要了解计算机体系结构,了解CPU基本设计思路,了解软件代码经过编译、链接、以及在CPU上执行的过程。这些知识点都是在Verilog之外的。(推荐一本非常厚的书:CSAPP)
如果要学习人工智能相关的硬件加速器设计,需要了解一些神经网络基础原理,一些通用框架的基本用法,比如Caffe或者TensorFlow,能够自己尝试着运行一两个开源的demo程序,然后还会涉及到乘法器、加法器、Cache、总线、以及软硬件结合的一些调度方案。
以上的每一个专有技术名词,都会需要投入时间和精力去搞懂,然后才会建立起对应的产品相关的技术框架,然后在具体芯片设计中进行平衡考虑,设计出满足应用需求的产品。
这个过程有点像计算机程序的堆栈处理过程。从主函数开始起,本来是要学习开源蜂鸟的内核代码设计,然后发现需要使用Git,就去学习一下,学会了再回来,然后发现需要搭建Linux和EDA环境,又去学习一下,学会了再回来,然后发现需要学习计算机体系结构的基础知识,再去学习,再回来…
每一次遇到新的知识点,要注意保护现场,记得最开始学到什么地方了,最终的目标在什么地方,当然,堆栈的深度要考虑清楚。
要深入地学习一门技术,东一榔头,西一棒槌是不行的,要有恒心,有方法。
[005] 统计一下rtl目录的代码行数。2 分钟
# 切换到rtl代码目录cd /SI-RISCV/e200_opensource/rtl/e203# 统计代码行数find . -name "*.v" | xargs wc -l
亲自试一下,看看一共有多少行代码需要阅读?
其中有一大半代码是在perips目录下的,那些是使用Chisel转换出来的代码,类似于netlist一样,所以行数很多。
去除perips目录,再去除代码中的注释,空行,还有端口声明,变量定义等,真正的逻辑相关代码有多少行呢?
# 排除 ./perips目录find . ! -path "./perips/*" -name *.v | xargs wc -l# 去除注释find . ! -path "./perips/*" -name *.v | xargs cat | grep -v // | wc -l
如果每天阅读100行代码,需要多少天能看完呢?