STM32Note初识单片机(2)

本期主要介绍单片机核心--cpu的架构、组成及运作方式。
架构之争
目前微型计算机系统的架构主要有x86、mips、arm、powerpc、sparc这几种,但市场上最常见的还是x86和arm架构的,我们接下来以这两种为例了解下微型计算机体系结构,至于剩下几种如果读者有兴趣就只能自行百度了(任天堂、索尼ps、摩托罗拉了解一下)。
在了解x86和arm架构之前,我们先介绍下复杂指令集cisc(complex instuction set computer)和精简指令集risc(reduced instruction set computer)。上期我们说过cpu运行是通过取指令完成的,根据cpu可执行指令我们分成cisc和risc两种。
cisc: 机器指令复杂,这就使得硬件设计逻辑也极其复杂,晶体管数量庞大,为了进行高效运算,需要较长的流水线(下面会介绍)、复杂的分支预测机构、多级cache、支持超线程虚拟化等。
risc: 指令集数量少,指令简单,硬件逻辑简单,功耗比较低,适合移动平台应用。
x86架构是cisc的代表,目前由intel主导,比较有名的pentium、core都是这种架构。而arm则是risc的代表,这种架构的知识产权掌握在arm公司手中(他们只卖知识产权,具体芯片根据不同生产厂家会有所不同),目前比较常见的用于移动手机端像是苹果三星华为,还有嵌入系统,比较常见的有树莓派,stm32用的当然也是这种架构。
arm市场
arm家族中最经典的是arm7、arm9、arm11,虽然现在市场上还有,但已经有要被取代的趋势,而接手市场的则是下面三个系列:
cortex-m系列:为单片机驱动系统提供的低成本优化方案,应用于传统的微控制器、智能传感器等,主流的有m0、m1、m3、m4。
cortex-a系列:针对开放式操作系统的高性能处理器(如android、linux等),主要用于智能手机、数字电视等。
cortex-r系列:针对实时系统,满足实时性需求,用于汽车的制动系统等。
cpu组成
cpu由两部分构成,eu(execution unit)和biu(bus interface unit),其中eu负责指令执行,而biu主要是利用总线与存储器、i/o相连完成数据读写。cpu中主要包括上图中几个模块(不包括总线连接部分):
程序计数器pc:cpu读取指令时需要知道指令在存储器中的存放地址,pc就是用来存储指令地址的寄存器。通常情况下它是按1递增设计的,当cpu执行一条指令的时候,pc会自动加一指向下一条需要执行的指令(实际上不是加一,但是大多数情况程序是顺序执行的)。程序计数器pc决定了指令执行的顺序,所以这个寄存器的值是不可以外部随意修改的。
指令解码电路:由于存储器存放数据是按照二进制存放的,所以需要解码电路将机器码转化为运算电路可用的命令。
运算电路:运算电路被称为alu(arithmetic and logic unit),能完成加法乘法等算术运算,也能进行and、or等逻辑运算。
内部寄存器:内部寄存器是存储临时信息的场所。包括存储运算结果的通用寄存器,也有一些特殊的寄存器,比如说存储运算标志的标志寄存器等。事实上,运算电路在进行运算时并不是完全在内存中进行,而是将数据复制到通用寄存器中在进行的。
上面这张图是经典的x86架构(8086处理器)的cpu结构图(没有找到比较详细的arm架构的结构图。。)。图中的ip其实就是程序计数器pc,在实际的cpu中并没有寄存器叫做pc,pc只是代表一种功能,程序计数器在x86中叫做ip,而在arm则由寄存器r15实现此项功能。
cpu工作原理
我们来举个例子说明cpu工作流程:
ldrr1,0x0001;ldr为读内存命令,将内存中地址0001的内容存到寄存器r1中
ldrr2,0x0002 ;将内存0002的内容读到r2中
addr1,r1,r2;将r1与r2的值相加,结果存在r1中
下面是代码段和数据段存放的内容(数据段和代码段二者共用存储器,实际存放地址一般由段首地址与段内偏移地址共同确定,这里我们认为code和data分别表示代码段和数据段段首地址,表格中为偏移地址):
程序执行过程:
第一步:cpu读取当前pc指向地址即代码段0001的指令内容,经过解码电路解码,cpu从数据段0001地址读出内容3存入r1,pc自动加一变成0002。
结果:r1-->3,pc-->0002
第二步:cpu读取代码段0002的指令内容,解码后,cpu读取数据段0002的内容4存入寄存器r2,pc加一变成0003。
结果:r2-->4,pc-->0003
第三步:cpu读取0003的指令,将r1的内容与r2相加,结果存入r1。
结果:r1-->7,pc-->0004
cpu工作原理大致就是这样。
cpu指令执行模式
cpu指令执行有两种模式,流水线执行模式和乱序执行模式。这两种模式同时存在于cpu中,以流水线为主,但是为了提高cpu中电路的工作效率,引入乱序执行模式。目前x86架构在乱序执行方面领先于arm架构。
一般情况下,在eu执行上一个周期biu取的指令的同时,biu取下一条指令存放于指令队列中。如果eu需要总线完成如读取存储器数据的任务时,则给出命令,使得biu在下个周期不取指令,通过总线获取数据给eu完成上个指令,之后恢复正常流水线。乱序执行在这里就不具体介绍了,主要是将不需要当前运算电路的命令同时执行,以提高效率,具体实现方式只能由读者自行百度了。
本期内容就到这里了,下一期会介绍存储器以及读写内存时cpu与存储器的时序配合。

北斗星通正式发布新一代22nm高精度定位芯片
对抗”升级日态度强硬 三星掌门李在镕亲赴日协商解决
如何使用IBIS模型进行分析
低压直流伺服电机在AGV机器人中的应用
见证与建设,2022世界工业互联网产业大会聚焦“华正方案”
STM32Note初识单片机(2)
光学和电子束方法得到扩展,应对严峻的计量和良率挑战
上海箩箕提供大面积屏下指纹识别技术
镭神智能高端激光雷达安防解决方案诚招全球代理
中国CMOS图像传感器产业迎来新突破
三星和LG已然在Micro LED电视领域展开激烈角逐
关于中兴WCDMA网络优化重点的问答解析
微星GS65StealthThin游戏本评测 当性能本讲起颜值MAX-Q当仁不让
vivo S7e已经全渠道正式开售
ON2.0:重新定义下一代全光网
重磅|机智云入选2023年工业互联网100佳,赋能高质量发展,推动新型工业化
监控系统中网络监控存储设备的位置设定
2017-2023年全球动力电池装机量及预测
思泰克:公司将于11月28日在创业板上市
蔚来计划再融资,助力加快自动驾驶领域的自研进程