MIPS CPU单周期设计


本设计为计算机系统结构实验,写此文仅为总结。


1.准备工作

  • 安装Xilinx ISE Design Suite 14.7

  • 本设计使用Verilog HDL硬件描述语言,需熟悉其基本语法。

2.设计总体要求

(1)概述

单周期(Single Cycle)CPU是指CPU从取出1条指令到执行完该指令只需1个时钟周期。

一条指令的执行过程包括:取指令→分析指令→执行指令→保存结果(如果有的话)。对于单周期CPU来说,这些执行步骤均在一个时钟周期内完成。

(2)设计实现电路

(3)实现指令集

MIPS指令系统结构有MIPS-32和MIPS-64两种。本实验的MIPS指令选用MIPS-32。以下所说的MIPS指令均指MIPS-32。
MIPS的指令格式为32位。图3-3给出了MIPS指令的3种格式。


本实验只选取了18条典型的MIPS指令来描述CPU逻辑电路的设计方法。表3-1列出了本实验的所涉及到的18条MIPS指令。

Op和Op2为操作码;
shift保存要移位的位数;
rd、rs、rt分别为寄存器的寄存器号;
immediate保存立即数的低16位;
offset为偏移量;
address为转移地址的一部分。

1、对于add/sub/mul/and/or/xor rd,rs,rt指令 //rdrs op rt
其中rs和rt是两个源操作数的寄存器号,rd是目的寄存器号。

2、对于sll/srl/sra rd,rt,shift 指令 //rdrt 移动 shift位

3、对于addi/muli rt,rs,imm 指令 //rtrs+imm(符号拓展)
rt是目的寄存器号,立即数要做符号拓展到32位。

4、对于andi/ori/xori rt,rs,imm 指令 //rtrs op imm(零拓展)
因为是逻辑指令,所以是零拓展。

5、对于load rt,offset(rs) 指令 //rt memory[rs+offset]
load是一条取存储器字的指令。寄存器rs的内容与符号拓展的offset想加,得到存储器地址。从存储器取来的数据存入rt寄存器。

6、对于store rt,offset(rs) 指令 // memory[rs+offset]  rt
store是一条存字指令。存储器地址的计算方法与load相同。

7、对于beq rs,rt,label指令 //if(rs==rt) PClabel
beq是一条条件转移指令。当寄存器rs内容与rt相等时,转移到label。如果程序计数器PC是beq的指令地址,则label=PC+4+offset<<2。offset左移两位导致PC的最低两位永远是0,这是因为PC是字节地址,而一条指令要占4个字节。offset要进行符号拓展,因为beq能实现向前和向后两种转移。

8、bne指令去beq类似,但是是在寄存器rs内容与rt不相等时,转移到label。

9、对于jump target指令 //PCtarget
jump是一条跳转指令。target是转移的目标地址,32位,由3部分组成:最高4位来自于PC+4的高4位,中间26位是指令中的address,最低两位为0。

————————————————————— 未完待续—————————————————————————–


文章作者: Xu Shouyin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 Xu Shouyin !
 上一篇
高级栈溢出及ret2libc 高级栈溢出及ret2libc
准备工作 实验环境:uname -a 64位 ubuntu 16.04 Linux ubuntu 4.4.0-122-generic #146-Ubuntu SMP Mon Apr 23 15:34:04 UTC 2018 x86_6
2018-05-05
下一篇 
基础栈溢出 基础栈溢出
目的 理解掌握C 栈帧结构 Shellcode 构造 加深理解栈溢出攻击原理及防护措施 要求 在关闭安全机制下,在Linux系统平台上实现缓冲区溢出攻击 开启安全保护机制,运行一样的溢出攻击代码,比较实现现象
2018-05-01
  目录
'); }