以下内容摘自《步步惊芯——软核处理器内部设计分析》一书
在上一篇博文中使用GNU工具链可以得到可执行文件,然后在模拟器中运行这个可执行文件,并记录指令执行的信息到文件中,通过分析这个文件可以判断程序是否是按照预期那样执行。但这只是一个软件的模拟过程,用于前期的验证,对于剖析OR1200内部结构的作用并不大。为了剖析OR1200内部结构,我们还需要借助硬件仿真工具ModelSim,本节设计了一个OR1200可以运行的最小系统,并通过ModelSim仿真,观察OR1200内部执行细节。
1、最小系统的创建
本节设计的最小系统只使用了OR1200的CPU、QMEM两个模块,没有使用MMU、Cache以及总线单元等其它模块,程序和数据都存储在QMEM中,CPU复位后从QMEM中读取指令,这样一个简单纯粹的系统使我们将注意力集中在CPU上,不用考虑其它模块的影响。最小系统的结构如图2.18所示。
图2.18 OR1200可以运行的最小系统结构
在第1章中已经介绍了下载地址,使用SVN从http://opencores.org/ocsvn/openrisc/openrisc这个地址CheckOut最新的代码。本书将以OR1200的rel3这个版本为例进行分析,所以进入/branches/or1200_rel3/rtl/verilog目录,可以找到所有的verilog设计文件。
1、新建工程mim_or1200
打开ModelSim,本书使用的是Windows环境下ASE(Altera Starter Edition)6.6d版。选择“File->New->Project”,出现如图2.19所示对话框。
图2.19 ModelSim新建Project
给新的工程起名为mim_or1200,选择存储路径,注意不要包含中文,将Default Library Name也改为min_or1200,点击OK,出现如图2.20所示界面。
图2.20 ModelSim新建或添加已有文件对话框
选择“Add Existing File”表示添加已存在的文件,在出现的对话框中点击“Browse”按钮将/branches/or1200_rel3/rtl/verilog目录下的所有文件都选中添加,同时选择下面的“Copy to project directory”,点击OK,这样OR1200所有的verilog文件都添加到工程min_or1200中了。
图2.21 ModelSim中为min_or1200工程添加文件对话框
2、新建测试平台(Test Bench)
新建一个Verilog文件添加到工程中,文件名为or1200_tb.v,这是一个简单的测试平台(Test Bench)文件,内容如下:
`timescale 1ns/100ps
module or1200_tb();
reg CLOCK_50;
reg rst;
initial begin
CLOCK_50 = 1'b0; //时钟20ns一个周期,所以时钟频率是50MHz
forever #10 CLOCK_50 = ~CLOCK_50;
end
initial begin
rst = 1'b1; //复位信号
#200 rst= 1'b0; //在200ns处复位结束
#1000 $stop; //仿真过程持续1000ns
end
or1200_top or1200_top_inst //因为是最小系统,所以除了时钟、复位信号外,其余全都为0
(
.clk_i(CLOCK_50),
.rst_i(rst),
.pic_ints_i(20'b0),
.clmod