综合实验:8位CPU设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PC、IR、时序发生器(即TIMER)、控制单元
AR
在分析这些模块时,先分析它的功能,然后分析输 入输出信号,最后分析其实现逻辑 在完成这些分析后,结合数据通路,分析各条指令 的执行流程,以加深对CPU原理的理解
运算器ALU
◦ 功能:对两个16位的输入及低位进位输入cin,根据运算 功能进行运算,产生相应的结果,并更改标志位
◦ 其它控制信号按缺省值设置即可
如控制标志位的SST,令保持原来标志即可,此时SST=11 控制寄存器写的REG_EN,不用写,保持REG_EN=0 控制内存写的/wr,不用写,令/wr=1
综合上述控制信号值,可得:
指令 编码
节拍
Sci SST I7I6 01 11 10
I5I4I3
◦ 因此,此时的控制信号集合为:
001
节拍
指令 编码
Sci SST I7I6 00 11 00
I5I4I3
000
I2I1I0
000
/WR REC
1
10
注释
IR<-Mem
第3拍:执行加法运算
◦ 节拍:011 ◦ 动作: R0<-R0+R1 ◦ 控制信号:
ALU运算的数据源自于寄存器,因此ALU_IN_SEL=000 执行加法运算,因此ALU_FUNC_SEL=000 初始进位Cin必须为0,因此SCI=00 完成运算后,结果会影响标志位,因此SST=00 运算结果要保存到寄存器中,因此REG_EN=1 其它控制信号按缺省值设置,即/wr=1和REC=00
指令 编码 Sci SST 01 00 00 00 00 11 11 00 00 00 I7I6 10 00 01 01 01
I5I4I3 I2I1I0 /WR
节 拍
REC 01 10 00 00 00
000 001 011 ADD
00000000
SUB 00000001 AND 00000010
100 000 000 000 000
◦ 操作控制(一条指令有若干操作信号实现) ◦ 时间控制(指令各个操作实施时间的定时) ◦ 数据加工(算术运算和逻辑运算)
4
C1
数存
cache
数据
70 100 66 77 … 40
指存
地址
101 102 103 104 105 106 107
cache
OP码
MOV LAD ADD STO JMP AND
ALU_func 000 001 010 011 100 101 110 进位输出c 若x”FFFF”-Bcin>A成立, c=1;否则c=0 溢出v 符号位s 若A、B的最高位 为1(或0),但 alu_out最高位为0 (1),则v=1; 若A<B成立, 若alu_out 若 否则 v=0 c=1;否则c=0 alu_out=x”000 的最高位 0”成立,z=1; 无溢出,v=0 为1,则s=1; 否则为0 否则s=0 无进位 c为最高位 c为最低位 结果为零z
000 000 000 001 010
1 1 1 1 1
注释 AR<-PC,PC<PC+1 IR<-MEM
DR<-DR+SR DR<-DR-SR
DR<-DR and SR
举例说明如何控制,以ADD R0,R1为例 第1拍:提供指令地址
◦ 对应节拍000 ◦ 动作:PC->AR, PC+1->PC ◦ 控制信号:
即控制信号共有10个:
◦ ◦ ◦ ◦ ◦ ◦ ALU_IN_SEL、 AluFunc SCI、SST SR、DR、Reg_EN REC /wr PC_EN
表中的I7对应pc_en,I6对应reg_en,I5I4I3对应alu_in_sel, I2I1I0对应alu_func_sel,SR和DR由指令给出
FLAG ALU输出 AIsel <控制AR,IR接收 > BusSel <选择总线数据来源>
AR(地址寄存器)
IR( 指令寄存器) 符号扩展
Bus
寄存器数据<调试用>
MUX
地址总线
wrMem <内存读写>
数据总线
/WR
(来自数据总线)
MEM_DATA (15...0)
送往地址总线
ADR (15...0)
送往数 据总线
内存
CLK
TIMER
IR(15)
IR (R63)
REC(1...0)
AR (R17)
ALU_OUT (15...0)
PC (R62)
ALU_OUT (15...0)
EN
INSTRUCTION (15...0)
TIMER(2...0)
控制器
ALU_FUNC (2...0) STT(1...0) SCI (1...0)
◦ 因此,控制信号集合为:
011
节拍
指令 编码
Sci SST I7I6 00 00 01
I5I4I3
000
I2I1I0
000
/WR REC
1
00Leabharlann Baidu
注释
DR<-SR+DR
寄存器组、ALU输入复用模块、ALU运算器、标志寄存器
运算器部分包括了如下的模块: 控制部分包含了如下的模块: 内存部分
运算器
C
注:图中所有寄存器都与时钟信号相连,并当RESET信号到来时清零。
S FLAG_S
FLAG_REG
V FLAG_V
Z FLAG_Z
FLAG_C
与ALU运算有关的:
◦ ◦ ◦ ◦ ALU输入来源控制ALU_IN_SEL ALU运算类型控制AluFunc 对初始进位信号的控制SCI 对标志位C、Z、V、S的设置控制SST
SELECT DESTINATION REGISTER
CIN ALU_OUT (15...0)
SELECT SOURCE REGISTER
REGISTER GROUP
ALU
SR (15...0) DR (15...0)
ALU_OUT (15...0)
BUS_MUX
ALU_A (15...0) ALU_B (15...0)
reset clk en sr[15..0] dest_reg[3..0] dr[15..0] source_reg[3..0] reg_out[15..0] alu_out[15..0] reg_sel[3..0]
◦ 逻辑框图
◦ 功能实现思路
设计两个功能模块:一为reg,一为reg_mux 调用16个reg和1个reg_mux连接起来,即形成寄存器组 参考基础实验4的方案2文档
令REC=01,实现PC->AR 控制ALU实现PC+1,PC为其中ALU输入,另一个输入为0, 初始进位Cin为1。
为此,令SCI=1,以实现Cin=1; 令ALU_IN_SEL=100以选择A=0和B=PC; 令ALU_FUNC_SEL=000,以实现A+B+Cin 令PC_EN=1,以把增1后的结果置入PC中
SOUR_REG
包括:ADD,SUB,AND,CMP,XOR,TEST,OR,MVRR,ADC, SBB,LDRR,STRR
(3)单字无操作数指令
15 8 7 4 3 0
OPCODE
0000
0000
包括:CLC,STC
(4)双字单操作数指令
15 8 7 4 3 0
OPCODE
包括:JMPA
0000 ADR
0000
(5)双字双操作数指令
15 8 7 4 3 0
OPCODE
DEST_REG
0000
DATA
包括:MVRD
由于没有中断操作,本机指令的执行步骤可概括如下: 读取指令:
◦ 地址寄存器<-指令地址,修改PC内容使其指向下一条将 要执行的指令 ◦ 读内存,指令寄存器<-读出的内容
分析指令
◦ 执行指令: 通用寄存器之间的运算或传送,可1步完成 读写内存,通常要两步完成
根据指令的执行步骤不同,可以把全部指令分为A、 B两组
◦ A组指令完成的是通用寄存器之间的数据运算或传送,或 其他一些特殊操作,在取指之后可一步完成 ◦ B组指令完成的是一次内存读写操作,在取指之后可两步 完成
A和B组指令节拍控制
以状态机方式实现
本综合实验,拟设计的是无cache无流水的CPU 因此,采用常规的CPU结构,即主要包含 ◦ 运算器 ◦ 控制器
设计指令前了解现实需求,并将其中必不可少、使 用频率较大的需求设计为指令 确定指令格式,如OP和地址码分别如何设计 OP码常用固定长度,根据指令条数来确定 确定地址码有几个,分别应该是多长 指令分类及其对应的格式:单字长、双字长 指令功能分组及OP码分配,形成指令总表 不同组指令的执行时长不等,为提高效率,进行时 序分析与设计,以状态机形式反映
寄存器组
◦ 功能:实现寄存器的读和写,写时在时钟上升沿根据DR和 REG_EN写入一个数据,读时根据SR和DR同时读出两个数 据。此外,为方便测试,尚需根据寄存器选择编号读出对 应寄存器的数值 ◦ 输入输出信号:
输入信号:reset, clk, dest_reg, src_reg, en, alu_out, reg_sel 输出信号:sr, dr, reg_out 16位 通 用 寄 存 器 组
5
指令寄存器
回顾冯· 诺依曼CPU结构及工作原理 16位实验CPU的设计与实现 将16位实验CPU的改造成8位的实验CPU 评分标准
下面以16位的实验CPU为例进行回顾,说明设计实 现过程的思路和方法
1. 2. 3. 4. 5. 6.
设计指令系统 确定CPU的结构图 确定控制信号 分析各个主要模块的功能及设计方法 编程实现 组装测试
◦ 输入输出信号:
输入信号为:A、B、cin、alu_func 输出信号为:Y、C、Z、V、S
◦ 逻辑框图
功能实现思路
根据alu_func进行相应的运算,如alu_func为000时进行加 法运算,001时进行减法运算,如此类推 根据运算结果,对标志符号C、Z、V、S进行相应的更新 参考基础实验2的方案2文档
FLAG_C FLAG_Z FLAG_V FLAG_S
CONTROL LOGIC
OFFSET (7...0)
DEST_REG (3...0)
SOUR_REG (3...0)
EN
ALU_IN_SEL (2...0)
PC (15...0)
DATA (15...0)
T2
FLAG_C OFFSET (15...0) T1
王春桃
回顾冯· 诺依曼CPU结构及工作原理 16位实验CPU的设计与实现 将16位实验CPU的改造成8位的实验CPU 评分标准
存储器
输入
运算器
输出
控制器 数据信号 控制信号 地址信号
2015/12/12
3
1. CPU的功能
取指令 执行指令
操作控制、时间控制
◦ 指令控制(程序的顺序控制)
ALU
地址
5 6 7
地址码
R0,R1 R1,6 R1,R2 R2,(R3) 101 R1,R3
R0
10 … 30 31
R1
R2 R3 AR
数据
数据缓冲寄存器
地址总线
PC
指令
地址总线
地址寄存器
程序计数器
状态字寄存器
C1 C2 C3 Cn
C2
时序发生器 操作控制器 OC
指令译码器
控制信号
IR
OP码
地址码
与寄存器有关的:
◦ SR、DR ◦ Reg_EN
对AR和IR接收控制
◦ REC(00无操作,01时AR接收PC,10时AR接收ALU输 出,11时IR接收)
对内存读写的控制
◦ /wr(0时为写内存,1时为读内存)
对PC的更新控制
◦ PC_EN
综合上述的控制信号,可以得到该CPU的控制信号集合。在 设计控制器时,只要根据相关的指令给出这些控制信号的值 即可
(1)单字单操作数指令
15 8 7 4 3 0
OPCODE OPCODE
DEST_REG 0000 OFFSET
包括:DEC,INC,SHL,SHR,JR,JRC,JRNC,JRZ,JRNZ, JRS,JRNS
(2)单字双操作数指令
15 8 7 4 3 0
OPCODE
DEST_REG
设计思路
◦ 在设计时,可以先考虑比较粗的结构 ◦ 然后再逐渐细化 ◦ 例子说明
串行指令CPU整体结构图
CLK FLAG RegSel<寄存器选择>
SelSrc SelOpr SelDst
<数据运算 ,传送 >
控制器
运算器( 含寄存器堆)
SCI <进位 > SST <设置状态 > SA ,SB <寄存器选择 >
I2I1I0
/WR REC
000
100
000
1
01
AR<-PC,PC<PC+1
注释
第2拍:从内存取出指令
◦ 对应节拍:001 ◦ 动作:IR <- Mem ◦ 控制信号:
为了控制内存读,/wr应该设置为/wr=1 为了将从Mem读出的指令打入IR,控制IR的REC应设成 REC=10 其它保持缺省值