体系结构实验手册_第1页
体系结构实验手册_第2页
体系结构实验手册_第3页
体系结构实验手册_第4页
体系结构实验手册_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验1 简单CPU设计一实验目的设计实现简单CPU,熟悉并掌握指令结构,利用verilog编写各个子模块。二实验原理1.CPU设计CPU概念设计如图1所示:图12.指令集(1)本实验设计一个可以运行4条指令的简单CPU(2)指令格式:opcode(2 bit) addr(6 bit)(3)具体4条指令如表1:表1 指令结构InstOpAddrOperationADD00XXXXXX加 法: AC-AC+MAddrAND01XXXXXX逻辑与: AC-ACMAddrINC10XXXXXX加 1: AC-AC+1JMP11XXXXXX跳 转: PC-Addr3.寄存器组织(1)累加器(AC)a提供

2、ADD,AND操作的一个操作数b存放ADD,AND操作的结果(2)用户不可见寄存器a地址寄存器(AR):6bit,提供访问存储器单元地址b程序计数器(PC):6bit,存放下一条指令在存储器单元中的地址c数据寄存器(DR):8bit,存放从访问存储器单元的内容d指令寄存器(IR):2bit,存放当前取出的指令的操作码部分4.指令的执行指令的执行过程如图2:图2(1)取指FETCH1: AR- PCFETCH2: DR- M,PC- PC1FECTH3: IR- DR7.6,AR- DR5.0(2)执行ADD1: DR- MADD2: AC- AC DRAND1: DR- MAND2: AC-

3、AC DRINC1: AC- AC + 1JMP1: PC- DR5.0(3)寄存器操作AR: AR-PC; AR-DR5.0PC: PC-PC+1; PC-DR5.0DR: DR-MIR: IR-DR 7.6AC: AC-AC+DR; AC-AC DR; AC -AC+15.CPU数据通路CPU数据通路设计如图3所示:图3图3是已经过简化的数据通路,它反映了CPU内部各单元的功能特点:(1)AR只向存储器提供数据(2)IR不向其他单元提供数据(3)AC不向其他单元提供数据(4)AC需保存ALU运算结果(5)8bit BUS6.控制器(1)控制器功能控制器是负责产生CPU内的各种信号,控制程序

4、的执行: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 =

5、 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);

6、 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;en

7、dendmodule(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)beginif(rst)dout = 0;else if(inc)dout = dout + 1;else if(load)dout = din;endendmodule(5)AR模块module ar(clk,load,din,dout);input clk,load;input 5:0 din;output 5:0

8、 dout;reg 5:0 dout;always (posedge clk)beginif(load)dout = din;endendmodule(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)beginif(rst)dout = 0;else if(inc)dout = dout + 1;else if(load)dout = din;endendmodule(7)Control

9、模块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;in

10、put 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; end always (state or ir) begincase(state)FETCH1:nextstate = FETCH2;FETCH2:nextstate = FETCH3;FETCH3:begini

