微处理器系统设计讲义文档格式.docx
- 文档编号:21227402
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:16
- 大小:417.52KB
微处理器系统设计讲义文档格式.docx
《微处理器系统设计讲义文档格式.docx》由会员分享,可在线阅读,更多相关《微处理器系统设计讲义文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
(4)指令寄存器和译码器;
(5)时序和控制部件。
从实现的途径看,RISC处理器与一般的CPU的不同之处在于:
它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。
所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和相应的组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做省去了读取微程序指令的时间。
RISC处理器结构介绍
一、处理器结构
RISC处理器内核结构
从图中可以看出,RISC处理器内核包括以下功能单元:
控制器、程序计数器、通用寄存器、算术逻辑单元(ALU)和总线接口单元(BIU)。
以下的内容将依次讨论这些模块。
二、处理器内部子模块
1、控制器
控制器用于进行指令译码、产生ALU运算控制信号、产生通用寄存器读写控制信号以及协调处理器工作时序工作。
2、程序计数器
程序计数器用于指向下一条将要执行的指令的地址,它可以自动增值或是通过分支指令来设置其内容。
3、寄存器堆
处理器内部有32个32位寄存器,ALU运算的源操作数、目的操作数大都来自这个寄存器堆。
4、算术逻辑单元
算术逻辑单元用于进行算术运算、移位操作、比较设置操作以及逻辑运算。
对于其他未能实现的运算,例如乘法、浮点运算等,可以使用软件来实现。
5、总线接口单元
总线接口单元用于SimpleRISC处理器与外部存储器和I/O口的连接,为了简单起见,SimpleRISC系统的存储器和I/O采用统一编址的方式进行组织,并且采用程序存储器和数据存储器分开的哈佛结构。
多周期CPU设计原理
在单周期CPU中,每条指令的运行周期都是相同的。
然而,不同的指令,其实际的运行时间各不相同,有的甚至相差很大。
单周期处理器时钟周期远远大于许多指令实际所需执行时间,例如,R-型指令和立即数运算指令都不需要读内存;
Store指令不需要写寄存器;
分支指令不需要访问内存和写寄存器;
Jump指令不需要ALU运算,不需要读内存,也不需要读写寄存器。
受时钟周期宽度的影响,单周期处理器的效率地下、性能极差,这样就造成了运行时间的浪费,降低了运行的速度。
为了解决这个问题,引入多时钟周期CPU的设计方式。
如下图所示,在多时钟周期CPU中,每条CPU指令并不是在一个时钟周期内运行,而是需要占用多个时钟周期,每一个执行步骤占用一个时钟周期。
不同的指令,占用的时钟周期的个数也不相同。
指令可以根据自身特点来决定使用几个时钟周期。
这样,既保证了指令的正确运行,又使得指令根据自身的特点来占用运行时间,避免了运行时间的浪费。
多周期处理器的基本思想为:
把每条指令的执行分为多个大致相等的阶段,每个阶段在一个时钟周期内完成;
各个阶段最多完成一次访存或一次寄存器读/写或一次ALU操作;
各个阶段的执行结果在下个时钟到来时保存到相应的存储单元或稳定的保持在组合电路中;
时钟周期的宽度以最复杂的阶段所花的时间为准,通常取一次存储器读或写的时间。
第一步自然是分析指令执行的状态。
在多周期处理器中,每条指令分多个阶段执行,每个阶段占一个时钟周期,称为一个状态。
指令在被取出、译码之前,每条指令的操作是一样的,指令译码之后不同的指令有不同的执行过程。
子模块设计
控制器模块方案设计
控制器需要根据不同的指令,产生不同的控制信号,以控制数据通路中的部件能同步工作,并且使得数据通路中相应的数据选择器作出正确的选择。
这里的控制器比较复杂,使用一个有限状态机来实现,下图给出了控制器的状态转移图。
控制器状态转移图
从图中可以看出,RISC处理器的控制器具有5个状态。
起始状态是取指状态Fetch,Fetch状态使得指令存储器的读控制信号有效,从而取到要执行的指令。
取到指令之后,要对其进行译码,所以进入了第二个指令译码状态Decode,Decode根据前一状态取到的指令进行译码操作,产生相应的数据选择器选择信号等控制信号。
指令译码之后,进入指令执行状态Execute,这一步大多数指令使用ALU进行运算,然后根据指令类型选择是进行存储器操作还是直接将运算结果写回寄存器堆。
对于存储器访问指令,执行状态之后计算出进行存储器访问的地址,之后进入存储器访问状态Memory进行相应的存储器操作。
对于其他不需要进行存储器访问的指令,直接进入寄存器回写状态Write,将计算结果写回寄存器。
接口定义
信号名称
方向
含义
op
IN
操作码
regdst
OUT
写寄存器地址
regwr
写寄存器控制信号
alusrc
立即数和寄存器数据读选择信号
extop
立即数扩展信号
memwr
存储器写信号
memtoreg
存储器写寄存器信号
寄存器堆模块设计
模块方案设计
MIPS指令格式中的寄存器号是5bits,指令可以访问25=32个32位的寄存器。
这样的一堆寄存器“堆在一起”构成一个寄存器堆。
每一个寄存器都是32位,寄存器用来存放指令执行所需的数据。
根据指令执行需要,该寄存器堆需要一个写数据端口和两个读数据端口,即同时要求有两个读地址和一个写地址。
每次当写信号有效和时钟上升沿来临时,会将要写入的数据写入到寄存器给定的地址中,寄存器读端口会在持续的读出寄存器中相应地址中的数据。
电路结构
接口定义及时序图
寄存器共有9个端口,具体见下表
序号
接口信号名称
说明
1.
clk
I
处理器工作时钟,频率为
2.
rst_n
复位信号,低有效
3.
raddr1
读寄存器堆时的第1个寄存器地址
4.
raddr2
读寄存器堆时的第2个寄存器地址
5.
waddr
写寄存器堆时的寄存器地址
6.
we
寄存器堆写使能
7.
wdata
待写入寄存器堆的数据
8.
rdata1
O
读寄存器堆时第1个寄存器的输出
9.
rdata2
读寄存器堆时第2个寄存器的输出
ALU模块方案设计
算术逻辑运算器(ALU)是数字计算机中执行加、减等算术运算,执行与、或等逻辑运算,以及执行比较、移位、传送等操作的功能部件,本模块实现32位的ALU。
本文描述MIPS单周期处理器的ALU模块的功能、接口、时序及其实现。
aluclt
运算类型
SUBctr
SIGctr
OPctr
OP含义
0000
Addu
00
加法器
0001
Add
1
0011
Or
01
与或器
0010
And
0100
Subu
0101
Sub
0110
Situ
11
置位器
0111
Sit
1000
Sll
10
移位器
1001
Srl
1100
sra
SUBctr=ALUctr[2](作为加减控制信号)
ANDctr=ALUctr[0](作为与或控制信号)
OVctr=~ALUctr[1]&
ALUctr[0](溢出控制信号)
SIGctr=ALUctr[0](置位控制信号)
Opctr[1]=Aluctr[2]&
ALUctr[1]|ALUctr[3]
OPctr[0]=ALUctr[1](输出选择信号)
接口定义及时序图
alu_da[31:
0]
ALU第一个输入数据端口,32位宽度
alu_db[31:
ALU第二个输入数据端口,32位宽度
alu_clt[3:
IN
ALU运算功能编码,12种指令需要4位编码
alu_shift[4:
ALU移位次数
alu_zero
运算结果全零标志
alu_overflow
有符号运算溢出标志
alu_dc[31:
ALU运算结果
算术逻辑单元控制模块
算数逻辑单元控制模块用来控制ALU的运算类型,当进行R型指令操作时,ALU的运算类型受控于指令中的func_seg字段,当进行I型指令时,ALU的运算类型受控于指令中的op_seg字段。
因此,要设计算术逻辑单元控制模块,需要根据不同的指令类型对func_seg和op_seg字段进行译码操作,从而实现指令对ALU运算类型的控制。
func_seg
R型指令操作类型
alu_ctr
alu运算类型
程序计数器
输入端口说明:
Clk,rst_n,bus2与上面的说明一致。
Inc_pc:
有效时,程序计数器自动加一,用于取出下条指令进行相应的动作。
Load_pc:
有效时,可以将bus2上的数据加载到程序计数器上
输出端口说明:
Pc_out:
用于输出相应的地址以便在存储器中取出指令。
总线接口单元
总线接口单元只是一些三态缓冲器,所以直接在RISC处理器的顶层设计中实现,而这里就不专门进行设计。
逻辑原理图:
多时钟周期CPU设计逻辑原理如下图1:
多时钟周期CPU设计逻辑原理图
第二步,就是进行CPU控制器的设计了。
由于多周期数据通路每个指令的执行有多个周期,每个周期的控制信号取之不同,所以,不能用简单的真值表描述的设计方式。
多周期控制器通常采用基于有限状态机和微程序描述两种方式实现。
在本设计中,采用有限状态机的描述方式实现。
其基本思想为:
用一个有限状态机描述指令执行过程,由当前状态和操作码确定下一状态,每来一个时钟发生一次状态改变,不同的状态输出不同的控制信号值。
有限状态机图已在图二中给出,通过第一步中对六类指令的分析,确定使用12个状态对指令的执行过程进行描述和控制。
R型指令
取指令状态
译码/取数状态
送数据运算状态
运算结果写回状态
I型指令
lw型指令
访存地址计算状态
存储器取数状态
结果写回寄存器状态
sw型指令
存储器写回状态
分支指令
分支结束状态
无条件跳转指令
跳转结束状态
多时钟周期CPU设计指令状态表
指令编码
1、加法
这里实现的是有符号数的加法,不考虑溢出。
(1)寄存器操作数相加
汇编语言表示形式:
addrt,rs1,rs2
操作说明:
rt=rs1+rs2
编码:
(2)寄存器操作数与立即数相加
addirt,rs,imm16
rt=rs+imm16,对imm16进行符号扩展
2、减法
这里实现的是有符号数的减法,不考虑溢出。
(1)寄存器操作数相减
subrt,rs1,rs2
rt=rs1-rs2
(2)寄存器操作数与立即数相减
subirt,rs,imm16
rt=rs–imm16,对imm16进行符号扩展
3、小于则置一
这里实现的是无符号数的比较。
(1)寄存器操作数比较
sltrt,rs1,rs2
rt=(rs1<
rs2)
(2)寄存器操作数与立即数比较
sltirt,rs,imm16
rt=(rs<
imm16),对imm16进行零扩展
4、左移
slrt,rs,imm5
rt=rs<
<
imm5
5、右移
rlrt,rs,imm5
rt=rs>
>
6、逻辑与
这里实现的是无符号数的逻辑与。
(1)寄存器操作数的逻辑与
andlrt,rs1,rs2
rt=rs1&
rs2
(2)寄存器操作数与立即数的逻辑与
andlirt,rs,imm16
rt=rs&
imm16,对imm16进行零扩展
7、逻辑或
这里实现的是无符号数的逻辑或。
(1)寄存器操作数的逻辑或
orlrt,rs1,rs2
rt=rs1|rs2
(2)寄存器操作数与立即数的逻辑或
orlirt,rs,imm16
rt=rs|imm16,对imm16进行零扩展
8、逻辑非
这里只实现了寄存器操作数的逻辑非。
notlrt,rs
rt=~rs
9、从存储器取数据
loadrt,rs,imm16
rt=memory[rs+imm16],对imm16进行符号扩展
10、存储数据到存储器
storers1,rs2,imm16
memory[rs2+imm16]=rs1,对imm16进行符号扩展
11、无条件分支
branchimm26
PC=PC+imm26,对imm26进行符号扩展
12、相等则分支
beqrs1,rs2,imm16
if(rs1==rs2)PC=PC+imm16;
elsePC=PC+1;
对imm16进行符号扩展
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微处理器 系统 设计 讲义