【大白分享】处理器芯片架构或者指令集之MIPS架构
  

山东_朱文鑫 36071人觉得有帮助

{{ttag.title}}
本帖最后由 山东_朱文鑫 于 2023-6-1 00:00 编辑

大家好,我是大白, 如果你的生活已处于低谷,那就,大胆走,因为你怎样走都是在向上。依旧感谢各位小伙伴的一路支持与陪伴。

本篇依旧借上篇文章国产化之路介绍以及信息汇总一篇通,从中介绍了国产化相关的背景信息,以及个人整合的一下信息材料与各位小伙伴进行分享学习,小伙伴们每天在说的X86、ARM等架构,真正的了解这些架构的原理与底层吗?

【大白分享】国产化之路介绍以及信息汇总一篇通(操作系统、服务器、数据库、中间件、CPU架构):https://bbs.sangfor.com.cn/forum ... ;extra=#/pid3461071



同样我们接着讲今天新的CPU架构,那就是具有我国代表性CPU龙芯的MIPS架构,当今处理器有四大架构,一个是以 intel 和 AMD 为代表的 x86 架构,另一个是手机,平板等移动处理器所使用的 ARM 架构,再有就是当今发展趋势良好的开源架构 RISC-V,最后一个便是我国龙芯处理器所选择的 MIPS 架构。这四大处理器架构中,X86 和 ARM 是商业化进程最为优秀的两大架构,RISC-V 则凭借其开源优势顺应当前火热的物联网和 AI 发展趋势。

虽然就目前来说,MIPS架构虽然默默无闻,但却是在X86与ARM架构之前,MIPS就已经出现,只是MIPS架构的发展并不尽人如意。


MIPS架构(英语:MIPS architecture,为Microprocessor without interlocked piped stages architecture的缩写,亦为Millions of Instructions Per Second的双关语),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。最早的MIPS架构是32位,最新的版本已经变成64位。

MIPS指令集架构(MIPS架构在适应改进的过程中在每一个迭代的版本中都会进行一些优化):

    MIPS I:
最早的32位处理器(R2000/3000)使用的指令集,几乎每一个MIPS架构CPU都可以运行这些指令。

    MIPS II:
为没有投产的MIPS-R6000机器定义的指令集。MIPS-II是MIPS32的前身。

    MIPS III:
为R4000引入的64位指令集。

    MIPS IV:
在MIPS-III基础上添加了浮点指令,R10000和R5000硬件实现中使用。

    MIPS V:
添加了2个奇怪的SIMD浮点操作指令,但是没有具体的CPU实现。大多是作为MIPS64架构的可选部分-单精度对出现。

    MIPS32、MIPS64:
1998年,由从Silicon Graphics公司分拆出来的MIPS Technologies Inc.公司制定的标准。该标准第一次纳入了CPU控制的功能,由协处理器0实现。MIPS32是MIPS-II的超集,MIPS64是MIPS-IV的超集(还以可选的方式包含了MIPS-V的大部分)。


并且当时MIPS加固的CPU加速对内存的访问,提高CPU的工作效率,所以CPU设计中引入了Cache,因为指令不同于数据,是只读属性,所以,MIPS架构采用哈弗结构,将数据Cache和指令Cache分开同时读取指令和读写变量。

MIPS架构5级流水线:


MIPS本身就是基于流水线优化设计的架构,将MIPS指令分为5个阶段,每个阶段占用固定的时间,固定的时间是指处理器的时钟周期(有2个指令花费半个时钟周期,所以,MIPS的5级流水线实际上占据4个时钟周期)。

所有的指令都是严格遵守流水线的各个阶段,即使某个阶段什么也不做。这样做的结果就是,只要Cache命中,每个时钟周期CPU都会启动一条指令。

取指令-IF:从I-Cache中取要执行的指令。

读寄存器-RD:取CPU寄存器中的值。

算术、逻辑运算-ALU:执行算术或逻辑运算。(浮点运算和乘除运算在一个时钟周期内无法完成,我们以后再写文章专门讲解FPU相关的知识)

读写内存-MEM:也就是读写D-Cache。至于这儿为什么说读写数据缓存,是因为内存的读写速度实在太慢了,无法满足CPU的需要。所以出现了D-Cache这种高速缓存。但即便如此,在读写D-Cache期间,平均每4条指令就会有3条指令什么也做不了。但是,每条指令在这个阶段都应该是独占数据总线的,不然会造成访问D-Cache冲突。这就是内存屏障和总线锁存在的理由。

写回寄存器-Writeback:将结果写入寄存器。


MIPS架构在R和I型指令格式中,寄存器操作数字段均为5位,共有32个寄存器


$0:zero,该寄存器总是返回零,为0这个有用常数提供了一个简洁的编码形式。

$1:即at,该寄存器为汇编保留。由于I型指令的立即数字段只有16位,在加载大常数时,编译器或汇编程序需要把大常数拆开,然后重新组合到寄存器里。

$2-$3:(v0−v1)用于子程序的非浮点结果或返回值。对于子程序如何传递参数及如何返回,MIPS范围有一套约定,堆栈中少数几个位置处的内容装入CPU寄存器,其相应内存位置保留未做定义,当这两个寄存器不够存 放返回值时,编译器通过内存来完成。

$4-$7:(a0−a3)用来传递前四个参数给子程序,不够的用堆栈。a0-a3和v0-v1以及ra一起来支持子程序/过程调用,分别用以传递参数,返回结果和存放返回地址。

