天啦撸,时间过得好快,2022年3月被录取,9月入学,在上海上课一年,23年7月底来北京,现在已经24年4月了。
再过2个月,研二就算结束了。
研一在上海的一年是很精彩快乐的,上科大的课程常常上的力不从心,都是英文书籍,英文PPT,英文Homework,英文lab,然后老师多数也是只会科研,不擅长讲的好懂。当时让我感觉最有收获的是【VLSI设计】,虽然老师讲的也不咋地,但是课程Lab会带你从写Verilog到用一下VCS、Verdi、Formality、ICC工具,让我对数字芯片设计的全流程有了一个比较全面的认知。
研一的反思
现在想想,那会时间过得很快,研一下来,收获其实不是很大。现在想想其实有几个原因:
-
本硕方向不匹配
我本科学的是计算机科学与技术,代表课程是面向对象编程、计算机组成原理、数据结构与算法、计算机网络、操作系统等
研究生的方向是通信芯片,其中通信的知识属于信息与通信工程一级学科,代表课程是通信原理、信号与系统、数字信号处理等 ,而芯片的知识属于电子科学与技术 ,代表课程是半导体物理、电路与逻辑设计、电磁场与电磁波、数字集成电路等
通信芯片从物理上属于电子科学,从架构上属于计算机体系架构,从功能上属于信息与通信工程,难学也就不奇怪了!
我认识的大部分计算机出身的同学,研究生一般做的是数据科学,即基于软件编程去做数据挖掘、人工智能等方面的工作,经过本科的编程训练,用用框架、调调参数,并不算很困难。
但是通信和芯片方面我的底子都很薄弱,本科时南邮计算机的学生也要学通信原理、信号与系统、数字电路与逻辑设计,但是一方面是当时学的不够用功,另一方面当时上课时实践非常少,对比哈工大的同学,本科学习数电时要用Verilog编程,而我们那时并不知道Verilog。工科还是很依赖实践来打通理论的。
-
自己没努力
研一下玩的比较多,感觉不是在上课就是在赶地铁到处玩。dnn的前向推理、反向传播,都是在去华师大地铁上想通的emm
-
导师指导的少
老师在北京,我研一在上海,加上老师默认给我一句话,我就能自动学会好多好多。这种情况下确实我没有这个能力。
研二的反思
23年7月底,从上海来到了北京。
刚到的两个月,把之前做的FFT和数字IC流程的工具好好整理了一遍,录了视频和100+页的PPT,算是有所收获。
大概到10月份,开始准备硕士开题,老板给的方向是做NoC,花了两三个月的时间去看经典的书籍,例如《On-Chip network》,经典的论文,例如《route packet,not wires》,反复思考自己的开题背景是否立得住。
12月开题答辩以后,周五下午我坐上了去杭州玩的高铁,上海那边的学术导师专门打电话过来指导我修改开题报告,当时车的网特别差,他打过来好几遍我也听不清,于是学导连发了好多条长语音教我怎么改,生怕我过不了的样子,真是非常感动了。还记得那天大雪,高铁延误了四五个小时,原计划7点多到杭州,结果快到11点半才到。以后还是别在这种天气出远门了emm
快寒假的时候,搞清楚了NoC Router大致要怎么设计,但是由于老板要求用Chisel开发,这对我来说非常吃力,因为本身Verilog还没玩明白,硬件基础差,Chisel各个版本之间的差异也非常大,一开始看的项目使用的Chisel2,完全被淘汰掉了,API使用方式和现行的完全不同。
过年回来后,整理了chisel3-chiseltest-scala的版本兼容信息,补充了sbt的相关规则,构建库的对应网址,整理了Chisel3和Chisel3.util常见API的文档,这才感觉入门。
到3月份,由于NoC的工作因为Chisel水平的原因在卡壳,所以去学习RISCV-MINI这个三级流水CPU来补充Chisel知识,老板借此机会让我以该项目为基础,掌握基础CPU设计,在基本读完该项目后,又买了日本人写的《CPU制作入门》一书,跟着手写了RISCV五级流水CPU,并将C程序进行编译、链接,在CPU上测试。
在自己做过简单的CPU以后才理解计算机组成原理和体系结构里面的一些概念到底在讲什么。比如分支预测。
指令是通过pc作为地址来取出的,如果pc改变了,那么下次取出的指令也就跟着变了。分支类型的指令能够改变pc的值,当CPU使用五级流水时,即取指-译码-执行-访存-写回,这五个操作是并行执行的。由于分支指令在执行阶段才能确定是否为真,为真则改变pc值,如果分支成功,此时对当前pc+4进行的取指和译码操作的工作就毫无意义,因为需要跳转到新pc指向的指令执行,流水需要被冲刷,加载新指令。
假设我们能够预测分支是否为真,就可以避免浪费时间去刷新流水。
感觉工科就是别怕失败,多动手,多做,然后在实践中验证理论,再改进理论,再去动手。如果遇到报错,就思考思考,解决掉,多遇到几次也就熟悉是什么问题了。
后面计划:
把五级流水CPU充分验证了,然后调研RocketChip,调研如何适配AXI协议,然后回到NoC上去,看一些论文,目前想到的切入点是
Constellation: An Open-Source SoC-Capable NoC Generator