我们自己的芯片指令集架构——龙芯架构简介

news2024/11/23 22:12:37

CPU指令集架构(ISA, Instruction Set Architecture)

CPU指令集架构是处理器硬件与软件之间的接口规范,它定义了一组基本指令,以及这些指令的操作格式、编码方式、寻址模式、寄存器组织、中断机制、异常处理等各个方面。ISA是计算机硬件设计的基础,决定了处理器能够理解和执行的指令类型及操作方式,是编写操作系统、编译器以及应用程序的基石。不同的ISA构成了不同类型的处理器,如x86、ARM、RISC-V、MIPS等。

LoongArch指令架构

LoongArch是龙芯中科(Loongson Technology)自主研发的一种指令集架构,专为中国的信息技术产业设计。它是龙芯团队在充分考虑兼容性、自主性、先进性、生态建设等因素的基础上,结合多年处理器研发经验和技术积累创建的全新架构。

LoongArch相比MIPS和RISC-V指令集架构,具有以下优势:

  • 自主知识产权:

LoongArch是完全自主研发的指令集,不受外部专利约束,确保了中国在信息技术领域的自主可控性,这对于国家信息安全战略具有重要意义。相比之下,MIPS虽然也是开放架构,但其背后存在专利权属问题,而RISC-V虽然是开源指令集,但其生态中的相关实现可能受到第三方专利影响。

  • 二进制翻译兼容性:

LoongArch设计时考虑了对多种主流指令集(如X86、ARM等)的二进制翻译支持,这使得已有的软件生态能够较为便捷地迁移到LoongArch平台上,降低了生态建设的门槛。MIPS和RISC-V虽然也有多平台移植工具,但LoongArch在设计层面的兼容性考量可能更为全面。

  • 指令集扩展与优化:

LoongArch在基础指令集之外,提供了丰富的扩展指令集以支持特定应用领域的高效处理,如向量运算、并行计算、安全增强等,这些扩展可能在针对性和丰富程度上超越了MIPS和RISC-V的标准实现。尤其是对于高性能计算、安全应用等场景,LoongArch可能提供了更契合需求的定制化指令。

  • 性能优化:

信息表明,LoongArch在指令格式、立即数大小、分支跳转范围等方面进行了优化设计,这些改进有利于减少编译结果的指令数量、减少访存次数,从而提高处理器效能。相比之下,尽管MIPS和RISC-V也强调性能效率,但LoongArch在某些具体设计上可能具有后发优势,能够更好地适应现代软硬件设计趋势。

  • 生态建设与市场定位:

文献提及,LoongArch在桌面和服务器市场上相对于RISC-V具有优势,这反映在已经形成的软件生态、商业应用支持以及与特定行业标准的对接上。在高性能计算和关键基础设施领域,LoongArch可能通过与国内产业深度合作,更快地建立起符合特定行业需求的解决方案。相比之下,MIPS和RISC-V虽然也在积极发展生态,但可能在某些特定市场领域的成熟度和针对性上不及LoongArch。

  • 技术演进与支持:

龙芯中科作为国内专注于处理器设计的企业,对LoongArch架构有着持续的研发投入和迭代升级能力。这意味着LoongArch有望随着技术进步不断更新和完善,以保持竞争力。相比之下,MIPS作为历史悠久的架构,其技术演进速度可能相对放缓,而RISC-V作为新兴开放架构,虽然社区活跃,但具体实现的演进速度和方向可能取决于社区共识和各参与方的努力。

对比

32位MIPS指令
  1. 组成部分与位数: MIPS 32位指令通常由以下几个部分组成:
  • 操作码(Opcode):指定要执行的基本操作,通常占用6位。MIPS使用固定的指令长度(32位),操作码字段较小,意味着指令集相对紧凑。

  • 寄存器源字段(RS, RT, RD):指定操作数所在的寄存器。MIPS有32个通用寄存器,通常使用5位来编码每个寄存器字段。

  • RS(Source Register):指定第一个源操作数所在的寄存器,一般为5位。

  • RT(Target Register):指定第二个源操作数或结果存放的寄存器,同样是5位。

  • RD(Destination Register):指定目标寄存器,存放运算结果,也是5位。

  • 立即数(Immediate Value):直接包含在指令中的数值,用于提供常数值或偏移量。立即数的位数根据指令的不同而变化,通常为16位。

  • 函数代码(Function Code, Func):对于某些指令(如jr、jalr),用于指定特殊操作的附加信息,占用6位。

  • 移位量(Shift Amount, SA):在涉及逻辑或算术移位的指令中,指定移位的位数,通常为5位。

  • 内存地址计算字段:

  • 基址寄存器(Base Register, BASE):指定内存访问的基地址寄存器,5位。

  • 偏移量(Offset):对于内存访问指令,提供一个16位的有符号立即数偏移量,用于计算最终内存地址。

