



使用SVN从地址http://opencores.org/ocsvn/openrisc/openrisc可以得到最新的OR1200代码。本书以OR1200的Rel3这个版本为例进行分析,在Rel3版本中有一个浮点处理单元FPU,但这不是OR1200的一部分,是另外一个开源项目,所以本书不分析FPU。下载后进入branches/or1200_rel3/rtl/verilog这个目录,可以找到OR1200的所有Verilog源代码文件。其顶层文件是or1200_top.v,利用这个文件我们得出OR1200的各个模块的连接关系,如图1.6所示,其中各模块的说明如表1.4所示。这里将顶层模块称为OR1200_TOP。在本书的光盘中有一个详细的连接关系图,文件名为or1200_top.vsd,请使用VISIO打开。图1.6就是依据or1200_top.vsd绘制的简化版本,但在其中也明确地展现了OR1200中各个模块的连接关系,比如从图1.6中可以发现MMU与Cache之间要经过QMEM,还可以清晰地观察到OR1200采用的是Harvard结构。
图1.6 OR1200_TOP内部各模块连接关系
表1.4 OR1200_TOP内部各模块说明
续表
上述模块中的IMMU、DMMU、ICache、DCache、QMEM、SB、PIC、PM、DU和TT都是可选项,本书在第2章搭建的最小系统就只有CPU、QMEM,如图1.7所示,这样可以排除其他模块的影响,使得我们将注意力完全放在对CPU模块的分析上。
图1.7 OR1200可以运行的最小系统
CPU是OR1200中的核心模块,完成运算和控制的功能,其内部包括多种模块,图1.8展示了其内部的各种模块,但是没有画出各模块之间的连接关系,只因连接关系复杂,如果简单地将模块连接起来,会引起读者的误解。
图1.8 OR1200中CPU模块的内部功能模块
笔者参考CPU模块的顶层文件or1200_cpu.v详细地绘制了CPU模块内部各个功能模块之间的连接,存放在本书的光盘中,文件名为or1200_cpu.vsd,也是一个VISIO文件,在本书的阅读过程中,建议读者经常查阅光盘中的or1200_cpu.vsd与or1200_top.vsd两张图,这样做的优点有两个:一是本书在分析指令处理的过程中会经常提到某个信号输出到某个模块,如果不借助于这两张图,那么需要从代码中找模块连接关系、信号的走向,十分不便,有了这两张图,就可以迅速知道某个模块的输出信号流向了哪里;第二个原因是图形记忆是比较好的记忆方法,借助于图形我们可以更好地理解、记忆各个模块的作用。
从图1.8中我们可以发现CPU中的核心模块是CTRL,实际上通过后面对具体指令处理过程的分析可知所有的指令都需要在该模块中译码、分析,然后输出控制信号给其他模块进行计算,流水线也是在该模块中实现的。
CPU模块内部各功能模块的作用、涉及的主要Verilog文件如表1.5所示。
表1.5 CPU模块内部各功能模块说明