原创 PCI总线简介

2009-4-30 13:49 2264 5 7 分类: MCU/ 嵌入式
从1992年创立规范到如今,PCI总线已成为了计算机的一种标准总线。
  PCI总线取代了早先的ISA总线。当然与在PCI总线后面出现专门
用于显卡的AGP总线,与现在PCI Express总线,但是PCI能从1992用到现在,说明他有许多优点,比如即插即用(Plug and
Play)、中断共享等。在这里我们对PCI总线做一个深入的介绍。

  从数据宽度上看,PCI总线有32bit、64bit之分;从总
线速度上分,有33MHz、66MHz两种。目前流行的是32bit @
33MHz,而64bit系统正在普及中。改良的PCI系统,PCI-X,最高可以达到64bit @
133MHz,这样就可以得到超过1GB/s的数据传输速率。如果没有特殊说明,以下的讨论以32bit @ 33MHz为例。

一、基本概念
 
 不同于ISA总线,PCI总线的地址总线与数据总线是分时复用的。这样做的好处是,一方面可以节省接插件的管脚数,另一方面便于实现突发数据传输。在做
数据传输时,由一个PCI设备做发起者(主控,Initiator或Master),而另一个PCI设备做目标(从设备,Target或Slave)。总
线上的所有时序的产生与控制,都由Master来发起。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构(Arbiter),来决定
在谁有权力拿到总线的主控权。
  当PCI总线进行操作时,发起者(Master)先置REQ#,当得到仲裁器(Arbiter)的许可时
(GNT#),会将FRAME#置低,并在AD总线上放置Slave地址,同时C/BE#放置命令信号,说明接下来的传输类型。所有PCI总线上设备都需
对此地址译码,被选中的设备要置DEVSEL#以声明自己被选中。然后当IRDY#与TRDY#都置低时,可以传输数据。当Master数据传输结束前,
将FRAME#置高以标明只剩最后一组数据要传输,并在传完数据后放开IRDY#以释放总线控制权。
  这里我们可以看出,PCI总线的传输是很高效的,发出一组地址后,理想状态下可以连续发数据,峰值速率为132MB/s。实际上,目前流行的33M@32bit北桥芯片一般可以做到100MB/s的连续传输。

二、即插即用的实现
  所谓即插即用,是指当板卡插入系统时,系统会自动对板卡所需资源进行分配,如基地址、中断号等,并自动寻找相应的驱动程序。而不象旧的ISA板卡,需要进行复杂的手动配置。
  实际的实现远比说起来要复杂。在PCI板卡中,有一组寄存器,叫"配置空间"(Configuration Space),用来存放基地址与内存地址,以及中断等信息。
 
 以内存地址为例。当上电时,板卡从ROM里读取固定的值放到寄存器中,对应内存的地方放置的是需要分配的内存字节数等信息。操作系统要跟据这个信息分配
内存,并在分配成功后把相应的寄存器中填入内存的起始地址。这样就不必手工设置开关来分配内存或基地址了。对于中断的分配也与此类似。

三、中断共享的实现
  ISA卡的一个重要局限在于中断是独占的,而我们知道计算机的中断号只有16个,系统又用掉了一些,这样当有多块ISA卡要用中断时就会有问题了。
  PCI总线的中断共享由硬件与软件两部分组成。
  硬件上,采用电平触发的办法:中断信号在系统一侧用电阻接高,而要产生中断的板卡上利用三极管的集电极将信号拉低。这样不管有几块板产生中断,中断信号都是低;而只有当所有板卡的中断都得到处理后,中断信号才会回复高电平。
 
 软件上,采用中断链的方法:假设系统启动时,发现板卡A用了中断7,就会将中断7对应的内存区指向A卡对应的中断服务程序入口ISR_A;然后系统发现
板卡B也用中断7,这时就会将中断7对应的内存区指向ISR_B,同时将ISR_B的结束指向ISR_A。以此类推,就会形成一个中断链。而当有中断发生
时,系统跳转到中断7对应的内存,也就是ISR_B。ISR_B就要检查是不是B卡的中断,如果是,要处理,并将板卡上的拉低电路放开;如果不是,则呼叫
ISR_A。这样就完成了中断的共享。
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1359795 2009-5-11 15:48

楼主点团队的?

用户224381 2009-5-11 12:08

dian团队?你最近是不是在做PCI数据传输啊?我有好多问题,能加个好友嘛?QQ:31769185
相关推荐阅读
用户523241 2010-01-14 11:19
【转帖】#pragma pack(n) 对齐用法详解
什么是对齐,以及为什么要对齐:     现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这...
用户523241 2009-12-13 17:19
年终个人总结
伴随着滴答滴答的钟声,2009年马上就要过去了,感谢Dian团队在时光流逝的同时给予我的历练和成长。回首在Dian团队度过的2009年,经历了太多的事情,7、8月份的千兆网卡项目攻坚阶段、9月份的保研...
用户523241 2009-12-11 19:00
【转帖】生活中常用的14条著名法则
    一、马太效应          八、 水桶定律  二、 手表定理          九、 蘑菇管理  三、 不值得定律         十、 奥卡姆剃刀定律  四、 彼得原理         ...
用户523241 2009-11-29 14:11
种子班课程总结
    回顾大三这一年的课程、项目和生活,课程有很多特色,通过项目实践自己的能力有了很大的提高,生活在一种快节奏的旋律中度过。在大学里最重要的一年,我通过在种子班的学习和生活,各方面的能力都有了很大的...
用户523241 2009-11-29 14:09
大三项目总结
    前面所做的两个项目中,《千兆网转换卡》项目另我印象尤其深刻,在此项目中,我结识了优秀的学长,学到了高深的技术,在项目中,更夹杂着酸甜苦辣。下面就以此项目为代表,介绍自己大三一年的项目情况。 1...
用户523241 2009-08-11 21:16
如何重启SG-DMA
    由于项目的需要,我们用到了Altera公司的SG-DMA这一IP核。    很多次我们想将SG-DMA重启,本来以为调用alt_avalon_sgdma_stop()这一函数即可,但是调用此函...
EE直播间
更多
我要评论
2
5
关闭 站长推荐上一条 /3 下一条