2.指令种类: MIPS指令集主要包括以下几种类型的指令:

  • 算术逻辑指令(ALU Operations):如加减乘除、位逻辑操作等。
  • 数据传送指令(Data Transfer):包括寄存器间的数据移动、加载/存储内存数据等。
  • 分支指令(Branches):条件分支、无条件跳转、子程序调用/返回等。
  • 延迟槽(Delayed Slot):MIPS使用延迟分支机制,分支指令后的下一个指令(延迟槽)通常用来填充流水线,以提高处理器效率。
  • 系统控制指令(System Control):如中断处理、特权级别切换等。
RISC-V 32位指令

1.组成部分与位数: RISC-V 32位指令采用变长编码,但最常见的是压缩(C)扩展后的16位指令和标准32位指令。这里主要描述32位指令格式:

  • 操作码(Opcode):指示基本操作,RISC-V 32位指令的操作码通常占7位。

  • 寄存器字段(Rs1, Rs2, Rd):分别指定源寄存器和目标寄存器,通常每个字段为5位,共计15位。

  • Rs1:第一个源寄存器。

  • Rs2:第二个源寄存器(某些指令可能只有一个源寄存器)。

  • Rd:目标寄存器,存放运算结果。

  • 立即数(Immediate Value):不同指令的立即数位数和格式各异,可以是12位、20位等,具体取决于指令类型和所采用的立即数编码方案。

  • 功能编码(Funct3, Funct7):进一步细化操作码,提供指令子类型或特定操作信息。Funct3通常占3位,Funct7占7位。

2.指令种类: RISC-V指令集同样包括多种指令类型:

  • 算术逻辑指令(ALU Operations):如加减乘除、位逻辑操作、比较等。
  • 数据传送指令(Load/Store):包括寄存器到寄存器的数据移动、从内存加载数据到寄存器、将寄存器数据存储到内存等。
  • 分支指令(Branches and Jumps):条件分支、无条件跳转、间接跳转、子程序调用/返回等。
  • 压缩指令(Compressed Instructions):16位压缩指令集,提供更高效的编码以减少代码大小。
  • 向量指令(Vector Extension, V):可选扩展,支持SIMD(单指令多数据)操作,高效处理大量数据。
  • 浮点指令(Floating-Point Extension, F/D/Q):支持单精度、双精度和四精度浮点运算。
  • 其他扩展指令:如原子操作(A)、乘法累加(M)、特权指令(P)、用户级中断(U)等。
LoongArch 32位指令

LoongArch架构采用基础部分(Loongson Base)加扩展部分的组织形式。其中扩展部分包括:二进制翻译扩展(Loongson Binary Translation,简称 LBT)、虚拟化扩展(Loongson Virtualization,简称LVZ)、向量扩展(Loongson SIMD Extension,简称 LSX)和高级向量扩展(Loongson Advanced SIMD Extension,简称 LASX)。MIPS,RISC-V,LoongArch 32位指令集都有自己的指令集编码格式,都有着完备的基础功能,但LoongArch的指令集编码格式更加的复杂,包含了更多的指令类型和操作数。

个人认为的很有特征的点
操作码都是从第 31 比特开始从高到低依次摆放。如果指令中包含有立即数操作数,那么立即数域位于寄存器域和操作码域之间,根据不同指令类型有不同的长度。具体来说,包含 9 种典型的指令编码格式,即 3 种不含立即数的编码格式 2R、3R、4R,以及 6 种含立即数的编码格式 2RI8、2RI12、2RI14、2RI16、1RI21、I26。

以下图片来自于LoongArch官方文档:龙芯架构32位精简版参考手册_v1.03.pdf
image.png
image-1.png

这就表明LoongArch的扩展性更加的强大,可以支持更多的指令类型和操作数,而且指令集编码格式也更加的复杂,更加的适合于高性能计算、安全应用等场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1635090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniApp+Vue3+vite+Element UI或者Element Plus开发学习,使用vite构建管理项目,HBuilderX做为开发者工具

我们通常给小程序或者app开发后台时,不可避免的要用到可视化的数据管理后台,而vue和Element是我们目前比较主流的开发管理后台的主流搭配。所以今天石头哥就带大家来一起学习下vue3和Element plus的开发。 准备工作 1,下载HBuilderX 开发者…

Camera设备上晶体晶振的应用

IPC行业现状的分析 IP Camera起源于20世纪90年代,最早应用于监控系统中。 随着AI技术、云服务以及IoT技术的发展,IPC已经从安防监控向智慧城市、智能家居、自动驾驶、智能医疗等行业领域拓展,不单单传统地应用于工业,个人和家庭的…

《QT实用小工具·四十八》趣味开关

1、概述 源码放在文章末尾 该项目实现了各种样式的趣味开关: 1、爱心形状的switch开关,支持手势拖动、按压效果 2、线条样式的3种开关 项目demo演示如下所示: 使用方式: 1、sapid_switch文件夹加入工程,.pro文件中…

ActiveMQ 反序列化漏洞 (CVE-2015-5254)

