-
Notifications
You must be signed in to change notification settings - Fork 0
PipelinedProcessor/PipelinedProcessor
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
################### 所有二进制文件已从github中删除 请加入 有道云协作 团队 14940581 ################### # 基本指令集 指令名称 指令编码 寄存器 操作说明 ADDIU 01001|xxx|xxxxxxxx rs rs<=rs+Sign_extend(Imm) ADDIU3 01000|xxx|xxx|0|xxxx rs,rt rt<=rs+Sign_extend(Imm) *ADDSP 01100 011|xxxxxxxx null SP<=SP+Sign_extend(Imm) %ADDU 11100|xxx|xxx|xxx|01 !AND 11101|xxx|xxx|01100 B 00010|xxxxxxxxxxx BEQZ 00100|xxx|xxxxxxxx BNEZ 00101|xxx|xxxxxxxx *BTEQZ 01100 000|xxxxxxxx !CMP 11101|xxx|xxx|01010 !JR 11101|xxx|00000000 LI 01101|xxx|xxxxxxxx LW 10011|xxx|xxx|xxxxx LW_SP 10010|xxx|xxxxxxxx #MFIH 11110|xxx|00000000 !MFPC 11101|xxx|01000000 #MTIH 11110|xxx|00000001 *MTSP 01100 100|xxx|00000 NOP 00001 000 00000000 !OR 11101|xxx|xxx|01101 $SLL 00110|xxx|xxx|xxx|00 $SRA 00110|xxx|xxx|xxx|11 %SUBU 11100|xxx|xxx|xxx|11 SW 11011|xxx|xxx|xxxxx SW_SP 11010|xxx|xxxxxxxx # 扩展指令集 CMPI 01110|xxx|xxxxxxxx !JALR 11101|xxx|11000000 !JRRA 11101 00000100000 MOVE 01111|xxx|xxx|00000 SLTUI 01011|xxx|xxxxxxxx !*#$%表示前5 bits前缀相同 ! AND CMP JR MFPC OR (JALR JRRA) * ADDSP BTEQZ MTSP # MFIH MTIH $ SLL SRA % ADDU SUBU Jump: B BEQZ BNEQZ NTEQZ JALR JR JRRA PC: %Jump% MFPC SP: ADDSP LW_SP MTSP SW_SP 该寄存器不会被单独处理,原因为与基本寄存器有相似的运算指令 T(1 bit): BTEQZ CMP CMPI SLTUI 该寄存器将单独处理,原因为只有一位标识位 RA: JAIR JRRA 该寄存器将单独处理,原因为在JALR命令中与PC同时被赋值 IH: MFIH MTIH 该寄存器不会被单独处理,原因为出现频率较低,不会显著影响速度 %对SP,T,PC进行赋值前可能需要经过ALU,但RA,IH需要, %故可以将SP看作与8个普通寄存器相似的存在, %RA,IH在经历ALU之前直接赋值可能会节省一些时间,待讨论 访存:时钟可能由50MHz降至25MHz # 数据通路中所用控制指令详述见下: 控制信号 控制指令 比特数 高电平条件 TBranch BTEQZ 1 当前控制指令为BTEQZ Branch BEQZ 1 当前控制指令为BEQZ (注:BNQZ指令暂未加入) MemRead ** 1 需要根据输入地址读取其内容,后输出 MemWrite ** 1 需要根据输入地址写入数据 MemtiReg ** 1 写回(WriteBack)的是读取的内存中的内容;为低电平时,写回的是ALU的结果 (什么鬼名字) ALUOp ** 未定(与ALU数目有关) //ALUSrc ** 1 ALU的第二个操作数为Imm(立即数);为低电平时,ALU的第二个操作数为rt寄存器中的内容 ALUSrc1 ** 4 第一个操作数来源 ALUSrc2 ** 4 第二个操作数来源 // 0***表示通用寄存器 1000表示没有 1001表示SP 1010表示IH 1100表示8位立即数 1101 5位 1110 3位 1111 4位 RegWrite ** 4 写回的寄存器编码(包括PC,IH),该数据需在ControlUnit中暂存数个周期,可能需要状态机 //ImmLen ** 2 确定立即数的位数,该命令在ALU段使用 JumpDst ** 2 确定下一个PC的值,该命令在ALU段使用。得到数据旁路的支持后,延迟槽长度减为1 RAControl JALR 1 RA寄存器的值保持不变。为低电平时,表示当前指令为JALR,需要对RA进行赋值 CMPControl CMP,CMPI 1 表示当前指令为CMP或CMPI,需要对T标识位进行赋值 SLTUIControl SLTUI 1 表示当前指令为SLTUI,读取T标识位的内容 //SPLoad LW_SP,ADDSP,MTSP 1 表示当前指令为LW_SP,ADDSP,MTSP,将Src1置为SP的值 //IHLoad MTIH 1 表示当前指令为MTIH,将Src1置为IH的值 DirectJmp B,JALR,JRRA,JR 1 表示当前指令为B,JALR,JRRA,JR,修改PC的值以跳转 # 流水线优化纪录 (Hazard Unit) 1. ALU优化,Forward1E & Forward2E 2. lw指令优化,Stall & Flush 3. 跳转指令优化,详见%Jump%,若时钟不足以支持所有组合逻辑,请退回到”a59726d修正了有关特殊寄存器的一些错误”版本 # 2015.11.11 21:01 上一版本:249c8a9 本次改动为红色 修改原因: 1. 之前版本未考虑MFPC指令。本次改动中,将读取PC寄存器的值作为ALU的Src1。目前对MFPC存入的PC值是当前指令还是下一指令存疑。 2. 允许读取PC,IH,SP作为Src1的值。在之前版本中,流水线对ALU的优化(流水线优化纪录1)无法对IH寄存器起作用。增加指令ALUSrc1,2bits。 3. 增加了控制开关ImmExtend,用于零扩展。 4. 增加了控制开关Branch,用于BNEZ。 5. 对Excel进行完善。 # 2015.11.24 (紫色) 数据通路主要修改 1. 将Hazard Unit拆分为Hazard和Forwarding,分别负责气泡和数据旁路 2. 将IF和MEM段的内存读写统一处理 3. T和RA的数据旁路表现为4选1
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published