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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(杭电计组实验九Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

杭电计组实验九Word文档格式.docx

1、0 rd; /rd地址0 rs_data; /rs数据0 rt_data; /rt数据0 rd_data; /rd数据0 PC;0 PC_new;output ZF;output OF;output Write_Reg; /是否写入0 W_Data;output rd_rt_s; /控制那个作为目的寄存器0W_Addr;/目的操作数地址output 15:0 imm; /立即数0 imm_data;/被扩展的立即数output imm_s;/是否需要扩展output rt_imm_s; /B端选择rt或者是imm0 ALU_B; /ALU_B端口数据output Mem_Write; /是否写

2、入数据rom0M_R_Data;/从数据rom读出来的数据0ALU_Data;/ALU运算出来的结果,根据alu_mem_s选择由M_W_Data或者W_Data来赋值output alu_mem_s;/看上面 /读指令 ex7 pc ( .clka(clk), .douta(inst), .rst(reset), .PC(PC), .PC_new(PC_new) /解析指令 ); analysis_inst analysis_inst( .inst(inst), .ALU_OP(ALU_OP), .rs(rs), .rt(rt), .rd(rd), .Write_Reg(Write_Reg)

3、, .imm(imm), .rd_rt_s(rd_rt_s), .imm_s(imm_s), .rt_imm_s(rt_imm_s), .Mem_Write(Mem_Write), .alu_mem_s(alu_mem_s) /读取源操作数的值: assign W_Addr = (rd_rt_s)?rt:rd; assign imm_data = (imm_s)?16imm15,imm:161b0,imm; reg1 Reg( .R_Addr_A(rs), .R_Addr_B(rt), .Clk(clk), .W_Addr(W_Addr), .W_Data(W_Data), .R_Data_A

4、(rs_data), .R_Data_B(rt_data), .Reset(reset), .Write_Reg(Write_Reg) /不写入 assign ALU_B=(rt_imm_s)?imm_data:rt_data; /对源操作数运算,存于目的操作数 ex3 ALU( .ALU_OP(ALU_OP), .A(rs_data), .B(ALU_B), .F(ALU_Data), .ZF(ZF), .OF(OF)/-wire clk_temp;wire d_outn;reg d_out=0;assign clk_temp = clk d_out ;assign d_outn = d_o

5、ut ;always(posedge clk_temp)begin d_out = d_outn ;end /数据存储器 Data_Rom Datarom ( .clka(clk_temp), / input clka .wea(Mem_Write), / input 0 : 0 wea .addra(ALU_Data5:0), / input 5 : 0 addra .dina(rt_data), / input 31 : 0 dina .douta(M_R_Data) / output 31 : 0 douta); assign W_Data = alu_mem_s?M_R_Data:AL

6、U_Data;endmodulepc模块:module ex7(clka,douta,rst,PC,PC_newinput rst;input clka;output wire31:0 douta;output reg31:wire 31:0dina;reg 0:0 wea;assign PC_new=PC+4;initial PC=32h00000000; wea=0;ex77 regrom ( .clka(clka), / input clka .wea(wea), / input 0 : .addra(PC7:2), / input 5 : .dina(dina), / input 31

7、 : .douta(douta) / output 31 :always(posedge rst or posedge clka)begin if(rst) PC=32 else PC=PC_new;analysis_inst模块:module analysis_inst(inst,ALU_OP,rs,rt,rd,Write_Reg,imm,rd_rt_s,imm_s,rt_imm_s,Mem_Write,alu_mem_sinput 31:output reg 2:output reg 4:output reg Write_Reg;output reg 15:output reg rd_rt

8、_s;output reg imm_s;output reg rt_imm_s;output reg Mem_Write;output reg alu_mem_s;always(*)/-处理R型指令- if(inst31:26=6b000000) /判断是否为R型 begin rd=inst15:11; /rd rt=inst20:16; /rt rs=inst25:21; /rs alu_mem_s=0;/以alu结果输出 Mem_Write=0;/是否写入数据存储器 rd_rt_s=0;/rd作为目的存储器 rt_imm_s=0;/rt作为源操作数 Write_Reg=(inst5:0=0

9、)?1b0:b1; case(inst5:0) /映射对应的ALU 6b100000:ALU_OP=3B100; 6b100010:B101;b100100:B000;b100101:B001;b100110:B010;b100111:B011;b101011:B110;b000100:B111; endcase end/-处理I型立即寻址指令- 29=3b001) imm=inst15:0; rd_rt_s=1;/rt作为目的存储器 rt_imm_s=1;/imm作为源操作数 Write_Reg=1; /判断属于那条指令 case(inst31:26)b001000: begin imm_s

10、=1; ALU_OP=3b001100: begin imm_s=0;b001110:b001011: endcase/-处理I型取数/存数指令-30=2b10&inst28:26=3b011) imm_s=1; /读取数据时,以mem输出的数据写入,所以alu_mem_s=1;b100011: begin alu_mem_s=1;Write_Reg=1; begin Mem_Write=1;Write_Reg=0;Reg模块module reg1(R_Addr_A,R_Addr_B,Clk,W_Addr,W_Data,R_Data_A,R_Data_B,Reset,Write_Reginpu

11、t Clk,Reset;input wire Write_Reg;input wire4:0 R_Addr_A;0 W_Addr;0 R_Addr_B;input wire31:reg31:0 REG_Files31:0 R_Data_A;0 R_Data_B;integer i=0;always (posedge Clk or posedge Reset) /下降沿存储 if(Reset) /初始化 for(i=0;i=31;i=i+1) REG_Filesi else begin if(Write_Reg) REG_FilesW_Addr=W_Data; end assign R_Data

12、_A=REG_FilesR_Addr_A; assign R_Data_B=REG_FilesR_Addr_B;ALU模块:module ex3(ALU_OP,A,B,F,ZF,OFinput2:input31:0 A,B;output reg 31:0 F;output reg ZF,OF;reg C32,C31;reg 7:0i;case(ALU_OP) 3b000:F=A&B;b001:F=A|B;b010:F=AB;b011:F=(A|B);b100:beginC32,F=A+B;OF=C32A31B31F31;b101:beginC32,F=A-B;b110:begin if(AB)

13、 F=1; else F=0;b111:F=B在00832820指令后(即add $5,$4,$3 此时$5=0000_0005)后加入一条addi $6 $5 FFFFFFFF 机器码为(001000_00101_00110_1111111111111111=20A6FFFF)即$5+(-1)=$6,结果$6=0000_0004#处理I型取数/存数指令及其数据通路新增一个数据存储器RAMMem_Write控制写入由译码处确定Mem_Addr控制地址由ALU计算得出M_W_Data写入数据,由寄存器rt_data确定M_R_Data读出来的数据,根据alu_mem_s来判定这个写进W_Data。有效地址计算通过ALU实现。rt_imm_s=1;imm_s=1;使存储器的clk是CPU的clk的两倍不这样的话,会使CPU还没读指令,存储器已经处理完了,但是结果不正确。regd_out=0;d_out /数据存储器Data_Rom Datarom (.clka(clk_temp), / input clka.wea(Mem_Write), / input 0 :.addra(ALU_Data5:.dina(rt_data), / input 31 :.douta(M_R_Data) / output 31 :六、意见和建议1.无

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

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