单周期CPU设计汇编

合集下载

第5章单周期CPU及其Verilog HDL设计

第5章单周期CPU及其Verilog HDL设计
26 25 21 20 16 15 11 10 6 5 0
op 6 bits
rs 5 bits
rt 5 bits
rd 5 bits
sa 5 bits
funct 6 bits
I Format
31
(rs, rt: Register Numbers, imm: Immediate)
26 25 21 20 16 15 0
时钟上升沿(0到 1的变化) 一个周期
Clock
下降沿
指令1
指令2
指令3
指令4
在时钟上升沿保存指令的结果和下一条指令的地址
c
5.1 执行指令所需的硬件电路
• 指令的执行过程
取指令 执行指令
—读取指令
程序计数器的值作为地址从存储器中 取指令 形 成 下 一 条 指 令 地 址
—分析指令 —按指令规定内容执行指令 —检查有无中断请求
c
取指部件(Instruction Fetch Unit)
• 每条指令都有的公共操作
– 取指令: M[PC] – 更新PC:PC ← PC + 4
转移(Branch and Jump)时,PC内容再次被更新为 “转移目标地址 ” 下地址 逻辑
Next Address Logic Address Instruction Word
rs rt P C a do Inst mem
we rna
rnb qa wn Regfile d clk qb b ALU
rd
a
aluc z r
clock
c
Sll指令 (Shift Left Logical)
sll rd, rt, sa ; rd <-- rt << sa

电子科技大学CPU设计:《单周期CPU的设计与实现》-实验指导书

电子科技大学CPU设计:《单周期CPU的设计与实现》-实验指导书

电子科技大学计算机科学与工程学院单周期CPU的设计与实现实验指导书[计算机组成原理实验]张建2013-12-13目录前言 (1)1.1 实验内容 (2)1.2实验要求 (2)2. 实验环境 (3)2.1 硬件平台 (3)2.2 软件平台 (3)2.3 实验主要仪器设备连接框图 (4)3. 实验原理 (5)3.1 概述 (5)3.2 单周期CPU的总体电路 (5)3.3 MIPS指令格式 (6)3.4 数据路径设计 (7)3.4.1 下一条指令地址的选择 (7)3.4.2 ALU的输入端 (8)3.4.3寄存器堆的输入端 (8)4. 基本功能部件的设计与实现 (10)4.1 32位2选1选择器的设计与实现 (10)4.2 32位4选1选择器的设计与实现 (18)4.3 5位2选1选择器的设计与实现 (19)4.4 带有异步清零的32位D触发器的设计与实现 (19)4.5 移位器的设计 (20)4.6 32位加/减法器的设计与实现 (20)5.运算器(ALU)的设计与实现 (21)6.寄存器堆(Register File)的设计与实现 (24)7.控制器(Control Unit)的设计与实现 (27)8. CPU的封装 (30)9. 测试 (32)9.1 指令存储器及测试程序 (32)9.2 数据存储器及测试数据 (33)9.3 仿真测试 (33)9.4 下载到开发板验证 (35)附件: (39)BTN_Anti_Jitter模块 (39)Hex7seg_decode模块 (39)前言《计算机组成原理》是计算机科学专业的一门重要专业基础课。

在该课程中的理论学习中系统地阐述了计算机各组成部件的工作原理、逻辑实现和设计方法及将各部件连接成整机的方法,计算机硬件与底层软件的接口,培养了学生对计算机硬件系统的分析、开发与设计的基本技能能力。

本实验开设的目的是让学生通过设计一个单周期的CPU,加深对计算机各组成部件功能的理解和掌握,更好地理解计算机的基本工作原理,培养和锻炼学生掌握计算机硬件设计的基本方法和技能。

MIPS单周期CPU实验报告

MIPS单周期CPU实验报告

MIPS单周期CPU实验报告一、实验目的本实验旨在设计一个基于MIPS指令集架构的单周期CPU,具体包括CPU的指令集设计、流水线的划分与控制信号设计等。

通过本实验,可以深入理解计算机组成原理中的CPU设计原理,加深对计算机体系结构的理解。

二、实验原理MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集(RISC)架构的处理器设计,大大简化了指令系统的复杂性,有利于提高执行效率。

MIPS指令集由R、I、J三种格式的指令组成,主要包括算术逻辑运算指令、存储器访问指令、分支跳转指令等。

在单周期CPU设计中,每个指令的执行时间相同,每个时钟周期只执行一个指令。

