32位cpu设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CPU
设
计
报
告
姓名:
学号:
学院:信息科学与工程学院指导老师:
2013-01-12
一、设计目的
(1)学习设计CPU的基本步骤和方法,提高应用集成电路的基本技能,培养和提高独立设计计算机的工作能力。
(2)熟悉32位CPU各模块的工作原理,熟悉流水线数据通路和控制单元的工作原理从而熟悉CPU的工作机理。
(3)熟练地使用Quartus软件,做一些中等难度的课题,增加自己的一些实践经验,熟练VHDL编程。
(4)强化自身的系统设计能力,了解系统设计中的一般步骤。了解VHDL仿真和综合工具的潜力。
二、实验方法
实验要完成的工作主要包括:指令系统的设计,FPGA-CPU的整体结构设计及其细化,逻辑设计的具体实现(VHDL语言编写),软件模拟,以及硬件调试。这几部分的工作之间是先行后续的关系,也就是只有前一个步骤完成了下一个步骤才可以开始进行,不存在并行完成的情况。实验主要流程如下图所示:
三、数据格式
数据字长是32位,采用32位二进制有符号补码表示。
四、寻址方式
RSCI的四种寻址模式分别是寄存器寻址,存器间接寻址,立即寻址,相对寻址。这些寻址模式都是由操作码而不是单独的模式字段指定的。因此,对于某种给定操作来说,它的寻址模式是固定的,不能变动。三操作数数据处理指令采用寄存器寻址模式。寄存器间接寻址仅仅用于load和store这两个唯一能够访问数据存储器的指令。采用两寄存器格式的指令使用一个立即数取代寄存器地址SB。相对寻址专门用于分支和跳转指令,其产生的地址只用于指令存储器。
五、数据通路结构
下图中的流水线数据通路是我们即将设计的数据通路的基础,我们只需要做一些改进。这些改进涉及寄存器文件、功能单元和总线结构。
数据通路中有32个32位寄存器。同样,读寄存器R0将得到常数0。如果试图写R0,则所写的数据会丢失。所有的数据输入输出都是32位。为了满足对32个寄存器寻址的要求,所有的地址输入都是5位的。R0中固定为0的值将R0的各个存储元件的输入设为开路,并使其输出全为常数0来实现。
数据通路的寄存器文件采用锁存器来实现,且在时钟上升沿之前就完成写入操作。我们采用特殊的时钟信号允许寄存器文件能够在时钟周期的前半拍写入,在后半拍读出。特别地,我们可以再时钟周期的后半拍读出在同一时钟周期的前半拍写入到寄存器文件中的数据,这就是写后读(read-after-write)寄存器文件,它既避免了处理阻塞时额外逻辑的复杂性,又能够降低寄存器文件的成本。
六、控制结构
多路复用器MUX C从三个不同的源地址中为PC选择下一个值,计算机根据更新后的PC值按顺序执行某段程序。分支目标地址BrA由分支指令的新PC 值加上经过符号扩展的目标偏移量得到,R[AA]的值用于寄存器跳转,这些值的选择由BS字段控制。如果BS0=0,那么BS1=0时选择更新后的PC的值,BS1=1时选择R[AA]。如果BS0=1且BS1=1,那么将无条件地选择BrA。如果BS0=1且
BS1=0,那么PS=0且Z=1时分支转移到BrA,PS=1且Z=0时也分支转移到BrA。这样就实现了两种分支指令BZ和BNZ。
为了使分支和跳转指令到达执行段时能获得新的PC值,我们增加了两个流水线寄存器PC-1和PC-2。控制单元的核心是指令寄存器,它是一个组合电路,能够将IR中的操作码转化为数据通路和控制单元所需的控制信号。下表,每条指令都列出了相应的助记符、寄存器传输表达式和操作码。
七、总体设计的说明
1、试探法的设计思想
至今还没有找到设计数据通路的恰当的数学方法,这是因为整个计算机系统的硬件组成是一个相当复杂的系统。因此设计时主要还是依据设计者的经验,按照指令系统的要求,以及参考现有机器数据通路,采用试探法完成的。试探法的主要步骤如下:
(1)首先对定义的指令系统中的各条指令进行分析,得出所需要的操作序列,已决定各部件的类型和数量。
(2)使用第一步所选用的部件,构成一个总体框图进行各部分之间的互相连接,即初步确定数据通路,使得由指令系统所泛函的数据通路均能实现,并尽可能降低成本。
(3)分析全部操作序列的框图,确定所需的控制点和控制信号。
(4)检查所设计的线路,尽可能地删去重复的部分,简化线路。
2、设计步骤
CPU本身是一个极其复杂的数字系统,设计整体由12个基本模块构成:分别是时钟发生器(clock)、算术逻辑单元(ALU)、通用寄存器(General Register)、状态控制单元(Control Unit)、寄存器(Register)、指令寄存器(Instuction Register)、程序计数器(Programm Counter)、RAM、ROM、移位寄存器(Shifter)、三态寄存器(Trireg)。
系统采用自顶向下的方法进行设计。顶层设计由微处理器和存储器通过一组双向数据总线连接,它们由一组地址总线和一些控制总线组成。处理器从外处理器中读取指令,并通过执行这些指令来运行程序。这些指令储存在指令寄存器中,并由控制单元译码,控制单元使得相应的信号相互作用,并使处理单元执行这些指令。
3、各模块设计
(1)顶层模块:顶层模块的功能是对CPU各部分通过例话语句进行连接,使所有模块形成一个整体系统,通过各模块协同作用实现CPU功能。
CLK:为输入时钟脉冲;
RESET:为复位键;
Start:遇到halt指令后,需要按一下此键让测试程序继续运行;
INSTIN[31..0]:从地址寄存器中输入数据;
MEMDATAIN[31..0]:从数据寄存器中输入数据;
wrData[31..0]:将数据写入数据寄存器;
wrEN:写使能端;
BUSD[31..0]:总线上的数据输出;