ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:372.10KB ,
资源ID:12515851      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12515851.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(湘潭大学计算机原理试验四多周期MIPSCPU存储器试验预习报告解析.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

湘潭大学计算机原理试验四多周期MIPSCPU存储器试验预习报告解析.docx

1、湘潭大学计算机原理试验四多周期MIPSCPU存储器试验预习报告解析实验四 多周期 MIPS CPU + 存储器实验一实验目的1、深入理解 MIPS CPU 指令系统的功能和工作原理;2、掌握多周期 CPU 的工作原理和逻辑功能实现;3、熟练掌握用 Verilog HDL 语言设计多周期存储器的方法;4、熟练掌握对多周期存储器的仿真实验验证和硬件测试两种调试方法;5、通过对多周期 CPU 的运行情况进行观察和分析,进一步加深理解。二实验设备硬件: 现代计算机组成原理实验系统(兼)Nios 32 位嵌入式系统实验开发平台EP1C12Q240Core(TM)i3-3240 CPU3.40GHz 3.

2、39GHz 1.91GB的内存软件: QuartusII 13.0sp1Microsoft Windows xp三实验内容1、设计一个 32 位 MIPS 多周期 CPU : 至少运行下列的 6 类 32 条 MIPS 指令。(1) and、 sub、addi(2 and、 0r、xor、 andi、 ori 、xori(3 sll 、srl 、sra(4) beq、 bne、(5) j、 jr(6) lw 、 sw2.设计一个存储器四实验原理与步骤实现上述原理框图根据功能将其分划分为控制单元 (cunit) 、执行单元 (eunit) 、指令单元 (iunit)以及存储单元 (munit)

3、四大模块。(1) .控制单元 (cunit)行等工作。主要由指令译码器控制器 (outputs control) 、算术逻辑运算控制器 (ALU control) 两 个子模块组成。(2).执行单元 (eunit) 主要由寄存器堆 (registers)和算术逻辑单元 (ALU) 两个子模块组成。其 MIPS 系统的寄存器堆由 32 个 32ALU 等逻辑运算。指令单元 (iunit) 的作用是决定下一条指令的地址 PC(3).存储单元 (munit)由存储器 (memory) 、指令寄存器 (instruction register) 和存储数据寄存 器 (memory data regis

4、ter) 组成。五实验源代码寄存器元件代码:module regfile (rna,rnb,d,wn,we,clk,clrn,qa,qb);input4:0rna,rnb,wn;input31:0d;inputwe,clk,clrn;output31:0qa,qb;reg31:0register 1:31;/r1-r31assignqa = (rna =0) ? 0 :registerrna;/readassignqb = (rnb =0) ? 0 :registerrnb;/readalways (posedge clk or negedge clrn) beginif (clrn = 0)

5、 begin /resetinteger i;for (i=1; i32; i=i+1) registeri = 0;endelse beginif (wn != 0) & (we = 1) /writeregisterwn = d;end end endmodule32 位四选一选择器:module mux4x32 (a0,a1,a2,a3,s,y);input 31:0a0,a1,a2,a3;input 1:0s;output 31:0y;function 31:0select;input 31:0a0,a1,a2,a3;input 1:0s;case (s)2b00:select= a0

6、;2b01:select= a1;2b10:select= a2;2b11:select= a3;endcase endfunction5 位二选一选择器: module mux2x5 (a0,a1,s,y);input 4:0 a0,a1;input s;output4:0 y;assign y = s ? a1 : a0;endmodule32 位二选一选择器: module mux2x32 (a0,a1,s,y);input31:0a0,a1;inputs;output31:0y;assigny = s ? a1 : a0;endmodule存储器元件:module mcmem (clk

7、, dataout, datain, addr, we, inclk, outclk);input31:0datain;input31:0addr;inputclk, we, inclk, outclk;output31:0dataout;wirewrite_enable = we & clk;lpm_ramdqram(.data(datain),.address(addr7:2),.we(write_enable),.inclock(inclk),.outclock(outclk),.q(dataout);defparamram.lpm_width= 32;defparamram.lpm_w

8、idthad= 6;defparamram.lpm_indata= registered;defparamram.lpm_outdata= registered;defparamram.lpm_file= mcmem.mif;defparamram.lpm_address_control= registered;endmodule控制部件:module mccu (op, func, z, clock, resetn, wpc, wir, wmem, wreg, iord, regrt, m2reg, aluc, shift, alusrca, alusrcb, pcsource, jal,

9、sext, state);input 5:0 op, func;input z, clock, resetn;output reg wpc, wir, wmem, wreg, iord, regrt, m2reg;output reg 3:0 aluc;output reg 1:0 alusrcb, pcsource;output reg shift, alusrca, jal, sext;output reg 2:0 state;reg 2:0 next_state;parameter2:0 sif =3b000,/ IF statesid =3b001,/ ID statesexe =3b

10、010,/ EXE statesmem= 3b011,/ MEM stateswb =3b100;/ WB statewire r_type,i_add,i_sub,i_and,i_or,i_xor,i_sll,i_srl,i_sra,i_jr;wire i_addi,i_andi,i_ori,i_xori,i_lw,i_sw,i_beq,i_bne,i_lui,i_j,i_jal; and(r_type,op5,op4,op3,op2,op1,op0); and(i_add,r_type, func5,func4,func3,func2,func1,func0); and(i_sub,r_t

11、ype, func5,func4,func3,func2, func1,func0); and(i_and,r_type, func5,func4,func3, func2,func1,func0); and(i_or, r_type, func5,func4,func3, func2,func1, func0); and(i_xor,r_type, func5,func4,func3, func2, func1,func0); and(i_sll,r_type,func5,func4,func3,func2,func1,func0); and(i_srl,r_type,func5,func4

12、,func3,func2, func1,func0); and(i_sra,r_type,func5,func4,func3,func2, func1, func0); and(i_jr, r_type,func5,func4, func3,func2,func1,func0); and(i_addi,op5,op4, op3,op2,op1,op0); and(i_andi,op5,op4, op3, op2,op1,op0); and(i_ori, op5,op4, op3, op2,op1, op0); and(i_xori,op5,op4, op3, op2, op1,op0); an

13、d(i_lw, op5,op4,op3,op2, op1, op0); and(i_sw, op5,op4, op3,op2, op1, op0); and(i_beq, op5,op4,op3, op2,op1, op0); and(i_bne, op5,op4,op3, op2,op1, op0); and(i_lui, op5,op4, op3, op2, op1, op0); and(i_j, op5,op4,op3,op2, op1,op0); and(i_jal, op5,op4,op3,op2, op1, op0);wire i_shift;or (i_shift,i_sll,i

14、_srl,i_sra);always * begin/ control signals dfault outputs:wpc =0;/ do not write pcwir =0;/ do not write irwmem= 0;/ do not write memorywreg =0;/ do not write register fileiord =0;/ select pc as memory addressaluc =4bx000;/ ALU operation: addalusrca =0;/ ALU input a: reg a or saalusrcb =2h0;/ ALU in

15、put b: reg bregrt =0;/ reg dest no: rdm2reg= 0;/ select reg cshift =0;/ select reg apcsource =2h0;/ select alu outputjal = 0;/ not a jalsext= 1;/ sign extendcase (state)/- IF:sif: begin/ IF statewpc =1;/ write pcwir =1;/ write IRalusrca =1;/ PCalusrcb =2h1;/ 4next_state =sid;/ next state: IDend/- ID

16、:sid:begin/ ID stateif (i_j) begin/ j instructionpcsource= 2h3;/ jump addresswpc= 1;/ write PCnext_state= sif;/ next state: IFendelse if (i_jal) begin/ jal instructionpcsource= 2h3;/ jump addresswpc= 1;/ write PCjal= 1;/ reg no = 31wreg= 1;/ save PC+4next_state= sif;/ next state: IFendelse if (i_jr)

17、 begin/ jr instructionpcsource= 2h2;/ jump registerwpc= 1;/ write PCnext_state= sif;/ next state: IFendelse begin/ other instructionaluc= 4bx000;/ addalusrca= 1;/ PCalusrcb= 2h3;/ branch offsetnext_state= sexe;/ next state: EXEendend/ EXE:sexe: begin / EXE statealuc3 = i_sra;aluc2 = i_sub | i_or | i

18、_srl | i_sra | i_ori | i_lui ;aluc1i_xor | i_sll | i_srl | i_sra | i_xori | i_beq | i_bne |i_lui ;| i_srl | i_sra | i_andi | i_ori ; / beq or bne instruction / branch address/ next state: IF/ other instruction/ lw or sw instruction/ select offset/ next state: MEM/ other instruction/ shift instructio

19、naluc0 = i_and | i_or | i_sllif (i_beq | i_bne) beginpcsource = 2h1;wpc = i_beq & z | i_bne & z; / write PC next_state = sif;endelse beginif(i_lw | i_sw) beginalusrcb = 2h2;next_state = smem;endelse beginif (i_shift)shift = 1;if (i_addi | i_andi | i_ori | i_xori | i_lui)alusrcb =2h2;/ select immedia

20、teif (i_andi | i_ori |i_xori)sext =0;/ 0-extendnext_state =swb;/ next state: WBend end end/ MEM:smem: begin / MEM stateiord = 1; / memory address = Cif (i_lw) beginnext_state = swb; / next state: WBendelse begin / store wmem = 1; / write memory next_state = sif; / next state: IFendend/ WB:swb: begin

21、 / WB stateif (i_lw)m2reg = 1; / select memory dataif (i_lw | i_addi | i_andi | i_ori | i_xori | i_lui)regrt = 1; / reg dest no: rtwreg = 1; / write register filenext_state = sif; / next state: IFend/ ENDdefault: begin next_state endendcaseend/ state registersalways (posedge clock or negedge resetn)

22、 begin if (resetn = 0) begin state = sif;endelse beginstate = next_state;endendendmodule32 位带使能端触发器: module dffe32 (d,clk,clrn,e,q);input 31:0 d;input clk,clrn,e;output 31:0 q;reg 31:0 q;always (negedge clrn or posedge clk)if (clrn = 0) beginq = 0;endelse beginif(e = 1) q = d;endendmodule32 位触发器:mod

23、ule dff32 (d,clk,clrn,q);input 31:0 d;input clk,clrn;output 31:0 q;reg 31:0 q;always (negedge clrn or posedge clk)if (clrn = 0) beginq = 0;end else begin q = d;endendmoduleALU 计算部件: module alu (a,b,aluc,r,z);input 31:0 a,b; input 3:0 aluc; output 31:0 r; output z;assign r = cal(a,b,aluc);assign z =

24、|r; function 31:0 cal;input 31:0 a,b;input 3:0 aluc;casex (aluc)4bx000: cal=a+b; 4bx100: cal=a-b; 4bx001: cal=a&b; 4bx101: cal=a|b; 4bx010: cal=ab; 4bx110: cal=b15:0,16h0; 4bx011: cal=ba4:0;4b1111: cal=$signed(b)a4:0;endcaseendfunction endmodule其他部件: module f (reg_dest,jal,wn);input4:0reg_dest;input

25、jal;output4:0wn;assignwn =reg_dest | 5jal;endmodulemodule sa (di,dot); input 4:0 di; output 31:0 dot; assign dot = 27b0,di;endmodulemodule out4 (out); output 31:0 out; assign out = 32h4;endmodulemodule e (immin,sext,immediate,offset);input15:0immin;inputsext;output31:0immediate,offset;wiree =sext &

26、immin15;wire15:0imm =16e;assignoffset =imm13:0,immin15:0,1b0,1b0;assignimmediate =imm,immin15:0;endmodulemodule combine (address,pc,add);input25:0address;input3:0pc;output31:0add;assignadd =pc3:0,address25:0,1b0,1b0;endmodulemodule convert1 (dain,sain,op,func,rs,rt,rd,imm,addr);input31:0 dain;output4:0sain,rs,rt,rd;output5:0op,func;output15:0imm;output25:0addr;assignsain =dain10:6;assignop= dain31:26;assignfunc

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1