前面提到,我们在最初使用ZYNQ的时候,可以将ZYNQ仅仅看作是一块嵌入式的SOC。那么这里我就谈谈我对CPU的认识。下面的一段内容来自网络:
CPU(Central Processing Unit),是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。所谓的计算机的可编程性主要是指对CPU的编程。
MPU (Micro Processor Unit),叫微处理器(不是微控制器),通常代表一个功能强大的CPU(暂且理解为增强版的CPU吧), 但不是为任何已有的特定计算目的而设计的芯片。这种芯片往往是个人计算机和高端工作站的核心CPU。Intel X86,ARM的一些Cortex-A芯片如飞思卡尔i.MX6、全志A20、TI AM335X等都属于MPU。
MCU(Micro Control Unit),叫微控制器,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的芯片,比如51,AVR、Cortex-M这些芯片,内部除了CPU外还有RAM、ROM,可以直接加简单的外围器件(电阻,电容)就可以运行代码了。而如x86、ARM这些MPU就不能直接放代码了,它只不过是增强版的CPU,所以得添加RAM,ROM。
SoC(System on Chip),指的是片上系统,MCU只是芯片级的芯片,而SOC是系统级的芯片,它既MCU(51,avr)那样有内置RAM、ROM同时又像MPU那样强大,不单单是放简单的代码,可以放系统级的代码,也就是说可以运行操作系统(将就认为是MCU集成化与MPU强处理力各优点二合一)。
总结一下,MPU是功能强大的CPU。MCU是CPU加一些外设,也就是大家俗称的单片机。Soc是功能强大的CPU加上更加复杂一些的外围设备。这些都离不开CPU,那么我们就从CPU说起。
CPU的运行机制:
CPU是中央处理器 (Central Processing Unit)的缩写。一个简单CPU的主要模块包括一个指令存储器,一个数据存储器,一个通用寄存器堆,一个指令寄存器(IR)以及一个程序计数器(PC)。指令存储器和数据存储器分别用来存储所有的指令和数据。IR用来存放当前要执行的指令,PC则用来存放当前要执行的指令的地址,通用寄存器堆里存放了若干个寄存器。
CPU工作的基本思路是:在工作时,先用PC作为地址去指令存储器里取指令,将取到的指令存放到IR中,接着CPU对IR中的指令进行解析,比如IR中存放了一条指令 ADDU r1,r2,r3,CPU解析得到要去寄存器堆取出r2,r3寄存器的值,并且知道了这是一条加法指令。然后寄存器堆将r2,r3的值送到ALU(运算部件)进行加法运算,最后将算完的结果保存到寄存器堆中的r1寄存器。如果是一条访存指令,则会从数据存储器中取数或是存数,然后把相应的结果放回寄存器堆。
这里要提到的是各种不同体系的CPU会在指令集,寄存器数量,用途等方面会有一些差异,但是运行的基本思路都是相同的。指令集是不同CPU对于不同操作的各种编码。比如下面是MIPS的部分指令集。
这里大家需要树立的一个观念就是,CPU只能执行一些由‘0’和‘1’组成的指令,只是CPU有一些事先约定,不同的‘0’‘1’组合表明不同的指令。为了帮助工程师的编程,出现了汇编语言,汇编语言采用一些指令注记符来表示各种指令。编写完成后的程序经过编译器的编译,即可产生CPU可以执行的指令。
汇编语言指令的一般格式:助记符 目的操作数,源操作数。例如:
MOV AX, [SI]
MOV AX, ES:[SI]
为了让程序更加易读,出现了一些高级语言,比如C语言。通过编译器可以将C语言转换为汇编语言,最后根据不同指令集,再将汇编语言转换为机器可执行的2进制指令。
CPU的外部总线
CPU通过外部总线来访问IO设备,RAM,ROM等存储单元。根据总线的拓扑结构,主要可以分为哈佛结构与冯诺依曼结构。
哈佛结构
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问,目的是为了减轻程序运行时的访存瓶颈。
哈佛结构的中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。
冯诺依曼结构
冯诺依曼结构又称为普林斯顿体系结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行;缺点是在高速运行时,不能达到同时取指令和取操作数,从而形成了传输过程的瓶颈。由于程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。
两种架构的比较
哈佛结构与冯·诺依曼结构的最大区别在于冯·诺依曼结构的计算机采用代码与数据的统一编址,而哈佛结构是独立编址的,代码空间与数据空间完全分开。
在通用计算机系统中,应用软件的多样性使得计算机要不断地变化所执行的代码的内容,并且频繁地对数据与代码占有的存储器进行重新分配,这种情况下,冯·诺依曼结构占有绝对优势,因为统一编址可以最大限度地利用资源,而哈佛结构的计算机若应用于这种情形下则会对存储器资源产生理论上最大可达50%的浪费,这显然是不合理的。
但是在嵌入式应用中,系统要执行的任务相对单一,程序一般是固化在硬件里。当然这时使用冯·诺依曼结构也完全可以,代码区和数据区在编译时一次性分配好了而已,但是其灵活性得不到体现,所以现在大量的单片机也还在沿用冯·诺依曼结构,如TI的MSP430系列、Freescale的HCS08系列等。
那是为什么说哈佛结构有优势呢?嵌入式计算机在工作时与通用计算机有着一些区别:嵌入式计算机在工作期间的绝大部分时间是无人值守的,而通用计算机工作期间一般是有人操作的;嵌入式计算机的故障可能会导致灾难性的后果,而通用计算机一般就是死死机,重新启动即可。这两点决定了对嵌入式计算机的一个基本要求:可靠性。
使用冯·诺依曼结构的计算机,程序空间不封闭,期程序空间的数据在运行期理论上可以被修改,此外程序一旦跑飞也有可能运行到数据区。虽然都是一些不常见的特殊情况下,但是看看哈佛结构德计算机在这些情况下是怎样的:基于哈佛结构的处理器入MCS-51,不需要可以对代码段进行写操作的指令,所以不会有代码区被改写的问题;程序只能在封闭的代码区中运行,不可能跑到数据区,这也是跑飞的几率减少并且跑飞后的行为有规律(数据区的数据是不断变化的而代码区是不变的)。
所以,相对于冯·诺依曼结构,哈佛结构更加适合于那些程序固化、任务相对简单的控制系统。
改进型哈佛结构
改进型哈佛结构虽然也使用两个不同的存储器:程序存储器和数据存储器,但它把两个存储器的地址总线合并了,数据总线也进行了合并,即原来的哈佛结构需要4条不同的总线,改进后需要两条总线。
改进型哈佛结构其结构特点为:
使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;
具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输;
两条总线由程序存储器和数据存储器分时共用。
总结
总得来说,哈佛机构的高性能体现在在单片机、DSP芯片平台上运行的程序种类和花样较少,因为各个电子娱乐产品中的软件升级比较少,应用程序可以用汇编作为内核,最高效率的利用流水线技术,获得最高的效率。
冯诺依曼结构主要是基于电脑购买者对电脑的使用途径不同—-各种娱乐型用户、各种专业开发用户等,且安装的软件的种类繁多,升级频繁,多种软件同时运行时处理的优先级比较模糊,因特尔芯片不具备彻底智能分配各程序优先级和流水线的机制,机械的分配优先和流水线反而容易使用户不便。
冯氏结构简单、易实现、成本低,但效率偏低;哈佛结构效率高但复杂,对外围设备的连接与处理要求高,十分不适合外围存储器的扩展。现在的处理器,依托CACHE的存在,已经很好的将二者统一起来了。现在的处理器虽然外部总线上看是诺依曼结构的,但是由于内部CACHE的存在,因此实际上内部来看已经类似改进型哈佛结构的了。
事实上,IO接口会与存储单元共享总线,最终的系统结构会变为如图所示:
CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,另一部分分给接口总线用,各种接口会连接到接口总线上,这是由硬件设计来决定的。因此在32 bits地址线的处理器中,物理地址空间是2的32次方,即4GB,但物理RAM一般不能上到4GB,因为还有一部分要给总线用(总线上还挂着别的许多设备)。一般是把低端物理地址给RAM用,高端物理地址给总线用。下图为zynq中ARM核的地址映射表:
可以看到低位的1G空间是留给了memory。其实E000_0000到E02F_FFFF这段地址是给了IO接口。
CPU展开讲,估计讲很多天也不一定能讲完。我不是这方面的专家,这里只是从一个硬件工程师角度开大概梳理出一个框架,希望大家对用。(在硬件工程师脑子里就是各种电路,即使是看CPU,我们也是看它有哪几部分电路组成,唉,没办法了!)
说明:本文来源网络;文中观点仅供分享交流,不代表本***立场,转载请注明出处,如涉及版权等问题,请您告知,我们将及时处理。