基于FPGA的微程序控制器设计
实验题目:基于 FPGA 的微程序控制器设计
1. 课程简要信息
SoC微体系结构设计,理论20学时 $^ +$ 实验 36学时,计算机科学与技术,大四
2. 实验内容与任务(限 500 字)
项目需要完成的任务(如需要观察的现象,分析某种现象的成因、需要解决的问题等);是否设计有不同层次的任务。
1)以CPU内部微程序控制器模块为对象,采用硬件描述语言设计一个基于 FPGA的 8位微程序控制器功能模块,能够提供数据传送类、算术逻辑运算、控制转移类等基本机器指令的微命令控制信号,完成指令执行所对应的时序仿真验证,并在FPGA开发板上验证所设计功能的正确性,实现微程序入口地址的输入以及微命令序列控制信号的输出显示。
2)微程序控制器的基本功能要求包括以下几种功能:
$\spadesuit$ 微指令格式:水平型
$\spadesuit$ 微指令编码方式:直接控制
$\spadesuit$ 数据传送类指令:立即数传送、寄存器传送、内存操作数传送
$\spadesuit$ 基本算术逻辑指令:带/不带进位加法、加 1、减 1、相与、相或、取非
$\spadesuit$ 控制转移类指令:无条件转移JMP、为零跳转JZ、进位跳转JC
3) 微程序控制器的扩展功能要求包括以下几种功能:
$\spadesuit$ 增加3种数据传送类指令(参考微机原理数据传送类指令)$\spadesuit$ 增加5种指令算术逻辑功能(参考74181芯片的算术逻辑运算操作)$\spadesuit$ 增加3种移位指令(参考微机原理移位操作指令)$\spadesuit$ 增加3种控制转移类指令(参考微机原理控制转移类指令)$\spadesuit$ 考虑资源消耗要求,或者考虑速度要求,改进微程序控制器的结构。
3. 实验过程及要求(限 300 字)
如对学生在实验过程中在需求分析、资料查询、自学预习、思考讨论、方法设计、进程规划、软件仿真、平台构建、器件选择、表格设计、现象观察、数据测试、问题分析、总结报告、验收答辩、演讲交流等各方面的要求。
1)学习掌握微程序控制器的基本原理及设计方法,分析掌握微程序执行过程,注意分析微命令控制信号的时序关系及微命令的互斥与相容关系;
2) 学习微程序控制器与处理器其他功能模块的信号关系;
3) 根据功能要求设计微程序控制器的基本功能结构,并采用硬件描述语言进行编程设计实现;
4) 通过EDA工具的时序仿真方法验证微程序控制器每个功能模块以及每条指令所对应的微程序的正确性。采用 FPGA验证微程序控制器的基本功能,设计输入及输出接口,通过拨动开关输入微程序入口地址,数码管显示每条微指令的微命令控制信号。注意开关需要进行消抖操作,数码管采用动态扫描方式显示。
5) 撰写设计总结报告,并通过分组讨论交流不同实现方案的特点。
4. 相关知识及背景(限 150 字)
项目涉及的知识方法、实践技能、应用背景、工程案例。
这是一个综合运用数字电路、计算机组成原理、硬件描述语言及 FPGA的典型案例,需要运用数字电路设计、微程序控制器原理与结构、硬件描述语言设计、FPGA设计应用、数据输入及显示、数码管动态扫描及控制信号时序等相关知识与技术方法。并涉及 EDA软件仿真验证、FPGA原型验证、微程序设计、控制时序及按键消抖等工程概念与方法。
5. 教学目标与目的(限 100 字)
如学习、运用知识、技术、方法;培养、提升能力、素质。
在较为完整的综合设计项目实现过程中引导学生了解计算机内部微程序控制器原理及结构,掌握硬件描述语言及 FPGA设计验证方法;引导学生根据需求设计功能结构,设计并验证功能要求,并通过测试与分析提高综合实践能力。
6. 教学设计与引导
如预习要求及检查;课堂知识讲解、方法引导、背景解释;实验中的方法指导,问题设置、思路引导等。研讨主题、观察节点、验收重点、质询问题的设计等。
本实验的过程是一个比较完整的综合实践工程,需要经历学习研究、需求分析,方案论证、结构设计、仿真验证、FPGA 验证、设计总结等过程。在实验教学中,应在以下几个方面加强对学生的引导:
1)学生需要提前学习微程序控制器基本结构,了解微程序控制器微指令与指令集之间的关系,了解不同微指令格式的差异。在不同微指令下控制信号的时序及执行的过程也有所不同。
2) 课程上讲述微程序控制器设计方法。不同的指令需要用到不同的控制信号,需要对每条指令进行分析以获取完整的控制信号及时序关系,注意微命令的互斥和相容关系。
3) 在功能模块设计实现时,注意控制信号的先后顺序以及模块间信号传递关系。对于同一功能要求,硬件描述语言设计时可以采用不同的描述方式及不同的逻辑语句实现。
4) 可以简略地介绍控制信号的时序分析方法,要求学生自学整理出不同机器指令所对应的微指令执行的控制信号时序关系。
5) 简略介绍功能仿真验证、FPGA 验证方法以及只读存储器 ROM 数据初始化方法,在逻辑功能设计完成后,要求学生对每条指令操作进行功能仿真验证。验证每条指令功能正确后,需要根据实验室所能够提供的条件,设计输入输出接口电路,进行 FPGA 验证。
6)验收重点关注微指令功能的完整性和正确性以及设计的创新性。在验收过程,可以提出如“为什么要采用这样的方案”、“在具体的微指令设计中如何考虑微命令的互斥与相容”、“这些控制信号的时序为什么这样安排”等问题来考查学生对知识的掌握程度。
7) 在实验完成后,可以组织学生以项目演讲、答辩、评讲的形式进行交流,了解不同实现方案及其特点,拓宽知识面。
在设计中,要注意设计的规范性;如模块接口的规范性及可扩展性;并且要注意按键消抖、时钟频率对结果显示的影响。
7. 实验原理及方案
实验的基本原理、完成实验任务的思路方法,可能采用的方法、技术、电路、器件。
1)微程序控制器结构
本实验所设计的微程序控制器包括微地址形成电路、微地址寄存器、控制存储器和微指令寄存器等功能模块。控制存储器内部存放数据传送类、算术逻辑运算、控制转移类等基本机器指令的微程序。通过输入机器指令的操作码经由微地址形成电路生成微程序入口地址,从控制存储器中读取出所对应的微程序,输出到微指令寄存器,将其微命令字段(40位)输出,形成微命令序列的控制信号。微地址字段(8 位)则反馈到微地址形成单元继续读取后续微指令。

