1、考虑了很久,查阅了一下,在网上基本上找不到关于PLC是冯氏结构还是哈佛结构的论述。因此,我来回答一下。
2、这个问题不是一个简单的问题,能问出这样的问题,楼主也并不菜。
3、PLC不是纯粹意义上的单片机。
4、要讨论这个问题,首先来很简单的了解下冯式结构和哈佛结构。
冯·诺依曼结构:将数据和指令都存储在存储器中。系统由一个中央处理单元(CPU)和一个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进行读或写。因此程序指令和数据的宽度相同;目前使用冯·诺依曼结构的 CPU 和微控制器有很多。其中包括英特尔公司的8086及其他CPU,TI的MSP430处理器,ARM公司的ARM7、MIPS公司的MIPS处理器也采用了冯·诺依曼结构。
哈佛结构:为数据和程序提供了各自独立的存储器。程序计数器只指向程序存储器而不指向数据存储器,这样做的后果是很难在哈佛机上编写出一个自修改的程序,独立的程序存储器和数据存储器为数字信号处理提供了较高的性能。指令和数据可以有不同的数据宽度,哈佛结构的CPU 通常具有较高的执行效率。目前使用哈佛结构的 CPU 和微处理器有很多,除了所有的DSP 处理器,还有摩托罗拉公司的MC68系列、Zilog 公司的Z8系列、Microchip(微芯)公司的PIC处理器(MCU+MPU)、公司ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11(特别说明:ARM 7使用冯·诺依曼体系结构)等。
哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独 立访问。与两个存储器相对应的是系统的4条总线:程序的数据总线与地址总线,数据的数据总线与地址总线。这种分离的程序总线和数据总线允许在一个机器周期 内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,使数据的吞吐率提高了1倍。又由于程序和数据存储器在两个分开的物 理空间中,因此取指和执行能完全重叠。CPU首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一 步的操作(通常是执行)。
哈佛结构采用数据存储器与程序代码存储器分开,各自有自己的数据总线与地址总线。但这是需要CPU提供大量的数据线,因而很少使用哈佛结构作为CPU外部 构架来使用。但是对于 CPU内部,通过使用不同的数据和指令cache,可以有效的提高指令执行的效率,因而目前大部分计算机体系都是CPU内部的哈弗结构+CPU外部的冯· 诺伊曼的结构。
冯诺依曼结构可能有以下的特点:(1) 程序存储和数据存储统一编址。(2) CPU使用统一的总线来访问程序和数据。(3) CPU采用相同的指令来访问程序和数据。
哈佛结构可能有以下的特点:(1)程序存储和数据存储物理独立。(2)CPU采用独立的总线来访问程序和数据。(3)CPU采用不同的指令来访问程序和数据。
其实,对于单片机而言,现在已经不能很严格的去区分其结构了————只要性能最好,结构可以改进。当我们还在讨论某种单片机是什么结构的时候,厂商可能又揉合了几种完全不属于这两种结构之外的结构(我们暂且可以称之为某结构的改进型)。例如51单片机就是这种情况。下面顺便来聊聊。首先8051的结构是一种哈佛结构(虽然是改进的)没错,但是8051单片机相对以上的另外几款单片机还有一个区别,8051可以外接程序存储器和/或者数据存储器。的确对于内核数据器和内部程序器8051的ALU会采用不同的地址总线来访问。但是对于外接的数据存储器和程序存储器,却采用同样的地址总线(P0,P2)和数据总线(P0),区分是访问数据存储器和程序存储器是通过控制总线(PESN,RD,WR)来区分的。而这个外部的总线的接法是我们硬件设计者自己设计的。如果我们把PESN和RD通过与门连接到外接RAM的RD引脚。那么无论51采用读程序的指令还是采用读数据的指令,只要地址一样,都会被定位到外部RAM的同一位置,也就相当于存储结构变成了冯诺依曼结构。
西门子S7-200系列PLC。
对于西门子S7-200系列PLC的存储结构,相关手册上没做太多说明。总结如下。
对于用户程序的存储,可以存储在内置的EEPROM中,也可以存储在选件设备——外置的EEPROM存储卡中。
PLC数据可以存储在内置的RAM(例如CPU224的RAM就是M68AF127,这是一个SRAM。SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,且功耗较大。所以在主板上SRAM存储器要占用一部分面积)中,也可以存储在内置EEPROM中(是否可以存储在外置EEPROM选件卡中,这点笔者还未去研究)————通过特殊的读写指令可以把数据存储到EEPROM中。
存储到SRAM中的数据靠超级电容和外置电池保存其数据。