$8-$15:(t0−t7)临时寄存器,子程序可以使用它们而不用保留。

$16-$23:(s0−s7)保存寄存器,在过程调用过程中需要保留(被调用者保存和恢复,还包括fp和ra)。MIPS提供了临时寄存器和保存寄存器,这样就减少了寄存器溢出(spilling,即将不常用的变量放到存储器的过程), 编译器在编译一个叶(leaf)过程(不调用其它过程的过程)的时候,总是在临时寄存器分配完了才使用需要 保存的寄存器。

$24-$25:(t8−t9)临时寄存器,子程序可以使用它们而不用保留。

$26-$27:(k0,k1)为操作系统/异常处理保留,至少要预留一个。异常(或中断)是一种不需要在程序中显示调用的过程。MIPS有个叫异常程序计数器(exception program counter,EPC)的寄存器,属于CP0寄存器,用于保存造成异常的那条指令的地址。

$28:(gp)为了简化静态数据的访问,MIPS软件保留了一个寄存器:全局指针gp

$29:(sp)堆栈指针寄存器。MIPS硬件并不直接支持堆栈,你可以把它用于别的目的,但为了使用别人的程序或让别人使用你的程序, 还是要遵守这个约定的,但这和硬件没有关系。

$30:( fp)存放栈帧指针寄存器。为支持MIPS架构的GNU C编译器保留的,MIPS公司自己的C编译器没有使用,而把这个寄存器当作保存寄存器使用。

$31:( ra)存放返回地址。MIPS有个jal(jump-and-link,跳转并链接)指令,在跳转到某个地址时,把下一条指令的 地址放到ra中,用于支持子程序调用。

MIPS指令集的限制:

    1.所有的指令都是32位长度:整体的MIPS二进制文件要比X86的文件大百分之二十,造成一条指令无法操作32位常数

    2.指令操作必须适合流水线:指令的每一步操作都必须在流水线的正确阶段执行,且必须在一个时钟周期内完成

    3.3个操作数的指令:编译器三个操作数的运算,对于复杂的表达式能够有更大的优化空间。而算术/逻辑运算指令不需要存储操作,所以有足够的位表示两个源操作寄存器和一个目的寄存器。

    4.32个通用寄存器:通用寄存器的个数是由软件需求驱动的,32个通用寄存器是现代计算机架构中常用的数量。

    5.寄存器0:寄存器0总是返回一个0常数。0是最常用的一个常数,直接用一个寄存器表示,可以减少常数向寄存器的加载操作。

    6.指令不含条件码:使相比其它RISC架构,MIPS指令集也具有一个重要特性就是没有任何条件标志,而MIPS使用寄存器进行保存这些标志信息。

MIPS寻址方式:

1.立即数寻址



immediate addressing


2.寄存器直接寻址



register addressing


3.基址寻址



basic addressing



使用通用寄存器作为基址寄存器,以立即数作为偏移量,立即数带符号扩展为32位,和基址寄存器的值一起得到主存地址

4.相对寻址


PC的值和偏移量相加得到主存地址,以立即数为偏移量。立即数带符号扩展为32位并左移2位再和PC的内容相加PC的值会被修改为相加结果。

5.页面寻址


26位的地址码左移2位变为28位,作为地址的低28位,PC的值会被修改高4位是PC改变后的值(取出指令后PC自动增加)

单周期MIPS数据通路示意图:


多周期MIPS数据通路示意图:


多周期MIPS状态转换图:


本篇主要是详解处理器芯片MIPS架构下的底层架构以及相关的结构信息进行知识补充学习,以及各个组成模块下的交互方式。

以上就是本次的处理器芯片架构或者指令集之MIPS架构的帖子,感谢大家的参阅支持,一同学习,向大家提供更加优质的技术信息!


励志分享超清壁纸语句~~:


立志用功如种树然,方其根芽,犹未有干;及其有干,尚未有枝;枝而后叶,叶而后花。------王守仁

好的今天就到这里,老样子,感谢各位大神的参阅,孩子为了挣豆子不容易,孩子家里穷没豆子吃饭了!!!

打赏鼓励作者,期待更多好文!

打赏
44人已打赏

飞翔的苹果 发表于 2023-6-1 08:03
  
感谢分享,作者的内容非常的翔实
韩_鹏 发表于 2023-6-1 09:16
  
感谢分享                           
浮云终日行 发表于 2023-6-1 10:00
  
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横社区多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
sangfor_s 发表于 2023-6-1 10:00
  
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横社区多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
秦冰 发表于 2023-6-1 10:00
  
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横社区多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
S_李军 发表于 2023-6-1 10:00
  
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横社区多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
肖振宙 发表于 2023-6-1 10:00
  
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横社区多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
taojinqiu 发表于 2023-6-1 10:00
  
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横社区多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
杨振双 发表于 2023-6-1 10:00
  
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横社区多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
干货满满
技术咨询
产品连连看
新版本体验
功能体验
标准化排查
自助服务平台操作指引
GIF动图学习
2023技术争霸赛专题
通用技术
运维工具
信服课堂视频
秒懂零信任
技术晨报
用户认证
社区帮助指南
答题自测
深信服技术支持平台
安装部署配置
上网策略
SDP百科
设备维护
每日一记
项目案例
玩转零信任
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
测试报告
日志审计
问题分析处理
流量管理
云计算知识
原创分享
解决方案
sangfor周刊
VPN 对接
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人