全部学习汇总: ​​GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com)​

看文档的时候,引用了内核架构的内容。这方面我没有看过,除了ARM也没有什么内核算是较为认真的看过。纵然是ARM,看的时候也是有点走马观花。但是,内核相关的东西一点都不了解在遇到问题的时候也很棘手。因此,这次也把这个内核手册走马观花看一下。

1527_AURIX_TriCore内核架构开篇与架构概述_TriCore

这一页的目录中,提到了架构概述以及编程模型两部分。第一部分会是我这次看的一个主要的关注点,而第二个部分,我觉得有必要理解一下。如果每一个架构都能够抽取出来一个编程模型,那么理解其他的架构会有很多参考的信息可以类比。我猜测,这里面介绍的会是一些运算的功能以及中断系统之类的。

1527_AURIX_TriCore内核架构开篇与架构概述_TriCore_02

这里的几个功能主题:通用以及系统寄存器、任务和函数、中断系统。看到这里,前面我自己的一点思考可能错了,那就是编程模型中并不会介绍中断系统。中断系统在这个架构中是一个完整的章节。

说起来,我也记不清之前看过的ARM是什么状态了。当时看的都是网页的版本,而OS的调试没少翻看中断的部分。

1527_AURIX_TriCore内核架构开篇与架构概述_单片机_03

这一页介绍了Trap、存储完整性错误缓冲?(具体的功能未知,尚不清楚表达什么含义)、地址分布以及存储配置。

1527_AURIX_TriCore内核架构开篇与架构概述_TriCore_04

这一页,提到了存储保护系统、临时保护系统、浮点单元、内核调试控制器。

1527_AURIX_TriCore内核架构开篇与架构概述_单片机_05

内核寄存器表。

1527_AURIX_TriCore内核架构开篇与架构概述_架构_06

1. TriCore是一个32bit的DSP,为嵌入式的实时系统需求做了专门的优化。

2. 系统架构的文档分为两卷,上卷是架构以及系统交互为主的,下卷主要是指令集以及扩展的介绍。MMU以及FPU都在可以选择的模块。这倒是让我又纠正了一个错误的理念:之前从一个客户那边听说AURIX的单片机全都没有MMU,看起来也不全是。

3. 这里还有一些扩展的文档,有些涉及到DSP以及编译器编写的,这些我觉得都有必要看一下。但是不知道这样的文档是否好获取。

1527_AURIX_TriCore内核架构开篇与架构概述_AURIX_07

1. 寄存器的默认值一般不是架构设计决定的,跟内核的实现有关。

2. 两个缩写相关的说明,之前的文档中都是接触过的。

1527_AURIX_TriCore内核架构开篇与架构概述_嵌入式硬件_08

1. ISA,是指令集架构的缩写。

2. 这里提到了一个虚拟机地址的可选功能,应该就是MMU的可选配体现出来的吧?

3. 所有的功能都是可以通过32bit的指令进行访问的,16bit的指令只是一个子集,设计的目的是为了降低code size以及功耗。

4. 这里提出来了架构实时性的两个指标,后续类似的判断都可以作为参考。一个是中断的延迟,另外一个是上下文的切换时间。

1527_AURIX_TriCore内核架构开篇与架构概述_TriCore_09

1. 分支指令集采用了分支预测。

2. 零开销循环,这是一个较新的概念,后面需要补充一下相关的基础知识。

3. 几个比较特殊的高级功能:扩展位处理、MMU、单周期多指令。

4. 这里简单描述了一下编程模型,主要是数据类型、存储模型以及寻址模式的支持。

5. 架构寄存器中有两个特殊寄存器之前在接触OS的时候看到过,PCXI以及PSW,分别是先前上下文信息寄存器和程序状态字。

1527_AURIX_TriCore内核架构开篇与架构概述_架构_10

1. PCXI、PC、PSW在保存和恢复上下文的时候至关重要。

2. 32个通用的寄存器,分为地址寄存器和数据寄存器。

