西 安 邮 电 大 学
(计算机学院)
FPGA 模 型 机 课 程 设 计 报 告
专业名称:
计算机科学与技术
班 级:
计科 1601
学生姓名:
李 媛
学号(8 位):
04161008
指导教师:
董 梁
设计起止时间:2019 年 6 月 24 日-2019 年 7 月 5 日
1
一、设计的目的和任务
1.设计的目的
主要围绕设计一个完整的模型计算机展开,包括设计模型机的基本架构、数据通路、
运算器、存储器、总线、通用寄存器、输入\输出端口等硬件部件,以及指令系统。指
令系统可以采用 MIPS 32 位处理器指令格式实现。要求实现基本的 Load-Store-ALU 类
型 20 条指令,在此基础上可以自行扩展需要实现的指令,包括乘除运算、条件转移、
异常与中断、原子操作等指令。
2.设计的任务
第一周周一:
FPGA 模型计算机整体方案设计,分组并根据所学《基于 VerilogHDL 的 FPGA
设计基础》和《计算机组成原理》课程的知识,认真研究题目要求,查阅有关资
料,熟悉 FPGA 开发板的结构,完成方案设计。
第一周周二:
模型计算机各功能电路设计。根据总体方案,自行运用 VerilogHDL 语言进
行运算器设计、存储器设计、输入\输出端口设计、总线接口设计等。即要求完
成 20 条 MIPS 整数指令,基本能够在 Modelsim 上进行功能仿真,运算、转移和
存储功能需测试正确。
第一周周三:
模型机指令系统设计。根据搭建的模型机数据通路图,选择扩展的指令格
式和指令功能。扩展指令系统的选择可以参照 MIPS 32 位处理器指令集,选择
MIPS12 条整数指令或 MIPS 与中断相关指令。要求能够画出指令格式和指令功能,
能够画出处理器内部实现结构图,包括时序信号和控制信号,可以采用单周期或
多级流水线方案。
2
第一周周四:
完成模型机指令系统实现。根据设计好的指令系统实现方案,在 Modelsim
上进行功能仿真。要求将所有设计的机器指令都仿真正确,包括:数据流通、时
序节拍、寄存器的读写,输入输出端口的访问、接口控制信号等。所有指令功能
测试正确。
第一周周五:
模型机整体的联调和使用 FPGA 开发板。根据前期设计工程中出现的问题进
行查漏补缺。在此基础上,可以将设计的机器指令编写简短程序,在 Modelsim
上进行功能仿真。指导教师对学生小组进行中期检查,主要观察指令运行结果,
包括数据寄存器打入是否正确,转移指令是否正确设置 PC,访存指令实现等。
第二周周一:
模型机下载 FPGA 实现。将在 Modelsim 里仿真验证通过的模型机程序,通过
ISE/Vivado 综合工具,下载到 FPGA 开发板上。要求能够正确的生成程序存储器
IP,引脚映射正确,复位和时钟信号正确。模型机程序下载到 FPGA 开发板上后,
能够通过简单的机器指令进行测试。
第二周周二:
模型机在 FPGA 上的功能测试。将模型机程序正确下载到 FPGA 开发板上后,
能够用机器指令编写简短的程序,测试模型机的功能。要求:用机器指令编写的
程序应在 Modelsim 上仿真通过,明确实验结果。将功能相同的机器指令程序在
FPGA 上进行测试,应该保证结果一致。该测试程序自行设计,需将所设计指令逐
一验证以确保正确。
第二周周三:
模型机在 FPGA 上简单的输入输出实现。使用 FPGA 开发板上的按键作为输入,
LED 和数码管作为输出。编写机器指令程序,按键控制实现流水灯和数码管的显
示等功能。该实现程序自行设计,还可以考虑串口通信、VGA 显示、键盘输入等
功能,测试程序越多,功能越强大为佳。
3
第二周周四:
模型机在 FPGA 上简单应用的实现。使用 FPGA 开发板,编写机器指令程序,
实现交通灯,秒表,速度控制,打乒乓球等简单的应用。该应用程序自行编写,
题材不限。可以进行显示器点亮测试、USB 通信测试等功能实现。
第二周周五:
FPGA 模型机设计结果答辩,向老师进行功能展示、设计方案讲解、设计步骤
讲解、实验结果正确性分析等。
二、系统方案设计
1. 所完成的指令系统
1.1 立即数操作指令
1.2 寄存器操作类指令
1.3 移位操作类指令
4
1.4 存储器操作类指令
1.5 跳转类指令
1.6 乘除类指令
5
1.7 中断类指令
2.数据通路设计
2.1 总体通路图
6
2.2 取指部件
2.2.1 设计思路
取指阶段取出指令存储器中的指令,同时,PC 值递增,准备取下一条指令,包
括 PC、IF/ID 两个模块。
7
2.2.2 遇到问题
如果在取指时发生异常,指令地址该如何保存,保存到寄存器 EPC 的值是 PC-4,
还是是 PC?区别是怎样的?
2.2.3 解决方法
此时可以引入延迟槽,引入之前,处理器执行转移指令的顺序是:
转移指令->转移目标地址的指令
引入延迟槽之后,处理器执行转移指令的顺序是:
转移指令->延迟槽指令->转移目标地址的指令
在中间插入了延迟槽指令,当延迟槽中的指令发生异常时,如果在寄存器 EP 存
槽指令的地址,那么从异常处理例程返回时,将回到延迟槽指令的地址处,可见没有
发生转移,这样就不是被打断之前的指令顺序,所以,为了恢复原来的指令顺序,在
这里将延迟槽之前的转移指令的地址保存到寄存器 EPC 中,也就是 PC-4。
2.3 译码部件
2.3.1 设计思路
IF/ID 模块的输出连接到 ID 模块,那么,我们的指令此时已经进入译码阶段,
在此阶段,将对取到的指令进行译码:给出要进行的运算类型,以及参与运算的操作
数。译码阶段包括 Regfle, ID 和 ID/EX 三个模块。
ID 模块的作用是对指令进行译码,得到最终运算的类型、子类型、源操作数 1、
源操作数 2、要写入的目的寄存器地址等信息,其中运算类型指的是逻辑运算、移位
运算、算术运算等,子类型指的是更加详细的运算类型,比如:当运算类型是逻辑运
算时,运算子类型可以是逻辑“或”运算、逻辑“与"运算、逻辑“异或"运算等。
8