第17部分简化的RISCCPU设计方案.ppt
《第17部分简化的RISCCPU设计方案.ppt》由会员分享,可在线阅读,更多相关《第17部分简化的RISCCPU设计方案.ppt(75页珍藏版)》请在三一文库上搜索。
1、第17章 简化的RISC_CPU设计,精简指令集(RISC)CPU的构造原理和设计方法,17.1 什么是CPU,CPU:中央处理单元,是计算机的核心部件,计算机进行信息处理分两个步骤: 将数据和程序(指令序列)输入到计算机的存储器中 从第一条指令的地址起开始执行程序,得到所需结果,结束运行。,CPU的作用:协调并控制计算机的各部件,使之有条不紊的执行程序,CPU的基本功能: 取指令-地址与控制信号 分析指令-即指令译码,操作和操作控制信号 执行指令-操作控制信号作用于各部件,CPU的基本功能概括: 能对指令进行译码并执行规定的动作 可以进行算术和逻辑运算 能与存储器和外设交换数据 提供系统所需
2、的控制,CPU的内部结构: 算术逻辑运算单元(ALU) 累加器 程序计数器 指令寄存器和译码器 时序和控制部件,RISC即精简指令集计算机: Reduced Instruction Set Computer 时序控制信号由硬件而不是微程序控制,cpu,AB,DB,地址 译码器,ROM,RAM,clock,reset,MICRO COMPUTER SYSTEM,read,write,D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0,高8位,低8位,地址码,指令码,指令,指令数目:8条 地址空间:213=8K,助记符 操作码 功能 HLT
3、3b000 暂停 SKZ 3b001 累加器为零转移ADD 3b010 加 ANDD 3b011 与 XORR 3b100 或 LDA 3b101 取数 STO 3b110 存数 JMP 3b111 转移,指令集,CPU的基本功能: 取指令-地址与控制信号 分析指令-即指令译码,操作和操作控制信号 执行指令-操作控制信号作用于各部件,CPU的基本功能概括: 能对指令进行译码并执行规定的动作 可以进行算术和逻辑运算 能与存储器和外设交换数据 提供系统所需的控制,CPU的内部结构: 算术逻辑运算单元(ALU) 累加器 程序计数器 指令寄存器和译码器 时序和控制部件,累加器 A,指令寄存器 IR,算
4、逻单元 ALU,数据控制,地址选择,程序计数器 PC,控制状态机,时钟信号,CPU的结构功能图,累加器 A,指令寄存器 IR,算逻单元 ALU,数据控制,地址选择,程序计数器 PC,控制状态机,时钟信号,AB,DB,halt,rd,wr,clk,rst,load_acc,fetch,inc_pc,load_pc,load_ir,alu_ena,datactl_ena,halt,load_ir,rd,inc_pc,alu_ena,fetch,clk,0,1,2,3,4,5,6,7,halt指令,data,load_ir,rd,inc_pc,alu_ena,fetch,clk,0,1,2,3,4,
5、5,6,7,LDA 1000,B0,00,EE,load_acc,address,0000,0001,1000,0002,data,load_ir,rd,inc_pc,alu_ena,fetch,clk,0,1,2,3,4,5,6,7,ADD 1001,50,01,11,load_acc,address,0002,0003,1001,0004,data,load_ir,rd,inc_pc,alu_ena,fetch,clk,0,1,2,3,4,5,6,7,STO 1001,D0,01,FF,wr,address,0004,0005,1001,0006,17.3.1 时钟发生器,fetch是控制
6、信号,clk的8分频信号 alu_ena用于控制算术逻辑运算单元 clk是时钟信号 reset是复位信号,状态转移图,17.3.1 时钟发生器,S2,S1,S2,S3,S4,S5,S6,S7,S8,S1,S2,S3,S4,S5,S6,S7,S8,idle,/-clk_gen.v- timescale 1ns/1ns module clk_gen(clk,reset,fetch,alu_ena); input clk, reset; output fetch, alu_ena; wire clk, reset; reg fetch, alu_ena; reg 7:0state; paramete
7、r S1=8b00000001, S2=8b00000010, S3=8b00000100, S4=8b00001000, S5=8b00010000, S6=8b00100000, S7=8b01000000, S8=8b10000000, idle=8b00000000;,17.3.1 时钟发生器,always (posedge clk) if(reset) begin fetch=0; alu_ena=0; state=idle; end else begin case (state) default:state=idle; endcase end,case (state) S1: be
8、gin fetch=1; state=S2; end S2: state=S3; S3: state=S4; S4: state=S5; S5: begin state=S6; fetch=0; end S6: begin state=S7; alu_ena=1; end S7: begin alu_ena=0; state=S8; end S8: state=S1; idle: state=S1; default:state=idle; endcase,17.3.2 指令寄存器,reset,clk,load_ir,opcode2:0,ir_addr12:0,timescale 1ns/1ns
9、 module register(opc_iraddr,data,ena,clk,rst); output 15:0opc_iraddr; input 7:0data; input ena,clk,rst; reg 15:0opc_iraddr; reg state; always (posedge clk) begin if (rst) begin opc_iraddr=16b0000_0000_0000_0000; state=1b0; end else,if (ena) casex(state) 1b0:begin opc_iraddr15:8=data; state=1; end 1b
10、1:begin opc_iraddr7:0=data; state=0; end default:begin opc_iraddr15:0=16bx; state=1bx; end endcase else state=1b0; end endmodule,17.3.3 累加器,reset,clk,load_acc,alu_out7:0,module accum(accum,data,ena,clk,rst); output 7:0accum; input 7:0data; input ena,clk,rst; reg 7:0accum; always (posedge clk) begin
11、if(rst) accum=8b0000_0000; else if(ena) accum=data; end endmodule,17.3.4 算术逻辑运算器,助记符 操作码 功能 HLT 3b000 暂停 SKZ 3b001 累加器为零转移ADD 3b010 加 ANDD 3b011 与 XORR 3b100 或 LDA 3b101 取数 STO 3b110 存数 JMP 3b111 转移,timescale 1ns/1ns module alu(alu_out,zero,data,accum,alu_ena,opcode,clk); output 7:0alu_out; output z
12、ero; input 7:0data,accum; input 2:0opcode; input alu_ena,clk; reg 7:0alu_out; parameter HLT=3b000, SKZ=3b001, ADD=3b010, ANDD=3b011, XORR=3b100, LDA=3b101, STO=3b110, JMP=3b111;,assign zero=!accum; always (posedge clk) if(alu_ena) begin casex(opcode) HLT:alu_out=accum; SKZ:alu_out=accum; ADD:alu_out
13、=data+accum; ANDD:alu_out=data endcase end endmodule,17.3.5 数据控制器,data7:0,alu_out7:0,datactl_ena,module datactl(data,in,data_ena); output 7:0data; input 7:0in; input data_ena; assign data=(data_ena)?in:8bz; endmodule,17.3.6 地址多路器,module adr(addr,fetch,pc_addr,ir_addr); input fetch; input 12:0pc_addr
14、,ir_addr; output 12:0addr; assign addr=fetch? pc_addr:ir_addr; endmodule,17.3.7 程序计数器,module counter(pc_addr,ir_addr,load,clk,rst); input load,clk,rst; input 12:0ir_addr; output 12:0pc_addr; reg 12:0pc_addr; always (posedge clk or posedge rst) if(rst) pc_addr=13b0_0000_0000_0000; else if(load) pc_ad
15、dr=ir_addr; else pc_addr=pc_addr+1; endmodule,17.3.8 状态控制器,timescale 1ns/1ns module machinectl(ena,fetch,rst,clk); input fetch,rst,clk; output ena; reg ena; always (posedge clk) begin if(rst) ena=0; else if(fetch) ena=1; end endmodule,17.3.8 状态控制器,状态控制器两部分: 状态机(machine) 状态控制器machinectl rst有效,ena=0,
16、状态机停止工作。,17.3.8 状态控制器,000,001,010,011,100,101,110,111,状态机是CPU的核心部件,用于产生控制信号: 启动、停止某些部件 CPU执行读指令来读写接口、存储器 状态变量state的值,是指令周期已经过的时钟数,指令周期中8个时钟完成的操作,第0个时钟:rd和load_ir为高电平,ROM中高八位指令代码指令寄存器,第1个时钟:rd和load_ir为高电平,inc_pc加1,故PC+1,ROM中低八位指令代码指令寄存器,第2个时钟:空操作,第3个时钟:PC+1,指向下一条指令;若HLT指令,halt=1;其它指令控制线输出为0,指令周期中8个时钟
17、完成的操作,第4个时钟:若AND ADD XOR LDA,读相应地址数据; 若JMP, 目的地址PC; 若STO, 输出累加器数据。,第5个时钟:若AND ADD XOR , 进行相应运算; 若LDA, 数据运算器累加器;若JMP,锁存目的地址;若STO,数据到地址处。,第6个时钟:空操作,第7个时钟:若SKZ指令, PC+1跳过一条指令;否则PC无变化,timescale 1ns/1ns module machine(inc_pc,load_acc,load_pc,rd,wr,load_ir,datactl_ena,halt,clk,zero,ena,opcode); output inc_
18、pc,load_acc,load_pc,rd,wr,load_ir; output datactl_ena,halt; input clk,zero,ena; input 2:0opcode; reg inc_pc,load_acc,load_pc,rd,wr,load_ir; reg datactl_ena,halt; reg 2:0state; parameter HLT =3B000, SKZ =3b001, ADD =3b010, ANDD=3b011, XORR=3b100, LDA =3b101, STO =3b110, JMP =3b111;,always (negedge cl
19、k) begin if(!ena) begin state=3b000; inc_pc,load_acc,load_pc,rd=4b0000; wr,load_ir,datactl_ena,halt=4b0000; end else ctl_cycle; end,/-begin of task ctl_cycle- task ctl_cycle; begin casex(state) 3b000: begin inc_pc,load_acc,load_pc,rd=4b0001; wr,load_ir,datactl_ena,halt=4b0100; state=3b001; end 3b001
20、: begin inc_pc,load_acc,load_pc,rd=4b1001; wr,load_ir,datactl_ena,halt=4b0100; state=3b010; end 3b010: begin inc_pc,load_acc,load_pc,rd=4b0000; wr,load_ir,datactl_ena,halt=4b0000; state=3b011; end,3b011: begin if(opcode=HLT) begin inc_pc,load_acc,load_pc,rd=4b1000; wr,load_ir,datactl_ena,halt=4b0001
21、; state=3b100; end else begin inc_pc,load_acc,load_pc,rd=4b1000; wr,load_ir,datactl_ena,halt=4b0000; state=3b100; end end,3b100: begin if(opcode=JMP) begin inc_pc,load_acc,load_pc,rd=4b0010; wr,load_ir,datactl_ena,halt=4b0000; end else if(opcode=ADD|opcode=ANDD|opcode=XORR|opcode=LDA) begin inc_pc,l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 17 部分 简化 RISCCPU 设计方案
链接地址:https://www.31doc.com/p-3127045.html