Skip to content

PipelinedProcessor/PipelinedProcessor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 

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

No packages published

Contributors 3

  •  
  •  
  •