单周期CPU设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息科学与工程学院
课程设计报告
课程名称:计算机组成原理与结构
题目:单周期CPU逻辑设计
年级/专业: XXXXXXXXXXXXXXX X
学生姓名:王侠侠、李怀民
学号: XXXXXXXXXXXXXXXXXXX
指导老师: XXXX
开始时间:2016年9月15日
结束时间:2016年11月15日
目录
摘要
一、设计目的与目标
1.1 设计目的
1.2 设计目标
二、课程设计器材
2.1 硬件平台
2.2 软件平台
三、CPU逻辑设计总体方案
3.1 指令模块
3.2 部件模块
四、模块详细设计
4.1 指令设计模块
4.2 部件设计模块
五、实验数据
5.1 初始数据
5.2 指令数据
六、结论和体会
七、参考文献
摘要
本CPU设计实验以Quartus II 9.0为软件设计平台,以Cyclone采III型号
EP3C16F484C6为FPGA实测板。此CPU设计采用模块化设计方案,首先设计指令格式模块,此模块决定CPU各个部件的接口数据容量及数量,再对CPU各个部件独立设计实现,主要涉及的部件有:寄存器组、控制器、存储器、PC计数器、数据选择器、ALU 单元以及扩展单元。分部件的设计通过软件平台模拟仿真各部件的功能,在确保各部件功能正确的情况下,将所有部件模块整合在一起实现16位指令的CPU功能。再按照指令格式设计的要求,设计出一套能完整运行的指令,加载到指令存储器中,最终通过在FPGA实测板上实现了加2减1的循环运算效果,若要实现其他效果,也可更改指令存储器或数据存储器的数据而不需要对内部部件进行更改元件。
关键词:CPU设计、16位指令格式、模块化设计、Quartus软件、CPU各部件
一、设计目的与目标
1.1设计目的
1)了解Quartus II软件的使用,学习软件环境下设计CPU的基本过程;
2)在Quartus II平台上完成各个单元的设计,加深对每个单元(控制器、寄存器、存储器等)工
作原理的理解;
3)对各个单元组合而成的CPU进行指令测试,配合使用模拟仿真,了解指令和数据在各个单元中的
传输过程及方向。
1.2设计目标
1)设计一个单周期CPU,能实现基本的指令功能,如ADD,SUB指令实现对操作数加减功能,LW,SW
指令实现从存储器取数和存数,J指令实现指令间的跳转。
2)采用模块化设计CPU,通过模拟仿真保证各模块的正确性,以保证最终CPU功能的正确性,能正
确地在FPGA板上完成指令设计的效果。
3)通过设计合理的16位指令,实现从存储器取初始数和存数,对初始数进行加减操作,通过修改
存储器初始数据,实现FPGA上LED显示无限加n减m的效果。
二、课程设计器材
2.1 硬件平台
本实验所需的硬件主要有:PC微型计算机和FPGA板--Cyclone III系列,型号EP3C16U484C6实验开发板以及USB连接线。
2.2 软件平台
1)操作系统:Win 7;
2)开发平台:Quartus II 9.0集成开发软件;
3)编程语言:VerilogHDL硬件描述语言。
三、 CPU逻辑设计总体方案
单周期CPU设计方案从宏观上把握主要分为器件模块和指令/数据模块这两大模块,器件模块是指令模块的载体,指令数据在器件上流动,指令数据的格式是器件模块的主宰。所以当设计CPU时,我们采用模块化设计,单独对着两模块进行设计,考虑到指令数据模块的格式决定指令器件模块接口的数据容量大小,所以应先完成指令数据模块的格式设计。
图1 CPU宏观设计方案
3.1指令模块
3.1.1指令格式简要设计
本CPU实验是针对16位指令数据设计的,所以应当合理划分指令数据区间段的指令相应的功能。从下图2可以看出,16位指令数据划分为5个区间段,指令的[15-12]位作为控制位传入控制器产生控制信号,指令[11-9]位作为地址1从寄存器取数输出数据到寄存器1号输出口,指令[8-6]位作为地址2从寄存器取数输出数据到寄存器2号输出口,指令[5-3]位与指令[8-6]位作为数据选择器选择地址输入寄存器写地址口,指令[5-0]位作为扩展单元输入,扩展数据成16位。另外指令[11-0]位作为扩展输入,扩展成16位数据作为PC计数器的选择器一端。
图2 指令格式简要设计图
3.2 器件单元模块
此模块的设计是CPU设计的核心部分,它主要涉及到CPU中多个器件的设计。我们依然采用模块设计方案,把总体设计拆分成多个相互独立的器件,再对每部分器件单独设计。在此模块中包括:寄
存器组、控制器、存储器、PC计数器、数据选择器、ALU单元这六大主要单元。如下图2所示,展示出六大单元的设计方案以及六大单元之间的联系。
图3 器件模块设计方案图
从上图我们可以看出各单元之间的联系:初始数据从数据存储器RAM中取出,通过两种数据传入方式:一种是不经过数据选择器,另一种是经过数据选择器,数据传入到寄存器组中作为寄存器数据。而后当传入的是地址数据时,就从寄存器取出,经过ALU运算单元,将数据传入寄存器组中保存或传入数据存储器中保存。在整个过程中,PC计数器自动加1作为地址去指令存储器ROM中取指令作为此轮执行的指令数据,而控制器在整个过程中依据指令数据的指令码产生相应的控制信号(操作码)控制器件的运作,从而完成整个CPU的执行功能。下面我们将对主要的单元进行简要概述。
3.1.1寄存器组
寄存器组是作为保存数据的器件,故应使用时钟触发的D触发器(DFFE),等待一个时钟到来将数据传出去。本实验设计为16位CPU,故每个寄存器应为16位,即每个寄存器是由16个D触发器扩展而成。考虑到指令从寄存器取数位数为3位,所以可以设置8个寄存器用于保存数据,如果是写地址的3位指令通过74138(3-8译码器)译码作为寄存器的有效EN使能端输出数据;如果是读地址的3位指令数据通过8位扩展数据选择器(LPM-MUX)选择数据输出。
3.1.2控制器
控制器是作为CPU控制信号产生的器件,通过产生控制信号,使其他器件有效或无效,因此控制器的设计显得尤为重要。控制器的设计主要如下:先必须自己设计好各功能指令的4位01码(指令的[15-12]),然后针对某个控制信号,找出使其为1的功能指令,对每个功能指令的0位上取非,然后4位相与,之后将所有为1的功能指令相或,结果作为此控制信号。对每个控制信号执行重复操作,控制器也就是这些信号的组合。
3.1.3存储器
存储器分为两种类型:一种是数据存储器RAM,另一种是地址存储器ROM。考虑到设计的方便,否则使用寄存器设计存储器也是可行的。
数据储存器
数据存储器为RAM型,表示可读可写,所以数据储存器有4个端口,当写信号有效时,应给出写的地址及数据,再加上时钟信号,这里的数据存储器采用软件封装好的RAM-1-PORT存储器。
指令存储器
指令存储器为ROM型,表示只读,所以地址存储器有2个端口,应给出读的地址信号以及时钟信号这里的数据存储器采用软件封装好的ROM-1-PORT存储器。
3.1.4PC计数器
PC计数器主要作为执行一条指令后,地址自动加1到指令存储器中取16位指令作为此轮操作。故PC计数器应能等待一个时钟后将加1后的数据送至指令存取器中,所以它应包括ALU累加器(一端为1)和寄存器(当一个时钟信号到来,将数据输出),书中还包括一个数据选择器,用于设置PC 的值,以至于不会无限增长,实现J指令。
3.1.5数据选择器
数据选择器主要是解决数据来源问题,通过控制信号使数据选择器选择的数据端口不同,此数据选择器可选用软件封装的2选1选择器。
3.1.6ALU单元
ALU单元主要用于将输入端的两个数做加减操作,通过控制信号01的变化产生运算,该ALU可以使用软件封装的加减ALU(LPM-ADD-SUB),当控制信号为1时作加法,为0时作减法。
3.1.7符号扩展单元
符号扩展单元主要用于将不够16位的指令数据扩展成16位,作为输入数据的一端参与数据选择