历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2020年02月13日 | STM32Note初识单片机(2)

2020-02-13 来源:eefocus

本期主要介绍单片机核心--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两种。

  1. CISC: 机器指令复杂,这就使得硬件设计逻辑也极其复杂,晶体管数量庞大,为了进行高效运算,需要较长的流水线(下面会介绍)、复杂的分支预测机构、多级Cache、支持超线程虚拟化等。

  2. RISC: 指令集数量少,指令简单,硬件逻辑简单,功耗比较低,适合移动平台应用。

X86架构是CISC的代表,目前由Intel主导,比较有名的PenTIum、Core都是这种架构。而ARM则是RISC的代表,这种架构的知识产权掌握在ARM公司手中(他们只卖知识产权,具体芯片根据不同生产厂家会有所不同),目前比较常见的用于移动手机端像是苹果三星华为,还有嵌入系统,比较常见的有树莓派,STM32用的当然也是这种架构。


ARM市场

ARM家族中最经典的是ARM7、ARM9、ARM11,虽然现在市场上还有,但已经有要被取代的趋势,而接手市场的则是下面三个系列:

  1. Cortex-M系列:为单片机驱动系统提供的低成本优化方案,应用于传统的微控制器、智能传感器等,主流的有M0、M1、M3、M4。

  2. Cortex-A系列:针对开放式操作系统的高性能处理器(如Android、Linux等),主要用于智能手机、数字电视等。

  3. Cortex-R系列:针对实时系统,满足实时性需求,用于汽车的制动系统等。

CPU组成

CPU内部结构.png?imageView2/2/w/550

CPU由两部分构成,EU(ExecuTIon Unit)和BIU(Bus Interface Unit),其中EU负责指令执行,而BIU主要是利用总线与存储器、I/O相连完成数据读写。CPU中主要包括上图中几个模块(不包括总线连接部分):

  1. 程序计数器PC:CPU读取指令时需要知道指令在存储器中的存放地址,PC就是用来存储指令地址的寄存器。通常情况下它是按1递增设计的,当CPU执行一条指令的时候,PC会自动加一指向下一条需要执行的指令(实际上不是加一,但是大多数情况程序是顺序执行的)。程序计数器PC决定了指令执行的顺序,所以这个寄存器的值是不可以外部随意修改的。

  2. 指令解码电路:由于存储器存放数据是按照二进制存放的,所以需要解码电路将机器码转化为运算电路可用的命令。

  3. 运算电路:运算电路被称为ALU(Arithmetic and Logic Unit),能完成加法乘法等算术运算,也能进行AND、OR等逻辑运算。

  4. 内部寄存器:内部寄存器是存储临时信息的场所。包括存储运算结果的通用寄存器,也有一些特殊的寄存器,比如说存储运算标志的标志寄存器等。事实上,运算电路在进行运算时并不是完全在内存中进行,而是将数据复制到通用寄存器中在进行的。

CPU结构.png?imageView2/2/w/550

上面这张图是经典的X86架构(8086处理器)的CPU结构图(没有找到比较详细的ARM架构的结构图。。)。图中的IP其实就是程序计数器PC,在实际的CPU中并没有寄存器叫做PC,PC只是代表一种功能,程序计数器在X86中叫做IP,而在ARM则由寄存器R15实现此项功能。


CPU工作原理

我们来举个例子说明CPU工作流程:

LDR R1, 0x0001    ;LDR为读内存命令,将内存中地址0001的内容存到寄存器R1中

LDR R2, 0x0002    ;将内存0002的内容读到R2中

ADD R1, R1, R2    ;将R1与R2的值相加,结果存在R1中


下面是代码段和数据段存放的内容(数据段和代码段二者共用存储器,实际存放地址一般由段首地址与段内偏移地址共同确定,这里我们认为Code和Data分别表示代码段和数据段段首地址,表格中为偏移地址):

CPUExample.jpg?imageView2/2/w/550

程序执行过程:

  • 第一步: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架构。

流水线.jpg?imageView2/2/w/550

一般情况下,在EU执行上一个周期BIU取的指令的同时,BIU取下一条指令存放于指令队列中。如果EU需要总线完成如读取存储器数据的任务时,则给出命令,使得BIU在下个周期不取指令,通过总线获取数据给EU完成上个指令,之后恢复正常流水线。乱序执行在这里就不具体介绍了,主要是将不需要当前运算电路的命令同时执行,以提高效率,具体实现方式只能由读者自行百度了。


本期内容就到这里了,下一期会介绍存储器以及读写内存时CPU与存储器的时序配合。

推荐阅读

史海拾趣

Dialog Semiconductor(戴乐格半导体)公司的发展小趣事

