您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 湘潭大学 计算机组成与原理 控制器实验 实验报告
湘潭大学实验报告课程名称 计算机原理与设计 实验名称控制器实验 页数专业 班级 同组者姓名 无组别 学号 姓名 实验日期一、实验目的1.了解多周期 MIPS CPU 的控制部件的总体结构。 2.掌握多周期 MIPS CPU 的控制部件的状态转移。 3.掌握用 Verilog HDL 实现有限状态机的常用方法。 4.验证实验台多周期 MIPS CPU 控制部件的控制信号产生功能。 二、实验要求1、做好实验预习:要求掌握周期 MIPS CPU 的控制部件的总体结构以及状态转移,并熟悉本实验中所用的控制台开关的作用和使用方法。 2、记录实验结果,包括以下内容: ①根据操作结果填好控制信号的真值表; ②按理论分析值给出对应的仿真波形。 3、写出实验报告,包括以下内容: ①列表比较实验数据的理论分析值与实验结果值;并对结果进行分析。实验结果与理论 分析值比较,有没有不同?为什么? ②通过本实验,你对周期MIPS CPU的控制部件的总体结构有何认识,有什么心得体会? 三、实验原理 多周期 MIPS CPU 的控制部件的总体结构如图 3-2-1 所示。 多周期 MIPS CPU 的控制部件的状态转移如图 3-2-2 所示。 本实验根据状态及指令直接对控制信号赋值,使用中间变量 next_state,意为下一状态。 在当前状态中,根据指令对 next_state 赋值,并在每个时钟上升沿把 next_state 打入状态寄 存器,这是用 Verilog HDL 实现有限状态机时常用的方法。模块设计如图 3-2-3 所示。 图 3-2-1 多周期 MIPS CPU 的控制部件的总体结构图 图 3-2-2 多周期 MIPS CPU 的控制部件的状态状态转移图 四、实验内容(1)设计元件 在 Quartus II 环境下,用文本输入编辑器 Text Editor 输入 mccu.v 单元文件,编译 Verilog HDL 文件,并将 mccu.v 单元文件制作成可调用的原理图元件。 (2)以原理图方式建立顶层文件工程 选择图形方式。根据图 3-2-3 输入实验电路图,从 Quartus II 的基本元件库中将各元件调 入图形编辑窗口、连线,添加输入输出引脚。 将所设计的图形文件保存到原先建立的文件夹中,将当前文件设置成工程文件,以后的 操作就都是对当前工程文件进行的。 (3)器件选择 选择 Cyclone 系列,在 Devices 中选择器件 EP1C12QC240C8。编译,引脚锁定,再编译。 引脚锁定后需要再次进行编译,才能将锁定信息确定下来,同时生成芯片编程/配置所需要 的各种文件。 (4)芯片编程 Programming(可以直接选择光盘中的示例已完成的设计进行验证实验)打开编程窗口。将配置文件 mccu.sof 下载进 GW48 系列现代计算机组成原理系统中的 FPGA 中。 (5)选择实验系统的电路模式是 NO.0,验证控制部件的功能 设置 opfunc[5..0]、clk、op_func、z、clock、resetn 的值,验证控制部件的功能,记录实 验数据。 五、实验环境与设备GW48CP+主系统、pc机六、实验代码设计(含符号说明)modulemccu(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,sid=3'b001,sexe=3'b010,smem=3'b011,swb=3'b100;wirer_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)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],~op[4],op[3],op[2],~op[1],op[0]);and(i_xori,~op[5],~op[4],op[3],op[2],op[1],~op[0]);and(i_lw,op[5],~op[4],~op[3],~op[2],op[1],op[0]);and(i_sw,op[5],~op[4],op[3],~op[2],op[1],op[0]);and(i_beq,~op[5],~op[4],~op[3],op[2],~op[1],~op[0]);and(i_bne,~op[5],~op[4],~op[3],op[2],~op[1],op[0]);and(i_lui,~op[5],~op[4],~op[3],op[2],op[1],op[0]);and(i_j,~op[5],~op[4],~op[3],~op[2],op[1],~op[0]);and(i_jal,~op[5],~op[4],~op[3],~op[2],op[1],op[0]);wirei_shift;or(i_shift,i_sll,i_srl,i_sra);always@*beginwpc=0;wir=0;wmem=0;wreg=0;iord=0;aluc=4'bx000;alusrca=0;alusrcb=2'h0;regrt=0;m2reg=0;shift=0;pcsource=2'h0;jal=0;sext=1;case(state)sif:beginwpc=1;wir=1;alusrca=1;alusrcb=2'h1;next_state=sid;endsid:beginif(i_j)beginpcsource=2'h3;wpc=1;next_state=sif;endelseif(i_jal)beginpcsource=2'h3;wpc=1;jal=1;wreg=1;next_state=sif;endelseif(i_jr)beginpcsource=2'h2;wpc=1;next_state=sif;endelsebeginaluc=4'bx000;alusrca=1;alusrcb=2'h3;next_state=sexe;endendsexe:beginaluc[3]=i_sra;aluc[2]=i_sub|i_or|i_srl|i_sra|i_ori|i_lui;aluc[1]=i_xor|i_sll|i_srl|i_sra|i_xori|i_beq|i_bne|i_lui;aluc[0]=i_and|i_or|i_sll|i_srl|i_sra|i_andi|i_ori;if(i_beq||i_bne)beginpcsource=2'h1;wpc=i_beq&z|i_bne&~z;next_state=sif;endelsebeginif(i_lw||i_sw)beginalusrcb=2'h2;next_state=smem;endelsebeginif(i_shift)shift=1;if(i_addi||i_andi||i_ori||i_xori||i_lui)alusrcb=2'h2;if(i_andi||i_ori||i_xori)next_state=swb;endendendsmem:beginiord=1;if(i_lw)beginnext_state=swb;endelsebeginwmem=1;next_state=sif;endendswb:beginif(i_lw)m2reg=1;if(i_lw||i_addi||i_andi||i_ori||i_xori||i_lui)regrt=1;wreg=1;next_state=sif;enddefault:beginnext_state=sif;endendcaseendalways@(posedgeclockornegedgeresetn)beginif(resetn==0)beginstate=sif;endelsebeginstate=next_state;endendendmodule七、实验检验与测试仿真结果波形图: 引脚分配截图: 八、测试数据状态 Q[2..0] inst z wpc Pcsource wir iord wmem aluc[3..0] selpc shift alusrcb[1..0] sext wreg m2reg regrt jal IF 000 x x 1 00 1 0 0 x000 1 x 01 x 0 x x x ID 001 j x 1 11 0 x 0 xxxx x x xx x 0 x x x jal x 1 11 0 x 0 xxxx x x xx x 1 x x 1 jr x 1 10 0 x 0 xxxx x x xx x 0 x x x JP x 0 xx 0 x 0 x000 1 x 11 1 0 x x x EXE 010 add x 0 xx 0 x 0 x000 0 0 00 x 0 x x x sub x 0 0 0 0 0 0100 0 0 00 1 0 x x x and x 0 0 0 0 0 0001 0 0 00 1 0 x x x or x 0 0 0 0 0 0101 0 0 00 1 0 x x x xor x 0 0 0 0 0 0010
本文标题:湘潭大学 计算机组成与原理 控制器实验 实验报告
链接地址:https://www.777doc.com/doc-4282751 .html