引言
计算机体系结构的研究和学习中,理论是一方面,这方面有很多很优秀的教材,比如J&P的两本经典,国内也有很多关于体系结构的书籍可供参考。
此外,理论联系实际也是不可或缺的,但是关于实用CPU的具体实现的源码分析方面的书籍就寥寥无几了。这可能跟从事这方面的研发人员的数量有限有关。参与的人少,又加剧了参考资料的稀疏,形成了一个不好的循环。
这使我想起了linux kernel的研究。按理说,linux kernel要比一个简单的RISC CPU复杂的多,研究linux要比研究CPU困难的多,为什么有无数的人了解linux?我觉得,这跟很多linux的大牛写了好多优秀的书籍有很大关系,我们可以踩着巨人的肩膀,继续前进,形成了一个良性的循环。
最近要做一个project,需要对CPU的实现有深入的了解才行,找了好久,都没有找到比较理想的参考资料。求人不如求己,呵呵,所以就打算分析一款开源的CPU代码。
希望能将理论照进现实。一个人的力量是微弱的,在此也希望有兴趣的同仁参与进来。
1.1 直观感受
开源的CPU,我选择了opencores开发的or1200。
源码我已上传:
http://download.csdn.net/detail/rill_zhen/4761982
在开始旅途之前有一个整体的直观的感受是很重要的。为此,我用modelsim对顶层module进行了仿真:
1.2 探险地图
对一个复杂工程的分析,就像一次漫长而危险的探险,很容易迷路,也很容易掉入万丈深渊。所以在探险开始之前准备一张比较详细的地图是很重要的。
为此,我根据or200的56个verilog源码文件,绘制了所有模块的调用关系图,和所有叶子模块的实现图。
整张地图包含56页,我也已经上传,根据各个top模块的调用图,甚至根据书签,就可以清楚知道模块间的关系:
http://download.csdn.net/detail/rill_zhen/4773700
下面是其中一张的截图。
1.3 小结
以此,作为or1200分析的startup。
附:
另外,对于想研究和修改计算机体系结构的朋友,openrisc的simulator是很有必要的,此外还要有compiler的支持,所有这些都可从下面的网址获得:
http://opencores.org/or1k/Main_Page
1,最简单的,就是下一个虚拟机的镜像:
http://opencores.org/or1k/Ubuntu_VirtualBox-image_updates_and_information
2,也可以自己搭建工具链:
http://www.embecosm.com/download/ean2.html
另:
国内我们有一个qq群,可以参与讨论,相互学习与交流:
277505520