一、漏洞描述 Apache ActiveMQ 是由美国阿帕奇(Apache)软件基金会开发的开源消息中间件,支持 Java 消息服务、集群、Spring 框架等。属于消息队列组件(消息队列组件:分布式系统中的重要组件,主要解决应用耦合、异步消息…

基于SpringBoot+Vue大学生兼职管理系统的设计与实现

目录 一、前言介绍 二、功能需求 三、功能结构设计 四、管理员功能实现 招聘单位管理 用户管理 论坛管理 公告信息管理 五、招聘单位功能实现 职位招聘管理 职位留言管理 简历投递管理 六、用户功能实现 在线论坛 职位招聘信息 简历投递 简历 七、部分核心代码 …

深入Rust标准库:必备的Rust语言高级指南

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

windows rabbitMq安装

一、Erlang 环境准备 下载安装包 跟我们跑java项目,要装jdk类似。rabbitMQ是基于Erlang开发的,因此安装rabbitMQ服务器之前,需要先安装Erlang环境。 官网直接下载windows直装版本:https://www.erlang.org/downloads 无脑安装&a…

用自然语言来编程GitHub Copilot;提高代码质量开源工具GPTLint;LLMs开源医学Meditron

✨ 1: GitHub Copilot Workspace 以Copilot 为中心的创新开发者环境,让开发者能用自然语言从构思到编码再到软件开发。 GitHub Copilot Workspace是一个以Copilot为中心的开发者环境,旨在使用自然语言从构思、编码到软件开发的全过程中提供帮助。它标志…

一、OSPF基础

目录 1.路由协议的优先级 2.转发原则:最长匹配原则 3.负载分担 4.路由备份(浮动路由) 5.路由协议的分类 6.动态路由 7.距离矢量路由协议(BGP,RIP) 8.链路状态路由协议(OSPF,I…

指纹浏览器:网络安全与隐私的新工具

在互联网时代,隐私和网络安全成为人们越来越关注的话题。随着数字化的发展,个人信息的泄露和在线追踪的问题愈发严峻。在这个背景下,"指纹浏览器"作为一种新型工具,开始受到关注。撸空投需要了解指纹浏览器。本文将深入…

计算机丢失d3dx9_42.dll怎么解决,最新的5种修复教程来了

在我们日常频繁地使用电脑进行工作或是享受电子游戏带来的乐趣时,偶尔会遇到一个令人稍感困扰的问题,其中之一就是“d3dx942.dll丢失”。这个错误通常出现在运行某些游戏或应用程序时,它会导致程序无法正常运行。为了解决这个问题&#xff0c…

【无标题】场外个股期权多少钱才能做?个人能做吗?

场外个股期权的交易门槛相对较高,主要面向符合特定条件的机构投资者。一般来说,法人或合伙企业等组织参与的,需要满足最近1年末净资产不低于5000万元人民币、金融资产不低于2000万元人民币的条件,并具备3年以上证券、基金、期货、…

《欢乐钓鱼大师》攻略:新手小白如何快速上手?

欢迎来到《钓乐乐》世界!这是一个充满乐趣和挑战的钓鱼游戏,本指南将为您提供一系列宝贵的技巧和建议,帮助您成为一名优秀的钓手。无论您是初次尝试还是已经有一定经验,都将从中获益匪浅。 一、精打细算金币 刚开始时金币总是紧缺…

关闭powertoy自启动

Other methods like task manager, start up program folder, they do not work because you can not even find powertoy at these places

【c++】优先级队列与仿函数:C++编程的强大组合

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来讲解优先级队列priority_queue 目录 1.priority_queue的介绍和使用函数使用仿函数的使用与介绍greater和less 2.priority_queue的模拟实现基本框架…

arthas如何排除CPU使用率过高问题

1、首先启动arthas java -jar arthas-boot.jar 2、使用thread查看各线程CPU使用率 thread 可以看到CPU使用率最高的有2个线程,以线程ID为19的为例子: 输入thread 19查看线程19的堆栈信息: thread 19 可以看到是(CpuController.java:78行…

Git Tag:为你的代码版本打上优雅的标签

为你的代码版本打上优雅的标签 在软件开发过程中,版本控制是项目管理的重要一环。Git 作为最流行的版本控制系统之一,为我们提供了强大的工具来管理代码版本。其中,git tag 命令允许我们为代码仓库中的特定提交打上标签,这些标签…

【面试经典 150 | 数组】找出字符串中第一个匹配项的下标

文章目录 写在前面Tag题目来源解题思路方法一:find方法二:暴力匹配方法三:KMP 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,…

Python | Leetcode Python题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; class Solution:def generateMatrix(self, n: int) -> List[List[int]]:matrix [[0] * n for _ in range(n)]num 1left, right, top, bottom 0, n - 1, 0, n - 1while left < right and top < bottom:for col in range(left, r…

Flink checkpoint 源码分析- Flink Checkpoint 触发流程分析

序言 最近因为工作需要在阅读flink checkpoint处理机制&#xff0c;学习的过程中记录下来&#xff0c;并分享给大家。也算是学习并记录。 目前公司使用的flink版本为1.11。因此以下的分析都是基于1.11版本来的。 在分享前可以简单对flink checkpoint机制做一个大致的了解。 …