您好,欢迎访问三七文档
《高级计算机体系结构》实验实验1简单CPU设计一.实验目的设计实现简单CPU,熟悉并掌握指令结构,利用verilog编写各个子模块。二.实验原理1.CPU设计CPU概念设计如图1所示:图12.指令集(1)本实验设计一个可以运行4条指令的简单CPU(2)指令格式:opcode(2bit)+addr(6bit)(3)具体4条指令如表1:表1指令结构InstOpAddrOperationADD00XXXXXX加法:AC-AC+M[Addr]AND01XXXXXX逻辑与:AC-AC^M[Addr]INC10XXXXXX加1:AC-AC+1JMP11XXXXXX跳转:PC-Addr3.寄存器组织(1)累加器(AC)a.提供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-PC+1FECTH3:IR-DR[7..6],AR-DR[5..0](2)执行ADD1:DR-MADD2:AC-AC+DRAND1:DR-MAND2:AC-AC^DRINC1:AC-AC+1JMP1:PC-DR[5..0](3)寄存器操作AR:AR-PC;AR-DR[5..0]《高级计算机体系结构》实验PC:PC-PC+1;PC-DR[5..0]DR:DR-MIR:IR-DR[7..6]AC: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)8bitBUS6.控制器(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=FETCH1vADD1vAND1ACLOAD=ADD2vAND2ACINC=INC1IRLOAD=FETCH3MEMBUS=FETCH2vADD1vAND1PCBUS=FETCH1READ=FETCH2vADD1vAND12.控制信号的生成逻辑,如图4:《高级计算机体系结构》实验图4三.实验环境软件:QuartusII6,ModelSim硬件平台:GW48-SOPC/DSPEP1C6Q240四.实验步骤1.各个子模块的Verilog实现(1)ALU模块modulealu(op,a,b,c);inputop;input[7:0]a,b;output[7:0]c;assignc=(op==0)?(a+b):(a&b);endmodule(2)IR模块moduleir(clk,load,din,dout);inputclk,load;input[1:0]din;output[1:0]dout;reg[1:0]dout;always@(posedgeclk)beginif(load)dout=din;endendmodule(3)DR模块moduledr(clk,load,din,dout);inputclk,load;input[7:0]din;output[7:0]dout;reg[7:0]dout;always@(posedgeclk)beginif(load)dout=din;《高级计算机体系结构》实验endendmodule(4)PC模块modulepc(clk,rst,load,inc,din,dout);inputclk,rst,load,inc;input[5:0]din;output[5:0]dout;reg[5:0]dout;always@(posedgeclk)beginif(rst)dout=0;elseif(inc)dout=dout+1;elseif(load)dout=din;endendmodule(5)AR模块modulear(clk,load,din,dout);inputclk,load;input[5:0]din;output[5:0]dout;reg[5:0]dout;always@(posedgeclk)beginif(load)dout=din;endendmodule(6)AC模块moduleac(clk,rst,load,inc,din,dout);inputclk,rst,load,inc;input[7:0]din;output[7:0]dout;reg[7:0]dout;always@(posedgeclk)beginif(rst)dout=0;elseif(inc)《高级计算机体系结构》实验dout=dout+1;elseif(load)dout=din;endendmodule(7)Control模块modulecontrol(clk,rst,ir,read,membus,arload,pcload,pcinc,pcbus,drload,drbus,alusel,acload,acinc,irload);parameterFETCH1=0;parameterFETCH2=1;parameterFETCH3=2;parameterADD1=3;parameterADD2=4;parameterAND1=5;parameterAND2=6;parameterINC1=7;parameterJMP1=8;inputclk,rst;input[1:0]ir;outputread,membus,arload,pcload,pcinc,pcbus,drload,drbus,alusel,acload,acinc,irload;reg[3:0]state,nextstate;always@(posedgeclk)beginif(rst)state=FETCH1;elsestate=nextstate;endalways@(stateorir)begin《高级计算机体系结构》实验case(state)FETCH1:nextstate=FETCH2;FETCH2:nextstate=FETCH3;FETCH3:beginif(ir==0)nextstate=ADD1;elseif(ir==1)nextstate=AND1;elseif(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;endcaseendassignarload=(state==FETCH1||state==FETCH3)?1:0;assignpcload=(state==JMP1)?1:0;assignpcinc=(state==FETCH2)?1:0;assigndrload=(state==FETCH2||state==ADD1||state==AND1)?1:0;assignacload=(state==ADD2||state==AND2)?1:0;assignacinc=(state==INC1)?1:0;assignirload=(state==FETCH3)?1:0;assignalusel=(state==AND2)?1:0;assignmembus=(state==FETCH2||state==ADD1||state==AND1)?1:0;assignpcbus=(state==FETCH1)?1:0;assigndrbus=(state==FETCH3||state==ADD2||state==AND2||state==JMP1)?1:0;assignread=(state==FETCH2||state==ADD1||state==AND1)?1:0;endmodule(8)三态门(6bit)模块moduletri6(en,din,dout);inputen;《高级计算机体系结构》实验input[5:0]din;output[5:0]dout;assigndout=(en)?din:6'bzzz_zzz;endmodule(9)三态门(8bit)模块moduletri8(en,din,dout);inputen;input[7:0]din;output[7:0]dout;assigndout=(en)?din:8'bzzzz_zzzz;endmodule2.CPU模块的Verilog实现modulecpu(clk,rst,data,read,addr,acout);inputclk,rst;input[7:0]data;outputread;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;wirealusel,acload,acinc;tri8t0(membus,data,bus[7:0]);arar1(clk,arload,bus[5:0],addr);pcpc1(clk,rst,pcload,pcinc,bus[5:0],pcout);tri6t1(pcbus,pcout,bus[5:0]);drdr1(clk,drload,bus[7:0],drout);tri8t2(drbus,drout,bus[7:0]);alualu1(alusel,acout,bus[7:0],aluout);acac1(clk,rst,acload,acinc,aluout,acout);irir1(clk,irload,bus[7:6],irout);controlc1(clk,rst,bus[7:6],read,membus,arload,pcload,pcinc,pcbus,drload,drbus,alusel,acload,acinc,irload);endmodule《高级计算机体系结构》实验3.InstMem模块的实现(用Altera的宏)4.DataMem模块的实现(用Altera的宏)5.顶层模块(系统:CPU+指令Mem+数据Mem)用Schematic实现6.引脚配置(要求引出。。。。)及测试数据Clk信号,复位信号7.测试在quartus中,将cpu.v文件设置为顶层文件。然后生成cpu和memery器件,建立一个block模板,在里面讲cpu和memery连接好,并配上相应的输入输出信号。接着,编译工程。然后建立一个wave文件,进行模拟仿真。最后连接实验箱,进行仿真。一.思考题1、单周期CPU的控制器设计与实验1中控制器设计有何异同。《高级计算机体系结构
本文标题:体系结构实验手册
链接地址:https://www.777doc.com/doc-2707810 .html