当前位置:文档之家› 综合实验:8位CPU设计与实现

综合实验:8位CPU设计与实现


PC、IR、时序发生器(即TIMER)、控制单元
AR

在分析这些模块时,先分析它的功能,然后分析输 入输出信号,最后分析其实现逻辑 在完成这些分析后,结合数据通路,分析各条指令 的执行流程,以加深对CPU原理的理解

运算器ALU
◦ 功能:对两个16位的输入及低位进位输入cin,根据运算 功能进行运算,产生相应的结果,并更改标志位
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)
送往数 据总线
内存
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)

寄存器组
◦ 功能:实现寄存器的读和写,写时在时钟上升沿根据DR和 REG_EN写入一个数据,读时根据SR和DR同时读出两个数 据。此外,为方便测试,尚需根据寄存器选择编号读出对 应寄存器的数值 ◦ 输入输出信号:
输入信号:reset, clk, dest_reg, src_reg, en, alu_out, reg_sel 输出信号:sr, dr, reg_out 16位 通 用 寄 存 器 组
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 其它保持缺省值
◦ 其它控制信号按缺省值设置即可
如控制标志位的SST,令保持原来标志即可,此时SST=11 控制寄存器写的REG_EN,不用写,保持REG_EN=0 控制内存写的/wr,不用写,令/wr=1

综合上述控制信号值,可得:
指令 编码
节拍
Sci SST I7I6 01 11 10
I5I4I3
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文档


(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
◦ 操作控制(一条指令有若干操作信号实现) ◦ 时间控制(指令各个操作实施时间的定时) ◦ 数据加工(算术运算和逻辑运算)
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
◦ 因此,此时的控制信号集合为:
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
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 ◦ 控制信号:
◦ 输入输出信号:
输入信号为:A、B、cin、alu_func 输出信号为:Y、C、Z、V、S
◦ 逻辑框图
功能实现思路
根据alu_func进行相应的运算,如alu_func为000时进行加 法运算,001时进行减法运算,如此类推 根据运算结果,对标志符号C、Z、V、S进行相应的更新 参考基础实验2的方案2文档




设计指令前了解现实需求,并将其中必不可少、使 用频率较大的需求设计为指令 确定指令格式,如OP和地址码分别如何设计 OP码常用固定长度,根据指令条数来确定 确定地址码有几个,分别应该是多长 指令分类及其对应的格式:单字长、双字长 指令功能分组及OP码分配,形成指令总表 不同组指令的执行时长不等,为提高效率,进行时 序分析与设计,以状态机形式反映
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码
地址码
5
指令寄存器

回顾冯· 诺依曼CPU结构及工作原理 16位实验CPU的设计与实现 将16位实验CPU的改造成8位的实验CPU 评分标准




下面以16位的实验CPU为例进行回顾,说明设计实 现过程的思路和方法
1. 2. 3. 4. 5. 6.
设计指令系统 确定CPU的结构图 确定控制信号 分析各个主要模块的功能及设计方法 编程实现 组装测试
0000
(5)双字双操作数指令
15 8 7 4 3 0
OPCODE
DEST_REG
0000
DATA
包括:MVRD
由于没有中断操作,本机指令的执行步骤可概括如下: 读取指令:
◦ 地址寄存器<-指令地址,修改PC内容使其指向下一条将 要执行的指令 ◦ 读内存,指令寄存器<-读出的内容

分析指令
◦ 执行指令: 通用寄存器之间的运算或传送,可1步完成 读写内存,通常要两步完成
FLAG ALU输出 AIsel <控制AR,IR接收 > BusSel <选择总线数据来源>
AR(地址寄存器)
IR( 指令寄存器) 符号扩展
Bus
寄存器数据<调试用>
MUX
地址总线
wrMem <内存读写>
数据总线
/WR
(来自数据总线)
MEM_DATA (15...0)
ห้องสมุดไป่ตู้
送往地址总线
ADR (15...0)
王春桃

回顾冯· 诺依曼CPU结构及工作原理 16位实验CPU的设计与实现 将16位实验CPU的改造成8位的实验CPU 评分标准



存储器
输入
运算器
输出
控制器 数据信号 控制信号 地址信号
2015/12/12
3
1. CPU的功能
取指令 执行指令
操作控制、时间控制
◦ 指令控制(程序的顺序控制)
◦ 因此,控制信号集合为:
011
节拍
指令 编码
Sci SST I7I6 00 00 01
I5I4I3
000
I2I1I0
000
/WR REC
1
00
注释
DR<-SR+DR
相关主题