为了进一步增强市场影响力,Dialog Semiconductor通过一系列的收购策略来扩大其业务范围。例如,在2020年,公司收购了Adesto Technologies,这是一家专注于非易失性存储器(NVM)解决方案的公司。此次收购为Dialog Semiconductor带来了近5,000家新客户,并补充了其在无线连接产品之外的有线连接解决方案。同年,Dialog Semiconductor还收购了另一家公司,获得了强大的核心IC产品组合和经验丰富的工程师团队,进一步巩固了其在IoT市场的地位。

Elpress AB公司的发展小趣事

在追求经济效益的同时,Elpress AB也注重可持续发展和环境保护。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,Elpress AB还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了Elpress AB的社会责任感,也为公司的长期发展奠定了坚实的基础。

Aptos Technology公司的发展小趣事

随着技术的不断进步,Aptos在微电子封装领域取得了重大突破。公司成功开发出了一系列高效、稳定的封装技术,并成功应用于多个电子产品中。同时,Aptos还积极拓展业务领域,将技术应用于智能穿戴、物联网等新兴领域,进一步提升了公司的市场影响力。

CR Magnetics公司的发展小趣事

为了更好地服务全球客户,CR Magnetics积极在全球范围内拓展业务。公司在东亚、欧洲和美洲等地设立了制造和销售办事处,以便更快速地响应市场需求和提供更好的服务。同时,公司还与国际知名厂商建立了合作关系,共同推动电子行业的发展。

ARCOLECTRICSWITCHES公司的发展小趣事

在电子行业的初期,ARCOLECTRIC SWITCHES公司以其卓越的技术研发能力崭露头角。公司研发团队成功开发出一种新型开关技术,具有更高的稳定性和耐用性,迅速在市场上获得了广泛认可。这一技术突破不仅为公司带来了丰厚的利润,还奠定了其在电子行业的重要地位。随着技术的不断升级和完善,ARCOLECTRIC SWITCHES公司逐渐发展成为一家技术领先、市场影响力强大的企业。

Advanced Detector Corp公司的发展小趣事

Advanced Detector Corp公司成立于上世纪80年代,由一群热衷于探测器技术研发的科学家和工程师创立。在创立初期,ADC便专注于开发高精度、高灵敏度的探测器技术,以满足当时日益增长的电子测量需求。公司通过持续的技术创新,逐渐在探测器领域取得了突破性的进展,并成功推出了一系列具有竞争力的产品。

问答坊 | AI 解惑

申请一下,用于电子负载

以前用的是C8051F的,想改成MO。申请一下!!谢谢…

查看全部问答>

关于C51外部电平中断的简单问题

#include main() {   EA=1; EX0=1; IT0=0; while(1) P1=0xff; } void exter0() interrupt 0 { P1=0; } 就这个简单的外部中断,INT0我直接用开关接地了。为什么显示LED是闪亮的,而不是常亮的呢? 我是这样觉得的,如果不对 ...…

查看全部问答>

inputPanel控件出现资源未释放问题

程序中有两个窗体,我为每个窗体都加了inputpanel 都写了如下方法 [code]         ///         /// 让窗体随着输入法窗口上移         /// & ...…

查看全部问答>

ARM的串口输出问题

问个困扰了我很久的问题: Uart_Printf这个函数 我看了它的定义。但还是不很懂。而且用它串口输出的话,显示的是乱码。过程是这样的:我选取了某公司写的测试程序中的3个文件:RTC.C 、44BINIT.S和44blib.c。用这3个文件做了工程。(当然了,我还添 ...…

查看全部问答>

不能下载

我用的芯片是149,并口仿真,芯片刚焊上时能下载,一段时间后就不能正常下载,老提示找不到芯片,已经换了好几块芯片了,不知问题出在什么地方,请高手指教!我快崩溃了 !…

查看全部问答>

大侠们,来帮忙分析这个电路图,一个简单的恒流充电电路

今天看到一个简单的恒流充电电路,只有降压,整流,滤波部分能够看得懂,其他的功能好像 没弄得懂,请各位高手不吝赐教:   电路图附下:  …

查看全部问答>

迎接TI杯电赛的一组LaunchPad培训作业照片

2012TI杯电赛早已结束。手机里尚有一些培训时拍的照片,主要布置学生完成的LaunchPad作业。…

查看全部问答>

单片机学习资料

单片机 学习 资料…

查看全部问答>

MSP-EXP430FR5739开发板怎么下载程序

今天收到MSP-EXP430FR5739开发板,发现没有传统的JTAG座,我有开发板一块,光盘没有,愣是不知道这程序怎么下载进去。难道从USB吗…

查看全部问答>