3. 数据寄存器中有一个特殊的寄存器,D15,一般是用作隐式数据寄存器。关于隐式数据。

4. 地址寄存器中有三个比较特殊的寄存器,分别是用于堆栈、返回地址、隐式地址等功能。

5. A0、A1、A8、A9四个寄存器被定义为系统全局寄存器,调用及中断不会保存或者恢复。这几个寄存器一般会被OS用来降低系统的开销。

1527_AURIX_TriCore内核架构开篇与架构概述_单片机_11

1. 除了GPR还有CSFR,这些寄存器在后面的章节会有描述。

2. 支持的数据类型中有两个比较特殊的数据类型,一个是位串,另一个是有符号分数。

3. 在指令集的设计中,大部分的指令都是针对一个专门的数据类型的。

4. 内核的寻址范围是4GB,分为了16块,每一块是256M。

5. 内核支持7种寻址模式,还有4种不同的数据宽度。

6. 有专门的设计,可以从内核层级上通过DSP技术支持快速的傅里叶变换。

7. 这里从内核的角度提出来了一个任务的概念,任务是一个独立的控制线程,存在两种类型。类型一其实是跟我们通常接触到的RTOS有一定的相似之处的,类型二则是ISR。

1527_AURIX_TriCore内核架构开篇与架构概述_AURIX_12

1. 这里也进一步描述了,SMT其实就是OS管理的任务,跟前面理解的一样。

2. 三种任务模式,模式0,没有权限可以访问任何外设; 模式1,可以访问外设,短时间内可以关闭中断;模式2,允许访问所有的系统寄存器和外设,可以关闭中断。

3. 一直在很多文档中看到上下文的概念,这里第一次看到对于上下文的明确定义。不同于其他的芯片,TriCore的上下文的管理是可以通过硬件进行高效管理的。

4. 一个CSA有64个字节,通过一个链接字进行控制。这样的描述多少是有些抽象的,可以借助于开元的FreeRTOS的处理看一下这里面的实施是如何做的。这种信息交换速度比较快,关键的实现其实是通过一个宽总线来实现的。

5. 上下文的切换有很多种方式,比如说中断以及服务请求、Trap以及函数调用。前面一个我觉得还是可以理解的,后面两种模式,看上去不太理解。因为Trap的发生在我之前的印象里面一般会直接导致系统的停止,而函数的调用本身可能会被当做OS任务的一部分。

1527_AURIX_TriCore内核架构开篇与架构概述_嵌入式硬件_13

1. 中断系统的设计始终围绕SRN设计,SRN是服务请求节点的意思。

2. 传统的MCU一般通过加载存储中的向量表来确定PS,而TriCore中请求直接跳转到向量。这个描述没有很理解,但是从模型上考虑,可能这里提到的传统的模式是软中断,而TriCore实现的其实是硬终端。

3. TriCore的中断系统根据这些描述并没有在脑子里建立起很好的模型,后面还得去深入分析理解。从一个简单的问题思考角度来说就没有分析清楚:中断的优先级看起来是允许相同的,那么,不允许相同的又是什么?

4. Trap的产生原因一般来说有3种:NMI、指令异常、非法访问。如果出现了Trap,可以从D15种看到TIN的数值。

1527_AURIX_TriCore内核架构开篇与架构概述_架构_14

1. Trap是分为8类,具体的翻译不去写了,我在阅读笔记中已经标注了。

2. 保护系统主要是用来保护核心系统,防止受到非关键问题的影响或者防止未经授权的访问。

3. 全局的保护系统主要是有三种: Trap、IO权限以及存储保护系统。

4. 1.3以上的内核版本是支持选配MMU的,现在看到的这个内核已经到了1.6,应该是全都支持的。如果有MMU,可以进行虚拟内存的访问。如果没有,则可以选择给予范围的内存保护。

1527_AURIX_TriCore内核架构开篇与架构概述_AURIX_15

这里提了一下内核的调试,前面已经看过了相应的资料,这里的信息也不多,直接跳过了。