如何根据网址的地址 u盘写入速度不同的i=0的指令?

星级专家为您解答难题!
800-820-5114
您尚未登录,请先
遇到问题怎么办?赶快来提问!研发平台专家为您解答!
问题已解决
问题提出时间: 09:47:07
51单片机I/0口扩展
我想把51单片机的I/O口扩展成400个左右,大家有什么好办法吗?谢谢!
行业分类:信息技术
回答时间: 10:40:40
请上网电子大全吧查看(有很多图)/dpjyy/4-2.html
单片机I/O 口扩展技术与总线可靠性设计(一)
15:27:34 来源:安徽大学图书馆 作者:林成武,宋同富 【大 中 小】 浏览:274次 评论:0条 -
在单片机家族的众多成员中,MCS一51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,成为国内单片机应用领域中的主流机型。
MCS一51单片机有4个8位并行13 P0、P1、P2和P3,由于P0 13是地址/数据总线口,P2口是高8位地址线,P3 13具有第二功能,这样,真正可以作为双向I/O 13应用的就只有P1 13了。但在大多数应用中,这是不够的,因此,在大部分MCS一51单片机应用系统设计中都不可避免的需要进行t/O 13的扩展。
由于MCS一51单片机的外部RAM和I/O口是统一编址,因此可以把单片机外部64K字节RAM空间的一部分作为扩展外围I/O 13的地址空间。这样,单片机就可以像访问外部RAM存储器单元那样访问外部的I/O接13芯片,对I/O 13进行读/写操作。I/O的扩展方法有多种:8255可编程并行t/O扩展芯片、81 55/81 56可编程并行1/O扩展芯片、8243并行t/O扩展芯片、用丌L芯片等。本文重点分析了用具有三态缓;中的74HC244和输出带锁存的74HC377进行13线扩展的方法以及扩展总线时的总线可靠性设计方法。
一、输入接口的扩展
51单片机的数据总线是一种公用的总线,不能被独占使用,这就要求接在上面的芯片必须具备”三态”功能,因此扩展输入接13实际上就是要找一个能够控制的、具备三态输出的芯片。当输入设备被选通时,它使输入设备的数据线和单片机的数据总线直接接通;当输入设备没有被选通时,它隔离数据源和数据总线(即三态缓;中器为高阻抗状态)。
1.用典型电路芯片扩展输入接口
如果输入的数据可以保持比较长的时间(比如键盘),简单输入接13扩展通常使用的典型芯片为74HC244,由该芯片构成三态数据缓冲器。图1是74HC244芯片的引脚示意图。
74HC244内部共有两个四位三态缓冲器,分别以/1G和/2G
作为它们的选通工作信号。当/1G和/2G都为低电平时,输出端B和输入端A状态相同;当/1G和/2G都为高电平时,输出呈高阻态。
2.输入接口的扩展方法
图2是采用74HC244芯片进行简单输入接13扩展的原理电路图,图3是读I/O 13的时序。由图3中可以看出,当P2_7和同为低电平时,74HC244才能将输入端的数据送到单片机的P0口。其中,P2_7决定了74HC244的地址为:0000H一7FFFH共32K地址都可以访问这个单元,这就是用线选法所带来的副作用。通常,我们选择其中的最高地址作为这个芯片的地址来写程序,即这个芯片的地址是7FFFH。这仅是一种习惯,并不是规定,当然完全可以用0000H作为这个芯片的地址。确定了地址之后,接13的输入操作程序如下:
MOV DAPTR.#7FFFH
MOVX A.@DPTR
MOVX类指令是MCS一51单片机专用于对外部RAM进行操作的指令,由于外部I/O与外部RAM是同一接13,所以使用这条指令对外部I/O进行操作。一旦执行到MOVX类指令,单片机就会在RD或WR(根据输入还是输出指令)引脚产生一个下降沿,这个下降沿的波形与P2_7相或,在或门的输出13也产生一个下降沿,这个下降沿使得74HC244的输出与输入接通,输入设备的数据可以被MCS一51单片机从总线上读取。
74HC244是不带锁存的,如果输入设备提供的数据时间比较短,就要用带锁存的芯片进行扩展了,如74HC373。74HC573等。
二、输出接口的扩展
单片机的数据总线是为各个芯片服务的。不可能为一个输出而一直保持一种状态。因此,输出接El的主要功能是进行数据保持(即数据锁存)。输出接口的扩展实际上就是扩展锁存器。
1.用典型电路芯片扩展输出接口
输出接口扩展通常用74HC377芯片。该芯片是一个带允许端的8D锁存器。图4是该芯片的引脚图。表1是该芯片的真值表。图4中相关引脚功能如下:
◆1D—D7:8位数据输入端
◆1Q一8Q:8位数据输出端
◆ 石:使能控制端
◆CLK:时钟信号。上升沿锁存数据
2.输出接口的扩展方法
图5是利用74HC377进行输
出接口扩展的电路。图中。74HC377的百端与P2 6口相连。所以其地址是:×0 × × × × × × × × × × × ×××××B。如果把”×”全置1。则11 1111B即0BFFFH就是该芯片的地址了。
由于MCS一51的WR与74HC377的CLK端相连。当信号由低变高时。数据总线上的数据输出数据。而此时P2.6输出低电平,百有效,因此。数据就被锁存。相关程序如下:
M0V DPTR.#0BFFFH
Mov A,#DATA
MOVX @DPTR.A
此外,74HC373、74HC573也可以进行并行I/O口的扩展。
三、应用实例分析
在实际的应用系统中。可能需要同时扩展多个输入、输出I/O口,以满足应用系统的需要。而各个输入、输出扩展I/0芯片通过74LS138进行”全地址“译码选通。从而分时复用数据总线DB(Data Bus)。为了防止过度干扰对译码选通逻辑造成的影响,单片机系统所用的外芯片一般均为双步选通方式,即除了配置译码选通端外,还配置使能选通端。而74HC244芯片本身没有明显的片选和读/写控制端,采用译码和读控制信号同时控制74HC244的CS。可以有效地抑制输入/输出数据信息的过渡干扰。
图6是用TTL系列芯片同时扩展输入/输出接口的电路图。该电路输入口扩展用了2个74HC244。其输入端可以接键盘或其他数字信号;而输出El扩展用了2个74HC377,可用于控制数码管、发光二极管、继电器等。详细电路原理图如图6所示:
其部分代码如下:
ID_377_1 EQU 1FFFH
ID_377_2 EQU 3FFFH
ID_244_1 EQU 5FFFH
ID_244_2 EQU 7FFFH
由于51单片机的数据、地址、控制总线端口,都有一定的负载能力。PO口可驱动8个TTL门电路,P1口、P2口、和P3 口可驱动4个TTL门电路。当负载超过上述规定时需加驱动器。总线造成DB的负载失衡。
图7表示有1个8位数据的部件,2个4位数据的部件及1个1位数据的部件的接13。按此接线,DB各位的负载显然是不平衡的,D4~D7只挂了2个负载,而DO连接的负载数达5个之多。当总的负载较轻时,这种失衡不会引起太大的影响。但若负载接近总线的驱动能力,就有可能影响总线信号的逻辑电平。以图7为例,负载不同的各位数据线上,高低电平的数值有明显差异。如高电平有的达4 3V,而有的只有3_7V。图中I/O5的信号位传送不可靠,常常发生错误,与负载失衡有密切关系。若将I/O4的数据接D7~D4,或将I/O5的一位数据接D7,这样就能改善总线的不平衡程度,提高系统的可靠性。
除了配置总线驱动器、注意总线负载平衡配置之外,在总线上适当安装上拉电阻也可以提高总线信号传输的可靠性。
与其它51系列单片机I/O 13扩展的方法相比,本文介绍的输入/输出13的并行扩展方法,可以很方便的实现I/O 13的并行扩展。所设计的接13扩展电路已成功用于实际系统中,实际运行表明,采用该方法扩展的I/O 13系统能够可靠、稳定的运行,并具有可裁剪性。
共1条评论&
回答时间: 14:31:51
与其它51系列单片机I/O 13扩展的方法相比,本文介绍的输入/输出13的并行扩展方法,可以很方便的实现I/O 13的并行扩展。所设计的接13扩展电路已成功用于实际系统中,实际运行表明,采用该方法扩展的I/O 13系统能够可靠、稳定的运行,并具有可裁剪性。
共0条评论【打开
共0条评论&
回答时间: 08:31:28
输入/输出13的并行扩展方法,可以很方便的实现I/O 13的并行扩展。所设计的接13扩展电路已成功用于实际系统中,实际运行表明,采用该方法扩展的I/O 13系统能够可靠、稳定的运行,并具有可裁剪性。
共0条评论&
回答时间: 03:36:11
如果使用74系列的逻辑电路搭建,驱动这么多芯片估计单片机的驱动能力达不到,需要加总线驱动器增加驱动电流,板子也要做的很大。
建议采用CPLD(或FPGA),容量大一点的CPLD有100多IO口,和好几百宏单元,几片就可以解决问题了,功耗,PCB面积大大减小,布线也相当方便。
共0条评论&
回答时间: 10:17:09
输入/输出13的并行扩展方法,可以很方便的实现I/O 13的并行扩展。所设计的接13扩展电路已成功用于实际系统中,实际运行表明,采用该方法扩展的I/O 13系统能够可靠、稳定的运行,并具有可裁剪性。
共0条评论&
回答时间: 10:33:00
专业问题,请专家过来帮忙解决一下,学习了。
共0条评论&
回答时间: 16:26:23
请上网电子大全吧查看(有很多图)/dpjyy/4-2.html
共0条评论&
回答时间: 16:45:10
如果使用74系列的逻辑电路搭建,驱动这么多芯片估计单片机的驱动能力达不到,需要加总线驱动器增加驱动电流,板子也要做的很大。
建议采用CPLD(或FPGA),容量大一点的CPLD有100多IO口,和好几百宏单元,几片就可以解决问题了,功耗,PCB面积大大减小,布线也相当方便。
共0条评论&
这个问题已提出一个月以上,回答功能关闭,如需求助可重新西门子plc字节传送指令in的位置写的数字代表什么意思?例如:0 1 3 5_百度知道
西门子plc字节传送指令in的位置写的数字代表什么意思?例如:0 1 3 5
西门子的PLC的数据一般是以字节为单位,一个字节就包含8位数据位,IB0(表示I0.0-I0.7这8个位)同理,QB0就表示Q0.0-Q0.7这8个位)。用你提供的数据来举例:当I0.0接通时,QB0=0=2#,则Q0.0-Q0.7全部断开;当I0.1接通时,QB0=1=2#,则Q0.0接通,Q0.1-Q0.7断开;当I0.2接通时,QB0=3=2#,则Q0.0-Q0.1接通,Q0.2-Q0.7断开;当I0.3接通时,QB0=5=2#,则Q0.0、Q0.2接通,Q0.1、Q0.3-Q0.7断开;
其他类似问题
为您推荐:
你说的应该是s300系列的LAD编程吧。MOV块有一个输入IN,有一个输出OUTIN是源数据,可以是立即数,可以是地址,OUT是目标地址,就是要将IN的数据放到什么地方。QB0是一个地址,其中:Q哗埂糕忌蕹涣革惟宫隶是表示输出区(I表示输入区,M表示内存区等等),B表示是字节类型(W表示双字节型,D表示四字节类型等等),0表示具体的地址。
其他2条回答
In表示你采用的输入,和每个指令有关系,比如指令 INT哗埂糕忌蕹涣革惟宫隶_TO_REAL,这个指令的输入就是一个整形数据,输出是一个实型数据,如输入20,输出为20.000。out位置的QB0,指得是实际输出,PLC到外部的第0个字节的位置,包括Q0.0-Q0.7一共7位。
QB0表示一个字节,包括Q0.0~Q0.7共8个位地址。
西门子plc的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁9715人阅读
计算机原理系列(7)
前一篇文章介绍了冯诺依曼体系结构的计算机的基本工作原理,其中主要介绍了CPU的结构和工作原理。这一篇主要来介绍存储区,总线,以及IO设备等其他几大组件,来了解整个计算机是如何工作的。 这些东西都是看得见摸得着的硬件,平时我们买电脑时最关注的就是CPU的速度,内存的大小,主板芯片等等的参数。
前面我们以一个简单通用的计算机模型来介绍了CPU的工作方式,CPU执行指令,而存储器为CPU提供指令和数据。 在这个简单的模型中,存储器是一个线性的字节数组。CPU可以在一个常数的时间内访问每个存储器的位置,虽然这个模型是有效的,但是并不能完全反应现代计算机实际的工作方式。
1.1 存储器系统层次结构
在前面介绍中,我们一直把存储器等同于了内存,但是实际上在现代计算机中,存储器系统是一个具有不同容量,不同访问速度的存储设备的层次结构。整个存储器系统中包括了寄存器、Cache、内部存储器、外部存储。下图展示了一个计算机存储系统的层次图。层次越高速度越快,但是价格越高,而层次越低,速度越慢,价格越低。
相对于CPU来说,存储器的速度是相对比较慢的。无论CPU如何发展,速度多块,对于计算机来说CPU总是一个稀缺的资源,所以我们应该最大程度的去利用CPU。其面我们提到过CPU周期,一个CPU周期是取1条指令的最短的时间。由此可见,CPU周期在很大程度上决定了计算机的整体性能。你想想如果当CPU去取一条指令需要2s,而执行一个指令只需要2ms,对于计算机来说性能是多么大的损失。所以存储器的速度对于计算机的速度影响是很大的。
对于我们来说,总是希望存储器的速度能和CPU一样或尽量的块,这样一个CPU周期需要的时钟周期就越少。但是现实是,这样的计算机可能相当的昂贵。所以在计算机的存储系统中,采用了一种分层的结构。速度越快的存储器容量越小,这样就能做到在性能和价格之间的一个很好的平衡。
1.2 存储技术
计算机的发展离不开存储器的发展,早起的计算机没用硬盘,只有几千字节的RAM可用。而我们现在4G,8G的内存已经随处可见,1T的大硬盘以及上百G的固态硬盘,而价格也比10年,20年前便宜的很多很多。所以我先大概了解下各种存储技术。目前存储技术大致分为SRAM存储器、DRAM存储器、ROM存储器和磁盘。
1.2.1 寄存器
在上一篇文章的图中我们有看得CPU内部有很多寄存器,而上一张图也显示,寄存器在存储层次结构的顶端。它也叫触发器,它往往和CPU同时钟频率,所以速度非常快。但是一个寄存器需要20多个晶体管,所以如果大量使用,CPU的体积会非常大。所以在CPU中只有少量的寄存器。而每个寄存器的大小都是8-64字节。
1.2.2 RAM随机访问存储
RAM(Read-Access Memory)分为两类,静态(SRAM)和动态(DRAM)。SDRAM比DRAM要快的多,但是价格也要贵的多。
静态RAM: SRAM将每个位存储在一个双稳态的存储单元中,每个存储单元是用一个六晶体管电路实现的。它的特点是可以无限期(只要有电)的保持在两个稳定状态中的一个(正好可以存放0或1),而其他任何状态都是不稳定的会马上切换到这两个状态中的一个;动态RAM: DRAM是利用电容内储存电荷的多寡来代表一个二进制位元(bit)是1还是0,每一bit由一个晶体管和电容组成。由于在现实中电容会有漏电的现象,导致电位差不足而使记忆消失,因此除非电容经常周期性地充电,否则无法确保记忆长存。由于这种需要定时刷新的特性,因此被称为“动态”记忆体。
SRAM相比DRAM速度更快功耗更低,而由于结构相对复杂占用面积较大,所以一般少量在CPU内部用作Cache,而不适合大规模的集成使用,如内存。而DRAM主要用来作为计算机的内部主存。
Cache: 目前我们CPU中一般集成了2到3级的Cache,容量从128K到4M。对于CPU总的Cache来说,它们的也是和CPU同频率的,所以理论上执行速度和寄存器应该是相同的,但是Cache往往用来存储一些指令和数据,这样就存在一个命中的问题。当没有命中的时候,需要向下一集的存储器获取新的数据,这时Cache会被lock,所以导致实际的执行速度要比寄存器慢。同样对于L1,L2,L3来说,速度也是越来越慢的;主存: 也就是我们说的内存,使用DRAM来实现。但是我们目前听的内存一般叫DDR SDRAM,还有早期的SDRAM。这是一种同步的DRAM技术,我们不需要了解他的详情,只需要知道它能有效的提高DRAM的传输带宽。而DDR表示双倍的速率,而现在又有了DDR2,DDR3,DDR4,他们的带宽也是越来越大。
1.2.3 ROM只读存储
前面的RAM在断电后都会丢失数据,所以他们是易失的。另一方面非易失的存储器即便在断点后也能保存数据。一般我们称之为ROM(Read-Only Memory)。虽然这么说,但是ROM在特殊的情况下还是可以写入数据的,否则就不能叫存储器了。
PROM: 可编程ROM,只能被编程一次,PROM包含一种熔丝,每个存储单元只能用高电流烧断一次;EPROM:可擦写可编程ROM,有一个透明的石英窗口,紫外线通过窗口照射到存储单元就被清除为0,而对它编程是使用一种特殊的设备来写入1。写入次数1K次;EEPROM:: 电子可擦除可编程ROM,不需要特殊设备而可以直接在印制的电路板上编程。写入次数10万次;Flash Memory: 这是我们见到最多的闪存,有NOR Flash、NAND Flash、V-NAND Flash、SLC、MLC、TLC。虽然是基于EEPROM,但是速度上却要快很多。其中NOR 、NANA Flash大量的使用在U盘,SD卡、手机存储上。
ROM在计算机中应用也比较多,比如我们的BIOS芯片,最开始采用PROM,后来使用EPROM,如果损坏计算机就无法启动了。而目前手机中也采用ROM来烧入系统,而RAM作为内存,使用Flash Memory作为机身存储。
1.2.4 磁盘存储
也就是我们最常见的硬盘。目前硬盘主流已经是500G,1T。转速也在7200转左右。相对于8G的内存,一个500G的硬盘可以说是相当的便宜。但是问题在于他的速度非常的慢,从磁盘读取数据需要几个毫秒,而CPU时钟周期是以纳秒计算。磁盘读取操作要比DRAM慢10万倍,比SRAM慢百万倍。
相对于CPU,内部存储的电子结构,磁盘存储是一种机械结构。数据都通过电磁流来改变极性的方式被电磁流写到磁盘上,而通过相反的方式读回。一个硬盘由多个盘片组成,每个盘片被划分为磁道,扇区和最小的单位簇。而每个盘面都有一个磁头用来读取和写入数据。而硬盘的马达装置则控制了磁头的运动。
1.2.5 虚拟硬盘(VHD)和固态硬盘(SSD)
随着计算机的发展,缓慢的磁盘速度已经成为计算机速度的障碍了。大多数情况下,你的CPU够快,内存够大,可是打开一个程序或游戏时,加载的速度总还是很慢。(关于程序加载的过程后面的文章会讲到)。原因就是磁盘读写速度太慢,所以一度出现了虚拟硬盘。就是把一部分内存虚拟成硬盘,这样一些缓存文件直接放到内存中,这样就加快了程序访问这些数据的速度。但是他的问题是易失的。当然你可以保存到磁盘,但是加载和回写的速度会随着数据量加大而加大。所以这个适用于一些临时数据的情况,比如浏览器缓存文件。
而固态硬盘是最近几年出来的,而且随着技术的发展,价格也越来越便宜,越来越多的人采用SSD+HHD的方式来搭建系统,提高系统的速度。其实SSD在上世纪80年代就有基于DRAM的产品,但是因为易失性和价格而无法推广开来。而现在的SSD则是使用Flash Memory。目前市面上最常见的是SLC,MLC,TLC存储介质的固态硬盘。我们知道Flash都是与写入次数限制的。而SLC&MLC&TLC。目前主流的SSD都是使用MLC,比如Intel 520,三星830系列。当然目前三星也退出了基于TLC的固态硬盘,价格相对要便宜一些。
1.2.6 远程存储
简单可以理解为是将数据指令存储在其他机器上,比如分布式系统,WebService Server,HTTP Server以及现在炒的火热的云端存储。计算机通过网络相互连接。比较起磁盘,远程存储的速度是以秒来计算。
1.3 局部性
通过上面介绍我们对计算机存储器有了一个了解,并且知道了存储器层次越高速度越快。那么为什么我们要对存储器分层呢? 分成是为了弥补CPU和存储器直接速度的差距。这种方式之所有有效,是因为应用程序的一个特性:局部性。
我们知道计算机的体系是存储程序,顺序执行。所以在执行一个程序的指令时,它后面的指令有很大的可能在下一个指令周期被执行。而一个存储区被访问后,也可能在接下来的操作中再次被访问。这就是局部性的两种形式:
时间局部性空间局部性
对于现代计算机来说,无论是应用程序,操作系统,硬件的各个层次我们都是用了局部性。
硬件:通过引入Cache存储器来保存最近访问的指令数据来提高对主存的访问速度。操作系统: 允许是用主存作为虚拟地址空间被引用块的高速缓存以及从盘文件的块的高速缓存。应用程序:将一些远程服务比如HTTP Server的HTML页面缓存在本度的磁盘中。
int sumarraycols(int a[m][n])
int i, j , sum = 0;
for(j = 0; j & j++)
for(i = 0; i & i++)
sum += a[i][j];
int sumarraycols(int a[m][n])
int i, j , sum = 0;
for(i = 0; i & i++)
for(j = 0; j & j++)
sum += a[i][j];
以上2段代码差别只有for循环的顺序,但是局部性却相差了很多。我们知道数组在内存中是按照行的顺序来存储的。但是CODE1确实按列去访问,这可能就导致缓存不命中(需要的数据并不在Cache中,因为Cache存储的是连续的内存数据,而CODE1访问的是不联系的),也就降低了程序运行的速度。
2 存储器访问和总线
前面介绍了存储器的存储技术和分层,也一直提到CPU从存储器中获取数据和指令,这一节就介绍一下CPU和存储器之间是如何通信的。
所谓总线是各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束。我们知道计算机有运算器,控制器,存储器,输入输出设备这五大组件,所以总线就是用来连接这些组件的导线。
按照计算机所传输的信息种类,计算机的总线可以划分为
数据总线: 数据总线DB是双向三态形式的总线,即它既可以把CPU的数据传送到存储器或输入输出接口等其它部件,也可以将其它部件的数据传送到CPU。数据总线的位数是微型计算机的一个重要指标,通常与微处理的字长相一致。我们说的32位,64位计算机指的就是数据总线。地址总线: 地址总线AB是专门用来传送地址的,由于地址只能从CPU传向外部存储器或I/O端口,所以地址总线总是单向三态的,这与数据总线不同。地址总线的位数决定了CPU可直接寻址的内存空间大小。控制总线:控制总线主要用来传送控制信号和时序信号。控制总线的传送方向由具体控制信号而定,一般是双向的,控制总线的位数要根据系统的实际控制需要而定。其实数据总线和控制总线可以共用。
总线也可以按照CPU内外来分类:
内部总线:在CPU内部,寄存器之间和算术逻辑部件ALU与控制部件之间传输数据所用的总线称为片内部总线。外部总线:通常所说的总线指片外部总线,是CPU与内存RAM、ROM和输入/输出设备接口之间进行通讯的通路,也称系统总线。
2.2 控制芯片
前面我面介绍了总线的分类,在我们的简单模型中。CPU通过总线和存储器之间直接进行通信。实际上在现代的计算机中,存在一个控制芯片的模块。CPU需要和存储器,I/O设备等进行交互,会有多种不同功能的控制芯片,我们称之为控制芯片组(Chipset)。
对于目前的计算机结构来说,控制芯片集成在主板上,典型的有南北桥结构和单芯片结构。与芯片相连接的总线可以分为前端总线(FSB)、存储总线、IQ总线,扩展总线等。
南北桥芯片结构:
北桥芯片,它控制着CPU的类型,主板的总线频率,内存控制器,显示核心等。它直接与CPU、内存、显卡、南桥相连,所以它数据量非常大;
前端总线:是将CPU连接到北桥芯片的总线。FSB的频率是指CPU和北桥之间的数据交换速度。速度越快,数据带宽越高,计算机性能越好;内存总线:是将内存连接到北桥芯片的总线。用于和北桥之间的通信;显卡总线:是将显卡连接到北桥芯片的总新。目前有AGP,PCI-E等接口。其实并没有显卡总线一说,一般认为属于I/O总线;
南桥芯片,它主要负责外部接口和内部CPU的联系;
I/O总线:连接外部I/O设备连接到南桥的总线, 比如USB设备,ATA,SATA设备,以及一些扩展接口;扩展总线:主要是主板上提供的一些PCI,ISA等插槽;
单芯片结构: 单芯片组主要是是取消了北桥,因为现在CPU中内置了内存控制器,不需要再通过北桥来控制,这样就能提高内存控制器的频率,减少延迟。而现在一些CPU还集成了显示单元。也使得显示芯片的频率更高,延迟更低。
2.3 运行频率
数据带宽 = (总线频率*数据位宽)/ 8
2.3.1 外频
外频是建立在数字脉冲信号震动速度基础上的。它是CPU与系统总线以及其他外部设备共同运行的速度。我们知道计算机中有一个时序发生器来保证各个部件协同工作,而这里说的外频率就是这个时序发生器的频率。外频也是系统总线的工作频率。
2.3.2 频率和控制芯片
在计算机刚开始的时候,CPU和内存还有I/O设置是直接通过总线连接的而没有控制芯片。所有设备都同步的工作在同一个总线频率下。但是随着CPU的发展,CPU速度越来越块。但受限于I/O设备。于是就出现了芯片。他使得I/O总线不在直接和CPU的系统总线相连。这样就有了2个不同频率的总线,这个芯片实际起到了一个降频的作用,也就相对于系统总线的分频技术。但CPU速度发展相当快,CPU的速度已经高于内存运行的速度,于是引入了倍频的概念。CPU在不改变外频和系统总线频率的情况下运行在更高的频率。发展到后来,就出现了北桥芯片,而CPU和北桥之前的总线称为了FSB总线,而内存与北桥之前称为内存总线。
2.3.2 分频和倍频
分频:使得I/O设备可以和较高的外频协同工作。比如AGP,PCI总线,运行频率在66MHZ和33MHZ,所以对于一个100MHZ的外频来说,采用2/3或1/3分频的方式就能使得CPU和外设同步的工作了。否则设备可能无法正常工作。倍频: 为了提高CPU频率又正常的和内存进行工作,所以产生了倍频。所以对于CPU来说他实际的频率是外频*倍频。
2.3.3 FSB频率
前面我们现在已经知道CPU和北桥芯片连接是通过FSB。而FSB频率表示CPU和北桥芯片之间的工作速度。但是从前面我们就知道FSB的实际频率是和外频一样的。但是随着技术的发展,Intel的QDR技术和AMD的HT技术,使得CPU在一个时钟周期可以传送4次数据,所以对于FSB涞说虽然工作早外频的频率下,但是等效的频率是外频的4倍。所以我们说的FSB频率是等效频率,而不是实际的工作频率。随着技术的发展,Intel芯片的FSB有800MHz,1600HMz等等。但随着北桥芯片的消失,FSB的概率也慢慢远去。
2.3.4 内存频率
对于内存频率我们可以看到,一般包括了核心频率,总线频率和传输频率:
核心频率和外频类似,是建立在脉冲震荡信号上的。总线频率就是指内存总线的工作频率。也就是内存和北桥芯片之间的工作频率。而传输频率类似FSB,是指实际传输数据的频率。
对于SDR来说,它的3个频率是一致的。而DDR在一个时钟周期可以传送2次数据,所以它的传输频率是核心和总线频率的2倍。DDR2在DDR的基础上,采用了4bit预读,所以总线频率是核心频率的2倍,而DDR3采用了8bit预读,总线频率是核心频率的4倍。
Internal rate
(min burst)
Transfer Rate
从下表我们就能看出。所以我们常说的DDR3 1600,DDR2 800指的是内存的传输频率。相同的技术还有显卡的AGP4X,8X,PCIE-8X,16X等技术。
而随着FSB速度不断加快,内存的总线频率组建成为了瓶颈,于是出现了DDR双通道,双通道是指芯片拥有2个内存控制器,所以可以使得传输速率翻倍。
2.3.5 内存总线工作方式
因为内存总线频率不同,所以内存和CPU之间存在同步和异步两种工作方式。
同步方式:内存总线频率和CPU外频相同。比如以前的PC133和P3处理器,他们以同步的方式工作在133MHZ下。而当你超频时就需要拥有更高总线频率的内存。当然也需要北桥芯片的支持。异步方式:内存总线频率和CPU外频不同。睡着CPU外频的提高,内存也必须更新,所以出现了异步的方式。比如P4 CPU外频为200MHz,而内存却可以使用DDR333来运行。同时异步方式也在超频时经常使用。一般来说会有一个内存异步比率。在BIOS中会有相应的选项。
从性能上来讲,同步方式的延迟要好于异步方式,这也是为什么以前会说P4 200外频的CPU要使用DDR400才能发挥最大功效。但这也不是绝对的。比如我的I5处理器CPU外频工作在100MHz,而我使用的DDR3-1600的总线频率在200MHz,虽然不同步,但是拥有更高的传输速率。所以不能一概而论。
2.3.6 QPI和HT总线技术
从前面我们知道了FSB对整个系统的性能影响很大,1600MHZ的FSB能提供的数据带宽也只有12.8GB/s,所以随着技术的发展,现在最新的计算机基本都采用了单芯片设计,北桥的功能被集成到了CPU内部。于是我们前面说的FSB也就不存在了。对于Intel和AMD这2大芯片厂商,分别有自己的技术来提高CPU和存储器以及其他设备之间的传输速率,满足更高的计算要求。
QPI: Intel的QuickPath Interconnect技术缩写为QPI,译为快速通道互联。用来实现芯片之间的直接互联,而不是在通过FSB连接到北桥。早期20位宽的QPI连接其带宽可达惊人的每秒25.6GB,远非FSB可比。而随着技术发展,在高端安腾处理中峰值可以达到96GB/s。HT:HyperTransport本质是一种为主板上的集成电路互连而设计的端到端总线技术,目的是加快芯片间的数据传输速度。HyperTransport技术在AMD平台上使用后,是指AMD CPU到主板芯片之间的连接总线(如果主板芯片组是南北桥架构,则指CPU到北桥)即HT总线。HT3.1理论上可以达到51.2GB/s。
除此之外,但芯片中的QPI和HT传输不需要经过北桥新片,在CPU内存除了集成内存控制器意外还可以集成PCI-E2.0的图形核心,使得集成显卡的核心频率和数据吞吐量大幅提高。
如图,Core I7处理器外频只有133MHz, 使用QPI技术后总线频率达到2.4GMhz,而使用DDR3-1600的内存,内存总线频率在800MHz。
2.3.7 小结
这一结介绍了计算机总线系统以及CPU和各个设备之间的交互。我们可以看到除了CPU自身的速度之外,总线的速度也影响这计算机的整体性能。从发展的过程来看,总线也是一个分分合合的过程。从最初的一条总线,到后来的单独出来的I/O总线,内存总线,就是为了提高CPU的效率。而当CPU和内存速度都发展到一定阶段后,又出现了DDR,双通道等技术,在不提高核心频率的情况下提高了传输率。于是又出现了CPU和内存间直接总线通信降低延迟的情况。&(从2000年开始接触电脑DIY,一直到07年毕业,都对DIY很有兴趣,但是随着电脑越来越快,目前以及弄不太清楚了,复习这些知识也费了我好多时间。)
3. I/O设备
前面主要介绍了系统总线和CPU与内存之间的通信,最后一部分简单介绍一下CPU和I/O设备是如何通信的。对于计算机来说输入输出设备也是五大组件。我们知道相对于CPU,I/O设备的工作频率要慢的很多。比如早期的PCI接口工作频率只有33MHz,硬盘的IDE-ATA6的传输速率也只有133MB/s。而现在的 SATA3接口速率能达到600MB/s。
3.1 I/O设备原理
对于硬件工程师来说,I/O设备是电子芯片、导线、电源、电子控制设备、电机等组成的物理设备。而对于程序员来说,关注的只是I/O设备的编程接口。
3.1.1 I/O设备分类
块设备: 块设备把信息存放在固定大小的块中,每个块都有自己的地址,独立于其他块,可寻址。例如磁盘,USB闪存,CD-ROM等。符号设备:字符设备以字符为单位接收或发送一个字符流,字符设备不可以寻址。列入打印机、网卡、鼠标键盘等。
3.1.2 设备控制器
I/O设备一般由机械部件和电子部件两部分组成。电子设备一般称为设备控制器,在计算机上一般以芯片的形式出现,比如我们前面介绍的南桥芯片。不同的控制器可以控制不同的设备。所以南桥芯片中包含了多种设备的控制器,比如硬盘控制器,USB控制器,网卡、声卡控制器等等。而通过总线以及卡槽提供和设备本身的连接。比如PCI,PCI-E,SATA,USB等。
3.1.3 驱动程序
对于不同的设备控制器,进行的操作控制也是不同的。所以需要专门的软件对他进行控制。这个软件的作用就是用来专门和设备控制器对话,这种软件称为驱动程序。一般来说驱动程序由硬件设别厂商提供。所以我们有时会碰到一些设备因为没有安装驱动程序而无法使用的情况。 而目前的OS总都包含了大量的通用驱动程序,使得我们在安装完系统后不需要在额外的安装驱动。但是通用的驱动只能使用设备的基本功能。
驱动程序因为是非操作系统厂商开发,并且需要被安装到操作系统并调用,所以需要有一个统一的模型来开发驱动程序。否则操作系统是无法操作各式各样的设备的。前面我们知道设备非为两大类,所以一般操作系统都定义了这两类设备的标准接口。
3.1.4 内存映射I/O
每个控制器都有几个寄存器和CPU进行通信。通过写入这些寄存器,可以命令设备发送或接受数据,开启或关闭。而通过读这些寄存器就能知道设备的状态。因为寄存器数量和大小是有限的,所以设备一般会有一个RAM的缓冲区,来存放一些数据。比如硬盘的读写缓存,显卡的显存等。一方面提供数据存放,一方面也是提高I/O操作的速度。
现在的问题是CPU如何和这些设备的寄存器或数据缓冲区进行通信呢?存在两个可选方案:
为每个控制器分配一个I/O端口号,所有的控制器可以形成一个I/O端口空间。存放在内存中。一般程序不能访问,而OS通过特殊的指令和端口号来从设备读取或是写入数据。早期计算机基本都是这种方式。将所有控制器的寄存器映射到内存空间,于是每个设备的寄存器都有一个唯一的地址。这种称为内存映射I/O。
另一种方式是两种的结合,寄存器拥有I/O端口,而数据缓冲区则映射到内存空间。Pentinum就是使用这种方式,所以在IBM-PC兼容机中,内存的0-640K是I/O端口地址,640K-1M的地址是保留给设备数据缓冲区的。(关于内存分布后面文章会介绍)
对于我们程序员来说这两种方案有所不同
对于第一种方式需要使用汇编语言来操作,而第2种方式则可以使用C语言来编程,因为他不需要特殊的指令控制,对待I/O设备和其他普通数据访问方式是相同的。对于I/O映射方式,不需要特殊的保护机制来组织对I/O的访问,因为OS已经完成了这部分工作,不会把这一段内存地址分配给其他程序。对于内存可用的指令,也能使用在设备的寄存器上。
任何技术有有点就会有缺点,I/O内存映射也一样:
前面提到过Cache可以对内存进行缓存,但是如果对I/O映射的地址空间进行缓存就会有问题。所以必须有机制来禁用I/O映射空间缓存,这就增大了OS的复杂性。另一个问题是,因为发送指令后需要判断是内存还是I/O操作,所以它们需要能够检查全部的内存空间。以前CPU,内存和I/O设备在同一个总线上,所以检查很方便。但是后来为了提高CPU和内存效率,CPU和内存之间有一条高速的总线(比如QPI)。这样I/O设备就无法查看内存地址,因为内存地址总线旁落到了内存和CPU的高速总线上,所以需要一个额外的芯片来处理(北桥芯片,内存控制器的作用),增大了系统的复杂度。
3.2 CPU和I/O设备数据交换方式
前面已经知道CPU通过内存映射的方式和I/O设备交换数据,但是对于CPU来说,无论是从内存还是I/O设备读取数据,都需要把地址放到地址总线上,然后在向控制总线传递一个READ信号,还要用一条信号线来表示是从内存还是I/O读取数据。因为I/O映射的内存区域是特定的,所以不存在无法区分是内存还是I/O操作。目前一共有3种方式进行操作:
程序控制I/O: CPU在向I/O设备发出指令后,通过程序查询方式检查I/O设备是否完成工作,如果完成就读取数据,这种方式缺点是CPU在I/O设备工作时被占用。中断驱动I/O: CPU是稀缺资源,所以为了提高利用率,减少I/O等待。在I/O设备工作时CPU不再等待,而是进行其他的操作,当I/O设备完成后,通过一个硬件中断信号通知CPU。CPU在来处理接下来的工作,比如读取数据存放到内存。但是每次只能请求一个字节,效率很低。DMA: Direct Memory Access利用一种特性的芯片存在于CPU和I/O设备之间。CPU需要操作I/O设备时只需要发送消息给DMA芯片,后面的事情全部内又DMA来完成,当把所需要数据放入内存后在通知CPU进行操作,整个过程DMA直接和内存总线打交道,而CPU也只需要和DMA芯片和内存交互,大大提高了速度。
这一篇文章介绍了计算机组件中的存储器的分类和工作原理,以及I/O设别的工作方式。通过总线将各个部件连接起来。我们可以看到计算机的发展不光是CPU,存储器以及I/O设备的发展,总线也是起了非常关键的作用。通过前2章的介绍,应该对计算机硬件的工作原理有了大概的了解。后面开始将主要偏向计算机操作系统软件的工作方式。当然这些也是和一些硬件的特性分不开的。
《深入理解计算机系统》
《现代操作系统(原书第3版)》

参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:244401次
积分:2809
积分:2809
排名:第8807名
原创:50篇
评论:113条
.NET C#开发,Android开发。目前主要从事移动开发,主要负责Android Runtime(ART),欢迎讨论!

我要回帖

更多关于 文件夹禁止写入 的文章

 

随机推荐