问1.处理器通常有哪几种结构?他们的特点分别是什么?有什么优点和缺点?
答1.这里说的处理器的结构是指处CPU的存储结构,分为冯诺依曼结构和哈佛结构。
(1)冯诺依曼:将程序存储器和数据存储器合在一起,这里的程序存储器是指ROM,数据存储器是指RAM,“合在一起”的意思就是ROM和RAM共用CPU的地址总线,即代码和数据统一编址,这就意味着CPU访问存储器时,只需要用相同的指令就行,一个地址对应唯一的存储单元,可能是ROM的,也可能是RAM的。如ARM7,TI的MSP430,经典Inter的8086/8088、80x86都是属于冯诺依曼结构。
该结构在8088中的体现:利用高地址的译码信号来产生片选信号,因此8088在设计存储器时需要额外的译码电路来实现统一编址。8088只是一个CPU,里面是没有集成存储器的,并且在下图中数据总线D0-D7和地址总线A0-A7是分时复用的。
(2)哈佛结构:ROM和RAM是独立编址的,代码空间和数据空间分开编码,这样可以使指令和数据有不同的宽度。如ARM9、ARM10、ARM11,以Atmel公司的AVR系列以及经典的8051单片机。
该结构在8051中的体现:8051内部集成了ROM和RAM,更加准确说应该叫SOC。
①使用外部存储器时:处理器通过使用增加了“PSEN”的控制总线来产生ROM和RAM的控制信号。
通常8051应用系统中需要进行ROM和RAM的扩展,8051地址总线宽度为16,因此扩展的ROM和RAM最大各为216=64KB,地址范围都是:0000H-FFFFH,咋一看,这地址不是重合的么?这就是我要找的答案,哈佛结构的特点所在。这种结构的处理器读外部ROM时使用特殊的指令“MOVC”,该指令可以控制“PSEN”引脚的电平,从而产生读选通信号;而在读写外部RAM时使用“MOVX”指令来控制“RD”“WR”引脚产生读写信号,所以,尽管地址是重叠的,不同的访问指令会产生正确的控制信号来完成正确的操作。细心的朋友可能已经发现,不管是在访问外部ROM还是RAM,8051的A0-A7是分时复用的。
②使用内部存储器时:RAM(128B)、ROM(4KB),8051连接内部ROM和RAM的数据总线和地址总线并不是独立的,它们是共用AB的DB,因此也有种说法8051是改进型的哈佛结构,即使是ARM9也是这样。
为什么不在CPU中建造访问ROM和RAM时独立的AB和DB,这种完整意义的哈佛结构相对复杂,对外围设备的连接要求高扩展麻烦,制作的成本也高,用的人就少,市场决定发展方向。
补充:现在大部分的嵌入式处理器都是内部的哈佛结构+支持外部的冯诺依曼结构。
从上边这幅图中就可以知道:ROM和RAM是统一编址的,因此属于冯诺依曼结构。
问2.程序存储器ROM和数据存储器是如何协调工作的?处理器的预先取址和取址分别是指去哪里取?
答2.8088的EU到指令队列中来取指令执行,BIU到ROM中预取指令到指令队列。8051直接到ROM中读取指令执行。他们在执行的过程中如果要保存读取临时数据就往RAM中去进行。程序执行的过程中的原始数据都是存放在ROM中的。
而在开发ARM9的过程中会发现从NAND上电之后,SOC做的第一件事情就是将NAND的前4K的程序完完全全拷贝考内部4K的SRAM中,为什么要这么做?不能像51一样直接读取NAND中的指令来运行吗?不能。这样做的原因是因为NAND的接口和CPU的地址总线接口不匹配,在ARM9的SOC中CPU只能从SRAM、SDRAM、NOR中取址执行,因为这些存储器的地址总线和数据总线是直接和CPU的地址总线和数据总线连在一起的。
问3.经典8088和8051在上电工作时主要完成哪些工作?是否需要将ROM中保存的程序拷贝到RAM中后才能执行?
答3.上电后从ROM中取指令译码执行。不需要将ROM中的程序拷贝到RAM才能取指令执行,这个和ARM9不一样,在上一个问题中有解释。
问4.MIPS是什么单位?它是衡量什么的指标?
答4.Million Instructions Per Second 每秒处理的百万级的机器语言指令数。是衡量CPU速度的一重要个指标。
问5.8088为什么要对存储器进行分段管理?而8051又不用这样?
答5.首先,8088的数据总线宽度是20位的,即可以访问220=1MB的存储空间,但是,8088的内部寄存器只有16位宽,就比如要取指令时(CS<<4)+IP才能转换成20位的地址信号。8051的地址总线宽度是16位的,内部寄存器也是16位,因此就刚好吻合。
问6.微机中的接口和端口有什么区别?8088和8051的I/O端口是何种编址方式?读写I/O指令分别是什么?
答6.端口是接口的一部分,接口是由若干个端口加上相应的控制电路才构成接口。一般接口中都包含一组寄存器,称他们为I/O端口,端口用来暂存信息,分为:数据端口(双向)、状态端口(只读)、控制端口(只写)。8088的I/O和存储器是独立编址,这里说的I/O和外接的GPIO引脚不是同一个概念,GPIO只是I/O接口的一种,像中断控制器、定时器、DMA控制器等都属于I/O接口器件,从芯片使用手册中也可以发现通常一个接口器件都会分配连续几个地址,即寄存器地址,为了和CPU内部寄存器地址的区别就叫端口地址,实际上就是通过使用端口地址来形成“选中”信号(实例《微型计算机原理与接口技术》第三版-冯博琴-吴宁-第5章P215),使用 IN/OUT 指令来进行读写端口数据。8051中I/O端口和存储器是统一编址,使用 MOVX 指令即可。
注意:8088的ROM和RAM是统一编址,所以访问时用相同的指令,8051的ROM和RAM是独立编址,访问分别使用MOVC和MOV指令。
问7.8088和8051的寻址范围是多少?它是由什么决定的?
答7.寻址范围跟地址总线相关,8088的寻址范围是0-(220-1),8051的寻址范围是0-(216-1).
问8.对处理器流水线的思考?
答8.每次说到“流水线”就自然而然的想到工业生产中的那种生产流水线,处理器中的流水线和这个是很像的。在实际生产的过程中,A机器只负责第一项工作,B机器接过A机器处理过的产品只负责第二项工作......以此类推下去。ARM7只有3级流水线,ARM9有5级流水线,它的分工比较细,平均到每一个“机器”上的任务就少,总体的速度就上来了。
问9.8088和8051的寻址方式有什么不同?这以结果是由什么决定的?
答9.
问10.什么叫系统总线?有什么作用?它是以何种接口与外设进行连接的?
答10.
问11.我们通常所说的“几位的CPU”是指哪个参数?
答11.是指CPU能同时对多少位的数据进行运算,也就是数据总线宽度。