一沙一世界 一树一菩提
分类: 嵌入式
2020-01-06 14:22:23
这段时间研究arm的指令集,突然发现竟然连arm的基本体系结构也不了解,尤其是一些和硬件优化相关的基础知识,例如,多少级流水线,cache line大小,指令和数据是否分开存储等等。cache line大小关系到数据结构大小和数据项怎么安排,流水线级数关系到指令级并行优化,指令和数据是否分开关系到总线使用带宽一类的问题。总之就是啥都不知道啊。
平时都在m系列上编程比较多,但是也没有系统总结过。其实大部分arm是指令空间和数据空间是分开的,指令是直接从flash读取的,数据存放在ram区域。也就是说大部分arm都是哈佛结构,而我们日常使用的台式机或笔记本大部分都是冯诺依曼结构。这两种结构最根本的区别在于程序空间和数据空间是否是一体的,冯诺依曼结构数据空间和程序空间是分开的,而哈佛结构数据空间和程序空间是分开的。
由于平时使用较多的是a系列和m系列,故之没有考虑r系列,只总结a和m这俩个系列如下:
1 arm M系列的几款mcu主要特点:
可以得知流水线级数,是否支持超标量,是否支持simd运算。
2 arm A系列的几款cpu主要特点,都是哈佛结构,近几年的arm基本都支持simd,一二级指令和数据cache,多发射,多执行,乱序,寄存器别名等可以优化考虑的特点:
下面是另外一张图,有些有用的信息:
关于cortex-A系列的流水线,I-cache,D-cache容量大小,是否支持乱序,几发射端口,几执行端口,是否支持neon加速器,各条指令的延时和吞吐量,都不太容易收集啊,大家自己直接看cpu对应手册吧。