11、f(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;endcase end assign ar

12、load = (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 = FETCH

13、3)?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;endmodul

14、e(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 din;output 7:0 dout;assign dout = (en)?din:8bzzzz_zzzz;endmodule2.CPU模块的Verilog实现module cpu(clk,rst,data,read,addr,acou

15、t);input clk,rst;input 7:0 data;output read;output 5:0 addr;output 7:0 acout;wire 7:0 bus;wire 5:0 pcout;wire 7:0 drout,acout,aluout;wire 1:0 irout;wire alusel,acload,acinc;tri8 t0(membus,data,bus7:0);ar ar1(clk,arload,bus5:0,addr);pc pc1(clk,rst,pcload,pcinc,bus5:0,pcout);tri6 t1(pcbus,pcout,bus5:0

16、);dr dr1(clk,drload,bus7:0,drout);tri8 t2(drbus,drout,bus7:0);alu alu1(alusel,acout,bus7:0,aluout);ac ac1(clk,rst,acload,acinc,aluout,acout);ir ir1(clk,irload,bus7:6,irout);control c1(clk,rst,bus7:6,read,membus,arload,pcload,pcinc,pcbus,drload,drbus,alusel,acload,acinc,irload);endmodule3.Inst Mem模块的

17、实现(用Altera的宏)4.Data Mem模块的实现(用Altera的宏)5.顶层模块(系统:CPU+指令Mem+数据Mem)用Schematic实现6.引脚配置(要求引出。)及测试数据Clk信号,复位信号7.测试在quartus中,将cpu.v文件设置为顶层文件。然后生成cpu和memery器件,建立一个block模板,在里面讲cpu和memery连接好,并配上相应的输入输出信号。接着,编译工程。然后建立一个wave文件,进行模拟仿真。最后连接实验箱,进行仿真。一 思考题1、单周期CPU的控制器设计与实验1中控制器设计有何异同。实验2 单周期MIPS处理器设计一、 实验目的设计实现是指令

18、简单,容易译码的单周期MIPS处理器,设计实现单周期的MIPS处理器,熟悉并掌握指令结构,利用verilog编写各个子模块。二、 实验原理1、MIPS的简单介绍MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。和英特尔采用的复杂指令系统计算结构(CISC)相比,。RISC具有设计更简单、设计周期更短等优点,并可以应

19、用更多先进的技术,开发更快的下一代处理器。MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。2、单周期MIPS设计单周期MIPS处理器的概念设计如图1所示: 图1 单周期MIPS处理器的结构3、 指令集本实验共有9条指令,每一条MIPS指令是一个32位的。MIPS指令集中共包括三种格式的指令,分别是立即数(immediate)类型(I类型)指令,跳转(jump)类型(J类型)指令和寄存器(register)类型(R类型)指令。指令集的这种设计方法简化了指令译码,一些复杂的很多使用的操作和寻址方式可以通过编译器利用一组简单指令来合成。M

20、IPS的指令格式如下所示:(1)R类型指令31 26 25 21 20 16 15 11 10 6 5 0 oprsrtrdshamtfunc6-bit 5-bit 5-bit 5-bit 5-bit 6-bit (2)I类型指令 31 26 25 21 20 16 15 0 oprsrtimmediate6-bit 5-bit 5-bit 16-bit (3)J类型指令31 26 25 0 opTarget address6-bit 26-bit 指令格式中的op(opcode)是指令操作码。rs(register source)是源操作数的寄存器号。rd(register destinat

21、ion)是目的寄存器号。rt(register target)既可为源寄存器号,又可为目的寄存器号,由具体的指令决定。func(function)被认为是操作码。shamt(shift amount)由移位指令使用,定义移位位数。immediate是16位立即数,使用之前由指令进行O扩展或符号扩展。26位Target address由jump指令使用,用于产生跳转的目标地址。R(register)类型的指令从寄存器堆中读取两个源操作数,计算结果写回寄存器堆。I(immediate)类型的指令使用一个16位的立即数作为一个源操作数。J(jump)类型的指令使用一个26位立即数作为跳转的目标地址(

22、target address)。MIPS指令集具有以下特点。简单的LOADSTORE结构。IPS指令集的指令格式非常规整,所有的指令均为32位,而且指令操作码在固定的位置上。易于编译器的开发。一般地讲,编译器在编译高级语言程序时,很难用到复杂的指令。MIPS指令的寻址方式非常简单,每条指令的操作也非常简单。MIPS具体的指令结构:表1 指令结构Instruction bit number31.2625.2120.1615.1110.65.0addrsrtrd00000subrsrtrd00000andrsrtrd00000orrsrtrd00000sltrsrtrd00000lwrsrtimm

23、ediateswrsrtimmediatebeqrsrtimmediatejAddress4、单周期MIPS处理器结构每条指令1个时钟周期内完成。三、 实验环境软件:QuartusII 6,ModelSim硬件平台:GW48-SOPC/DSP EP1C6Q240四、 实验步骤1. 各个子模块的设计和Verilog实现(1) PC寄存器PC(program counter)是专用寄存器,CPU使用它从存储器中取指令。每执行一条指令PC加4。Clk为时钟信号,rst为复位信号。PC寄存器的部分程序:always (posedge clk)beginif(rst) /当有复位信号时,输出为0;dou

24、t =32h;elsedout = din;end(2) 二选一的数据选择器二选一的数据选择器电路框图如图二所示:输入端是a、b,输出端为c,sel为控制端。当sel为0时,输出端c输出a信号,当sel为1时,输出端c输出b信号,w为数据宽度参数。程序为:module mux1(a,b,sel,c);parameter w = 32;input w-1:0 a,b;input sel; output w-1:0 c;assign c = (sel = 0)?a:b;endmodule(3) 符号扩展和移位本实验中的符号扩展是在数据使用之前进行0扩展或符号扩展,是把16位的数据扩展成32的数据。

25、din为16位输入数据,dout为32为输出数据,程序如下:module signextend(din,dout);input 15:0 din;output 31:0 dout;assign dout15:0 = din;assign dout31:16 = 16h0000;endmodule(4) 寄存器RegFile模块根据输入的寄存器地址读写寄存器,n1为源操作数1的寄存器地址, n2为源操作数2的寄存器地址,we为写寄存器信号,nd 写寄存器的地址,di 写寄存器的数据,q1为源操作数1的数据,q2为源操作数2的数据。当we为0时,q1输出以源操作数1为地址的数据,q2输出以源操作数

26、2为地址的数据,当we为1时,把di输入的数据写到以nd为地址的寄存器中。部分程序如下:reg 31:0 r31:0; /定义寄存器;assign q1 = (n1=0)?0:rn1;assign q2 = (n2=0)?0:rn2;always (posedge clk)beginif(we)rnd = di; endendmodule(5) ALU模块算术逻辑单元(ALU:aritl-irnetic logic unit)的设计是CPU设计中重要的一个环节。可以这样说,微处理器中最重要的地方是ALU,它是CPU真正处理数据的地方。ALU使用的数据来自寄存器(Register),它读取寄存器

27、中的数据并进行一些计算(如对两个数据相加、对两个数据进行逻辑或运算等等),然后把计算结果返回到寄存器中,最后再把寄存器中的结果返回到主内存中。根据控制信号aluc确定执行功能如图三所示:assign zero = (c=0)?1:0; always (a,b,aluc)begincase(aluc)ADD: c = a + b;SUB: c = a - b;AND: c = a & b;OR: c = a | b;SLT: c = (ab)?1:0;default:c = 0;endcaseend(6) Inst Mem模块和Data Mem模块的实现Inst Mem是32位的指令寄存器,存放

28、着指令数据。Data Mem是数据寄存器,当we信号为1时,写寄存器。部分程序如下:reg 31:0 ram31:0;always (negedge clk )begin if (we) begin ramaddr = wd;end data = ramaddr;end(7) Control控制器模块由指令操作码op和功能码func确定指令的具体功能如下表所示:控制器中有8条信号线,分别是:jump,memtoreg,branch,whitemem,aluc2:0,alusrcb,writereg,regdes,分别控制不同的器件。如下表所示:控制器的部分程序为:assign madd = (

29、op5:0= 6b & func5:0 = 6b )?1:0;assign msub = (op5:0 = 6b & func5:0 = 6b )?1:0;assign mand = (op5:0 = 6b & func5:0 = 6b )?1:0;assign mor = (op5:0 = 6b & func5:0 = 6b )?1:0;assign mslt = (op5:0 = 6b & func5:0 = 6b )?1:0;assign mlw = (op5:0 = 6b )?1:0;assign msw = (op5:0 = 6b )?1:0;assign mbeq = (op5:0 = 6b )?1:0;assign mj = (op5:0 = 6b )?1:0;assign alusrcb = (mlw | msw)?1:0;assign writereg = (mand | mor | madd | mslt | mlw |msub)?1:0;assign aluc2 = (msub | mslt | mbeq)?1:0;assign aluc1 = (msw | msub | madd | mslt | mlw | mbeq)?1:0;assign aluc0 = (mor | mslt)?1:0;assig

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论