单周期CPU的主要部件包括指令内存(IM)、数据存储器(DM)、寄存器文件(RF)、运算单元(ALU)、控制器等。

指令执行过程主要分为取指、译码、执行、访存、写回等阶段。

三、实验步骤1.设计CPU指令集:根据MIPS指令集的格式和功能,设计符合需求的指令集,包括算术逻辑运算指令、存储器访问指令、分支跳转指令等。

2.划分CPU流水线:将CPU的执行过程划分为取指、译码、执行、访存、写回等阶段,确定每个阶段的功能和控制信号。

3.设计控制器:根据CPU的流水线划分和指令集设计,设计控制器实现各个阶段的控制信号生成和时序控制。

4.集成测试:进行集成测试,验证CPU的指令执行功能和正确性,调试并优化设计。

5.性能评估:通过性能评估指标,如CPI(平均时钟周期数)、吞吐量等,评估CPU的性能优劣,进一步优化设计。

四、实验结果在实验中,成功设计了一个基于MIPS指令集架构的单周期CPU。

通过集成测试,验证了CPU的指令执行功能和正确性,实现了取指、译码、执行、访存、写回等阶段的正常工作。

同时,通过性能评估指标的测量,得到了CPU的性能参数,如CPI、吞吐量等。

通过性能评估,发现了CPU的性能瓶颈,并进行了相应的优化,提高了CPU的性能表现。

单周期cpu课程设计

单周期cpu课程设计

单周期cpu课程设计一、课程目标知识目标:1. 学生能理解单周期CPU的工作原理,掌握其内部结构及功能。

2. 学生能描述单周期CPU的指令执行过程,包括取指、译码、执行、访存、写回等阶段。

3. 学生能解释单周期CPU中时钟、指令和数据的关系,并分析其性能特点。

技能目标:1. 学生能运用所学知识,设计并实现一个简单的单周期CPU。

2. 学生能运用仿真软件对单周期CPU进行功能仿真,验证其正确性。

3. 学生能通过课程学习,培养自己的逻辑思维和问题解决能力。

情感态度价值观目标:1. 学生能对计算机硬件及CPU产生兴趣,激发学习热情。

2. 学生能认识到CPU在计算机系统中的核心地位,增强对计算机科学的尊重和热爱。

3. 学生能在团队协作中发挥积极作用,培养合作精神和沟通能力。

课程性质:本课程为计算机科学与技术专业核心课程,旨在让学生了解CPU的基本原理,掌握单周期CPU的设计方法。

学生特点:学生已经具备一定的数字逻辑电路基础,具有一定的编程能力和逻辑思维能力。

教学要求:结合学生特点,注重理论与实践相结合,引导学生通过课程学习,达到课程目标所规定的知识、技能和情感态度价值观要求。

在教学过程中,关注学生的个体差异,鼓励学生积极参与,培养其独立思考和解决问题的能力。

通过课程目标的分解,确保教学设计和评估的针对性和有效性。

二、教学内容1. 单周期CPU概述:介绍CPU的发展历程,单周期CPU的概念及其在计算机系统中的作用。

教材章节:第1章 计算机系统概述2. 单周期CPU内部结构:讲解CPU的内部组成部分,包括控制单元、算术逻辑单元(ALU)、寄存器组、程序计数器等。

教材章节:第2章 CPU内部结构3. 指令集与指令执行过程:分析指令集的设计,讲解单周期CPU指令执行过程中各阶段的任务和实现方法。

教材章节:第3章 指令集与指令执行4. 时序控制与性能分析:探讨时钟、指令和数据的关系,分析单周期CPU的性能特点。

教材章节:第4章 时序控制与性能分析5. 单周期CPU设计方法:介绍设计单周期CPU的步骤,包括电路设计、指令集设计、时序控制等。

Logisim完成MIPS单周期处理器开发实验报告

Logisim完成MIPS单周期处理器开发实验报告

