xgdliujie的个人空间 https://blog.eetop.cn/980565 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

MIPS微架构

已有 2145 次阅读| 2013-7-30 18:51

     许久没有更新过日志了,已然沉寂的太久。在技术的道路上漫漫求索,实属不易。消失的几个月里一直投身于仿真技术,力求能够弄清cpu的工作原理。所幸能参考大师之作《Digital Design and Computer Architecture,收益颇丰。其书通篇讲述了数字设计的原理和方法,并且融入HDL仿真,理论与实际相结合。更难能可贵的是能结合计算机架构原理搭建cpu软核,实属上层佳品,感兴趣的朋友推荐一品。

     Mips在商业领域虽不是一方霸主,但也小有所成。从其出身到现在一直受学校和数字设计爱好者的亲睐。Mips出自上世纪80年代斯坦福大学教授之手,而且其设计原理被其开发者写成书籍,经过几代人努力,已经成为先进产品。现在大学教授计算机架构都是以mips作为标准,很大程度上是因为其开放性以及学术支持。另外,mips属于最简指令集类型,无论从设计还是实现上都比较简单可行。下面就我最近在这个方向的经验做下总结。

     谈到题目”mips微架构,我们首先要明白几个概念。什么叫微架构?在网上可以找到其定义和解释。我理解的是微架构可以看成计算机架构的具体实现。计算机架构包含指令集和相关的寄存器组定义。比如x86架构就会定义它包含的寄存器(eaxcs等等)和汇编指令集(mov神马的)。架构定义出来,就构成了软件计算的基础,操作系统等系统组件都在此架构之上。对于相同的架构可以有不同的内部实现,这就是微架构。比如intelcpuamdcpu都可以执行相同的x86代码和系统,因为他们虽然硬件构成不同,但是都是遵照x86统一架构实现的,所以芯片功能相同。

     下面简单介绍下mips32的架构。理解mips32架构的最好方式就是尝试写一个mips32的汇编器。这样不管是指令集还是寄存器意义都会深入与心。我这次的工作也包含这个方面。具体实现就不说了。

     寄存器组见下表:

Name

Number

Use

Callee must preserve?

$zero

$0

constant 0

N/A

$at

$1

assembler temporary

No

$v0–$v1

$2–$3

values for function returns and expression evaluation

No

$a0–$a3

$4–$7

function arguments

No

$t0–$t7

$8–$15

temporaries

No

$s0–$s7

$16–$23

saved temporaries

Yes

$t8–$t9

$24–$25

temporaries

No

$k0–$k1

$26–$27

reserved for OS kernel

N/A

$gp

$28

global pointer

Yes

$sp

$29

stack pointer

Yes

$fp

$30

frame. pointer

Yes

$ra

$31

return address

N/A

 

  Mips指令集的二进制指令格式如下:

Type

-31-           format(bits)                             -0-

R

opcode (6)

rs (5)

rt (5)

rd (5)

shamt (5)

funct (6)

I

opcode (6)

rs (5)

rt (5)

immediate (16)

J

opcode (6)

address (26)

 

其指令是分类实现的,包括R型指令、I型指令、J型指令。他们对应的指令和指令码如下:

R:

   指令             操作码              功能码

   add                 0                  0x20

   addu                0                  0x21

   sub                 0                  0x22

   subu                0                  0x23

   mult                0                  0x18

   div                 0                  0x1A

   divu                0                  0x1B

   mfhi                0                  0x10

   mflo                0                  0x12

   and                 0                  0x24

   or                  0                  0x25

   xor                 0                  0x26

   nor                 0                  0x27

   slt                 0                  0x2A

   sll                 0                  0

   srl                 0                  2

   sra                 0                  3

   jr                  0                  8

I:

 指令                 操作码

addi                   8                                                                  addiu                  9                                                          ld                     0x23                                                 

lw                     0x23                                                        lh                     0x21                                                              lhu                    0x25                                                                  lb                     0x20                                                               lbu                    0x24                                                              sd                     0x0                                                  

sw                     0x2B                                                           sh                     0x29                                                             sb                     0x28                                                             lui                    0x0F                                                      

andi                   0x0C                                                                   ori                    0x0D                                                                  slti                   0x0A                                                                 beq                    4                                                               bne                    5

 

J:

  指令               操作码

   j                  2                                                                                         jal                3

 

上述内容便是mips32的架构了,如果要了解更加详细的内容可以参考mips参考手册查询或者网上搜索相关资料。

下面我们根据《Digital Design and Computer Architecuture》书中章节进行mips微架构设计,为了简化,只设计了一个单周期的mips子集兼容cpu。对于cpu工作原理的理解是足够了。在做下面的设计前,建议大家先了解VHDL语言和计算机逻辑基础以及modelsim仿真这些基础内容。

   我们的测试代码段是:

# mipstest.asm

# David_Harris@hmc.edu 9 November 2005

#

# Test the MIPS processor.

# add, sub, and, or, slt, addi, lw, sw, beq, j

# If successful, it should write the value 7 to address 84

main: addi $2, $0, 5

      addi $3, $0, 12

 &nbs


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 0

    粉丝
  • 0

    好友
  • 0

    获赞
  • 2

    评论
  • 1167

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 14:36 , Processed in 0.018182 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部