• 说在前面

开发环境:Vivado

语言:Verilog

cpu框架:Mips

控制器:组合逻辑

鸽鸽鸽。。。

  • 指令分析流程
  1. 确定一条指令所需要的具体操作
  2. 分析该条指令涉及的部件
  3. 确定各个部件的输入输出关系
  4. 画出数据通路图

以ADD为例

首先我们需要根据PC从指令集合中取出这条指令然后将两个操作数相加 R[rd]→R[rs]+R[rt] ,最后将PC+4,指向下一条指令;

涉及部件:PC寄存器、指令存储器、寄存器、ALU

输入输出关系:

数据通路图:


  • 31条指令分析 

NPC:即PC+4,可以使用简单的加法实现                           PC:指令计数器

IMEM:指令存储器                                                               ADD8:加8操作

RegFiles:寄存器堆                                                             EXTn:将n位扩展

IR:指令寄存器                                                                     MUX:多路选择器

DMEM:数据存储器

下面东西太多了,我把总结放这里吧。

在分析指令的时候一定要参考详细的指令说明,在上一篇中有,这样可以帮助理解指令过程;

这31条指令看似很多(其实真的很多),但是里面还是有很多是相似的,所以数据通路图几乎一样;

比较难的几条指令:lw、sw、jal、beq

建议自己分析一遍(很重要)

下一篇将分析两张很大很大的表格,指令操作时间表以及整体数据输入输出关系表,这两张表对于整体的数据通路的设计以及控制器设计十分重要!!!

  • add

格式:add rd, rs, rt

描述:rd ← rs + rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • addu

格式:addu rd, rs, rt

描述:rd ← rs + rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • sub

格式:sub rd, rs, rt

描述:rd ← rs - rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • subu

格式:subu rd, rs, rt

描述:rd ← rs - rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • and

格式:and rd, rs, rt

描述:rd ← rs and rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • or

格式:or rd, rs, rt

描述:rd ← rs or rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • xor

格式:xor rd, rs, rt

描述:rd ← rs xor rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • nor

格式:nor rd, rs, rt

描述:rd ← rs nor rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU

  • slt

格式:slt rd, rs, rt

描述:rd ← (rs < rt); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT1

  • sltu

格式:sltu rd, rs, rt

描述:rd ← (rs < rt); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT1

  • sll

格式:sll rd, rt, sa

描述:rd ← rt << sa (logical); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、Ext5

  • srl

格式:srl rd, rt, sa

描述: rd ← rt >> sa (logical); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、Ext5

  • sra

格式:sra rd, rt, sa

描述: rd ← rt >> sa (arithmetic); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、Ext5

  • sllv

格式:sllv rd, rt, rs

描述:rd ← rt << rs [4:0] (logical); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT5

  • srlv

格式:srlv rd, rt, rs

描述:rd ← rt >> rs [4:0] (logical); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT5

  • srav

格式:srav rd, rt, rs

描述:rd ← rt >> rs [4:0] (arithmetic); PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT5

  • jr

格式:jr rs

描述:PC ← rs; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles

  • addi

格式:addi rt, rs, immediate

描述:rt ← rs + immediate; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16

  • addiu

格式:addiu rt, rs, immediate

描述:rt ← rs + immediate; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16

  • andi

格式:andi rt, rs, immediate

描述:rt ← rs and immediate; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16

  • ori

格式:ori rt, rs, immediate

描述:rt ← rs or immediate; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16

  • xori

格式:xori rt, rs, immediate

描述:rt ← rs xor immediate; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16

  • lw

格式:lw rt, offset(base)

描述:rt ← memory[rs + Sign_ext_offset]; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16、DMEM

  • sw

格式:sw rt, offset(base)

