LIteOS新鲜支持——Xtensa

举报
o0龙龙0o 发表于 2021/12/28 23:10:45 2021/12/28
【摘要】 LIteOS新鲜支持——Xtensa

0前沿


今天看到LiteOS新增加最组件,特意来学习一下,Xtensa,估计很多人没听过,那就一起看看吧。

1、啥是Xtensa?


首先要说一下Tensilica,Tensilica 是一个迅速成长的公司,公司主要产品是在专业性应用程序微处理器上, 为现今高容量嵌入式系统提供最优良的解决方案。 公司成立于1997年7月。公司创始的几名主要干部与高级经理都学有专精。 其专业技术包括有四个领域: 微处理器构架、 ASIC 与VLSI 设计、 高级软件开发与电子设计自动化(EDA)。 本公司率先研发出世界第一个可以自由装组、 可以弹性扩张的微处理器构架;并提供一个技术支持环境, 让嵌入式系统工程师可以用最少的时间做出性能更好、 集成度更高的单芯片系统。
1998 年后半年, Tensilica 开始与初期顾客密切合作, 到1999 年2 月公开推出标竿产品── 一系列可以自由装组、 可以弹性扩张的处理器产品。

总是,Tensilica是一家IP设计商。

今天的主角Xtensa就是Tensilica公司开发一款处理器。

2、Xtensa有啥特点呢?


通常处理器拥有16个左右通用寄存器用于存储运行时处理器的状态、数据、控制信息,在比较复杂的程序上需要进行频繁的入栈和出栈操作,这种频繁读写内存的栈操作大大降低了程序的性能。为减少栈操作次数,TensilicaXtensa架构设计了一种Windows旋转的寄存器管理机制。该机制将逻辑寄存器和物理寄存器分开,在函数调用的时候通过Windows滑动切换逻辑寄存器所映射的物理寄存器,在物理寄存器被使用完毕前均不需要进行入栈和出栈操作,从而提高性能。

Xtensa 的指令集架构类似于 RISC,并对嵌入式应用场合做了多种优化。在移植操作系统时要留意以下几方面:

  1. 变长指令
  2. 窗口(window)寄存器
  3. 处理器的可配置性
  4. 处理器的可扩展性(可通过 TIE 描述语言为 Xtensa 添加新的指令)

3、滑窗机制


基本实现原理:使用更多的物理AR寄存器组成一个环形的buffer。这些寄存器每4个为一组(pane),WindowStart中的每个比特依次表示该组是否作为逻辑寄存器窗口的起始位置或者被占用。当前的逻辑寄存器的起始位置则用WindowBase状态寄存器来表示。在发生函数调用的时候是通过修改WindowBase寄存器,滑动逻辑寄存器窗口,从而父子函数看到的是不同的物理寄存器,避免了寄存器的压栈和出栈。

以每4个寄存器(pane)为单位,函数调用的时候窗口可以滑动4个,8个或者12个物理寄存器,分别可以用call4,call8,call12指令来实现,而最典型的应用则为call8。

  • a0用来保存函数返回地址
  • a1保存sp堆栈指针
  • a2~a7用来传递函数入参,参数超过6个的时候则需要使用堆栈
  • 对调用者函数和被调用函数来说,a0~a7是独立的寄存器,可以自由使用,而a8~a15则为scratch寄存器,随时会被子函数使用,调用者函数如果要使用,则在调用子函数前进行压栈保存。

4、汇编代码


部分底层驱动只能使用汇编语言编写,比如:

  • 用户异常处理
  • 内核异常处理
  • window处理
  • 复位处理

例如:

/*
  KernelExceptionVector
  This implements the kernel exception vector and transfers control to the KernelExceptionHandler.
*/
	.section .KernelExceptionVector.text, "ax"
	.begin literal_prefix .KernelExceptionVector
_KernelExceptionVector:
	wsr.excsave1 a3
	movi a3, _KernelExceptionHandler
	jx a3
	.end literal_prefix

5总结


Xtensa是个神奇的MCU架构,提高一定的效率,但是也是提高MCU的复杂度,也算是一种平衡吧

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。