Logisim完成MIPS单周期处理器开发实验报告Project3Logisim完成单周期处理器开发实验报告⼀.总体设计⼆.模块定义(1)IFU(2)GPR(3)ALU(4)EXT(5)DM(6)Controller四.控制器设计单周期真值表Func100000100010N/AOp000000000000001101100011000100001111add sub ori lw sw beq lui RegDst1100X X0 ALUSrc0011101 MemtoReg0001X X X RegWrite1111002 MemWrite0000100 nPC_sel0000010 ExtOp X X000X1ALUctr Add Subtract Or Add Add Subtract X五.测试要求16.测试程序lui$t0,0x0004#lui测试程序要实现:⽴即数0x0004加载⾄t0寄存器的⾼位lui$t1,0x0008#lui测试程序要实现:⽴即数0x0008加载⾄t1寄存器的⾼位ori$t3,$zero,0x00002000#ori测试程序要实现:zero寄存器中的内容与⽴即数0x00002000进⾏或运算,储存在t3寄存器中sw$t0,4($t3)#sw测试程序要实现:把t0寄存器中值(1Word),存储到t3的值再加上偏移量4,所指向的RAM中sw$t0,8($t3)#sw测试程序要实现:把t0寄存器中值(1Word),存储到t3的值再加上偏移量8,所指向的RAM中loop:add$t2,$t2,$t1#add测试程序要实现:t1寄存器中的值加上t2寄存器中的值后存到t2寄存器中lw$t4,4($t3)#lw测试程序要实现:把t3寄存器的值+4当作地址读取存储器中的值存⼊t4 lui$t5,0x0004#lui测试程序要实现:⽴即数0x0004加载⾄t5寄存器的⾼位sub$t7,$t6,$t5#sub测试程序要实现:t6寄存器中的值减去t5寄存器中的值后存到t7寄存器中add$t0,$t0,$t5#sub测试程序要实现:t0寄存器中的值减去t5寄存器中的值后存到t0寄存器中add$t6,$t6,$t0#add 测试程序要实现:t6寄存器中的值加上t0后存到t6寄存器中beq$t0,$t1,loop#beq测试程序要实现:判断t0的值和t1的值是否相等,相等转loopadd$t0,$t0,$t5#add测试程序要实现:t0寄存器中的值加上t5后存到t0寄存器中lui$v0,0x0001#lui测试程序要实现:⽴即数0x0001加载⾄v0寄存器的⾼位lui$v1,0x0002#lui测试程序要实现:⽴即数0x0002加载⾄v1寄存器的⾼位add$v0,$v0,$v1#add测试程序要实现:v0寄存器中的值加上v1后存到v0寄存器中add$v1,$v0,$v1#add测试程序要实现:v0寄存器中的值加上v1后存到v1寄存器中ori$a0,$v0,0xffff#ori测试程序要实现:v0寄存器中的内容与⽴即数0xffff进⾏或运算,储存在a0寄存器中sub$a1,$a0,0x0000ffff#sub测试程序要实现:a0寄存器中的值减去⽴即数0x0000ffff后存到a1寄存器中loop2:sub$a2,$v1,$v0#sub测试程序要实现:v1寄存器中的值减去v0中的值后存到a2寄存器中add$a1,$a2,$a1#add测试程序要实现:a2寄存器中的值加上a1后存到a1寄存器中beq$a1,$v1,loop2#beq测试程序要实现:判断a1的值和v1的值是否相等,相等转loop2机器码:3c0800043c090008340b2000ad680004014950208d6c00043c0d000401cd7822010d402001c870201109fff9010d40203c0200013c03000200431020004318203444ffff3c010*******ffff008128220062302200c52820 10a3fffdMARS模拟结果:Logism:GPR:DM:六、问答18.对于Figure5、Figure6中的与或阵列来说,1个3输⼊与门最终转化为2个2输⼊与门,1个4输⼊与门最终转化为3个2输⼊与门,依次类推。

(完整word版)32位单周期RISC处理器设计

(完整word版)32位单周期RISC处理器设计

第一章32 位单周期RISC处理器设计要设计一款处理器,首先要选择体系结构,本题选择的是RISC体系结构,因为它适合于流水线设计。

然后需要选择一个标准的指令集,本题选择的MIPS指令集并按照常规的五段流水的方式来实现流水线。

流水线的实现过程将在第二章介绍。

1.1目标处理器指令集与指令格式本题目标CPU以能实现部分MIPS指令为目标,具体指令如下表1:(slti)无条件跳跳转(jL)J转空操作空操作(nop)表1 目标CPU指令集1.2 从指令具体行为反推设计方案CPU要执行一条指令,不外乎需要完成以下几个过程:取指令,指令译码,将译码出的指令放到算术逻辑运算部件ALU上执行运算,根据ALU算得的访存地址进行访存和将访存的结果写回寄存器等。

