您好,登录后才能下订单哦!
本篇文章为大家展示了如何实现sparc处理器浅析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
前几天我看到知乎上的一篇文章《时代的眼泪:繁华落尽的SPARC处理器》,大致上讲述了一下Sun公司的UltraSPARC处理器,那时左批HP,右打IBM,俨然一副高高在上的气势。我觉得关于SPARC如何一步一步从繁荣走向平淡,又是如何在历史长河中发挥出浓墨重彩的一笔,我就不赘述了。这篇文章主要想讲一些sparc体系相关的问题。目前,sparc出现在我们视野中并不多见,其实利用sparc处理器一直是航天上面在使用,由于其特殊的架构以及目前美国对中国的态势,sparc架构在航天、飞机、雷达领域的利用也是越来越重要了。目前北京微电子技术研究所出来几款SPARC V8架构的芯片。其中BM3803是基于SPARC V8体系结构的32位精简指令集的国产嵌入式芯片,其特点是功能强、可靠性高、低功耗等等。下面从系统启动、窗口寄存器、中断处理这三部分看一看sparc v8处理器的特点。
一般我们做嵌入式开发都是用C语言编写实现,但是实际情况是在系统上电的之后,一般往往会执行一段初始化的汇编代码,可以理解为系统的BIOS。对于sparc v8架构的bm3803处理器来说,地址分配的空间如下:
地址 | 作用 |
---|---|
0x00000000-0x1FFFFFFF | PROM |
0x20000000-0x3FFFFFFF | I/O |
0x40000000-0x7FFFFFFF | SRAM |
一般芯片启动后,执行的代码都是在0地址处,所以固话的代码放在PROM的0地址空间。
需要设置C语言可以执行的栈空间以及清除bss段。其中栈的布局可以参考如下:
由于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。这样可以提高程序的执行效率,不用每次都处理所有的寄存器。
一般来说,sparc上的特殊寄存器需要注意的是处理器状态寄存器(Processor State Register),名称为%PSR。以及无效窗口标识(Widows Invalid Register),名称为%WIM。
其中PSR主要控制CWP窗口操作、中断处理开关、以及Trap的处理。
WIM是无效窗口,BIT0~BIT7分别对应窗口0~7,在CPU的8个寄存器窗口中只能存在一个窗口为无效窗口。
在sparc处理中断和陷阱的时候,也是首先需要一个trap的地址。一般进入中断后,会进入另外的一个模式,也就是说会开辟一个新的窗口,比如我们做任务切换的时候。sparc是由软中断(TA指令)实现。SPARC架构是不支持直接对PC指针进行操作的,而是CPU在发生中断的时候会将当前的PC、NPC写到寄存器%l1,%l2寄存器中。在中断结束返回的时候,CPU自动将%l1,%l2内容写到PC、NPC。这样就实现了一个任务的切换过程。
当发生中断的嵌套的时候,也是需要通过中断栈来实现当前现场的保存。
上述内容就是如何实现sparc处理器浅析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。