图1 微程序控制器基本结构
2) 微命令序列
CPU 每条机器指令所需要的控制信号均由微程序控制器产生。微程序控制器将每条指令解析为由若干微指令组成的一段微程序,而每条微指令则由若干微命令(指令运行时所需的控制信号)组成。所需的控制信号实际上就是每条指令运行时所涉及的 CPU 内部的多个功能模块的控制信号,如程序计数器地址更新、ALU 运算操作控制、通用寄存器读写、数据存储器读写等控制信号。本实验需要用到CPU内部程序计数器 PC、程序存储器ROM、指令寄存器 IR、通用寄存器 RN、算术逻辑单元ALU、数据存储器 RAM、堆栈 SP、IO 接口 PIO 和微程序控制器等功能模块的 40 个控制信号,其中 1个为保留未使用信号。为了方便在控制存储器中存储使用,需要将控制信号做简单的排序,并将微地址存放在低8位,控制信号参考排序方案如表 1所示。
表1 微命令序列控制信号
| 信号所在位置 | 信号名称 | 信号说明 | 信号所在模块 |
| 0~7 | u0~u7 | 微程序地址 | 微程序控制器 |
| 8 | CMROM_CS | 微程序控制器选通信号 | 微程序控制器 |
| 9 | M_uA | 微地址产生选择信号 | 微程序控制器 |
| 10 | nROM_EN | 程序存储器输出使能信号 | 程序存储器 ROM |
| 11 | ROM_CS | 程序存储器选通信号 | 程序存储器 ROM |
| 12 | X | 保留未用信号 | |
| 13 | nP_0EN | IO 模块输出使能信号 | I0接口模块 |
| 14 | nP_IEN | IO 模块输入使能信号 | I0接口模块 |
| 15 | P_CS | IO 模块选通信号 | I0 接口模块 |
| 16 | nSP_EN | 堆栈使能信号 | 堆栈 SP |
| 17 | SP_CS | 堆栈选择信号 | 堆栈 SP |
| 18 | SP_DN | 堆栈指针减1 | 堆栈 SP |
| 19 | SP_UP | 堆栈指针加1 | 堆栈 SP |
| 20 | nPCL | PC 地址低8位输出到数据总线 | 程序计数器PC |
| 21 | nPCH | PC 地址高4位输出到数据总线 | 程序计数器 PC |
| 22 | nLD_PC | 新地址更新信号 | 程序计数器 PC |
| 23 | PC_CS | 程序计数器选通信号 | 程序计数器PC |
| 24 | nAREN | 指令存储器 RAM地址控制信号 | 指令寄存器IR |
| 25~27 | LDIR3~ LDIR1 | IR 指令存储控制信号 | 指令寄存器IR |
| 28 | nRi_EN | 寄存器使能信号 | 通用寄存器RN |
| 29 | WRRi | 寄存器写信号 | 通用寄存器RN |
| 30 | RDRi | 寄存器读信号 | 通用寄存器 RN |
| 31 | Rn_CS | 通用寄存器选通信号 | 通用寄存器 RN |
| 32 | nRAM_EN | 数据存储器输出使能信号 | 数据存储器RAM |
| 33 | Wr_nRD | 数据存储器读写信号 | 数据存储器RAM |
| 34 | RAM_CS | 数据存储器选通信号 | 数据存储器RAM |
| 35 | C0 | 低位进位输入信号 | 算术逻辑单元 ALU |
| 36 | nPSW_EN | 程序状态字总线输出使能 | 算术逻辑单元 ALU |
| 37 | nALU_EN | ALU 结果输出使能 | 算术逻辑单元 ALU |
| 38~39 | F0~F1 | 移位操作信号 | 算术逻辑单元ALU |
| 40~43 | S0~S3 | 算术逻辑运算操作信号 | 算术逻辑单元ALU |
| 44 | S4 | 运算类型选择信号 | 算术逻辑单元ALU |
| 45 | M_F | 移位控制信号 | 算术逻辑单元ALU |
| 46 | M_B | 暂存器B控制信号 | 算术逻辑单元ALU |
| 47 | M_A | 暂存器A控制信号 | 算术逻辑单元ALU |
为了提高微指令执行效率,在每条微指令执行过程中,尽可能地设计多组互不影响的微命令并行执行,控制数据通路中多个功能模块同时工作。首先需要对机器指令的整个微程序执行过程进行分析,明确每条微指令中互斥和相容的微命令。互斥微命令是指不能同时或不能在同一个节拍内并行执行的微命令,而相容是指能够同时或在同一个节拍内并行执行的微命令。在设计过程中将互斥的微命令组合在同一字段中,采用编码方式存取。而对于相容的微命令,在放置于不同的字段中,隔断独立译码。
3) 实现方案
首先,可供选择的数据输入方式包括轻触按键(四脚按键)和拨动开关,输入的数据格式可以采用二进制或者十进制方式输入。机器指令操作码的输入主要采用拨动开关实现信息输入。输入信号需要进行按键消抖操作,以实现信号的正确输入。
其次,经过微地址处理模块得到机器指令所对应的微程序入口地址,从控制存储器中获得微指令。可选择水平型和垂直型两种微指令格式,图 2 为水平型微指令格式的实现方法,垂直型微指令格式实现方法请参考计算机组成原理教材。微命令控制信号可以选择选择直接控制、字段直接编译和字段间接编译 3 种微指令编码格式。直接控制方式可以直接输出控制命令,而其他两种编码方式需要经过译码电路才能发出控制信号。
此外,在后续微地址产生过程中可以选择断定(直接给出绝对地址)、增量和多路选择等方式产生后续地址。增量方式通过现行微地址加上一个增量来产生后续微地址,由微程序计数器来实现。多路选择方式需要增加判断标志和状态条件来实现多路分支转移功能。
在微程序控制器设计过程中,需要注意每条机器指令的控制信号各不相同,在分析和设计时考虑微命令的互斥和相容关系。
在数据显示方式上,可采用数码管、字符型 LCD 或点阵 LCD 等形式。输出数据格式可以采用二进制、十进制或者十六进制。