当然,不同的指令类型(R、I、J)可能经过的过程稍有不同,即它们的数据通路有所不同,以下将具体介绍:1、R格式指令数据通路:1)从指令寄存器Instr MEM中取出指令,同时PC增值(即加1等待下个CLK到来);2.)寄存器单元rs1和rs2的内容从寄存器堆Reg File中读出;3.)ALU根据功能码Opcoder确定操作方式,对从寄存器堆读出的数据进行计算;4.)ALU运算结果被写入寄存器堆,由rd确定写入的寄存器堆存储单元地址。

图1 R指令数据通路2. I 指令(除lw、sw和分支指令)数据通路如图2:1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);2.)寄存器单元rs1的内容从寄存器堆Reg File中读出;3.)ALU将从寄存器堆rs1单元中读出的数据与符号扩展后的指令低16位值相加;4.)ALU的运算结果被写入寄存器堆,由rt确定写入的寄存器堆存储单元地址。

图2 I 指令(除lw、sw和分支指令)数据通路3、Lw指令数据通路如图3:1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);2.)寄存器单元rs1的内容从寄存器堆Reg File中读出;3.)ALU将从寄存器堆rs1单元中读出的数据与符号扩展后的指令低16位值相加;4.)将ALU的运算结果作为数据存贮器的地址读出相应单元的内容;5)把从数据存储单元取出的数据写入寄存器堆,由rt确定写入的寄存器存储单元地址。

mips单周期cpu课程设计

mips单周期cpu课程设计

mips单周期cpu课程设计一、课程目标知识目标:1. 掌握MIPS单周期CPU的基本结构和工作原理;2. 了解指令集、指令执行过程和指令周期;3. 学会分析并设计简单的MIPS指令;4. 理解CPU性能指标,如时钟频率、吞吐率等。

技能目标:1. 能够运用硬件描述语言(如Verilog)进行单周期CPU的设计与仿真;2. 能够独立编写简单的MIPS汇编程序,并在单周期CPU上运行;3. 能够分析单周期CPU的性能,并进行优化;4. 培养学生的团队合作能力和问题解决能力。

情感态度价值观目标:1. 培养学生对计算机组成原理和硬件设计的兴趣,激发学生的创新意识;2. 增强学生的工程素养,使其认识到工程实践在计算机科学领域的重要性;3. 培养学生严谨、细致、负责任的科学态度,提高学生的自主学习能力。

本课程针对高中年级学生,课程性质为实践性较强的硬件课程。

结合学生特点,课程目标注重理论与实践相结合,通过设计单周期CPU,使学生深入理解计算机硬件原理,提高实践能力。

在教学要求上,注重培养学生的团队合作精神,提高学生分析和解决问题的能力,为后续计算机组成原理及相关课程打下坚实基础。

通过本课程的学习,学生将能够独立完成单周期CPU的设计与仿真,具备一定的硬件编程能力。

二、教学内容1. 引言:介绍CPU在计算机系统中的作用,引出MIPS单周期CPU的概念及其重要性。

相关教材章节:第一章 计算机系统概述2. MIPS单周期CPU基本结构:讲解CPU的基本组成部分,包括寄存器组、控制单元、算术逻辑单元(ALU)、数据通路等。

相关教材章节:第二章 计算机组成原理3. 指令集与指令执行:分析MIPS指令集特点,讲解指令执行过程和指令周期。

相关教材章节:第三章 指令系统4. 硬件描述语言与单周期CPU设计:介绍Verilog硬件描述语言,通过实例讲解如何使用Verilog设计单周期CPU。

相关教材章节:第四章 硬件描述语言与数字电路设计5. 单周期CPU仿真与优化:指导学生进行单周期CPU的仿真,分析性能瓶颈,探讨优化方案。

单总线CPU设计(定长指令周期3级时序)

单总线CPU设计(定长指令周期3级时序)

单总线CPU设计(定长指令周期3级时序)1. 引言本文档将介绍一种基于单总线的CPU设计,采用定长指令周期和3级时序。

单总线CPU是一种较为简单且常见的计算机处理器设计,其内部结构相对简单,适合于一些资源受限的嵌入式系统或低功耗应用。

定长指令周期意味着每条指令的执行时间是固定的,而3级时序则指的是CPU的时序由三个阶段组成。

2. 设计概述2.1 总体结构单总线CPU设计采用冯·诺依曼结构,主要包含以下几个核心组件:•控制器(Controller):负责控制指令的执行流程和时序控制。

