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

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的扩展性更加的强大,可以支持更多的指令类型和操作数,而且指令集编码格式也更加的复杂,更加的适合于高性能计算、安全应用等场景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中的并发控制,读写锁,和锁的粒度

MySQL中的并发控制,读写锁,和锁的粒度 并发控制的概述 在数据库系统中,并发控制是一种用于确保当多个用户同时访问数据库时,系统能够提供数据的一致性和隔离性的机制。MySQL支持多种并发控制技术,其中包括锁机制、多…

Unity镂空图像做法

问题和解决方案 现在要完成一个需求,即镂空中间部分的image,外围image可以定义颜色并可选屏蔽点击,而中间的image需要透明且可以穿透,必须不能屏蔽点击。 由此拆分成了两个问题: 1.定义外围image颜色,内…

力扣数据库题库学习(4.25日)

1484. 按日期分组销售产品 问题链接 思路与分析 编写解决方案找出每个日期、销售的不同产品的数量及其名称。 每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。我来分析一下,这里的题目要求其实就是统计不同日期下的销售产品数&#xf…

什么是域名解析?域名解析的完整流程是什么?如何清理DNS缓存?(附源码)

目录 1、什么是域名? 2、为什么使用域名? 3、域名解析的完整流程 4、调用gethostbyname系统接口将域名解析成IP地址 5、为什么需要清理系统DNS缓存? 6、使用cmd命令清理DNS缓存 7、通过代码去清除系统DNS缓存 C软件异常排查从入门到精…

Ubuntu 24.04 LTS (Noble Numbat) 正式版发布

Ubuntu 24.04 LTS (Noble Numbat) 正式版发布 Canonical 的第 10 个长期支持版本在性能工程、企业安全和开发人员体验方面树立了新标准 请访问原文链接:Ubuntu 24.04 LTS (Noble Numbat) 正式版发布,查看最新版。原创作品,转载请保留出处。…

Pytest切换测试环境:使用hooks函数、pytest-base-url插件

Pytest切换测试环境:使用hooks函数、pytest-base-url插件 1.使用hooks函数2.使用pytest-base-url插件安装pytest-base-url使用 1.使用hooks函数 # conftest.py#Initialization hooks 初始化钩子: 添加自定义命令行选项 def pytest_addoption(parser):parser.addopt…

一、OSPF基础

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

Vue3框架

Vue3框架 一.使用create-vue搭建Vue3项目二.组合式API - setup选项1.setup选项的写法和执行时机2.setup中写代码的特点3. script setup 语法糖 三.组合式API - reactive和ref函数1. reactive2. ref3. reactive 对比 ref 四.组合式API - computed五.组合式API - watch1. 侦听单个…

Flutter 有什么优异特性和革命性创新之处?

Flutter 有什么优异特性和革命性创新之处? 什么是 Flutter? Flutter mobile app SDK是一种新的方式来构建漂亮的原生移动应用程序,摆脱过去常见的“千篇一律”的应用程序。用过Flutter的人都对它赞赏有加; 相比较其他新型系统&#xff0c…

制作场景资源的Prefab

制作骨骼模型的Prefab 现在游戏内的使用骨骼模型是通过老版的Animator去实现控制的,所以需要将模型切换为Animator 第一步,动画类型设置为Generic,创建Avatar 模型里面会有对应的Avatar文件 我们还需要一个Controller文件,用于…

VMware虚拟机下载安装教程【超详细】

推荐大佬文章:VMware下载安装教程(超详细)-CSDN博客 目录 一、VMware下载 二、VMware安装 一、VMware下载 1、进入VMware官网 2、点击“Products”,向下滑动 --> 选择“Workstation Pro” 3、向下滑动,找到并选择“Download VMware Wo…

numpy+matplotlib绘制玫瑰线图案

【第10次课]实验十一数据可视化及应用】 声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1.简答题 本实验绘制简单图形,要导入numpy库函数和matplotlib.pyplot子库函数: import matplotlib.pyplot as plt impor…

【介绍下Android开发环境的搭建】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

源码编译framework.jar 并成功导入android studio 开发

一、不同安卓版本对应路径 Android N/O: 7 和 8 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar Android P/Q: 9 和 10 out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar Android R: 11以上 out/so…

计算机考研到双非院校的性价比分析

我选择读研为自己过渡深造,本科期间没有做过项目和实验,读研期间好好搞 很多公司更加看中的是个人硬实力...双非研究生出去找工作机会也并不少,只要实力够,学历加成一下,机会还是非常多的 研究生的学历算是一个门槛&…

Python数据预处理1:导入与基本操作

2024/4/30 After installing the xlrd package, you should be able to read Excel files using pandas without any issues. #需要在pyCharm命令行中下载两个包 pip install pandas pip install xlrd .xls数据导入 #数据的导入 import pandas as pd #导入EXCEL表格数据 df…

前端工程化Vue使用Node.js永久设置国内高速npm镜像源

前端工程化Vue使用Node.js永久设置国内高速npm镜像源 接续上篇错误收录,此篇通过简单配置永久设置国内高速npm镜像源方法 1.更换新版镜像 清空npm缓存 npm cache clean --force修改回原版镜像源或直接删除配置过的镜像源 npm config set registry https://registr…

Gone框架介绍3 - 使用gone命令,自动生成Priest函数

文章目录 1. 安装辅助工具: gone2. 创建一个名为gen-code的新项目3. 创建Goner4. 使用辅助工具5. 添加main函数 我在两年前实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能,自己觉得还挺好用的;之前一直…

9.【Linux】(死锁问题||线程同步||条件变量||生产者消费者模型)

常见锁的概念 死锁 死锁是指在一组进程中各个进程均占有不会释放的资源,但因互相申请被其他进程所占用的不会释放的资源而处于一种永久等待的状态。简单来说就是两个线程都 在等待对方释放锁。 死锁必要条件 必须同时满足四个条件才会产生死锁 1.互斥条件&…

等级保护测评试题上

一、单选题 1、下列不属于网络安全测试范畴的是(C) A.结构安全 B.便捷完整性检查 C.剩余信息保护 D.网络设备防护 2、下列关于安全审计的内容说法中错误的是(D) A.应对网络系统中的网络设备运行情况、网…