图2 微程序控制器实现方法多样性
4) 验证系统结构
采用硬件描述语言设计微程序控制器功能模块,经仿真验证后下载到FPGA 开发板进行板级验证。在基于FPGA开发板基础上进行输入和输出接口电路设计。输入接口可采用拨动开关、矩阵键盘或并行接口键盘,实现机器指令操作码的输入。输出接口可采用并行或串行数码管、并行/串行字符型LCD或点阵LCD,实现微命令序列控制信号的显示。

图 3 实验验证系统结构
8. 教学实施进程
简要介绍实验实施进程的各个环节(如任务安排、预习自学、现场教学、分组研讨、现场操作、结果验收、总结演讲、报告批改等)中,教学设计的思路、目的,教师、学生各自需要完成的工作任务,需要关注的重点与细节。
在实验教学实施过程中,以项目开发方式进行部署,使学生参与到任务需求分析、方案设计、仿真验、实物系统设计制作及测试验证整个设计开发过程,掌握项目开发的基本方法和软硬件协同综合调试测试方法,学会如何分析问题和解决问题,切实提高学生的实践动手能力。
1)任务安排:以分组形式进行任务安排,2~3人一组。每组有1~2 项任务要求不相同,避免相互抄袭。
2) 预习自学:学生需要预先学习微程序控制器的基本结构及工作原理,重点要掌握 EDA 工具的使用和FPGA的基本应用开发。
3) 现场教学:教师需要讲述微程序控制器的原理及设计方法、微指令工作时序分析,功能仿真验证、FPGA验证方法及只读存储器 ROM数据初始化方法,重点分析微命令的互斥和相容。
4) 分组研讨:以小组形式进行学习交流、方案分析、问题讨论及设计探讨等交流活动,交流
形式可以多样化,如报告形式、现场讨论或者网络讨论,以培养学生团队合作精神和语言组织及表达能力。
5)结果验收:学生必须完成所题目所要求的基本功能,并现场解说所设计的方案及结果分析。教师可根据学生的情况进行提问,以了解学生对知识的掌握程度以及动手能力,并对所完成实验的各项功能进行打分验收,重点关注功能的完整性和正确性,以及创新点。
6)总结汇报:组织学生进行结题汇报。每组学生对自己工作进行整理总结,展示各自实现方案、功能实现及系统验证等方面内容。不同小组的交流可以了解不同方案的特点,拓宽知识面。教师对汇报进行点评及提问。整个环节主要培养学生文档整理、语言组织、交流表达等方面的能力。
7)报告批改:教师在报告批改过程中主要关注学生语言组织的流畅性,内容完整性、结果分析的正确性以及方案设计的创新性。
9. 实验报告要求
需要学生在实验报告中反映的工作(如:实验需求分析、实现方案论证、理论推导计算、设计仿真分析、电路参数选择、实验过程设计、数据测量记录、数据处理分析、实验结果总结等等)
实验报告需要反映以下工作:
1) 实验需求分析
2) 实现方案设计
3) 微指令分析与设计
4) 功能仿真验证
5) 信号时序分析
6) FPGA 验证
7) 实验结果分析与总结
10.考核要求与方法(限 300 字)
考核的节点、时间、标准及考核方法。
1)实物验收:基本功能的完成程度(如数据传送、算术逻辑、控制转移类指令的条数、每条机器指令的微程序设计),完成时间。
2) 实验质量:微程序设计的正确性,微命令序列控制时序关系正确性。
3) 扩展功能考核:扩展部分的完成程度及正确性。
4) 自主创新:功能构思、逻辑设计的创新性,自主思考与独立实践能力。
5) 实验报告:实验报告的规范性与完整性。
6) 考核标准:微程序控制器实验共 100分,其中基本功能实现(50分),实验报告(20分),可扩展性(20分),创新性(10分)。
11.项目特色或创新(可空缺,限 150 字)
项目的特色是:知识应用的综合性,实现方法的多样性。项目的创新点在于:以硬件描述语言设计微程序控制器的方法,实现了计算机专业多门硬件课程的有机结合。虚实结合的验证方法提高了学生对计算机体系结构的认知能力和关键原理的掌握程度。在实验教学中,引导学生进行创新性设计,增强了学生综合运用基础知识的实践能力。
实验案例信息表
| 英验果例信芯衣 | ||||||
| 案例提供单位 | 西安电子科技大学 | 相关专业 | 计算机科学与技术 | |||
| 设计者姓名 | 张剑贤 | 电子邮箱 | jianxianzhang@mail. xidian. edu. cn | |||
| 移动电话 | 13572283774 | 通讯地址(含邮编) | 西安电子科技大学计算机学院 161#信箱,710071 | |||
| 设计者姓名 | 周端 | 电子邮箱 | dzhou@xidian.edu.cn | |||
| 移动电话 | 13909215830 | 通讯地址(含邮编) | 西安电子科技大学计算机学院 161#信箱,710071 | |||
| 设计者姓名 | 周佳社 | 电子邮箱 | jshzhou@mai l. xidian. edu. cn | |||
| 移动电话 | 13891822299 | 通讯地址(含邮编) | 西安电子科技大学电工电子教学基地,710071 | |||
| 相关课程名称 | SoC 微体系结构设计 | 学生年级 | 学时(课大四内+课外) | 课内(理论20+实验36)+课外32 | ||
| 支撑条件 | 仪器设备 | Xilinx Spartan-3E FPGA 核心板 | ||||
| 软件工具 | XilinxISE集成开发环境 | |||||
| 主要器件 | 学生自设计按键/开关、数码管/LCD接口电路 | |||||