您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 湘潭大学 计算机组成与原理 多周期CPU与存储器实验 实验报告
湘潭大学实验报告课程名称 计算机原理与设计 实验名称多周期CPU与存储器实验 页数专业 班级 同组者姓名 无组别 学号 姓名 实验日期一、实验目的1. 了解多周期 CPU 的数据传输通路。 2. 了解指令执行的周期划分。 3. 掌握用时序电路实现多周期 CPU 的控制部件的方法。 4. 了解指令存储器与数据存储器合二为一的实现方法。 5. 按给定数据,测试多周期 CPU 功能。 二、实验要求1、做好实验预习,掌握多周期 CPU + 存储器的总体电路设计和 CPU 的功能特性,并熟悉本实验中所用的控制台开关的作用和使用方法。 2、写出实验报告,内容是: ①实验目的; ②按理论分析值给出对应的仿真波形。 ③比较实验数据的理论分析值与实验结果值;并对结果进行分析。实验结果与理论分析值比较,有没有不同?为什么? ④通过本实验,你对多周期 CPU 有何认识,有什么心得体会? 三、实验原理 多周期 CPU + 存储器的总体电路设计如图 4-1 所示。 本实验模块设计如图 4-2 所示,包含多周期 CPU 模块 mccpu 和存储器模块 mcmem。 四、实验内容(1)设计元件 在 Quartus II 环境下,用文本输入编辑器 Text Editor 分别输入 mccpu.v 多周期 CPU 单元文件和 mcmem.v 存储器单元文件,编译 Verilog HDL 文件,并将 mccpu.v 与 mcmem.v 文件制作成可调用的原理图元件。 (2)以原理图方式建立顶层文件工程选择图形方式。根据图 4-2 输入实验电路图,从 Quartus II 的基本元件库中将各元件调入图形编辑窗口、连线,添加输入输出引脚。将所设计的图形文件 mccomp.bdf 保存到原先建立的文件夹中,将当前文件设置成工程文件,以后的操作就都是对当前工程文件进行的。 (3)器件选择 选择 Cyclone 系列,在 Devices 中选择器件 EP1C12QC240C8。编译,引脚锁定,再编译。引脚锁定后需要再次进行编译,才能将锁定信息确定下来,同时生成芯片编程/配置所需要的各种文件。 (4)芯片编程 Programming(可以直接选择光盘中的示例已完成的设计进行验证实验) 打开编程窗口。将配置文件 mccomp.sof 下载进 GW48 系列现代计算机组成原理系统中的 FPGA 中。 (5)选择实验系统的电路模式是 NO.0,验证 CPU 的控制和运算功能以及对存储器的访问功能。根据 mcmem.mif 文件初始化存储器,并设置 clock、resetn、mem_clk 的值,验证 CPU的控制和运算功能以及对存储器的访问功能,记录实验数据。 五、实验环境与设备GW48CP+主系统、pc机六、实验代码设计(含符号说明)modulealu(a,b,aluc,r,z);input[31:0]a,b;input[3:0]aluc;output[31:0]r;outputz;assignr=cal(a,b,aluc);assignz=~|r;function[31:0]cal;input[31:0]a,b;input[3:0]aluc;casex(aluc)4'bx000:cal=a+b;4'bx100:cal=a-b;4'bx001:cal=a&b;4'bx101:cal=a|b;4'bx010:cal=a^b;4'bx110:cal={b[15:0],16'h0};4'bx011:cal=ba[4:0];4'b0111:cal=ba[4:0];4'b1111:cal=$signed(b)a[4:0];endcaseendfunctionendmodulemoduledff32(d,clk,clrn,q);input[31:0]d;inputclk,clrn;output[31:0]q;reg[31:0]q;always@(negedgeclrnorposedgeclk)if(clrn==0)beginq=0;endelsebeginq=d;endendmodulemoduledffe32(d,clk,clrn,e,q);input[31:0]d;inputclk,clrn,e;output[31:0]q;reg[31:0]q;always@(negedgeclrnorposedgeclk)if(clrn==0)beginq=0;endelsebeginif(e==1)q=d;endendmodulemodulemccomp(clock,resetn,q,a,b,alu,adr,tom,fromm,pc,ir,mem_clk);inputclock,resetn,mem_clk;output[31:0]a,b,alu,adr,tom,fromm,pc,ir;output[2:0]q;wirewmem;mccpumc_cpu(clock,resetn,fromm,pc,ir,a,b,alu,wmem,adr,tom,q);mcmemmemory(clock,fromm,tom,adr,wmem,mem_clk,mem_clk);endmodulemodulemccpu(clock,resetn,frommem,pc,inst,alua,alub,alu,wmem,madr,tomem,state);input[31:0]frommem;inputclock,resetn;output[31:0]pc,inst,alua,alub,alu,madr,tomem;output[2:0]state;outputwmem;wire[3:0]aluc;wire[4:0]reg_dest;wirez,wpc,wir,wmem,wreg,iord,regrt,m2reg,shift,selpc,jal,sext;wire[31:0]npc,rega,regb,regc,mem,qa,qb,res,opa,bra,alub,alu_mem;wire[1:0]alusrcb,pcsource;wire[31:0]sa={27'b0,inst[10:6]};mccucontrol_unit(inst[31:26],inst[5:0],z,clock,resetn,wpc,wir,wmem,wreg,iord,regrt,m2reg,aluc,shift,selpc,alusrcb,pcsource,jal,sext,state);wiree=sext&inst[15];wire[15:0]imm={16{e}};wire[31:0]immediate={imm,inst[15:0]};wire[31:0]offset={imm[13:0],inst[15:0],1'b0,1'b0};dffe32ip(npc,clock,resetn,wpc,pc);dffe32ir(frommem,clock,resetn,wir,inst);dff32dr(frommem,clock,resetn,mem);dff32ra(qa,clock,resetn,rega);dff32rb(qb,clock,resetn,regb);dff32rc(alu,clock,resetn,regc);assigntomem=regb;mux2x5reg_wn(inst[15:11],inst[20:16],regrt,reg_dest);wire[4:0]wn=reg_dest|{5{jal}};//jal:r31--p4;mux2x32mem_address(pc,regc,iord,madr);mux2x32result(regc,mem,m2reg,alu_mem);mux2x32link(alu_mem,pc,jal,res);mux2x32oprand_a(rega,sa,shift,opa);mux2x32alu_a(opa,pc,selpc,alua);mux4x32alu_b(regb,32'h4,immediate,offset,alusrcb,alub);mux4x32nextpc(alu,regc,qa,jpc,pcsource,npc);//nextpcregfilerf(inst[25:21],inst[20:16],res,wn,wreg,clock,resetn,qa,qb);wire[31:0]jpc={pc[31:28],inst[25:0],1'b0,1'b0};alualunit(alua,alub,aluc,alu,z);endmodulemodulemccu(op,func,z,clock,resetn,wpc,wir,wmem,wreg,iord,regrt,m2reg,aluc,shift,alusrca,alusrcb,pcsource,jal,sext,state);input[5:0]op,func;inputz,clock,resetn;outputregwpc,wir,wmem,wreg,iord,regrt,m2reg;outputreg[3:0]aluc;outputreg[1:0]alusrcb,pcsource;outputregshift,alusrca,jal,sext;outputreg[2:0]state;reg[2:0]next_state;parameter[2:0]sif=3'b000,//IFstatesid=3'b001,//IDstatesexe=3'b010,//EXEstatesmem=3'b011,//MEMstateswb=3'b100;//WBstatewirer_type,i_add,i_sub,i_and,i_or,i_xor,i_sll,i_srl,i_sra,i_jr;wirei_addi,i_andi,i_ori,i_xori,i_lw,i_sw,i_beq,i_bne,i_lui,i_j,i_jal;and(r_type,~op[5],~op[4],~op[3],~op[2],~op[1],~op[0]);and(i_add,r_type,func[5],~func[4],~func[3],~func[2],~func[1],~func[0]);and(i_sub,r_type,func[5],~func[4],~func[3],~func[2],func[1],~func[0]);and(i_and,r_type,func[5],~func[4],~func[3],func[2],~func[1],~func[0]);and(i_or,r_type,func[5],~func[4],~func[3],func[2],~func[1],func[0]);and(i_xor,r_type,func[5],~func[4],~func[3],func[2],func[1],~func[0]);and(i_sll,r_type,~func[5],~func[4],~func[3],~func[2],~func[1],~func[0]);and(i_srl,r_type,~func[5],~func[4],~func[3],~func[2],func[1],~func[0]);and(i_sra,r_type,~func[5],~func[4],~func[3],~func[2],func[1],func[0]);and(i_jr,r_type,~func[5],~func[4],func[3],~func[2],~func[1],~func[0]);and(i_addi,~op[5],~op[4],op[3],~op[2],~op[1],~op[0]);and(i_andi,~op[5],~op[4],op[3],op[2],~op[1],~op[0]);and(i_ori,~op[5]
本文标题:湘潭大学 计算机组成与原理 多周期CPU与存储器实验 实验报告
链接地址:https://www.777doc.com/doc-4282747 .html