资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验1简单CPU设计一实验目的设计实现简单CPU,熟悉并掌握指令结构,利用verilog编写各个子模块。 二实验原理1 .CPU设计CPU 概念设计如图1 所示:2.指令集(1)本实验设计一个可以运行4条指令的简单CPU(2)指令格式:opcode(2 bit) + addr (6 bit)(3)具体 4 条指令如表 1:表 1 指令结构In stOpAddrOperatio nADD00XXXXXX力口 法:ACv-AC+MAddrAND01XXXXXX逻辑与:AC-ACAMAddrINC10XXXXXX力口 1: ACv-AC+1JMP11XXXXXX跳转:PCv-Addr3.寄存器组织(1)累加器(AC)a. 提供ADD, AND操作的一个操作数b. 存放ADD, AND操作的结果2)用户不可见寄存器a.地址寄存器(AR): 6bit,提供访问存储器单元地址b. 程序计数器(PC): 6bit,存放下一条指令在存储器单元中的地址c. 数据寄存器(DR): 8bit,存放从访问存储器单元的内容d. 指令寄存器(IR): 2bit,存放当前取出的指令的操作码部分4.指令的执行指令的执行过程如图2:图21)取指FETCH1: AR- PCFETCH2: DR- M, PC- PC1FECTH3: IR- DR7.6, AR- DR5.02)执行ADD1: DR- MADD2: AC- AC DRAND1: DR- MAND2: AC- AC 人 DRINC1: AC- AC + 1JMP1: PC- DR5.03)寄存器操作AR: AR-PC; AR-DR5.0PC: PC-PC+1; PC-DR5.0DR: DR-MIR: IR-DR 7.6AC: ACv-AC+DR; AC-ACA DR; AC v-AC+15.CPU 数据通路CPU 数据通路设计如图 3 所示:IRLOAD 图 3严图3是已经过简化的数据通路,它反映了CPU内部各单元的功8/8ARLDAARLOADPCLDINCaPCLOADPCINCALUACLDINCAACLOAD ACINC能特点:I (1) AR只向存储器提供数据;(2)IR不向其他单元提供数据以I(3) AC不向其他单兀提供数据(4)AC需保存ALU运算结果( 5 ) 8bit BUS6.控制器(1)控制器功能控制器是负责产生CPU内的各种信号,控制程序的执行:1、取指令(fetch)2、分析指令( decode)3、执行指令( Execute)4、其他功能:控制程序数据的输入输出、异常处理、中断等 2)控制信号控制器中有9 条信号线,分别是:PCLOAD:允许 PC 置值PCINC:允许 PC 自加 1DRLOAD:允许 DR 置值ACLOAD:允许 AC 置值ACINC:允许 AC 自加 1IRLOAD:允许 IR 置值MEMBUS:控制存储器是否输出PCBUS:控制 PC 是否输出READ:读存储器3)信号生成逻辑1. 控制信号的线性表达:PCLOAD = JMP1PCINC = FETCH2DRLOAD = FETCH1 v ADD1 v AND1ACLOAD = ADD2 v AND2ACINC = INC1IRLOAD = FETCH3MEMBUS = FETCH2 v ADD1 v AND1PCBUS = FETCH1READ = FETCH2 v ADD1 v AND12. 控制信号的生成逻辑,如图 4:图4 三实验环境软件:QuartusII 6, ModelSim硬件平台: GW48-SOPC/DSP EP1C6Q240 四实验步骤1.各个子模块的 Verilog 实现 (1)ALU 模块module alu(op,a,b,c);input op;input 7:0 a,b;output 7:0 c;assign c = (op=0)?(a+b):(a&b);endmodule(2)IR 模块module ir(clk,load,din,dout); input clk,load;input 1:0 din;output 1:0 dout;reg 1:0 dout;always (posedge clk)beginif(load)dout = din;endendmodule(3)DR 模块module dr(clk,load,din,dout); input clk,load;input 7:0 din;output 7:0 dout;reg 7:0 dout;always (posedge clk)beginif(load)dout = din;end endmodule 4)PC 模块module pc(clk,rst,load,inc,din,dout); input clk,rst,load,inc;input 5:0 din; output 5:0 dout; reg 5:0 dout;always (posedge clk) begin if(rst)dout = 0; else if(inc) dout = dout + 1;else if(load) dout = din;end endmodule 5)AR 模块module ar(clk,load,din,dout); input clk,load;input 5:0 din; output 5:0 dout; reg 5:0 dout;always (posedge clk) begin if(load) dout = din;end endmodule 6)AC 模块module ac(clk,rst,load,inc,din,dout); input clk,rst,load,inc;input 7:0 din; output 7:0 dout; reg 7:0 dout;always (posedge clk) begin if(rst)dout = 0; else if(inc)dout = dout + 1;else if(load) dout = din;end endmodule 7)Control 模块module control(clk,rst,ir, read,membus, arload, pcload,pcinc,pcbus, drload,drbus, alusel, acload,acinc, irload);parameter FETCH1 = 0; parameter FETCH2 = 1; parameter FETCH3 = 2; parameter ADD1 = 3; parameter ADD2 = 4; parameter AND1 = 5; parameter AND2 = 6; parameter INC1 = 7; parameter JMP1 = 8; input clk,rst;input 1:0 ir;output read,membus, arload, pcload,pcinc,pcbus, drload,drbus, alusel, acload,acinc, irload;reg 3:0 state,nextstate; always (posedge clk) beginif(rst)state = FETCH1; elsestate = nextstate; endalways (state or ir) begincase(state)FETCH1:nextstate = FETCH2;FETCH2:nextstate = FETCH3;FETCH3:beginif(ir=0)nextstate = ADD1;else if(ir = 1)nextstate = AND1;else if(ir = 2)nextstate = INC1;elsenextstate = JMP1;endADD1:nextstate = ADD2;ADD2:nextstate = FETCH1;AND1:nextstate = AND2;AND2:nextstate = FETCH1;JMP1:nextstate = FETCH1;INC1:nextstate = FETCH1;default:nextstate = FETCH1;endcaseendassign arload = (state = FETCH1 | state= FETCH3)?1:0;assign pcload = (state = JMP1)?1:0;assign pcinc = (state = FETCH2)?1:0;assign drload = (state = FETCH2 | state= ADD1 | state=AND1)?1:0;assign acload = (state = ADD2 | state= AND2)?1:0;assign acinc = (state = INC1 )?1:0;assign irload = (state = FETCH3)?1:0;assign alusel = (state = AND2)?1:0;assign membus = (state = FETCH2 | state= ADD1 | state=AND1)?1:0;assign pcbus = (state = FETCH1)?1:0;assign drbus = (state = FETCH3 | state= ADD2 | state= AND2 | state = JMP1)?1:0;assign read = (state = FETCH2 | state = ADD1 | state =AND1)?1:0;endmodule(8)三态门(6 bit)模块module tri6(en,din,dout);input en;input 5:0 din;output 5:0 dout;assign dout = (en)?din:6bzzz_zzz;endmodule(9)三态门(8 bit)模块module tri8(en,din,dout);input en;input 7:0
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号