•运算器(ALU):负责执行算术、逻辑和位操作指令。

•寄存器组(Register File):用于暂存数据和地址等信息。

•存储器(Memory):包括指令存储器和数据存储器。

•输入/输出接口(I/O Interface):负责与外部设备进行通信。

2.2 指令格式单总线CPU设计采用定长指令格式,每条指令由固定长度的几个字段组成。

常见的指令格式包括操作码(Opcode)、目标寄存器(Destination Register)、源操作数1(Source Operand 1)和源操作数2(Source Operand 2)等。

例如,对于一条简单的加法指令,其指令格式如下:| Opcode (6 bits) | Destination Register (4 bi ts) | Source Operand 1 (4 bits) | Source Operand 2 (4 bits) |2.3 时序控制单总线CPU设计采用3级时序,将指令执行过程划分为三个阶段:取指(Fetch)、译码(Decode)和执行(Execute)。

每个阶段占据一个时钟周期,遵循时序控制的规则。

取指阶段:从指令存储器中读取指令,存放到指令寄存器中。

译码阶段:解析当前指令的操作码和操作数,并从寄存器组中读取相关数据。

执行阶段:根据操作码和操作数执行相应的操作,将结果存储到寄存器组中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

考虑到设计的方便,否则使用寄存器设计存储器也是可行的。

3.1.3.1数据储存器数据存储器为RAM型,表示可读可写,所以数据储存器有4个端口,当写信号有效时,应给出写的地址及数据,再加上时钟信号,这里的数据存储器采用软件封装好的RAM-1-PORT存储器。

3.1.3.2指令存储器指令存储器为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位,作为输入数据的一端参与数据选择器运算,这里我们仅考虑最简单的扩展方式:将不足16位的指令数据由高位向低位依次补0直至数据长度为16位。

四、模块详细设计4.1指令设计模块4.1.1 指令处理流程一般来说,CPU在处理指令时需要经过以下几个过程:(1)取指令(IF):根据程序计数器PC中的指令地址,从指令存储器中取出一条指令,同时PC根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PC。

(2)指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完成的操作,由指令的[15-12]位产生相应的操作控制信号,用于驱动执行状态中的各种操作。

(3)指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。

(4)存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。

(5)结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。

图4 单周期CPU指令处理过程4.1.2 指令格式详细设计本次CPU设计主要有5条功能指令,分别为ADD、SUB、LW、SW、J指令,对这5个功能指令的控制码分别设定为0101/0110/1001/0001/1010,现对5条指令各自的指令格式进行设计:寄存器的数相加,结果数据存放至rd3位对应的寄存器的位置,reserved作为保留位。

寄存器的数相减,结果数据存放至rd3位对应的寄存器的位置,reserved作为保留位。

成16位数据相加,结果作为数据存储器地址,取出地址对应的数据存放到rt3位对应的寄存器中。

成16位数据相加,结果作为数据存储器地址A,将rt3位对应的寄存器的数据取出来,存放到A地址对应的存储器单元中。

4.2 器件单元模块此模块的设计是CPU设计的核心部分,它是将众多模块整合在一起,在此模块中主要包括:寄存器组、控制器、存储器、PC计数器、数据选择器、ALU单元这六大单元。

如下图5所示,展示出模块间整合的总体效果,可以看出,每个模块的功能还是显而易见的,各模块间通过命名一致达到数据双向传输效果。

图5 CPU综合模块示意图4.2.1寄存器组由上面总体设计方案中指出,每个寄存器应该由16个D触发器构成,为了避免设计复杂,我们采用迭代的设计方法,即先由单个D触发器设计成包含2个D触发器模块,图6示出了由单个D触发器构成2个D触发器模块。

为了避免篇幅颇多,这仅展示由8个D触发器构成最终16个D触发器的示意图,如图7,以及最终16位D触发器综合模块效果,如图8。

图6 单个D触发器构成2个触发器图7 8个D触发器构成16个D触发器图8 16位D触发器综合模块寄存器组作为数据保存的器件,当读取寄存器中的数据时,涉及读地址端口以及对应的输出数据端口,故应该有两个读地址端口,两个写地址端口;当写入寄存器数据时,涉及写的信号、写的地址以及写的数据也应该准备好,故应有一个写地址端口,一个数据准备端口以及一个写信号,同时数据的传送需要在一个时钟信号到来的上升沿操作,故应有一个时钟信号CLK,所以总共端口共有8个。

相关文档
最新文档