分享:从零到精通--处理器(CPU)的设计之路
虽然不是什么大神,但觉得自己的经历或许对新人有帮助吧!收到大学的录取通知后,我便准备着迎接大学生活,虽说那时还没进大学的门,但心中早已埋下种子--找到自己的兴趣 。
大一时,我们学习了C语言编程,便想着第一个寒假学学编程(当时只觉得不应该荒废掉那宝贵的假期),结果由于种种原因放弃了编程,觉得要深入学习的话,没那个耐心。大一期间受到舍友的影响也开始学习单片机(另一个原因就是好奇:处理器是如何识别代码然后执行程序的,这就是学习处理器设计的根本原因),断断续续买了两款开发板,一直闲到现在,因为往上走就是嵌入式了,还是搞编程之类的,心里有点抵触就没再继续。还有另一个原因:班上有一个同学从大一入学一直自学一些东西,最终在大一结束的那个暑假拿了省一等奖,他在单片机,设计电路方面比较了解了,就去请教了他,因为他那次做的是硬件,就推荐我学硬件了,说是学硬件一旦技术强了,很吃香的,结果我就信了。然后推荐我准备下一次电子设计大赛,我采纳了他的建议。然而若没采纳他的意见,我不知道会不会走到现在。
(14年的九月)重点来了,大家都知道参加电子设计大赛,数电模电是基础,而我先开始准备学习的就是数电,自己找图书馆的书学习(大二第一学期还没开数电课)。然而我找到的那本书就是《数字设计和计算机体系结构》:从晶体管讲到数字电路设计,再到硬件描述语言,然后是体系结构,再到微体系结构。它涵盖了很多领域的知识,他第一次为我揭开了处理器神秘的面纱。找到它之后就如同捡到珍宝一样,那段时间,每天都抽出课余时间自己学习,过的很像我期盼的生活:源自于内心的诉求去学习一门知识。然而学完那本书之后,突然感到空虚了——下一步该做什么呢?(此时电子设计大赛早已抛到九霄云外了)答案是:分析or1200源代码,从代码的角度去理解一块已经成熟的处理器整体框架结构。经过一段时间的分析,已经熟悉了内部关键部件及整体系统运转的原理,此时万恶的英语四级到来了,不得不放下手头的代码去备战英语了,况且期末考也来临了!(由于我粗鄙的认识,有一段时间常常觉得就算把or1200分析的很透彻,又有什么卵用呢?能干个什么呢?自我怀疑了好长一段时间)。
然而在那无聊透顶的复习期末季除了加深了学过的专业知识,又收获了一个惊喜,这当然得益于我对图书馆的钟爱——没事就去感兴趣的栏目前寻找一些有用的书籍。一天,复习得身心俱备,就去处理器设计栏目浏览书籍去了,惊喜来了,那就是《现代处理器设计-超标量处理器设计基础 》。它讲的内容比较贴近实际的处理器核心了(intel p6),当时没多想什么(自己设计超标量处理器,然而这就是现在就在做的),纯粹的兴趣使然,当时的第一感觉是:原来还有更高端的玩意啊!于是果断列入寒假计划之中,事实是寒假(50天)就只干了两件事:
1,考驾照;
2,学习那本书。
另一个惊喜接踵而来。15年2月2号下午,在网上之前注册了coursera一个账户一直没用,就登上去浏览了处理器之类的课程,结果我竟然找到了普林斯顿大学现代处理器设计的课程,主讲竟然是一个MIT的大神,点进去看了一下,他竟然还是一家处理器设计公司的联合创始人,自己设计了几款高性能处理器。第一节课,就拿着自己的处理器开发板在那鼓励学生敢于尝试,勇攀高峰,我的第一感觉是有处理器设计经验的人讲授这门课,那肯定是一流的啊,很认真的态度就在那时建立的,前面的20多节课,该听的都一字不落的全部要弄清楚,有时一段20分钟的视频可能要用我1个小时的时间,然而我愿意。大神讲课,你往往都觉得自己是有能力去做的好的。令我激动的是,老师推荐的了两本教材我都有,一本便是上面所说的《现代处理器设计-超标量处理器设计基础》,另一本是自己买的计算机体系结构:量化研究方法,5th。愉快的假期总是那么快,开学了,我继续走我的处理器设计之道(显然当时选的这条路很广,处理器设计包含很多流程,相应的知识层次也大都不同),经过满满的思考与学习的深入,发现自己喜欢将设计算法转化为数字逻辑和电路的这个过程。
于是凭着寒假的知识储备,我打算从画模块图开始将理论转化为实践,渐渐地将重要部件的电路画出来。然而当缺乏一个整体的规划时,这么复杂的一个系统,很难按计划实施下去。大二下学期(开设数电课程了)我便下意识地去请教数电老师了,当老师听了我的想法后便坚定地说道你一个电子工程的直接用现成的处理器就行了,干嘛要自己设计呢,intel公司每年花那么大人力财力去设计处理器,你觉得你有必要那么做吗?你根本不行的然后推荐我去学习单片机之类的比较实际的一些东西!我当时懵了,一个老师竟然可以这样嘲笑我的梦想 ,况且我并没说是要设计出多么先进的东西来,只是为了增加设计经验,了解更多的知识。然而老师还有事,就剩下我一人在怀疑人生。然而我仔细想了想,除了这个我暂时找不到能带给我如此多乐趣与感触的学科了,上大学不就是为了找到自己的兴趣,发现自己人生轨迹吗,既然当初报考的时候填报专业有点失策,难道要一次再错吗?不,我觉得我必须把这个做下去(傻瓜在此时才会放弃这么好的事)事实证明,我的坚持换来了回报,分为四件事。
1,遇到了志同道合的EDA实验室老师,老师愿意提供所取得FPGA开发板,两人可以讨论数字电路方面的问题。
2, 接着,我找到了一本重要的书《超标量处理器设计》,基于之前的基础,在不到半个月就掌握了书中的大部分知识及重要技术。
3,一个超标量处理器架构的模型来自北卡罗来纳州大学,虽然模型简单,没有RTL代码,只有系统顶层的及各模块的图和子模块的input ,output;但这一个成熟的架构对我来说足够了,它至少给我指明了努力的方向——利用I/O信号名称和超标量处理器的相关知识将该架构的子模块的内部工作原理及电路图画出来。
4,待上面的架构中的各模块和各模块之间的连接交互弄懂后,我向老师请教了一些遗留问题后,便决定开始用verilog语言将它进行建模;然后又幸运的无意中在eetop上找到了uiuc大学的超标量处理器RTL代码。
而此时正在分析这些珍贵的代码,之后打算将一些部件进行优化,或者将ALPHA 体系结构转化为熟悉的MIPS体系结构。期望着自己在学校立一个项目,让更多的处理器爱好者参与设计,并从中受益。
虽然还远远没有结束处理器设计,但我想总结一下。
1,我首先找到了一个学习的方向,这个方向是自己真心喜欢的,即使在自己烦躁的时候, 都能随时静下心学习的东西。
2,即使在最艰难,希望最渺茫的时候也不放弃(只要内心相信自己做得到,而且还愿意做,那就做吧)。