描述:memory[rs + Sign_ext_offset] ← rt; PC ← NPC (PC + 4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16、DMEM

  • beq

格式:beq rs, rt, offset

描述:rs == rt, PC ← NPC + Sign_ext (offset||02);否则PC ← NPC(PC+4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT18、ADD

  • bne

格式:bne rs, rt, offset

描述:rs != rt, PC ← NPC + Sign_ext (offset||02);否则PC ← NPC(PC+4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT18、ADD

  • slti

格式:slti rt, rs, immediate

描述:rt ← (rs < immediate); PC ← NPC(PC+4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16、EXT1

  • sltiu

格式:sltiu rt, rs, immediate

描述:rt ← (rs < immediate); PC ← NPC(PC+4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16、EXT1

  • lui

格式:lui rt, immediate

描述:rt ← immediate || 016; PC ← NPC(PC+4)

部件:PC、NPC、IMEN、RegFiles、ALU、EXT16

  • j

格式:j target

描述:PC ← PC31-28 || instr_index || 02; PC ← NPC(PC+4)

部件:PC、NPC、IMEN、ALU、II

  • jal

格式:jal target

描述:GPR[31] ← PC + 8;PC ← PC31-28 || instr_index || 02;PC ← NPC(PC+4)

部件:PC、NPC、IMEN、RegFiles、ALU、II、ADD8


31条指令单周期cpu设计(Verilog)-(三)指令分析相关推荐

  1. 31条指令单周期cpu设计(Verilog)-(六)指令操作时间表设计

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 这张表格又是干啥的呢(+_+)? 废话少说,用来设计控制器的 (红色方框) 设计流程  1.  表头为3 ...

  2. 31条指令单周期cpu设计(Verilog)-(十)上代码→顶层模块设计总结

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 设计思路 按照预先设计好的数据通路图将各个模块连接起来 `timescale 1ns / 1ps mod ...

  3. 31条指令单周期cpu设计(Verilog)-(二)总体设计

    目录 31条指令单周期cpu设计(Verilog)-(一)相关软件 31条指令单周期cpu设计(Verilog)-(二)总体设计 31条指令单周期cpu设计(Verilog)-(三)指令分析      ...

  4. 31条指令单周期cpu设计(Verilog)-(四)数据输入输出关系表

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 表格作用 这张表用于设计整体的数据通路图 (在第二篇中已经给出来了),而这张总图是用于设计Verilog ...

  5. 31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 指令译码器 我们需要根据一条32位的指令的结构确定是哪一条指令 可以根据操作码(op)以及功能码(fun ...

  6. 31条指令单周期cpu设计(Verilog)-(一)相关软件

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 计算机组成原理课程终于结束了,由于以下均为课程学习过程中的内容,所以难免存在各种错误,各位大佬轻喷 相关软件 vivado ...

  7. 31条指令单周期cpu设计(Verilog)-(七)整体代码结构

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 结构 sccpu:顶层模块 cpu_ins:指令译码器 cpu_opcode:控制器 其他均是基本模块( ...

  8. 31条指令单周期cpu设计(Verilog)-(五)整体数据通路图设计

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 这张图是用来干啥的? 我们在用verilog实现这个cpu的时候,一般是先把各个部件单独写一个modul ...

  9. 31条指令单周期cpu设计(Verilog)-(九)上代码→基本模块

    不再赘述,直接上 mux `timescale 1ns / 1ns module mux(input [31:0] a,input [31:0] b,input choose,output reg [ ...

最新文章

  1. 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )
  2. Nginx教程-location配置
  3. 结合现有分布式系统的数据一致性思考
  4. 覆盖所有面试知识点,建议收藏
  5. 前端学习(3077):vue+element今日头条管理-分支的的使用
  6. VUE初始化一个项目
  7. 额外sql使用什么封装_为什么建立社区值得付出额外的努力
  8. kaggle api 的使用
  9. 直播间卡人气小秘诀,快速增加直播间人气
  10. 期货开户对资金有要求(期货开户有条件吗)
  11. 饥荒联机版加入服务器显示无应答,饥荒联机版水中木更新内容汇总 8月13日更新预览[多图]...
  12. ML - 线性回归(Linear Regression)
  13. 源码分析学习记录(11)——半边结构
  14. 从零开始做量化(3)
  15. Revit中栏杆扶手、坡道的绘制及插件太多问题
  16. 吉尔伯特定律(转载)
  17. Java自学指南四、书籍
  18. 3.1 Docker最新入门教程-Docker入门-概述
  19. 微软工程师心酸成长史
  20. 为保卫学术自由和公民权利而斗争

热门文章

  1. 小程序毕业设计 基于java后台微信电影院选座购票小程序毕业设计参考
  2. 一个完整的嵌入式程序_【荐读】贪食蛇游戏的Android嵌入式系统设计
  3. Slicer学习笔记(三十九)slicer中Markups模块
  4. 基于STM32滴答时钟的多任务定时器
  5. 最小生成树概念、最小生成树边权之和————附模版伪代码、实现代码、示例
  6. js中判断是否对象的方法
  7. 双系统时间不对的问题
  8. js 设置当前时间的后20分钟、后一小时、前一天等等相对时间
  9. metinfo mysql 数据表_数据库结构-米拓帮助文档
  10. RTB matlab工具箱(1)——demo与常用函数