专栏首页嵌入式iotsparc处理器浅析

sparc处理器浅析

sparc处理器浅析

  • 1.前言
  • 2.sparc 芯片启动
  • 3.寄存器
    • 3.1 窗口寄存器
    • 3.2 特殊寄存器
  • 4.中断处理
  • 5.总结

1.前言

前几天我看到知乎上的一篇文章《时代的眼泪:繁华落尽的SPARC处理器》,大致上讲述了一下Sun公司的UltraSPARC处理器,那时左批HP,右打IBM,俨然一副高高在上的气势。我觉得关于SPARC如何一步一步从繁荣走向平淡,又是如何在历史长河中发挥出浓墨重彩的一笔,我就不赘述了。这篇文章主要想讲一些sparc体系相关的问题。目前,sparc出现在我们视野中并不多见,其实利用sparc处理器一直是航天上面在使用,由于其特殊的架构以及目前美国对中国的态势,sparc架构在航天、飞机、雷达领域的利用也是越来越重要了。目前北京微电子技术研究所出来几款SPARC V8架构的芯片。其中BM3803是基于SPARC V8体系结构的32位精简指令集的国产嵌入式芯片,其特点是功能强、可靠性高、低功耗等等。下面从系统启动、窗口寄存器、中断处理这三部分看一看sparc v8处理器的特点。

2.sparc 芯片启动

一般我们做嵌入式开发都是用C语言编写实现,但是实际情况是在系统上电的之后,一般往往会执行一段初始化的汇编代码,可以理解为系统的BIOS。对于sparc v8架构的bm3803处理器来说,地址分配的空间如下:

地址

作用

0x00000000-0x1FFFFFFF

PROM

0x20000000-0x3FFFFFFF

I/O

0x40000000-0x7FFFFFFF

SRAM

一般芯片启动后,执行的代码都是在0地址处,所以固话的代码放在PROM的0地址空间。

需要设置C语言可以执行的栈空间以及清除bss段。其中栈的布局可以参考如下:

3.寄存器

3.1 窗口寄存器

由于sparc架构集成伯克利RISC结构,所以窗口寄存器是一个非常重要的特性。也就是说,一个窗口寄存器组只对当前的程序可见。而一个寄存器窗口又包括32个无浮点的寄存器。

Register Group

Mnemonic

Register Address

global

%g0-%g7

r[0]-r[7]

out

%o0-%o7

r[8]-r[15]

local

%l0-%l7

r[16]-r[23]

in

%i0-%i7

r[24]-r[31]

其中SPARC结构规定了一共可以有N个寄存器的窗口,N=2^n(1=<n<=5),即N=2、4、8、16、32。

当执行SAVE指令的时候,会分配一个全新的串口CWP-1。当RESTORE指令的时候,则CWP+1。其中比较有特点是,两个窗口是有8个寄存器公用的,也就是上一个窗口的out为下个窗口的in。这样可以提高程序的执行效率,不用每次都处理所有的寄存器。

3.2 特殊寄存器

一般来说,sparc上的特殊寄存器需要注意的是处理器状态寄存器(Processor State Register),名称为%PSR。以及无效窗口标识(Widows Invalid Register),名称为%WIM。

其中PSR主要控制CWP窗口操作、中断处理开关、以及Trap的处理。

WIM是无效窗口,BIT0~BIT7分别对应窗口0~7,在CPU的8个寄存器窗口中只能存在一个窗口为无效窗口。

4.中断处理

在sparc处理中断和陷阱的时候,也是首先需要一个trap的地址。一般进入中断后,会进入另外的一个模式,也就是说会开辟一个新的窗口,比如我们做任务切换的时候。sparc是由软中断(TA指令)实现。SPARC架构是不支持直接对PC指针进行操作的,而是CPU在发生中断的时候会将当前的PC、NPC写到寄存器%l1,%l2寄存器中。在中断结束返回的时候,CPU自动将%l1,%l2内容写到PC、NPC。这样就实现了一个任务的切换过程。

当发生中断的嵌套的时候,也是需要通过中断栈来实现当前现场的保存。

5.总结

上述简单的介绍了一下sparc处理器的一些特点,熟悉处理器架构的朋友可以看一下和arm、mips、risc-v体系架构的设计的异同。通过学习和理解不同处理器架构的设计思想,从而更好的掌握程序设计的最佳思路。

本文分享自微信公众号 - 嵌入式IoT(Embeded_IoT),作者:bigmagic

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 8266wifi模块开发详解(三)Smartconfig配网

    设想这样一种场景,我们一般用手机连上WiFi的过程需要知道WiFi的名称(SSID)与密码(password)。手机上就触摸屏和输入法可以直接连接上,但是要是一...

    bigmagic
  • 链接脚本linker script的妙用

    编译器将编写的C程序代码进行翻译,变成机器可以执行的程序,这个大致上可以分为四个步骤:预编译、编译、汇编、链接。

    bigmagic
  • rt-thread 树莓派3b 64位在qemu上运行

    本文主要描述树莓派64位的编译及运行方式,并且通过在qemu上运行仿真体验一下rt-thread 的64位效果。对于手上没有树莓派但是又想体验一下树莓派64位的...

    bigmagic
  • Android MediaPalyer

    Android提供的多媒体框架支持播放各种常见媒体类型,可以轻松地将音频、视频和图像集成到应用程序中。

    Yif
  • 红帽子RHCS套件安装与配置(一)

    RHCS提供的三个核心功能  高可用集群是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用性服务管理组件...

    BGBiao
  • Java到底是不是一种纯面向对象语言?

    Java——是否确实的 “纯面向对象”?让我们深入到Java的世界,试图来证实它。 在我刚开始学习 Java 的前面几年,我从书本里知道了 Java 是遵循 ...

    用户1667431
  • Java是一种纯面向对象的语言吗?

    在刚开始学习 Java 的前面几年,我从书本里知道了 Java 是遵循 “面向对象编程范式(Object Oriented Programming paradi...

    森七
  • 深圳币币交易系统开发虚拟币币交易系统开发

    虚拟币币交易系统开发【138-2655 -7202】http://www.ykmcq.com/

    ruiec1212
  • Verilog代码转VHDL代码经验总结

    你已经习惯某种语言,也发现语言不是学习FPGA时需要考虑的问题,它仅仅是硬件描述语言工具而已。可是,当你发现一份和你使用语言不同的代码作为参考时,你又开始想:

    网络交换FPGA
  • HTML5视音频代码实例 & WEBM格式转换器

    HTML5视音频代码实例&WEBM格式转换器 HTML5学堂:WebM由Google提出,是一个开放、免费的媒体文件格式。WebM 影片格式其实是以 Matro...

    HTML5学堂

扫码关注云+社区

领取腾讯云代金券