简化的RISCCPU设计方案.ppt
《简化的RISCCPU设计方案.ppt》由会员分享,可在线阅读,更多相关《简化的RISCCPU设计方案.ppt(75页珍藏版)》请在三一办公上搜索。
1、第17章 简化的RISC_CPU设计,精简指令集(RISC)CPU的构造原理和设计方法,17.1 什么是CPU,CPU:中央处理单元,是计算机的核心部件,计算机进行信息处理分两个步骤:将数据和程序(指令序列)输入到计算机的存储器中从第一条指令的地址起开始执行程序,得到所需结果,结束运行。,CPU的作用:协调并控制计算机的各部件,使之有条不紊的执行程序,CPU的基本功能:取指令-地址与控制信号分析指令-即指令译码,操作和操作控制信号执行指令-操作控制信号作用于各部件,CPU的基本功能概括:能对指令进行译码并执行规定的动作可以进行算术和逻辑运算能与存储器和外设交换数据提供系统所需的控制,CPU的内
2、部结构:算术逻辑运算单元(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 3b000 暂停SKZ 3b001 累
3、加器为零转移ADD 3b010 加ANDD 3b011 与XORR 3b100 或LDA 3b101 取数STO 3b110 存数JMP 3b111 转移,指令集,CPU的基本功能:取指令-地址与控制信号分析指令-即指令译码,操作和操作控制信号执行指令-操作控制信号作用于各部件,CPU的基本功能概括:能对指令进行译码并执行规定的动作可以进行算术和逻辑运算能与存储器和外设交换数据提供系统所需的控制,CPU的内部结构:算术逻辑运算单元(ALU)累加器程序计数器指令寄存器和译码器时序和控制部件,累加器A,指令寄存器IR,算逻单元ALU,数据控制,地址选择,程序计数器PC,控制状态机,时钟信号,CPU
4、的结构功能图,累加器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,6,7,LDA 1000,B0,00,EE,load_acc,address,0000
5、,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是控制信号,clk的8分频信号alu_ena用于控制算术逻辑运算单元clk是时钟信号reset是
6、复位信号,状态转移图,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/1nsmodule clk_gen(clk,reset,fetch,alu_ena);input clk,reset;output fetch,alu_ena;wire clk,reset;reg fetch,alu_ena;reg 7:0state;parameter S1=8b00000001,S2=8b00000010,S3=8b00000100,S4=8b00001000,S5
7、=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:begin fetch=1;state=S2;end S2:state=S3;S3:state=S4;S4:state=S5;S5:begin state=S6;f
8、etch=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/1nsmodule register(opc_iraddr,data,ena,clk,rst);output 15:0opc_iraddr;input 7:0data;input ena,clk,rst;reg
9、 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 1b1:begin opc_iraddr7:0=data;state=0;end default:begin opc_iraddr15:0=16bx;state=1bx;end endcaseelse state=1b0;end endmodu
10、le,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 if(rst)accum=8b0000_0000;else if(ena)accum=data;endendmodule,17.3.4 算术逻辑运算器,助记符 操作码 功能HLT 3b000 暂停SKZ 3b001 累加器为零转移ADD 3b010 加ANDD 3b
11、011 与XORR 3b100 或LDA 3b101 取数STO 3b110 存数JMP 3b111 转移,timescale 1ns/1nsmodule alu(alu_out,zero,data,accum,alu_ena,opcode,clk);output 7:0alu_out;output zero;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
12、=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=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_
13、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,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:0
14、pc_addr;reg 12:0pc_addr;always(posedge clk or posedge rst)if(rst)pc_addr=13b0_0000_0000_0000;else if(load)pc_addr=ir_addr;else pc_addr=pc_addr+1;endmodule,17.3.8 状态控制器,timescale 1ns/1nsmodule machinectl(ena,fetch,rst,clk);input fetch,rst,clk;output ena;reg ena;always(posedge clk)begin if(rst)ena=0;e
15、lse if(fetch)ena=1;endendmodule,17.3.8 状态控制器,状态控制器两部分:状态机(machine)状态控制器machinectlrst有效,ena=0,状态机停止工作。,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_p
16、c加1,故PC+1,ROM中低八位指令代码-指令寄存器,第2个时钟:空操作,第3个时钟:PC+1,指向下一条指令;若HLT指令,halt=1;其它指令控制线输出为0,指令周期中8个时钟完成的操作,第4个时钟:若AND ADD XOR LDA,读相应地址数据;若JMP,目的地址-PC;若STO,输出累加器数据。,第5个时钟:若AND ADD XOR,进行相应运算;若LDA,数据-运算器-累加器;若JMP,锁存目的地址;若STO,数据到地址处。,第6个时钟:空操作,第7个时钟:若SKZ指令,PC+1跳过一条指令;否则PC无变化,timescale 1ns/1nsmodule machine(inc
17、_pc,load_acc,load_pc,rd,wr,load_ir,datactl_ena,halt,clk,zero,ena,opcode);output inc_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=3b
18、011,XORR=3b100,LDA=3b101,STO=3b110,JMP=3b111;,always(negedge clk)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,loa
19、d_ir,datactl_ena,halt=4b0100;state=3b001;end 3b001: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=4b
20、1000;wr,load_ir,datactl_ena,halt=4b0001;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=X
21、ORR|opcode=LDA)begin inc_pc,load_acc,load_pc,rd=4b0001;wr,load_ir,datactl_ena,halt=4b0000;end else if(opcode=STO)begin inc_pc,load_acc,load_pc,rd=4b0000;wr,load_ir,datactl_ena,halt=4b0010;end else begin inc_pc,load_acc,load_pc,rd=4b0000;wr,load_ir,datactl_ena,halt=4b0000;end state=3b101;end,3b101:be
22、gin/operation if(opcode=ADD|opcode=ANDD|opcode=XORR|opcode=LDA)begin inc_pc,load_acc,load_pc,rd=4b0101;wr,load_ir,datactl_ena,halt=4b0000;end else if(opcode=SKZ end,3b110:/idle begin if(opcode=STO)begin inc_pc,load_acc,load_pc,rd=4b0000;wr,load_ir,datactl_ena,halt=4b0010;end else if(opcode=ADD|opcod
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简化 RISCCPU 设计方案
链接地址:https://www.31ppt.com/p-6328871.html