全部学习汇总: GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com)
继续看一下内核编程模型,看看是否能够对于所有芯片的理解形成一个统一的思维模式。
1. 编程模型主要涉及到的4项内容:支持的数据类型、数据的大小端排布、存储模型、寻址模型。
2. 关于数据类型的部分,其实前面已经看过了。
3. 位串其实是打包的字段,一般是通过逻辑移位或者位域指令来处理。
1. 关于前面看到的有符号分数,这里给出来了具体的范围。至少得明确一下,-1其实是可以用于分数表达,但是1不在这个表达范围内。
2. 如果是比较短的有符号或者无符号的整型,在加载的时候会被扩展。
3. 寄存器是32bit的,直接或者半字加载到寄存器的时候会被进行扩展。
4. 芯片支持48bit的有符号、无符号以及分数。这样的数据类型还是第一次接触到,之前则接触过etpu中的24bit。
这一张图其实有点让人觉得有趣了,前面提到的48bit到了这张图中没了。
1. 地址必须是按照4字节对齐。
2. 数据是可以按照字或者半字来对齐的,但是也有一些例外信息,上面做了列举。
3. 非外设空间的表格中,上下文存储以及恢复需要64字节对齐。
从这个表中可以看到,上下文的处理信息可能会包含外设信息,但是没有相应的存储处理。
存储的字节序是小端。其实,我好奇有没有一个bit序?我似乎也从什么地方看过。字节的解析方式以及代码的表达,后面其实可以通过软件测试来看一下。
1. 内核管理的存储空间分为多个块,每一个块前面的16K是可以进行绝对地址访问的。
2. 存储空间中,F开头的是外设空间。
3. 内核的特殊功能寄存器空间占用是64K,根据内核设计实现的不同,这个地址区间可能会有变化。
1. 中间标注出来的指令,个人感觉可能是表征完成确认功能的意思。使用这样的指令,可以确保指令执行的生效而无须等待查询。
2. 几种寻址模式:绝对寻址、基地址+短偏移、基地址+长偏移、预增加是否可以理解为C语言中的++?、后增加可以理解为--a?
3. 地址寄存器中的地址运算后又给了地址寄存器,这样的行为在内核架构中未定义。其实,这种行为是把地址寄存器当成了数据寄存器来用。
4. 绝对地址可以用来进行外设寄存器的访问,直接高效。18bit的信息会扩展成32bit,缺失的bit全都填充为0。
1. 这里的示意图是我看到的前面的扩展表达的图形化。
2. 基地址以及偏移量的访问方式,比较适用于记录数据,进行局部量以及静态量的访问。其中,短偏移支持的是1K的偏移大小,而长偏移支持的则是64K的大小。
3. 预增加以及预减少,还有后增加和后减少都是可以进行stack的处理的。
这里的环型寻址,有一种硬件实现了链表的感觉。
关于唤醒的寻址处理,必须要在操作上保证buffer的64bit地址对齐,否则会出现存储的Trap。至于为什么是64bit对齐,前面的理论中提到的一奇一偶的组合其实就可以说明。由于奇偶排列有先后顺序,因此对齐成了必然的要求。
位反转寻址,没有从文字上做什么理解,但是看这个图的表达很容易理解。这种处理,可以从硬件级别支持快速的傅里叶变换。
指令集不支持的一些指令是可以通过短指令序列来进行合成的。
PC相对寻址,从功能描述看,其实如果需要是可以通过标签采用基地址+偏移的方式来处理的。不考虑寻址方式,单纯看画出来的这部分描述还是很有趣的。原来嵌入式中也是可以实现动态加载模式的。另外一种动态的方式则是通过二进制镜像来进行扩展。而这种方式,从etpu到flash的驱动都是接触过的。
以上就是大概的一个编程模型的梳理,看起来跟大学接触的微机原理还是非常相近的。这么看,如果考虑一个框架性了解一个芯片设计的方法,似乎可以通过大学的微机原理之类的课程来实现。
标签:TriCore,地址,寻址,偏移,内核,AURIX,寄存器,对齐,1529 From: https://blog.51cto.com/greyzhang/5888791