基于MIPS架构的处理器改革

文章来源:数学论文网 发布时间:

一、前言

处理器原理实验是计算机组成原理课程教学的一个重要环节。传统的实验主要采用集成芯片搭建的电路模拟计算机的工作原理,这种实验与课本知识的结合不是很密切,反而有些实验为了达到模拟的目的,设置了很多额外的电路,加深了学生对内容的理解难度,模拟处理器的实验已经不能适应现代实验教学的需求。随着EDA技术的发展,硬件描述语言Verilog或者VHDL在学生课程中逐渐普及,处理器实验变被动的验证性实验为主动的设计性实验,通过处理器的设计实验,一方面可以加深学生对课程内容的理解,另一方面可以增强学生的动手能力。本文结合笔者在教学中的一些经验就处理器实验方面的改革进行阐述。

二、基本内容

课堂内容的教学主要采用唐朔飞老师主编的《计算机组成原理》(第二版),作为一本经典的计算机教材在各个大学中被广泛采用。经典的计算机结构分为五个部分:存储器、控制器、输入输出系统和控制器。在授课计划中,存储器具体可分为主存储器、高速缓冲存储器和辅助存储器;控制单元的功能和设计主要包括时序系统以及采用组合逻辑和微程序设计控制单元的设计思想与实现措施。CPU的特性包括计算机的算术逻辑单元、指令系统、指令流水、处理器架构及中断系统。输入输出系统是计算机的重要组成部分,是沟通计算机与外部世界的桥梁,主要讲授各种各样的外部设备同主机的交换信息方式。MIPS处理器是一种精简指令集(RISC,Reduced Instruction Set Computer)架构的处理器,它是由斯坦福大学Hennessy教授研究团队发明。MIPS的意思是”无内部互锁流水级的微处理器”(Microprocessor without Interlocked Pipe Stages),其机制是尽量利用软件办法避免流水线中的数据相关问题,它和英特尔所采用的复杂指令系统计算结构(CISC,Complex Instruction Set Computer)相比,RISC具有设计简单、设计周期短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。实验中所采用的MIPS32架构基于一种固定长度的定期编码指令集,只有Load/Store访问数据存储器;它还带有32个32-bit的通用寄存器,让编译器能够通过保持对寄存器内数据的频繁存取进一步优化代码的生成性能。

三、课本内容与MIPS架构的映射

由于课本知识重点在通用的处理器架构上,与MIPS处理器架构的具体内容不是直接对应,本节将从二者的内容映射方面进行阐述,将MIPS中的架构与课堂知识相对应,使学生在做实验的过程中与所学知识有结合点。存储器主要从容量、类型、控制线和地址线方面进行授课,在MIPS设计中将考虑指令存储器(ROM)、数据存储器(RAM)、寄存器文件(regfile)这些存储器模块,从架构和功能方面进行对应。

IO模块是人机交互的重要单元,可将端口、接口的内容融合进去,同时IO端口的寻址方式、存储方式指令集中主要把指令的分类、指令集的基本构成,每条指令中各个位数的对应关系与MIPS指令集无缝衔接起来。指令集是处理器性能的一个重要指标,而且指令集的特点也决定处理器的硬件架构。整个实验体系从学生熟悉指令集和编写二进制代码开始,为了简化实验,实验采用32位指令集进行设计。

控制单元是整个计算机系统的中枢系统,整体架构有RISC架构和CSIC架构之分,MIPS作为一种经典的RISC处理类型,在实验过程中主要从RISC的架构进行设计。在学生熟悉指令集的基础上,对CPU的架构实现进行设计,将介绍顶层结构的连接方式以及各个重点模块的功能,使学生能从整体与各个模块对CPU架构有个清晰的认识,能将课本的知识映射到这个架构,使其理论与实践能够有机的结合起来。总线具有复杂的结构和控制逻辑,从CPU设计的角度来看具有较大的复杂度,在学生实验时具有较大的难度,放在后面的SoPC (System on Programmable Chip)实验课程中,通过AVALON总线设计补充总线的内容。高速cache的内容设计较为复杂,在基础实验中不做考虑。

四、实验内容

指令集编写测试:本实验主要是让学生熟悉指令集的特点,精选20条指令,学生参照实际的MIPS指令集手工写二进制代码,可帮助学生熟悉指令的构成与功能,为后面的架构设计打下基础。ALU设计:ALU是处理器的核心部件,主要进行算数逻辑运算,通过控制信号可选择不同的运算,如加、减、乘、除、移位等,可将课本繁杂的运算公式变为直观的认识。

存储器:存储器分为程序存储器、数据存储器和寄存器文件,学生应首先从存储器的物理特性,如只读、可读可写和双端口等进行分析,从地址线、数据线和控制线等信号进行研究,进而从功能特性分析其在整个处理器架构中的作用。

CPU设计:控制单元是这个处理器系统的中枢神经系统,控制整个系统的高效有序地运行。通过对输入的指令进行译码,产生不同的控制信号。该模块的重点在于如何设计指令的译码单元,重点在于对指令的操作码和地址码的理解和处理。

IO单元设计:CPU对IO的访问方式分为独立编址和统一编址,本实验主要把这两种编址方式进行,从控制信号、地址的分配与选择和数据输入输出控制方面进行。中断模块设计:中断模块是对外部中断和定时器中断进行设计,中断的发生设计现场保护、中断处理和恢复现场操作,对寄存器的保护、进出栈的数据等。

CPU整体设计:此实验重点是把前面的各个模块综合起来,即设计一个顶层模块。各个模块正确,但合起来必然会带来其他的问题,在学生实验中是看似简单,但也最容易出错的地方FPGA测试实验:在前面Modelsim仿真的基础上,进一步在FPGA验证,使其能够在FPGA上运行,将需要绑定IO引脚、添加外部晶振,采用PLL实现,使全局时钟更稳定,FPGA上的测试结果更能引起学生的实验兴趣。五、实验安排从课程设置的角度,教授的内容应该从简单到复杂,让学生有个逐步接收和消化的过程,使其更容易理解课程的重点,跟上课程的进度。在学生学习微型计算机这门课程之前已经学过Verilog语言,按照先设计独立模块,后设计控制模块,再设计顶层模块的顺序进行实验安排。

六、实验存在的问题

在两个年级学生的实验过程中,发现存在以下问题。

1.学生从基础的Verilog学习到本实验的设计需要一个过渡的阶段,在实验开始增加一些基本实验,一是熟悉EDA设计的基本流程,二是起到过渡引导的作用。

2. 由于讲授的内容和实验的内容虽本质是一样的,但从经典理论到具体实践环节上的不同使学生对实验内容的理解有一定的难度。在教学环节可适当穿插一些实验的内容。

七、结语

本文主要从课本知识与学生动手实践相结合的角度进行设计,以加深理解处理器结构为目的,实现了MIPS-CPU的部分指令集。通过Modelsim实现对处理器的功能仿真,通过Quartus II软件完成对设计的MIPS-CPU的编译,最终把设计的MIPS-CPU下载到FPGA中完成了对指令的板级验证,使学生对计算机的经典组成结构有了进一步的理解。实验改革是一个不断完善和发展的过程,在今后的实践过程中,继续扩展处理器的功能模块,使其更加完善。