# 数字设计与计算机体系结构实验三 **Repository Path**: yang-ding-qi/Lab_3 ## Basic Information - **Project Name**: 数字设计与计算机体系结构实验三 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-14 - **Last Updated**: 2025-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 实现指令 ### 1. ADD.W - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:add.w rd, rj, rk - **编码结构**(32位,3R-type): opcode 占高位,依次包含 rk、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj中的数据与通用寄存器rk中的数据相加,取结果的[31:0]位写入通用寄存器rd,不处理溢出。 - **文本形式表达式**: ``` tmp = GR[rj] + GR[rk] GR[rd] = tmp[31:0] ``` --- ### 2. OR - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:or rd, rj, rk - **编码结构**(32位,3R-type): opcode 占高位,依次包含 rk、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj与rk中的数据进行按位逻辑或运算,结果写入通用寄存器rd。 - **文本形式表达式**: ``` GR[rd] = GR[rj] | GR[rk] ``` --- ### 3. XOR - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:xor rd, rj, rk - **编码结构**(32位,3R-type): opcode 占高位,依次包含 rk、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj与rk中的数据进行按位逻辑异或运算,结果写入通用寄存器rd。 - **文本形式表达式**: ``` GR[rd] = GR[rj] ^ GR[rk] ``` --- ### 4. SRAI.W - **所属分类**:基础整数指令 - 移位运算类 - **指令结构**:srai.w rd, rj, ui5 - **编码结构**(32位,2RI5-type): opcode 占高位,包含 ui5 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj中的数据按算术右移ui5位(ui5为5比特无符号立即数),结果的[31:0]位写入通用寄存器rd。 - **文本形式表达式**: ``` tmp = SRA(GR[rj], ui5) GR[rd] = tmp[31:0] ``` --- ### 5. SLTI - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:slti rd, rj, si12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 si12 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj中的数据与12比特立即数si12符号扩展后的32位数据,视作有符号整数比较,若rj数据小于立即数则rd置1,否则置0。 - **文本形式表达式**: ``` tmp = SignExtend(si12, 32) GR[rd] = (signed(GR[rj]) < signed(tmp)) ? 1 : 0 ``` --- ### 6. ADDI.W - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:addi.w rd, rj, si12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 si12 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj中的数据与12比特立即数si12符号扩展后的32位数据相加,结果的[31:0]位写入通用寄存器rd,不处理溢出。 - **文本形式表达式**: ``` tmp = GR[rj] + SignExtend(si12, 32) GR[rd] = tmp[31:0] ``` --- ### 7. ANDI - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:andi rd, rj, ui12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 ui12 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj中的数据与12比特立即数零扩展后的32位数据进行按位逻辑与运算,结果写入通用寄存器rd。 - **文本形式表达式**: ``` GR[rd] = GR[rj] & ZeroExtend(ui12, 32) ``` --- ### 8. ORI - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:ori rd, rj, ui12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 ui12 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj中的数据与12比特立即数零扩展后的32位数据进行按位逻辑或运算,结果写入通用寄存器rd。 - **文本形式表达式**: ``` GR[rd] = GR[rj] | ZeroExtend(ui12, 32) ``` --- ### 9. LU12I.W - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:lu12i.w rd, si20 - **编码结构**(32位,1RI20-type): opcode 占高位,包含 si20 立即数域、rd 寄存器域 - **功能描述**:将20比特立即数si20的最低位连接12比特0后,写入通用寄存器rd,常与ORI指令配合装载超过12位的立即数。 - **文本形式表达式**: ``` GR[rd] = {si20, 12'b0} ``` --- ### 10. PCADDU12I - **所属分类**:基础整数指令 - 算术运算类 - **指令结构**:pcaddu12i rd, si20 - **编码结构**(32位,1RI20-type): opcode 占高位,包含 si20 立即数域、rd 寄存器域 - **功能描述**:将20比特立即数si20最低位连接12比特0后符号扩展为32位,与当前指令的PC相加,结果写入通用寄存器rd。 - **文本形式表达式**: ``` GR[rd] = PC + SignExtend({si20, 12'b0}, 32) ``` --- ### 11. LD.B - **所属分类**:基础整数指令 - 普通访存指令 - **指令结构**:ld.b rd, rj, si12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 si12 立即数域、rj、rd 寄存器域 - **功能描述**:从内存地址(rj值+符号扩展后的si12)取回1字节数据,符号扩展为32位后写入通用寄存器rd,地址非自然对齐将触发非对齐例外。 - **文本形式表达式**: ``` vaddr = GR[rj] + SignExtend(si12, 32) AddressComplianceCheck(vaddr) paddr = AddressTranslation(vaddr) byte = MemoryLoad(paddr, BYTE) GR[rd] = SignExtend(byte, 32) ``` --- ### 12. LD.W - **所属分类**:基础整数指令 - 普通访存指令 - **指令结构**:ld.w rd, rj, si12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 si12 立即数域、rj、rd 寄存器域 - **功能描述**:从内存地址(rj值+符号扩展后的si12)取回1字(32位)数据,直接写入通用寄存器rd,地址非自然对齐将触发非对齐例外。 - **文本形式表达式**: ``` vaddr = GR[rj] + SignExtend(si12, 32) AddressComplianceCheck(vaddr) paddr = AddressTranslation(vaddr) word = MemoryLoad(paddr, WORD) GR[rd] = word ``` --- ### 13. ST.B - **所属分类**:基础整数指令 - 普通访存指令 - **指令结构**:st.b rd, rj, si12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 si12 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rd中的[7:0]位数据,写入内存地址(rj值+符号扩展后的si12),地址非自然对齐将触发非对齐例外。 - **文本形式表达式**: ``` vaddr = GR[rj] + SignExtend(si12, 32) AddressComplianceCheck(vaddr) paddr = AddressTranslation(vaddr) MemoryStore(GR[rd][7:0], paddr, BYTE) ``` --- ### 14. ST.W - **所属分类**:基础整数指令 - 普通访存指令 - **指令结构**:st.w rd, rj, si12 - **编码结构**(32位,2RI12-type): opcode 占高位,包含 si12 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rd中的[31:0]位数据,写入内存地址(rj值+符号扩展后的si12),地址非自然对齐将触发非对齐例外。 - **文本形式表达式**: ``` vaddr = GR[rj] + SignExtend(si12, 32) AddressComplianceCheck(vaddr) paddr = AddressTranslation(vaddr) MemoryStore(GR[rd][31:0], paddr, WORD) ``` --- ### 15. BEQ - **所属分类**:基础整数指令 - 转移指令 - **指令结构**:beq rj, rd, offs16 - **编码结构**(32位,2RI16-type): opcode 占高位,包含 offs16 立即数域、rj、rd 寄存器域 - **功能描述**:比较通用寄存器rj与rd的值,若相等则跳转到目标地址(PC + 符号扩展后的{offs16, 2'b0}),否则不跳转。 - **文本形式表达式**: ``` if GR[rj] == GR[rd] : PC = PC + SignExtend({offs16, 2'b0}, 32) ``` --- ### 16. BNE - **所属分类**:基础整数指令 - 转移指令 - **指令结构**:bne rj, rd, offs16 - **编码结构**(32位,2RI16-type): opcode 占高位,包含 offs16 立即数域、rj、rd 寄存器域 - **功能描述**:比较通用寄存器rj与rd的值,若不相等则跳转到目标地址(PC + 符号扩展后的{offs16, 2'b0}),否则不跳转。 - **文本形式表达式**: ``` if GR[rj] != GR[rd] : PC = PC + SignExtend({offs16, 2'b0}, 32) ``` --- ### 17. BGEU - **所属分类**:基础整数指令 - 转移指令 - **指令结构**:bgeu rj, rd, offs16 - **编码结构**(32位,2RI16-type): opcode 占高位,包含 offs16 立即数域、rj、rd 寄存器域 - **功能描述**:将通用寄存器rj与rd的值视作无符号整数比较,若rj大于等于rd则跳转到目标地址(PC + 符号扩展后的{offs16, 2'b0}),否则不跳转。 - **文本形式表达式**: ``` if unsigned(GR[rj]) >= unsigned(GR[rd]) : PC = PC + SignExtend({offs16, 2'b0}, 32) ``` ---