版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文档计算机组成原理实验实验报告实验二)学院名称:专业(班级) :学生姓名学号时 间 : 2017 年 11 月 25 日文案大全实用标准文档成绩实 验 二 : 单周期 CPU 设计与实现实验目的(1) 掌握单周期 CPU 数据通路图的构成、原理及其设计方法;(2) 掌握单周期 CPU 的实现方法,代码实现方法;(3) 认识和掌握指令与 CPU 的关系;(4) 掌握测试单周期 CPU 的方法;(5) 掌握单周期 CPU 的实现方法。实验内容设计一个单周期的 MIPSCPU ,使其能实现下列指令:= 算术运算指令(1)add rd , rs, rt(说明:以助记符表示,是汇编指令;以代码表
2、示,是机器指令)000000rs(5 位 )rt(5 位 )rd(5 位 )reserved功能: rd rs + rt 。reserved 为预留部分,即未用,一般填“ 0 ”。 ( 2 ) addi rt , rs , immediate000001rs(5 位 )rt(5 位 )immediate (16 位 )功能: rt rs + (sign-extend) immediate ; immediate 符号扩展再参加“加”运算。 ( 3 ) sub rd , rs , rt000010rs(5 位 )rt(5 位 )rd(5 位 )reserved功能: rd rs - rt= 逻辑
3、运算指令( 4 ) ori rt , rs , immediate010000rs(5 位 )rt(5 位 )immediate (16 位 )功能: rt rs | (zero-extend) immediate ; immediate 做“ 0 ”扩展再参加“或”运算 ( 5 ) and rd , rs , rt010001rs(5 位 )rt(5 位 )rd(5 位 )reserved功能: rd rs & rt ;逻辑与运算。 ( 6 ) or rd , rs , rt010010rs(5 位 )rt(5 位 )rd(5 位 )reserved功能: rd rs | rt ;逻辑或运算
4、。= 移位指令( 7 ) sll rd, rt,sa011000未用rt(5 位 )rd(5 位 )sareserved功能: rd rt 比较指令文案大全实用标准文档8) slt rd, rs, rt 带符号数011100rs(5 位 )rt(5 位 )rd(5 位)reserved功能: if (rs 存储器读 / 写指令9) sw rt , immediate( rs) 写存储器100110rs(5 位 )rt(5 位 )immediate (16 位 )功能: memoryrs+ (sign-extend)immediate rt ;immediate 符号扩展再相加。 即将 rt 寄
5、存器的内容保存到 rs 寄存器内容和立即数符号扩展后的数相加作为地址的内存单元 中。10) lw rt , immediate (rs) 读存储器100111rs(5 位 )rt(5 位)immediate (16 位 )功能: rt memoryrs + (sign-extend) immediate ; immediate 符号扩展再相加。 即读取 rs 寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后 保存到 rt 寄存器中。= 分支指令( 11 )beq rs,rt, immediate110000rs(5 位 )rt(5 位)immediate (16 位 )功能:
6、 if(rs=rt) pc pc + 4 + (sign-extend)immediate 2 else pc pc + 4特别说明: immediate 是从 PC+4 地址开始和转移到的指令之间指令条数。immediate符号扩展之后左移 2 位再相加。为什么要左移 2 位?由于跳转到的指令地址肯定是 4 的倍 数(每条指令占 4 个字节) ,最低两位是 “ 00 ”,因此将 immediate 放进指令码中的时候, 是右移了 2 位的,也就是以上说的“指令之间指令条数”。12 ) bne rs,rt, immediate110001rs(5 位 )rt(5 位 )immediate功能:
7、 if(rs!=rt) pc pc + 4 + (sign-extend)immediate 0) pc pc + 4 + (sign-extend) immediate 跳转指令14 ) j addr111000addr27.2= 停机指令(15 )halt11111100000000000000000000000000(26位 )功能:停机;不改变 PC 的值, PC 保持不变。文案大全实用标准文档三. 实验原理1. 时间周期:单周期 CPU 指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执 行,即一条指令用一个时钟周期完成。 电平从低到高变化的瞬间称为时钟上升沿, 两个相
8、邻 时钟上升沿之间的时间间隔称为一个时钟周期。时钟周期一般也称振荡周期( 如果晶振的输 出没有经过分频就直接作为 CPU 的工作时钟,则时钟周期就等于振荡周期。若振荡周期经二分频后形成 时钟脉冲信号作为 CPU 的工作时钟,这样,时钟周期就是振荡周期的两倍。 )CPU 在处理指令时,一般需要经过以下几个步骤:(1) 取指令 (IF ):根据程序计数器 PC 中的指令地址,从存储器中取出一条指令,同时, PC 根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令 时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PC 。(2) 指令译码 (ID ):
9、对取指令操作中得到的指令进行分析并译码,确定这条指令需要完 成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。(3) 指令执行 (EXE ):根据指令译码得到的操作控制信号,具体地执行指令动作,然后 转移到结果写回状态。(4) 存储器访问 (MEM ):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址, 把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得 到数据地址单元中的数据。(5) 结果写回 (WB ):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存 器中。单周期 CPU ,是在一个时钟周期内完成这五个阶段的处理。对于不同的指
10、令,需要执行的步骤是不同的,其中取字指令(lw )需要执行全部五个步骤。因此, CPU 的时间周期由取字指令决定。2. 指令类型:MIPS 的三种指令类型:文案大全实用标准文档其中,op : 为操作码;rs :只读。为第 1 个源操作数寄存器, 寄存器地址 (编号)是 0000011111 ,001F ; rt :可读可写。为第 2 个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上) ; rd : 只写。为目的操作数寄存器,寄存器地址(同上) ;sa : 为位移量( shift amt ),移位指令用于指定移多少位;funct :为功能码,在寄存器类型指令中( R 类型)用来指定指令的功
11、能与操作码配合 使用;immediate :为 16 位立即数,用作无符号的逻辑操作数、有符号的算术操作数、数据 加载( Load )/ 数据保存( Store )指令的数据地址字节偏移量和分支指令中相对程序计数 器( PC)的有符号偏移量;address : 为地址。在本 CPU 设计中,由于指令的类型较少,所以所有指令均由操作码(op )确定。在 R型指令中,功能码( funct )为 000000 。3. 控制线路图与数据通路:文案大全实用标准文档上图为 CPU 的数据通路和必要的控制线路图, 其中 Ins.Mem 为指令存储器, Data.Mem 为数据存储器。 访问存储器时, 先给出
12、内存地址, 然后由读或写信号控制操作。对于寄存器 组,先给出寄存器地址,读操作时,输出端就直接输出相应数据;而在写操作时,在 WE 使能信号为 1 ,在时钟边沿触发将数据写入寄存器。4. 控制信号:控制信号的作用控制信号名状态“ 0 ”状态“ 1 ”Reset初始化 PC 为 0PC 接收新地址PCWrePC 不更改,相关指令: haltPC 更改,相关指令:除指令 halt 外ALUSrcA来自寄存器堆 data1 输出,相关指 令: add 、sub 、addi 、or 、and 、 ori 、beq 、bne 、bgtz 、slt 、sw 、lw来自移位数 sa ,同时,进行 (zero
13、-extend)sa ,即 270,sa ,相 关指令: sllALUSrcB来自寄存器堆 data2 输出,相关指 令:add 、sub 、or 、and 、sll 、slt 、 beq 、 bne 、bgtz来自 sign 或 zero 扩展的立即数, 相关 指令: addi 、ori 、 sw、lwDBDataSrc来自 ALU 运算结果的输出,相关指 令:add 、addi 、sub 、ori 、or 、and 、 slt 、 sll来自数据存储器( Data MEM )的输 出,相关指令: lwRegWre无写寄存器组寄存器,相关指令: beq 、bne 、bgtz 、sw 、hal
14、t 、j寄存器组写使能,相关指令: add 、 addi 、sub 、ori 、or 、and 、slt 、sll 、 lw文案大全实用标准文档InsMemRW写指令存储器读指令存储器 (Ins. Data)/RD读数据存储器,相关指令: lw输出高阻态/WR写数据存储器,相关指令: sw无操作RegDst写寄存器组寄存器的地址,来自 rt 字段,相关指令: addi 、 ori 、 lw写寄存器组寄存器的地址,来自 rd 字 段,相关指令: add 、sub 、 and 、or 、 slt 、 sllExtSel(zero-extend) immediate ( 0 扩展 ), 相关指令:
15、ori(sign-extend) immediate ( 符号扩展 ) ,相关指令: addi 、sw、lw 、bne 、 bne 、 bgtzPCSrc1.000 :pc pc+4 ,相关指令: add 、addi 、sub 、 or 、 ori 、and 、slt 、 sll 、sw 、lw、 beq(zero=0) 、 bne(zero=1) 、 bgtz(sign=1 ,或 zero=1) ;01 :pc pc+4+(sign-extend) immediate ,相关指令: beq(zero=1) 、 bne(zero=0) 、 bgtz(sign=0 , zero=0) ;10 :
16、pc (pc+4)31.28,addr27.2,0,0,相关指令: j;11 :未用ALUOp2.0ALU 8 种运算功能选择 (000-111) ,看功能表ALU 功能表ALUOp2.0功能描述000Y = A + B加001Y = A B减010Y = BAB 左移 A 位011Y = A B或100Y = A B与101Y=(AB )?1: 0比较 A 与 B 不带符号110if (AB &(A31 = B31 )Y = 1;else if ( A31 & !B31) Y = 1; else Y = 0;比较 A 与 B 带符号111Y = A B异或附:本 CPU 的指令集并未用到 A
17、LU 的全部功能。5. 主要模块接口说明:Instruction Memory: 指令存储器 ,address ,指令存储器地址输入端口DataIn ,指令存储器数据输入端口(指令代码输入端口) DataOut ,指令存储器数据输出端口(指令代码输出端口) InsMemRW ,指令存储器读写控制信号,为 0 写,为 1 读 Data Memory :数据存储器 ,address ,数据存储器地址输入端口DataOut ,数据存储器数据输出端口文案大全实用标准文档/RD ,数据存储器读控制信号,为 0 读/WR ,数据存储器写控制信号,为 0 写 Register File :寄存器组Read
18、Reg1 , rs 寄存器地址输入端口Read Reg2 , rt 寄存器地址输入端口Write Reg ,将数据写入的寄存器端口,其地址来源rt 或 rd 字段Write Data ,写入寄存器的数据输入端口Read Data1 , rs 寄存器数据输出端口Read Data2 , rt 寄存器数据输出端口WE ,写使能信号,为 1 时,在时钟边沿触发写入RST ,寄存器清零信号,为 0 时寄存器清零ALU : 算术 逻辑单元result , ALU 运算结果zero ,运算结果标志,结果为 0 ,则 zero=1 ;否则 zero=0sign ,运算结果标志,结果最高位为 0,则 sign
19、=0 ,正数;否则, sign=1 ,负数四. 实验器材电脑一台, Xilinx Vivado 软件一套, Basys3 板一块。五. 实验过程与结果1.各个指令对应的控制信号指令PCWreALUSrcAALUSrcBDBDataSrcRegWreInsMemRWRDWRRegDstExtSelAdd100011111XAddi1010111101Sub100011111XOri1010111100And100011111XOr100011111XSll110011111XSlt100011111XSw101X0110X1Lw1011110101Beq100X0111X1Bne100X0111
20、X1文案大全实用标准文档Bgtz100X0111X1J1XXX0111XXHalt0XXX0111XX控制信号ALUOpAdd000Addi000Sub001Ori011And100Or011Sll010Slt110Sw000Lw000Beq001Bne001Bgtz101J010HaltXXX除异或运算( 111 )外, ALU 所有功能均被使用。PCSrc指令00add 、addi 、sub 、or 、ori 、and 、slt 、sll 、sw 、lw 、beq(zero=0) 、bne(zero=1) 、 bgtz(sign=1 ,或 zero=1)01beq(zero=1) 、 bn
21、e(zero=0) 、 bgtz(sign=0 ,zero=0)10j2.主要模块代码及仿真( 1 )控制单元( control unit )Verilog 代码:文案大全实用标准文档1.module controlUnit(2.input 5:0 opcode,3.input zero,4.input sign,5.output reg PCWre,6.output reg ALUSrcA,7.output reg ALUSrcB,8.output reg DBDataSrc,9.output reg RegWre,10.output reg InsMemRW,11.output reg R
22、D,12.output reg WR,13.output reg RegDst,14.output reg ExtSel,15.output reg 1:0 PCSrc,16.output reg 2:0 ALUOp17.);18.initial begin19.RD = 1;20.WR = 1;21.RegWre = 0;22.InsMemRW = 0;23.end24.always (opcode) begin25.case (opcode)26.6b000000:begin / add27.PCWre = 1;28.ALUSrcA = 0;29.ALUSrcB = 0;30.DBData
23、Src = 0;31.RegWre = 1;32.InsMemRW = 1;33.RD = 1;34.WR = 1;35.RegDst = 1;36.ALUOp = 3b000;37.end38.6b000001:begin /addi39.PCWre = 1;40.ALUSrcA = 0;41.ALUSrcB = 1;42.DBDataSrc = 0;43.RegWre = 1;44.InsMemRW = 1;文案大全实用标准文档RD = 1;WR = 1;RegDst = 0;ExtSel = 1;ALUOp = 3b000; end 6b000010:begin /subPCWre =
24、1;ALUSrcA = 0;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3b001; end 6b010000:begin / oriPCWre = 1;ALUSrcA = 0;ALUSrcB = 1;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 0;ExtSel = 0;ALUOp = 3b011; end 6b010001:begin /andPCWre = 1;ALUSrcA = 0;ALUS
25、rcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3b100; end 6b010010:begin / or文案大全实用标准文档00031.132.文案大全PCWre = 1;AL
26、USrcA = 0;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3b011;end6b011000:begin /sllPCWre = 1;ALUSrcA = 1;ALUSrcB = 0;DBDataSrc = 0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3b010;end6b011100:begin /sltPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;DBDataSrc =
27、0;RegWre = 1;InsMemRW = 1;RD = 1;WR = 1;RegDst = 1;ALUOp = 3b110;end6b100110:begin /swPCWre = 1;ALUSrcA = 0;ALUSrcB = 1;RegWre = 0;InsMemRW = 1;RD = 1;WR = 0;ExtSel =1;实用标准文档63.16
28、76.ALUOp = 3b000; end 6b100111:begin /lwPCWre = 1;ALUSrcA = 0;ALUSrcB = 1;DBDataSrc = 1;RegWre = 1;InsMemRW = 1;RD = 0;WR = 1;RegDst = 0;ExtSel = 1;ALUOp = 3b000;end 6b110000:begin /beqPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;RegWre = 0;InsMemRW = 1;RD = 1;WR
29、= 1;ExtSel = 1;ALUOp = 3b001; end 6b110001:begin /bnePCWre = 1;ALUSrcA = 0;ALUSrcB = 0;RegWre = 0;InsMemRW = 1;RD = 1;WR = 1;ExtSel = 1;ALUOp = 3b001; end 6b110010:beginPCWre = 1;ALUSrcA = 0;ALUSrcB = 0;RegWre = 0;InsMemRW = 1;RD = 1;文案大全实用标准文档WR = 1;ExtSel = 1;ALUOp = 3b001;end6b111000:begin /jPCWr
30、e = 1;RegWre = 0;InsMemRW = 1;RD = 1;WR = 1;ALUOp = 3b010;end6b111111:begin /haltPCWre = 1;RegWre = 0;InsMemRW = 1;RD = 1;WR = 1;enddefault :beginRD = 1;WR = 1;RegWre = 0;InsMemRW = 0;endendcaseendalways(opcode or zero or sign) beginif (opcode = 6b111000) / jPCSrc = 2b10;else if (opcode5:3 = 3b110)
31、beginif (opcode2:0 = 3b000) begin if (zero = 1)PCSrc = 2b01;elsePCSrc = 2b00;endelse if (opcode2:0 = 3b001) begin if (zero = 0)PCSrc = 2b01;elsePCSrc = 2b00;endelse begin实用标准文档221.if (zero = 0 & sign = 0)222.PCSrc = 2b01;223.else224.PCSrc = 2b00;225.end226.end227.else begin228.PCSrc = 2b00;229.end23
32、0.end231.endmodule仿真截图:2)程序计数器( PC)Verilog 代码:1.module PC(2.input clk,3.input 31:0 PCin,4.input PCWre,5.input Reset,6.output reg 31:0 PCout7.);8.initial begin9.PCout = 0;10.end11.always(posedge clk) begin12.if (Reset = 0) begin13.PCout = 0;14.end15.else if (PCWre = 0) begin16.PCout = PCout;17.end18.
33、else begin文案大全实用标准文档19. PCout = PCin;20. end21. end22. endmodule仿真截图:3) 程序存储器( instruction memory )Verilog 代码:1.module IMemory(2.input InsMemRW,3.input 31:0 address,4.5.output reg 31:0 DataOut );6.reg 7:0 mem 0:127;7.initial begin8.DataOut = 32b111111_0000000_0000000_0000000_00000;9.$readmemb( C:/Us
34、ers/ACER/Desktop/-p/project_1/rom_data.coe, mem);10.end11.always(address or InsMemRW) begin12.if (InsMemRW = 1) begin13.DataOut31:24 = memaddress;14.DataOut23:16 = memaddress+1;15.DataOut15:8 = memaddress+2;16.DataOut7:0 = memaddress+3;17.end18.end19.endmodule仿真截图:4) ALUVerilog 代码:文案大全实用标准文档1.module
35、 ALU(2.input 2:0 ALUopcode,3.input 31:0 rega,4.input 31:0 regb,5.output reg 31:0 result,6.output zero,7.output sign8.);9.assign zero = (result=0)?1:0;10.assign sign = result31;11.always ( ALUopcode or rega or regb ) begin12.case (ALUopcode)13.3b000 : result = rega + regb;14.3b001 : result = rega - r
36、egb;15.3b010 : result = regb rega;16.3b011 : result = rega | regb;17.3b100 : result = rega & regb;18.3b101 : result = (rega regb)?1:0; /不带符号比较19.3b110 : begin /带符号比较20.if (regaregb &( rega31 = 0 & regb31=0) |21.(rega31 = 1 & regb31=1) result = 1;22.else if (rega31 = 0 & regb31=1) result = 0;23.else
37、if ( rega31 = 1 & regb31=0) result = 1;24.else result = 0;25.end26.3b111 : result = rega regb;27.endcase28.end29.endmodule仿真截图:(5)寄存器堆Verilog 代码:文案大全实用标准文档1.module RegFile(2.input CLK,3.input RST,4.input RegWre,5.input 4:0 ReadReg1,6.input 4:0 ReadReg2,7.input 4:0 WriteReg,8.input 31:0 WriteData,9.o
38、utput 31:0 ReadData1,10.output 31:0 ReadData211.);12.reg 31:0 regFile1:31; /寄存器定义必须用 reg 类型13.integer i;14.assign ReadData1 = (ReadReg1 = 0) ? 0 据: regFileReadReg1;/ 读寄存器数15.assign ReadData2 = (ReadReg2 = 0) ? 0: regFileReadReg2;16.always (negedge CLK) begin/ 必须用时钟边沿触发17.if (RST=0) begin18.for (i=1;
39、i32;i=i+1)19.regFilei = 0;20.end21.else if (RegWre = 1 & WriteReg != 0) begin22.regFileWriteReg = WriteData;23.end24.end25.26.endmodule仿真截图:6)数据存储单元( Data Memory )Verilog 代码:1. module DataMemory(2. input clk,3. input 31:0 address,4. input RD,5. input WR,文案大全实用标准文档6. input 31:0 DataIn,7. output 31:0
40、DataOut8. );9.10. reg 7:0 ram0:127;11. integer i;12. initial begin;13. for (i=0;i128;i=i+1)14. rami=0 & address128) begin25. ramaddress = DataIn31:24;26. ramaddress+1 = DataIn23:16;27. ramaddress+2 = DataIn15:8;28. ramaddress+3 = DataIn7:0;29. end30. end31. end32. endmodule仿真截图:3.测试程序:测试程序如下:地址汇编程序指
41、令代码op(6)rs(5)rt(5)rd(5)/immediate(16)16 进制数代码0x00000000addi$1,$0,800000100000000010000 0000 0000 10000401 00080x00000004ori$2,$0,201000000000000100000 0000 0000 00104002 00020x00000008add$3,$2,$1000000000100000100011 00000 0000000041 18000x0000000Csub$5,$3,$2000010000110001000101 00000 0000000862 28
42、000x00000010and$4,$5,$2010001000110001000100 00000 0000004462 2000文案大全实用标准文档0x00000014or $8,$4,$2010010001000001001000 00000 0000004882 40000x00000018sll $8,$8,1011000000000100001000 00001 0000006008 40400x0000001Cbne $8,$1,-2 (, 转18)11000101000000011111 1111 1111 1110C501 FFFE0x00000020slt $6,$2,$1011100000100000100110 00000 0000007041 30000x00000024slt $7,$6,$0011100001100000000111 00000 00000070C0 38000x0000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自己拟的入股合同(2篇)
- 西华师范大学《经典文学作品选读》2023-2024学年第一学期期末试卷
- OPR评价培训考试复习试题含答案
- 【练习】句子成分分析及提升练习(有答案)
- Unit5 Section A(3a-3c) 教学设计 人教版九年级英语全册
- 西昌学院《给水排水工程施工》2022-2023学年第一学期期末试卷
- 浙教版(2023)四上++第12课+编码长度与信息量+说课稿
- 西安外国语大学《英汉笔译入门》2021-2022学年第一学期期末试卷
- 交流平台与初试身手 说课稿 -2023-2024学年语文六年级下册统编版
- 篮球 第三课时 说课稿-2023-2024学年高二上学期体育与健康人教版必修第一册
- 心理放松训练
- 客户需求及层次
- 海绵城市完整
- 力敏传感器教学课件
- 强奸罪起诉状
- 2024年广东佛山市三水区淼城建设投资有限公司招聘笔试参考题库附带答案详解
- 《排球运动》PPT课件(部级优课)
- 高速公路绿化设计案例课件
- 《高速公路收费员培训》专业知识点课件
- 工作汇报流程图
- 初中美术九年级上册 第8课 最亲近的家具
评论
0/150
提交评论