tag 标签: pci总线

相关博文
  • 热度 26
    2013-5-13 11:54
    1539 次阅读|
    0 个评论
    虽然PCI总线取得了巨大的成功,但是随着处理器主频的不断提高,PCI总线提供的带宽愈发显得捉襟见肘。PCI总线也在不断地进行升级,其位宽和频率从最初的32位/33MHz扩展到64位/66MHz,而PCI-X总线更是将总线频率提高到533MHz,能够提供的最大理论带宽为4263MB。但是PCI总线仍无法解决其体系结构中存在的一些缺陷。PCI总线面临着一系列挑战,包括带宽、流量控制和数据传送质量等。 PCI总线的最高工作频率为66M,最大位宽为64b,从理论上讲,PCI总线可以提供的最大传输带宽为532MB。然而PCI总线作为一个共享总线,在其上的所有PCI设备必须要共享PCI总线的带宽。同时由于PCI总线的协议开销,导致PCI总线可以实际利用的数据带宽远小于其峰值带宽。 PCI总线采用提高总线位宽和频率的方法增加其传输带宽。但是这种方法从性能价格比的角度上看,并不是最优的。数据总线位宽的提高将直接影响芯片的生产成本,64位的PCI总线接口需要设计者使用更多的芯片引脚,从而导致64位的PCI总线接口芯片的价格远高于32位的PCI总线接口芯片。与32位PCI总线接口相比,设计者还需要使用更多的印制板层数来实现64位PCI总线接口。 而提高总线频率,除了给硬件工程师带来了一系列信号完整性的问题之外,更直接影响PCI总线的负载能力。一条33MHz的PCI总线最多可以驱动10个负载,而66Mhz的PCI总线最多只能驱动4个负载。因此片面提高PCI总线的频率和位宽,并不能有效地提高PCI总线的带宽。 除此之外PCI总线在设计之初并没有考虑服务质量的问题。有些实时数据采集卡,音频或者视频的多媒体应用需要PCI总线提供额定带宽,而PCI总线上的设备只能轮流使用PCI总线,当一个设备长期占用PCI总线时,将阻止其他PCI设备使用PCI总线,从而影响了PCI总线的传送质量。 基于以上几个原因,PCI总线在某种程度上说并不能完全适应现代处理器系统的需要,而使用PCIe总线可以有效解决PCI总线存在的一些问题。首先PCIe总线可以提供更大的总线带宽,PCIe V3.0支持的最高总线频率为4GHz,远高于PCI-X总线提供的最高总线频率。 其次PCIe总线支持虚通路VC(Virtual Channel)技术,优先级不同的数据报文可以使用不同的虚通路,而每一路虚通路可以独立设置缓冲,从而相对合理地解决了数据传送过程中存在的服务质量问题。 PCIe总线由若干层次组成,包括事务层、数据链路层和物理层。PCIe总线使用数据报文进行数据传递,这些数据报文需要通过PCIe总线的这些层次。PCIe总线的这种数据传递方式与互联网使用TCP/IP协议进行数据传递有类似之处。 实际上在互联网中存在的许多概念也存在于PCIe总线中,如交换、路由和仲裁机制等,不过这两者之间在实现上的最大不同在于前者主要使用软件程序实现其协议栈,而后者使用硬件逻辑实现。 半导体工艺的逐步提高,使得更多的软件算法可以使用硬件逻辑来实现,这给从事IC Design的工程师带来了巨大的挑战,因为他们使用Verilog/VHDL程序书写的算法,之前是使用C或者是C++这样的高别语言实现的。 PCIe总线在系统软件级与PCI总线兼容,基于PCI总线的系统软件几乎可以不经修改直接移植到PCIe总线中。绝大多数PCI/PCI-X总线使用的总线事务都被PCIe总线保留,而PCI设备使用的配置空间也被PCIe总线继承。基于PCI体系结构的系统编程模型,几乎可以在没有本质变化的前提下,直接在PCIe体系结构中使用。 但是从体系系统的角度上看,PCIe总线还是增加了一些新的特性,其中一些特性不仅仅是称呼上的变化,而且在功能上也得到了增强。如在PCIe体系结构中出现的RC(Root Complex)。RC的主要功能与PCI总线中的HOST主桥类似,但是在HOST主桥的基础上增加了许多功能。 在不同处理器系统中,RC的实现方式不同,因此仅仅用PCIe总线控制器称呼RC是不够的,实际上PCIe总线规范对RC并没有一个合适的解释。RC本身也是随处理器系统的不同而不同,是一个很模糊的概念。 Intel并没有使用PCIe总线控制器,而是使用RC管理PCIe总线,基于深层次的考虑。在x86处理器体系结构中,RC并不仅仅管理PCIe设备的数据访问,而且还包含访问控制、错误处理和虚拟化技术等一系列内容。因此使用PCIe总线控制器统称RC,在x86处理器体系结构中,并不合适。 在PCIe总线中,还有一些特性与PCIe总线协议的实现相关。与PCI总线相比,PCIe总线使用端到端的连接方式,添加流量控制机制,并对“访问序”做出了进一步优化。虽然从系统软件的角度上看,PCI总线与PCIe总线基本一致。但是从硬件设计的角度上看PCIe总线完全不同于PCI总线,基于PCIe总线各类设备的硬件设计难度远大于基于PCI总线的对应设备的设计难度。 目前PCIe总线规范,依然在迅猛发展,但并不是所有PCIe设备都支持这些在PCIe总线的最新规范中提及的概念。一般说来,PCIe总线规范提出的新的概念,最先在x86处理器系统的Chipset和Intel设计的EP中出现。
  • 热度 20
    2013-4-17 13:55
    1126 次阅读|
    0 个评论
    PCI设备的数据传递使用地址译码方式,当一个存储器读写总线事务到达PCI总线时,在这条总线上的所有PCI设备将进行地址译码,如果当前总线事务使用的地址在某个PCI设备的BAR空间中时,该PCI设备将使能DEVSEL#信号,认领这个总线事务。 如果PCI总线上的所有设备都不能通过地址译码,认领这个总线事务时,这条总线的“负向译码”设备将认领这个总线事务,如果在这条PCI总线上没有“负向译码”设备,该总线事务的发起者将使用Master Abort总线周期结束当前PCI总线事务。 3.2.1 PCI 设备的正向译码与负向译码 如上文所示PCI设备使用“地址译码”方式接收存储器读写总线请求。在PCI总线中定义了两种“地址译码”方式,一个是正向译码,一个是负向译码。 我们仍以图3‑2所示的处理器系统为例,说明数据传送使用的寻址方法。当HOST主桥通过存储器或者I/O读写总线事务访问其下所有PCI设备时,PCI总线0下的所有PCI设备都将对出现在地址周期中的PCI总线地址进行译码。如果这个地址在某个PCI设备的BAR空间中命中时,这个PCI设备将接收这个PCI总线请求。这个过程也被称为PCI总线的正向译码,这种方式也是大多数PCI设备所采用的译码方式。 但是在PCI总线上的某些设备,如PCI-to-(E)ISA桥并不使用正向译码接收来自PCI总线的请求,PCI-to-ISA桥在处理器系统中的位置如图1‑1所示。PCI总线0上的总线事务在三个时钟周期后,没有得到任何PCI设备响应时(即总线请求的PCI总线地址不在这些设备的BAR空间中),PCI-to-ISA桥将被动地接收这个数据请求。这个过程被称为PCI总线的负向译码。可以进行负向译码的设备也被称为负向译码设备。 在PCI总线中,除了PCI-to-(E)ISA桥可以作为负向译码设备,PCI桥也可以作为负向译码设备,但是PCI桥并不是在任何时候都可以作为负向译码设备。在绝大多数情况下,PCI桥无论是处理“来自上游总线”,还是处理“来自下游总线”的总线事务时,都使用正向译码方式,但是在某些特殊应用中,PCI桥也可以作为负向译码设备。 如笔记本在连接Dock插座时,也使用了PCI桥。因为在大多数情况下,笔记本与Dock插座是分离使用的,而且Dock插座上连接的设备多为慢速设备,此时用于连接Dock插座的PCI桥使用负向译码。Dock插座在笔记本系统中的位置如图3‑3所示。 当笔记本与Dock建立连接之后,如果处理器需要访问Dock中的外部设备时,Dock中的PCI桥将首先使用负向译码方式接收PCI总线事务,之后将这个PCI总线事务转发到Dock的PCI总线中,然后再访问相应的PCI设备。 在Dock中使用负向译码PCI桥的优点是,该桥管理的设备并不参与处理器系统对PCI总线的枚举过程。当笔记本插入到Dock之后,系统软件并不需要重新枚举Dock中的设备并为这些设备分配系统资源,而仅需要使用负向译码PCI桥管理好其下的设备即可,从而极大降低了Dock对系统软件的影响。 当HOST处理器访问Dock中的设备时,负向译码PCI桥,将首先接管这些存储器读写总线事务,然后发送到Dock设备中。值得注意的是,在许多笔记本的Dock实现中,并没有使用负向译码PCI桥,而使用PCI-to-ISA桥。 PCI总线规定使用负向译码的PCI桥,其Base Class Code寄存器为0x06,Sub Class Code寄存器为0x04,而Interface寄存器为0x01;使用正向译码方式的PCI桥的Interface寄存器为0x00。系统软件(E2PROM)在初始化Interface寄存器时务必注意这个细节。 综上所述,在PCI总线中有两种负向译码设备,PCI-to-E(ISA)桥和PCI桥。但是PCI桥并不是在任何时候都是负向译码设备,只有PCI桥连接Dock插座时,PCI桥的Primary Bus才使用负向译码方式。而这个PCI桥的Secondary Bus在接收Dock设备的请求时仍然使用正向译码方式。 PCI桥使用的正向译码方式与PCI设备使用的正向译码方式有所不同。如图3‑4所示,当一个总线事务是从PCI桥的Primary Bus到Secondary Bus时,PCI桥使用的正向译码方式与PCI设备使用的方式类似。如果该总线事务使用的地址在PCI桥任意一个Memory Base窗口 命中时,该PCI桥将使用正向译码方式接收该总线事务,并根据实际情况决定是否将这个总线事务转发到Secondary Bus。 当一个总线事务是从PCI桥的Secondary Bus到Primary Bus时,如果该总线事务使用的地址没有在PCI桥所有的Memory Base窗口命中时,表明当前总线事务不是访问该PCI桥管理的PCI子树中的设备,因此PCI桥将接收当前总线事务,并根据实际情况决定是否将这个总线事务转发到Primary Bus。 以图3‑2为例,当PCI设备11访问主存储器空间时,首先将存储器读写总线事务发送到PCI总线1上,而这个存储器地址显然不会在PCI总线1的任何PCI设备的BAR空间中,此时PCI桥1将认领这个PCI总线的数据请求,并将这个总线事务转发到PCI总线0上。最后HOST主桥将接收这个总线事务,并将PCI总线地址转换为存储器域的地址,与主存储器进行读写操作。 值得注意的是,PCI总线并没有规定HOST主桥使用正向还是负向译码方式接收这个存储器读写总线事务,但是绝大多数HOST主桥使用正向译码方式接收来自下游的存储器读写总线事务。在PowerPC处理器中,如果当前存储器读写总线事务使用的地址在Inbound窗口内时,HOST主桥将接收这个总线事务,并将其转换为存储器域的读写总线事务,与主存储器进行数据交换。 3.3.2 处理器到PCI设备的数据传送 下文以图3‑2所示的处理器系统为例,说明处理器向PCI设备11进行存储器写的数据传送过程。处理器向PCI设备进行读过程与写过程略有区别,因为存储器写使用Posted方式,而存储器读使用Non-Posted方式,但是存储器读使用的地址译码方式与存储器写类似,因此本节对处理器向PCI设备进行存储器读的过程不做进一步介绍。 PCI设备11在PCI总线域的地址范围是0x7300-0000~0x73FF-FFFF。这段空间在存储器域中对应的地址范围是0xF300-0000~0xF3FF-FFFF。下文我们假设处理器使用存储器写指令,访问0xF300-0008这个存储器地址,其步骤如下。 (1) 存储器域将0xF300-0008这个地址发向HOST主桥,0xF000-0000~0xF7FF-FFFF这段地址已经由HOST主桥映射到PCI总线域地址空间,所以HOST主桥认为这是一个对PCI设备的访问。因此HOST主桥将首先接管这个存储器写请求。 (2) HOST主桥将存储器域的地址0xF300-0008转换为PCI总线域的地址0x7300-0008,并通过总线仲裁获得PCI总线0的使用权,启动PCI存储器写周期,并将这个存储器写总线事务发送到PCI总线0上。值得注意的是,这个存储器读写总线事务使用的地址为0x7300-0008,而不是0xF300-0008。 (3) PCI总线0的PCI桥1发现0x7300-0008在自己管理的地址范围内,于是接管这个存储器写请求,并通过总线仲裁逻辑获得PCI总线1的使用权,并将这个请求转发到PCI总线1上。 (4) PCI总线1的PCI设备11发现0x7300-0008在自己的BAR0寄存器中命中,于是接收这个PCI写请求,并完成存储器写总线事务。 3.2.3 PCI设备的DMA操作 下文以图3‑2所示的处理器系统为例,说明PCI设备11向存储器进行DMA写的数据传送过程。PCI设备的DMA写使用Posted方式而DMA读使用Non-Posted方式。本节不介绍PCI设备进行DMA读的过程,而将这部分内容留给读者分析。 假定PCI设备11需要将一组数据,发送到0x1000-0000~0x1000-FFFF这段存储器域的地址空间中。由上文所述,存储器域的0x0000-0000~0x7FFF-FFFF这段存储器空间与PCI总线域的0x8000-0000~0xFFFF-FFFF这段PCI总线地址空间对应。 PCI设备11并不能直接操作0x1000-0000~0x1000-FFFF这段存储器域的地址空间,PCI设备11需要对PCI总线域的地址空间0x9000-0000~0x9000-FFFF进行写操作,因为PCI总线地址空间0x9000-0000~0x9000-FFFF已经被HOST主桥映射到0x1000-0000~0x1000-FFFF这段存储器域。这个DMA写具体的操作流程如下。 (1) 首先PCI设备11通过总线仲裁逻辑获得PCI总线1的使用权,之后将存储器写总线事务发送到PCI总线1上。值得注意的是,这个存储器写总线事务的目的地址是PCI总线域的地址空间0x9000-0000~0x9000-FFFF,这个地址是主存储器在PCI总线域的地址映像。 (2) PCI总线1上的设备将进行地址译码,确定这个写请求是不是发送到自己的BAR空间,在PCI总线1上的设备除了PCI设备11之外,还有PCI桥2和PCI桥1。 (3) 首先PCI桥1、2和PCI设备11对这个地址同时进行正向译码。PCI桥1发现这个PCI地址并不在自己管理的PCI总线地址范围之内,因为PCI桥片1所管理的PCI总线地址空间为0x7000-0000~0x73FF-FFFF。此时PCI桥1将接收这个存储器写总线事务,因为PCI桥1所管理的PCI总线地址范围并不包含当前存储器写总线事务的地址,所以其下所有PCI设备都不可能接收这个存储器写总线事务。 (4) PCI桥1发现自己并不能处理当前这个存储器写总线事务,则将这个存储器写总线事务转发到上游总线。PCI桥1首先通过总线仲裁逻辑获得PCI总线0的使用权后,然后将这个总线事务转发到PCI总线0。 (5) HOST主桥发现0x9000-0000~0x9000-FFFF这段PCI总线地址空间与存储器域的存储器地址空间0x1000-0000~0x1000-FFFF对应,于是将这段PCI总线地址空间转换成为存储器域的存储器地址空间,并完成对这段存储器的写操作。 (6) 存储器控制器将从HOST主桥接收数据,并将其写入到主存储器。 PCI设备间的数据传递与PCI设备到存储器的数据传送大体类似。我们以PCI设备11将数据传递到PCI设备42为例说明这个转递过程。我们假定PCI设备11将一组数据发送到PCI设备42的PCI总线地址0x7500-0000~0x7500-FFFF这段地址空间中。这个过程与PCI设备11将数据发送到存储器的第1~5步基本类似,只是第5、6步不同。PCI设备11将数据发送到PCI设备42的第5、6步如下所示。 (1) PCI总线0发现其下的设备PCI桥4能够处理来自PCI总线0的数据请求,则PCI桥4将接管这个PCI写请求,并通过总线仲裁逻辑获得PCI总线4的使用权,之后将这个存储器写请求发向PCI总线4。此时HOST主桥不会接收当前存储器写总线事务,因为0x7500-0000~0x7500-FFFF这段地址空间并不是HOST主桥管理的地址范围。 (2) PCI总线4的PCI设备42将接收这个存储器写请求,并完成这个PCI存储器写请求总线事务。 PCI总线树内的数据传送始终都在PCI总线域中进行,因此不存在不同域之间的地址转换,因此PCI设备11向PCI设备42进行数据传递时,并不会进行PCI总线地址空间到存储器地址空间的转换。 3.2.4 PCI桥的Combining、Merging和Collapsing 由上文所述,PCI设备间的数据传递有时将通过PCI桥。在某些情况下,PCI桥可以合并一些数据传递,以提高数据传递的效率。PCI桥可以采用Combining、Merging和Collapsing三种方式,优化数据通过PCI桥的效率。 1 Combining PCI桥可以将接收到的多个存储器写总线事务合并为一个突发存储器写总线事务。PCI桥进行这种Combining操作时需要注意数据传送的“顺序”。当PCI桥接收到一组物理地址连续的存储器写访问时,如对PCI设备的某段空间的DW1、2和4进行存储器写访问时,PCI桥可以将这组访问转化为一个对DW1~4的突发存储器写访问,并使用字节使能信号C/BE #进行控制,其过程如下所示。 PCI桥将在数据周期1中,置C/BE #信号为有效表示传递数据DW1;在数据周期2中,置C/BE #信号为有效表示传递数据DW2;在数据周期3中,置C/BE #信号为无效表示在这个周期中所传递的数据无效,从而跳过DW3;并在数据周期4中,置C/BE #信号为有效表示传递数据DW4。 目标设备将最终按照发送端的顺序,接收DW1、DW2和DW4,采用这种方法在不改变传送序的前提下,提高了数据的传送效率。值得注意的是,有些HOST主桥也提供这种Combining方式,合并多次数据访问。如果目标设备不支持突发传送方式,该设备可以使用Disconnect周期,终止突发传送,此时PCI桥/HOST主桥可以使用多个存储器写总线事务分别传送DW1、DW2和DW4,而不会影响数据传送。 如果PCI桥收到“乱序”的存储器写访问,如对PCI设备的某段空间的DW4、3和1进行存储器写访问时,PCI桥不能将这组访问转化为一个对DW1~4的突发存储器写访问,此时PCI桥必须使用三个存储器写总线事务转发这些存储器写访问。 2 Merge PCI桥可以将收到的多个对同一个DW地址的Byte、Word进行的存储器写总线事务,合并为一个对这个DW地址的存储器写总线事务。PCI规范并没有要求这些对Byte、Word进行的存储器写在一个DW的边界之内,但是建议PCI桥仅处理这种情况。本节也仅介绍在这种情况下,PCI桥的处理过程。 PCI规范允许PCI桥进行Merge操作的存储器区域必须是可预读的,而可预读的存储器区域必须支持这种Merge操作。Merge操作可以不考虑访问顺序,可以将对Byte0、Byte1、Byte3的存储器访问合并为一个DW,也可以将对Byte3、Byte1、Byte0的存储器访问合并为一个DW。在这种情况下,PCI总线事务仅需屏蔽与Byte2相关的字节使能信号C/BE2#即可。 如果PCI设备对Byte1进行存储器写、然后再对Byte1、Byte2、Byte3进行存储器写时,PCI桥不能将这两组存储器写合并为一次对DW进行存储器写操作。但是PCI桥可以合并后一组存储器写,即首先对Byte1进行存储器写,然后合并后一组存储器写(Byte1、Byte2和Byte3)为一个DW写,并屏蔽相应的C/BE0#信号。Combining与Merge操作之间没有直接联系,PCI桥可以同时支持这两种方式,也可以支持任何一种方式。 3 Collapsing Collapsing指PCI桥可以将对同一个地址进行的Byte、Word和DW存储器写总线事务合并为一个存储器写操作。使用PCI桥的Collapsing方式是,具有某些条件限制,在多数情况下,PCI桥不能使用Collapsing方式合并多个存储器写总线事务。 当PCI桥收到一个对“DW地址X”的Byte3进行的存储器写总线事务,之后又收到一个对“DW地址X”的Byte、Word或者DW存储器写总线事务时,而且后一个对DW地址X进行的存储器写仍然包含Byte3时,如果PCI桥支持Collapsing方式,就可以将这两个存储器写合并为一个存储器写。 PCI桥在绝大多数情况下不能支持这种方式,因为很少有PCI设备支持这种数据合并方式。通常情况下,对PCI设备的同一地址的两次写操作代表不同的含义,因此PCI桥不能使用Collapsing方式将这两次写操作合并。PCI规范仅是提出了Collapsing方式的概念,几乎没有PCI桥支持这种数据合并方式。 PCI桥除了具有Memory Base窗口外,还有I/O Base窗口和Prefetchable Memory Base窗口。
  • 热度 23
    2013-4-9 18:15
    1615 次阅读|
    0 个评论
    在PCI Agent设备进行数据传送之前,系统软件需要初始化PCI Agent设备的BAR0~5寄存器和PCI桥的Base、Limit寄存器。系统软件使用DFS算法对PCI总线进行遍历时,完成这些寄存器的初始化,即分配这些设备在PCI总线域的地址空间。当这些寄存器初始化完毕后,PCI设备可以使用PCI总线地址进行数据传递。 值得注意的是,PCI Agent设备的BAR0~5寄存器和PCI桥的Base寄存器保存的地址都是PCI总线地址。而这些地址在处理器系统的存储器域中具有映像,如果一个PCI设备的BAR空间在存储器域中没有映像,处理器将不能访问该PCI设备的BAR空间。 如上文所述,处理器通过HOST主桥将PCI总线域与存储器域隔离。当处理器访问PCI设备的地址空间时,需要首先访问该设备在存储器域中的地址空间,并通过HOST主桥将这个存储器域的地址空间转换为PCI总线域的地址空间之后,再使用PCI总线事务将数据发送到指定的PCI设备中。 PCI设备访问存储器域的地址空间,即进行DMA操作时,也是首先访问该存储器地址空间所对应的PCI总线地址空间,之后通过HOST主桥将这个PCI总线地址空间转换为存储器地址空间,再由DDR控制器对存储器进行读写访问。 不同的处理器系统采用不同的机制实现存储器域和PCI总线域的转换。如PowerPC处理器使用Outbound寄存器组实现存储器域到PCI总线域间的转换,并使用Inbound寄存器组实现PCI总线域到存储器域间的转换。 而x86处理器没有这种地址空间域的转换机制,因此从PCI设备的角度上看,PCI设备可以直接访问存储器地址;从处理器的角度上看,处理器可以直接访问PCI总线地址空间。但是读者需要注意,在x86处理器的HOST主桥中仍然有存储器域与PCI总线域这个概念。只是在x86处理器的HOST主桥中,存储器域的存储器地址与PCI总线地址相等,这种“简单相等”也是一种映射关系。 3.1.1 存储器地址与PCI 总线地址的转换 下文根据PowerPC和x86处理器的主桥,抽象出一个虚拟的HOST主桥,并以此为例讲述PCI Agent设备之间,以及PCI Agent设备与主存储器间的数据传送过程。 我们假设在一个32位处理器中,其存储器域的0xF000-0000~0xF7FF-FFFF(共128MB)这段物理地址空间与PCI总线的地址空间存在映射关系。 当处理器访问这段存储器地址空间时,HOST主桥将会认领这个存储器访问,并将这个存储器访问使用的物理地址空间转换为PCI总线地址空间,并与0x7000-0000~0x77FF-FFFF这段PCI总线地址空间对应。 为简化起见,我们假定在存储器域中只映射了PCI设备的存储器地址空间,而不映射PCI设备的I/O地址空间。而PCI设备的BAR空间使用0x7000-0000~0x77FF-FFFF这段PCI总线域的存储器地址空间。 在这个HOST主桥中,存储器域与PCI总线域的对应关系如图3‑1所示。 当PCI设备使用DMA机制,访问存储器域地址空间时,处理器系统同样需要将存储器域的地址空间反向映射到PCI总线地址空间。假设在一个处理器系统中,如果主存储器大小为2GB,其在存储器域的地址范围为0x0000-0000~0x7FFF-FFFF,而这段地址在PCI总线域中对应的“PCI总线地址空间”为0x8000-0000~0xFFFF-FFFF。 因此PCI设备进行DMA操作时,必须使用0x8000-0000~0xFFFF-FFFF这段PCI总线域的地址,HOST主桥才能认领这个PCI总线事务,并将这个总线事务使用的PCI总线地址转换为存储器地址,并与0x0000-0000~0x7FFF-FFFF这段存储器区域进行数据传递。 在一个实际的处理器系统中,很少有系统软件采用这样的方法,实现存储器域与PCI总线域之间的映射,“简单相等”还是最常用的映射方法。本章采用图3‑1的映射关系,虽然增加了映射复杂度,却便于读者深入理解存储器域到PCI总线域之间的映射关系。下文将以这种映射关系为例,详细讲述PCI设备BAR0~5寄存器的初始化。 3.1.2 PCI 设备BAR寄存器和PCI桥Base、Limit寄存器的初始化 PCI桥的Base、Limit寄存器保存“该桥所管理的PCI子树”的存储器或者I/O空间的基地址和长度。值得注意的是,PCI桥也是PCI总线上的一个设备,在其配置空间中也有BAR寄存器,本节不对PCI桥BAR寄存器进行说明,因为在多数情况下透明桥并不使用其内部的BAR寄存器。下文以图3‑2所示的处理器系统为例说明上述寄存器的初始化过程,该处理器系统使用的存储器域与PCI总线域的映射关系如图3‑1所示。 在PCI设备的BAR寄存器中,包含该设备使用的PCI总线域的地址范围。在PCI设备的配置空间**有6个BAR寄存器,因此一个PCI设备最多可以使用6组32位的PCI总线地址空间,或者3组64位的PCI总线地址空间。这些BAR空间可以保存PCI总线域的存储器地址空间或者I/O地址空间,目前多数PCI设备仅使用存储器地址空间。而在通常情况下,一个PCI设备使用2到3个BAR寄存器就足够了。 为简化起见,我们首先假定在图3‑2中所示的PCI总线树中,所有PCI Agent设备只使用了BAR0寄存器,其申请的数据空间大小为16M字节(即0x1000000字节)而且不可预读,而且PCI桥不占用PCI总线地址空间,即PCI桥不含有BAR空间。并且假定当前HOST主桥已经完成了对PCI总线树的编号。 根据以上假设,系统软件该PCI总线树的遍历过程如下所示。 (1) 系统软件根据DFS算法,系统软件率先寻找到第一组PCI设备,分别为PCI设备31和PCI设备32 ,并根据这两个PCI设备需要的PCI空间大小,从PCI总线地址空间中(0x7000-0000~0x77FF-FFFF)为这两个PCI设备的BAR0寄存器分配基地址,分别为0x7000-0000和0x7100-0000。 (2) 当系统软件完成PCI总线3下所有设备的BAR空间的分配后,将初始化PCI桥3的配置空间。这个桥片的Memory Base寄存器保存其下所有PCI设备使用的“PCI总线域地址空间的基地址”,而Memory Limit寄存器保存其下PCI设备使用的“PCI总线域地址空间的大小”。系统软件将Memory Base寄存器赋值为0x7000-0000,而将Memory Limit寄存器赋值为0x200-0000。 (3) 系统软件回朔到PCI总线2,并找到PCI总线2上的PCI设备21,并将PCI设备21的BAR0寄存器赋值为0x7200-0000。 (4) 完成PCI总线2的遍历后,系统软件初始化PCI桥2的配置寄存器,将Memory Base寄存器赋值为0x7000-0000,Memory Limit寄存器赋值为0x300-0000。 (5) 系统软件回朔到PCI总线1,并找到PCI设备11,并将这个设备的BAR0寄存器赋值为0x7300-0000。并将PCI桥1的Memory Base寄存器赋值为0x7000-0000,Memory Limit寄存器赋值为0x400-0000。 (6) 系统软件回朔到PCI总线0,并在这条总线上发现另外一个PCI桥,即PCI桥4。并使用DFS算法继续遍历PCI桥4。首先系统软件将遍历PCI总线4,并发现PCI设备41和PCI设备42,并将这两个PCI设备的BAR0寄存器分别赋值为0x7400-0000和0x7500-0000。 (7) 系统软件初始化PCI桥4的配置寄存器,将Memory Base寄存器赋值为0x7400-0000,Memory Limit寄存器赋值为0x200-0000。系统软件再次回到PCI总线0,这一次系统软件没有发现新的PCI桥,于是将初始化这条总线上的所有PCI设备。 (8) PCI总线0上只有一个PCI设备,PCI设备01。系统软件将这个设备的BAR0寄存器赋值为0x7600-0000,并结束整个DFS遍历过程。 HOST主桥下的第一个桥片是PCI桥片1,PCI桥片1下的第一个桥片是PCI桥片2,而PCI桥片2下的第一个桥片是PCI桥片3,因而第一组PCI设备为PCI总线3下的PCI设备。不同的系统软件查找第一组PCI设备的方法不同,Linux认为第一组PCI设备为PCI总线0下的PCI设备。
  • 热度 14
    2013-4-2 18:03
    2178 次阅读|
    0 个评论
    PCI总线定义了两类配置请求,一个是Type 00h配置请求,另一个是Type 01h配置请求。PCI总线使用这些配置请求访问PCI总线树上的设备配置空间,包括PCI桥和PCI Agent设备的配置空间。 其中HOST主桥或者PCI桥使用Type 00h配置请求,访问与HOST主桥或者PCI桥直接相连的PCI Agent设备或者PCI桥 ;而HOST主桥或者PCI桥使用Type 01h配置请求,需要至少穿越一个PCI桥,访问没有与其直接相连的PCI Agent设备或者PCI桥。如图2‑8所示,HOST主桥可以使用Type 00h配置请求访问PCI设备01,而使用Type 01h配置请求通过PCI桥1、2或者3转换为Type 00h配置请求之后,访问PCI总线树上的PCI设备11、21、22、31和32 。 当x86处理器对CONFIG_DATA寄存器进行读写操作时,HOST主桥将决定向PCI总线发送Type 00h配置请求还是Type 01h配置请求。在PCI总线事务的地址周期中,这两种配置请求总线事务的不同反映在PCI总线的AD 信号线上。 值得注意的是,PCIe总线还可以使用ECAM(Enhanced Configuration Access Mechanism)机制访问PCIe设备的扩展配置空间,使用这种方式可以访问PCIe设备256B~4KB之间的扩展配置空间。但是本节仅介绍如何使用CONFIG_ADDRESS和CONFIG_FATA寄存器产生Type 00h和Type 01h配置请求。有关ECAM机制的详细说明见第5.3.2节。 处理器首先将目标PCI设备的ID号保存在CONFIG_ADDRESS寄存器中,之后HOST主桥根据该寄存器的Bus Number字段,决定是产生Type 00h配置请求,还是Type 01h配置请求。当Bus Number字段为0时,将产生Type 00h配置请求,因为与HOST主桥直接相连的总线号为0;大于0时,将产生Type 01h配置请求。 2.4.1 Type 01h 和Type 00h配置请求 本节首先介绍Type 01h配置请求,并从PCI总线使用的信号线的角度上,讲述HOST主桥如何生成Type 01配置请求。在PCI总线中,只有PCI桥能够接收Type 01h配置请求。Type 01h配置请求不能直接发向最终的PCI Agent设备,而只能由PCI桥将其转换为Type 01h继续发向其他PCI桥,或者转换为Type 00h配置请求发向PCI Agent设备。PCI桥还可以将Type 01h配置请求转换为Special Cycle总线事务(HOST主桥也可以实现该功能),本节对这种情况不做介绍。 在地址周期中,HOST主桥使用配置读写总线事务,将CONFIG_ADDRESS寄存器的内容拷贝到PCI总线的AD 信号线中。CONFIG_ADDRESS寄存器与Type 01h配置请求的对应关系如图2‑11所示。 从图2‑11中可以发现,CONFIG_ADDRESS寄存器的内容基本上是原封不动的拷贝到PCI总线的AD 信号线上的 。其中CONFIG_ADDRESS的Enable位不被拷贝,而AD总线的第0位为必须为1,表示当前配置请求是Type 01h。 当PCI总线接收到Type 01配置请求时,将寻找合适的PCI桥 接收这个配置信息。如果这个配置请求是直接发向PCI桥下的PCI设备时,PCI桥将接收个Type 01配置请求,并将其转换为Type 00h配置请求;否则PCI桥将当前Type 01h配置请求原封不动的传递给下一级PCI总线。 如果HOST主桥或者PCI桥发起的是Type 00h配置请求,CONFIG_ADDRESS寄存器与AD 的转换如图2‑12所示。 此时处理器对CONFIG_DATA寄存器进行读写时,处理器将CONFIG_ADDRESS寄存器中的Function Number和Register Number字段拷贝到PCI的AD总线的第10~2位;将AD总线的第1~0位赋值为0b00。PCI总线在配置请求总线事务的地址周期根据AD 判断当前配置请求是Type 00h还是Type 01h,如果AD 等于0b00表示是Type 00h配置请求,如果AD 等于0b01表示是Type 01h配置请求。 而AD 与CONFIG_ADDRESS的Device Number字段有关,在Type 00h配置请求的地址周期中,AD 位有且只有一位为1,其中AD 的每一位选通一个PCI设备的配置空间。如第1.2.2节所述,PCI设备配置空间的片选信号是IDSEL,因此AD 将与PCI设备的IDSEL信号对应相连。 当以下两种请求之一满足时,HOST主桥或者PCI桥将生成Type 00h配置头,并将其发送到指定的PCI总线上。 (1) CONFIG_ADDRESS寄存器的Bus Number字段为0时,处理器访问CONFIG_DATA寄存器时,HOST主桥将直接向PCI总线0发出Type 00h配置请求。因为与HOST主桥直接相连的PCI总线号为0,此时表示HOST主桥需要访问与其直接相连的PCI设备。 (2) 当PCI桥收到Type 01h配置头时,将检查Type 01配置头的Bus Number字段,如果这个Bus Number与PCI桥的Secondary Bus Number相同,则将这个Type 01配置头转换为Type 00h配置头,并发送到该PCI桥的Secondary总线上。 2.4.2 PCI 总线配置请求的转换原则 当CONFIG_ADDRESS寄存器的Enable位为1,系统软件访问CONFIG_DATA寄存器时,HOST主桥可以产生两类PCI总线配置读写总线事务,分别为Type 00h和Type 01h配置读写总线事务。在配置读写总线事务的地址周期和数据周期中,CONFIG_ADDRESS和CONFIG_DATA寄存器中的数据将被放置到PCI总线的AD总线上。其中Type 00h和Type 01h配置读写总线事务映射到AD总线的数据并不相同。 其中Type 00h配置请求可以直接读取PCI Agent设备的配置空间,而Type 01h配置请求在通过PCI桥时,最终将被转换为Type 00h配置请求,并读取PCI Agent设备的配置寄存器。本节重点讲述PCI桥如何将Type 01h配置请求转换为Type 00h配置请求。 首先Type 00h配置请求不会被转换成Type 01h配置请求,因为Type 00h配置请求是发向最终PCI Agent设备,这些PCI Agent设备不会转发这些配置请求。 当CONFIG_ADDRESS寄存器的Bus Number字段为0时,处理器对CONFIG_DATA寄存器操作时,HOST主桥将直接产生Type 00h配置请求,挂接在PCI总线0上的某个设备将通过ID译码接收这个Type 00h配置请求,并对配置寄存器进行读写操作。如果PCI总线上没有设备接收这个Type 00h配置请求,将引发Master Abort,详情见PCI总线规范,本节对此不做进一步说明。 如果CONFIG_ADDRESS寄存器的Bus Number字段为n(n≠0),即访问的PCI设备不是直接挂接在PCI总线0上的,此时HOST主桥对CONFIG_DATA寄存器操作时,将产生Type 01h配置请求,PCI总线0将遍历所有在这条总线上的PCI桥,确定由哪个PCI桥接收这个Type 01h配置请求。 如果n大于等于某个PCI桥的Secondary Bus Number寄存器,而且小于等于Subordinate Bus number寄存器,那么这个PCI桥将接收在当前PCI总线上的Type 01配置请求,并采用以下规则进行递归处理。 (1) 开始。 (2) 遍历当前PCI 总线的所有PCI桥。 (3) 如果n等于某个PCI桥的Secondary Bus Number寄存器,说明这个Type 01配置请求的目标设备直接连接在该PCI桥的Secondary bus上。此时PCI桥将Type 01配置请求转换为Type 00h配置请求,并将这个配置请求发送到PCI桥的Secondary Bus上,Secondary Bus上的某个设备将响应这个Type 00h配置请求,并与HOST主桥进行配置信息的交换,转(5)。 (4) 如果n大于PCI桥的Secondary Bus Number寄存器,而且小于等于PCI桥的Subordinate Bus number寄存器,说明这个Type 01配置请求的目标设备不与该PCI桥的Secondary Bus直接相连,但是由这个PCI桥下游总线上的某个PCI桥管理。此时PCI桥将首先认领这个Type 01配置请求,并将其转发到Secondary Bus,转(2)。 (5) 结束。 下文将举例说明PCI总线配置请求的转换原则,并以图2‑8为例说明处理器如何访问PCI设备01和PCI设备31的配置空间。PCI设备01直接与HOST主桥相连,因此HOST主桥可以使用Type 00h配置请求访问该设备。 而HOST主桥需要经过多级PCI桥才能访问PCI设备31,因此HOST主桥需要首先使用Type 01h配置请求,之后通过PCI桥1、2和3将Type 01h配置请求转换为Type 00h配置请求,最终访问PCI设备31。 1 PCI设备01 这种情况较易处理,当HOST处理器访问PCI设备01的配置空间时,发现PCI设备01与HOST主桥直接相连,所以将直接使用Type 00h配置请求访问该设备的配置空间,具体步骤如下。 首先HOST处理器将CONFIG_ADDRESS寄存器的Enable位置1,Bus Number号置为0,并对该寄存器的Device、Function和Register Number字段赋值。当处理器对CONFIG_DATA寄存器访问时,HOST主桥将存放在CONFIG_ADDRESS寄存器中的数值,转换为Type 00h配置请求,并发送到PCI总线0上,PCI设备01将接收这个Type 00h配置请求,并与处理器进行配置信息交换。 2 PCI设备31 HOST处理器对PCI设备31进行配置读写时,需要通过HOST主桥、PCI桥1、2和3,最终到达PCI设备31。 当处理器访问PCI设备31时,首先将CONFIG_ADDRESS寄存器的Enable位置1,Bus Number字段置为3,并对Device、Function和Register Number字段赋值。之后当处理器对CONFIG_DATA寄存器进行读写访问时,HOST主桥、PCI桥1、2和3将按照以下步骤进行处理,最后PCI设备31将接收这个配置请求。 (1) HOST主桥发现Bus Number字段的值为3,该总线号并不是与HOST主桥直接相连的PCI总线的Bus Number,所以HOST主桥将处理器对CONFIG_DATA寄存器的读写访问直接转换为Type 01h配置请求,并将这个配置请求发送到PCI总线0上。PCI总线规定Type 01h配置请求只能由PCI桥负责处理。 (2) 在PCI总线0上,PCI桥1的Secondary Bus Number为1而Subordinate Bus Number为3。而1 Bus Number = 3,所以PCI桥1将接收来自PCI总线0的Type 01h配置请求,并将这个配置请求直接下推到PCI总线1。 (3) 在PCI总线1上,PCI桥2的Secondary Bus Number为2而Subordinate Bus Number为3。而1 Bus Number = 3,所以PCI桥2将接收来自PCI总线0的Type 01h配置请求,并将这个配置请求直接下推到PCI总线2。 (4) 在PCI总线2上,PCI桥3的Secondary Bus Number为3,因此PCI桥3将“来自PCI总线2的Type 01h配置请求”转换为Type 00h配置请求,并将其下推到PCI总线3。PCI总线规定,如果PCI桥的Secondary Bus Number与Type 01h配置请求中包含的Bus Number相同时,该PCI桥将接收的Type 01h配置请求转换为Type 00h配置请求,然后再发向其Secondary Bus。 (5) 在PCI总线3上,有两个设备PCI设备31和PCI设备32。在这两个设备中,必然有一个设备将要响应这个Type 00h配置请求,从而完成整个配置请求周期。本篇在第2.4.1节中,讨论了究竟是PCI设备31还是PCI设备32接收这个配置请求,这个问题涉及PCI总线如何分配PCI设备使用的设备号。 2.4.3 PCI 总线树Bus号的初始化 在一个处理器系统中,每一个HOST主桥都推出一颗PCI总线树。在一颗PCI总线树中有多少个PCI桥(包括HOST主桥),就含有多少条PCI总线。系统软件在遍历当前PCI总线树时,需要首先对这些PCI总线进行编号,即初始化PCI桥的Primary、Secondary和Subordinate Bus Number寄存器。 在一个处理器系统中,一般将与HOST主桥直接相连的PCI总线被命名为PCI总线0。然后系统软件使用DFS(Depth First Search)算法,依次对其他PCI总线进行编号。值得注意的是,与HOST主桥直接相连的PCI总线,其编号都为0,因此当处理器系统中存在多个HOST主桥时,将有多个编号为0的PCI总线,但是这些编号为0的PCI总线分属不同的PCI总线域,其含义并不相同。 在一个处理器系统中,PCI总线树的结构如图2‑13所示。当然在一个实际的处理器系统中,很少会出现这样复杂的PCI总线树结构,本节采用这个结构的目的是便于说明PCI总线号的分配过程。 在PCI总线中,系统软件使用深度优先DFS算法对PCI总线树进行遍历,DFS算法和广度优先BFS(Breadth First Search)算法是遍历树型结构的常用算法。与BFS算法相比,DFS算法的空间复杂度较低,因此绝大多数系统系统在遍历PCI总线树时,都使用DFS算法而不是BFS算法。 DFS是搜索算法的一种,其实现机制是沿着一颗树的深度遍历各个节点,并尽可能深地搜索树的分支,DFS的算法为线性时间复杂度,适合对拓扑结构未知的树进行遍历。在一个处理器系统的初始化阶段,PCI总线树的拓扑结构是未知的,适合使用DFS算法进行遍历。下文以图2‑13为例,说明系统软件如何使用DFS算法,分配PCI总线号,并初始化PCI桥中的Primary Bus Number、Secondary Bus Number和Subordinate Bus number寄存器。所谓DFS算法是指按照深度优先的原则遍历PCI胖树,其步骤如下。 (1) HOST主桥扫描PCI总线0上的设备。系统软件首先忽略所有这条总线上的PCI Agent设备,因为在这些设备之下不会挂接新的PCI总线。例如PCI设备01下不可能挂接新的PCI总线。 (2) HOST主桥首先发现PCI桥1,并将PCI桥1的Secondary Bus命名为PCI总线1。系统软件将初始化PCI桥1的配置空间,将PCI桥1的Primary Bus Number寄存器赋值为0,而将Secondary Bus Number寄存器赋值为1,即PCI桥1的上游PCI总线号为0,而下游PCI总线号为1。 (3) 扫描PCI总线1,发现PCI桥2,并将PCI桥2的Secondary Bus命名为PCI总线2。系统软件将初始化PCI桥2的配置空间,将PCI桥2的Primary Bus Number寄存器赋值为1,而将Secondary Bus Number寄存器赋值为2。 (4) 扫描PCI总线2,发现PCI桥3,并将PCI桥3的Secondary Bus命名为PCI总线3。系统软件将初始化PCI桥3的配置空间,将PCI桥3的Primary Bus Number寄存器赋值为2,而将Secondary Bus Number寄存器赋值为3。 (5) 扫描PCI总线3,没有发现任何PCI桥,这表示PCI总线3下不可能有新的总线,此时系统软件将PCI桥3的Subordinate Bus number寄存器赋值为3。系统软件在完成PCI总线3的扫描后,将回退到PCI总线3的上一级总线,即PCI总线2,继续进行扫描。 (6) 在重新扫描PCI总线2时,系统软件发现PCI总线2上除了PCI桥3之外没有发现新的PCI桥,而PCI桥3之下的所有设备已经完成了扫描过程,此时系统软件将PCI桥2的Subordinate Bus number寄存器赋值为3。继续回退到PCI总线1。 (7) PCI总线1上除了PCI桥2外,没有其他桥片,于是继续回退到PCI总线0,并将PCI桥1的Subordinate Bus number寄存器赋值为3。 (8) 在PCI总线0上,系统软件扫描到PCI桥4,则首先将PCI桥4的Primary Bus Number寄存器赋值为0,而将Secondary Bus Number寄存器赋值为4,即PCI桥1的上游PCI总线号为0,而下游PCI总线号为4。 (9) 系统软件发现PCI总线4上没有任何PCI桥,将结束对PCI总线4的扫描,并将PCI桥4的Subordinate Bus number寄存器赋值为4,之后回退到PCI总线4的上游总线,即PCI总线0继续进行扫描。 (10) 系统软件发现在PCI总线0上的两个桥片PCI总线0和PCI总线4都已完成扫描后,将结束对PCI总线的DFS遍历全过程。 从以上算法可以看出,PCI桥的Primary Bus和Secondary Bus号的分配在遍历PCI总线树的过程中从上向下分配,而Subordinate Bus号是从下向上分配的,因为只有确定了一个PCI桥之下究竟有多少条PCI总线后,才能初始化该PCI桥的Subordinate Bus号。 2.4.4 PCI 总线Device号的分配 一条PCI总线会挂接各种各样的PCI设备,而每一个PCI设备在PCI总线下具有唯一的设备号。系统软件通过总线号和设备号定位一个PCI设备之后,才能访问这个PCI设备的配置寄存器。值得注意的是,系统软件使用“地址寻址方式”访问PCI设备的存储器和I/O地址空间,这与访问配置空间使用的“ID寻址方式”不同。 PCI设备的IDSEL信号与PCI总线的AD 信号的连接关系决定了该设备在这条PCI总线的设备号。如上文所述,每一个PCI设备都使用独立的IDSEL信号,该信号将与PCI总线的AD 信号连接,IDSEL信号的含义见第1.2.2节。 在此我们简要回顾PCI的配置读写事务使用的时序。如图1‑3所示,PCI总线事务由一个地址周期加若干个数据周期组成。在进行配置读写请求总线事务时,C/BE#信号线的值在地址周期中为0x1010或者为0x1011,表示当前总线事务为配置读或者配置写请求。此时出现在AD 总线上的值并不是目标设备的PCI总线地址,而是目标设备的ID号,这与PCI总线进行I/O或者存储器请求时不同,因为PCI总线使用ID号而不是PCI总线地址对配置空间进行访问。 如图2‑12所示,在配置读写总线事务的地址周期中,AD 信号已经被Function Number和Register Number使用,因此PCI设备的IDSEL只能与AD 信号连接。 认真的读者一定可以发现在CONFIG_ADDRESS寄存器中Device Number字段一共有5位可以表示32个设备,而AD 只有21位,显然在这两者之间无法建立一一对应的映射关系。因此在一条PCI总线上如果有21个以上的PCI设备,那么总是有几个设备无法与AD 信号线连接,从而PCI总线无法访问这些设备。因为PCI总线在配置请求的地址周期中,只能使用第31~11这些AD信号,所以在一条总线上最多也只能挂接21个PCI设备。这21个设备可能是从0到20,也可能是从11到31排列。从而系统软件在遍历PCI总线时,还是需要从0到31遍历整条PCI总线。 在实际的应用中,一条PCI总线能够挂接21个设备已经足够了,实际上由于PCI总线的负载能力有限,即便总线频率为33MHz的情况下,在一条PCI总线中最多也只能挂接10个负载,一条PCI总线所能挂接的负载详见表1‑1。AD信号线与PCI设备IDSEL线的连接关系如图2‑14所示。 PCI总线推荐了一种Device Number字段与AD 之间的映射关系。其中PCI设备0与Device Number字段的0b00000对应;PCI设备1与Device Number字段的0b00001对应,并以此类推,PCI设备15与Device Number字段的0b01111对应。 在这种映射关系之下,一条PCI总线中,与信号线AD16相连的PCI设备其设备号为0;与信号线AD17相连的PCI设备其设备号为1;以此类推,与信号线AD31相连的PCI设备其设备号为15。在Type 00h配置请求中,设备号并没有像Function Number和Register Number那样以编码的形式出现在AD总线上,而是与AD信号一一对应,如图2‑12所示。 这里有一个原则需要读者注意,就是对PCI设备的配置寄存器进行访问时,一定要有确定的Bus Number、Device Number、Function Number和Register Number,这“四元组”缺一不可。在Type 00h配置请求中,Device Number由AD 信号线与PCI设备IDSEL信号的连接关系确定;Function Number保存在AD 字段中;而Register Number保存在AD 字段中;在Type 01h配置请求中,也有完整的四元组信息。 此时PCI桥作为一个PCI设备,接收访问其配置空间的读写请求。 最终Type 01h配置请求将会被转换为Type 00h配置请求,然后访问PCI Agent设备。 Type 01h配置头信息存在于PCI总线事务的地址周期中。 PCI桥根据Subordinate Bus Number和Secondary Bus Number寄存器,决定是否接收当前配置请求。
  • 热度 22
    2010-11-14 16:35
    2972 次阅读|
    0 个评论
    PC机通用I/O总线的发展历程基本上可分为三个阶段: 第一阶段(或称第一代)总线包括ISA(1984年,8位XT机或16位AT机,5MBps)、EISA(19***,32位,33MBbs)和VESA(1992年,32位,132MBbs); 第二阶段(第二代)总线包括PCI(1992年,32位/64位,133MBps)、PCI-X(1999年,64位,1GBps); 第三阶段(第三代)总线是PCI Express(简称PCI-E,2001年,2.5GBps)。 其中,ISA、PCI和PCI-E是三个阶段的典型代表,ISA和PCI是并行总线,PCI-E是串行总线。尽管目前PCI-E已成为家用/商用PC机I/O总线的主流代表,但在工控机领域,PCI和ISA还是不可替代的,主要原因是工控机使用的大多是专业板卡,这些板卡(数字I/O卡,A/D、D/A卡等)一般不是大型专业公司开发的,有些还需要用户自己开发,从技术开发角度来说,PCI-E的难度要比ISA和PCI大得多。 对于ISA和PCI总线,前者的开发难度又要低得多,但是由于ISA总线的速度和可靠性比PCI总线差,因此,目前工控机的板卡以PCI总线为主。那么对于习惯于ISA总线的开发人员是否有将ISA卡升级到PCI总线的捷径呢?答案是肯定的,那就是使用PCI-ISA桥接芯片。事实上,在同时有ISA和PCI总线(插槽)的PC机(或工控机)中,其ISA总线也是由PCI-ISA桥接芯片完成的,只是该桥接芯片已集成到主板的南桥(South Bridge)主芯片中。 目前有多款PCI-ISA桥接芯片可供选用,比较常用的有: ●     PLX公司的PCI9052型PCI-ISA桥接芯片 ●     AMCC公司的 S5920型PCI-ISA桥接芯片 ●     NS公司的 PC87200型PCI-ISA桥接芯片 ●     ITE公司的IT8888F型PCI-ISA桥接芯片 ●    南京沁恒电子的CH365型PCI-ISA桥接芯片 这里要特别推荐的是南京沁恒电子的CH365,该芯片的性价比极高,而且开发资料全,技术支持好,公司还提供免费开发板(需购一定量芯片),一般生手熟悉一周左右时间就会使用,唯一缺陷是只支持8位数据。 与标准的ISA卡一样,采用PCI-ISA桥接芯片的PCI卡在DOS和WIN98平台使用时也不需要安装驱动程序,但在WIN2000或XP中必须安装WDM驱动程序,这个驱动程序也就只有用户(或板卡生产商)自己开发了。
相关资源
  • 所需E币: 3
    时间: 2019-12-25 23:00
    大小: 41.53KB
    上传者: quw431979_163.com
    ThisapplicationnotedescribeshowtointerfacetheTexasInstrumentsTMS320VC5409/5421digitalsignalprocessors(DSP)tothePCIBususingthePLXIOP480I/Oprocessor.TheinformationcanbeusedtobuildahighperformancePCIadapterboard.……
  • 所需E币: 4
    时间: 2019-12-25 22:02
    大小: 79.49KB
    上传者: 238112554_qq
    如何着手开发TMS320C6205DSP,教你如何学会着手开发TMS320C6205DSP,此TI公司的DSP芯片基于PCI总线。……
  • 所需E币: 5
    时间: 2019-12-25 17:40
    大小: 110.16KB
    上传者: 二不过三
    SXL-100A是我公司应四川大学计算机学院的要求开发完成的。我公司并对该设备与四川大学计算机学院合编了一本教材。该设备能完成老式设备的所有实验,即低年级学生可以用它做宏汇编(DOS)方面的实验及相关基本硬件电路(实验内容与其它设备类似)。高年级学生则可用该设备学习2个方面的内容。一个是学习PCI总线设备的开发,主要是通过对学习S5933PCI协议转换芯片的大至内容。使学生具备对即插即用的PCI设备具有一定的了解,以便日后工作中可进一步深入的开发PCI产品;二是学习怎样在Windows9x、Windows2000、WindowsMe、WindowsXP下这种操作系统中控制硬件,以及学习怎样来开发实时控制的应用软件。……
  • 所需E币: 3
    时间: 2019-12-25 15:54
    大小: 344.29KB
    上传者: 2iot
    本文介绍军用车辆综合电子信息系统中虚拟仪表内部的计算机上扩展的基于PCI总线的CAN接口卡及其VxWorks环境下驱动程序的设计.硬件设计方面介绍的主要内容是:PCI9052及其与PCI总线的连接,PCI9052与SJA1000的连接,SJA100...第29卷第4期电子器件V01.29No.4chille∞JournalOf2006年12月ElectronDevicesDec.2006Desi弘0fo蝌洲D瞅麒ledonPCIBllsandItsDl雨盯Develop删iIIv】圆№Z’HUXi72一^“n,HL7:f4NGLin7zg―Zi口,zg,A014Y乱,z―二ci口7zg,L工己厂Y≯60……
  • 所需E币: 5
    时间: 2019-12-25 15:32
    大小: 252.28KB
    上传者: quw431979_163.com
    介绍了一种在实时操作系统DSP/BIOS平台下的雷达信号实时采集、处理与传输系统的设计和实现,利用TMS320C6416DSP强大的数据处理能力和其片内集成的PCI总线接口,满足了雷达信号处理中高数据传输率和高速处理能力的需要.・应用系统基于DSP和DSP/B10S的实时雷达信号采集与处理系统孟凡志,索继东,于川,许小可(大连海事大学信息工程学院,辽宁大连116026)摘要:介绍了一种在实时操作系统DSP/BIOS平台下的雷达信号实时采集、处理与传输系统的设计和实现,利用TMS320C6416DSP强大的数据处理能力和其片内集成的PCI总线接口,满足了雷达信号处理中高数据传输率和高速处理能力的需要。关键词:DSP/BIOS操作系统数字信号处理器雷达PCI总线信号采集与处理雷达信号的实时采集、处理与传输,除需要由高速I路I12位A,DA/D设备、高性能的DSP和PCI总线构成的高速硬件平――1(65MsPS)……
  • 所需E币: 3
    时间: 2019-12-25 15:21
    大小: 209.54KB
    上传者: 238112554_qq
    采用双端口RAM实现DSP与PCI总线芯片之间的数据交换接口电路.提出了一种使用CPLD解决双端口RAM地址译码和PCI接口芯片局部总线仲裁的的硬件设计方案,并给出了PCI总线接口芯片寄存器配置实例,介绍了软件包WinDriver开发设备驱动程序的具体过程.……
  • 所需E币: 4
    时间: 2019-12-25 15:19
    大小: 423.75KB
    上传者: wsu_w_hotmail.com
    一种在计算机工业测控系统中应用FPGA和软IP核实现PCI总线接口的方法.重点介绍了本地总线读写状态机的设计,3.3VFPGA兼容PCI2.2、5V规范的电气设计及其时序和布线问题,并给出了使用嵌入式逻辑分析仪实际捕获的信号时序.实验证明,该结构的PCI接口测控系统工作稳定可靠.……
  • 所需E币: 5
    时间: 2019-12-25 15:19
    大小: 256.22KB
    上传者: 238112554_qq
    描述了PCI总线仲裁的原理和仲裁算法,阐述了用可编程器件实现总线仲裁的具体方法,并实现了一个双主设备仲裁器.……
  • 所需E币: 5
    时间: 2020-1-4 12:56
    大小: 225.37KB
    上传者: rdg1993
    介绍了基于计算机PCI总线的变参差工作雷达数据采集系统的设计和实现方法.该系统提供一路20MHz最高采样频率、8位采样精度的数据采集通道,在FPGA逻辑控制下,系统可以对16种参差模式的雷达信号进行预置采样.实验证明,数据采集速率满足设计要求,数据传输最高达到100MB/s,可供后续雷达信号实时处理.。簋鎏鲞羹羹薹邈塑型型!!塑堕塑型堕交参差工作雷达数据采集系统王帅,邓恩颖,刘钊(电子科技大学电子工程学院,四川成都610054)摘要:介绍了基于计算机PCI总线的变参差工作雷达数据采集系统的设计和实现方法。该系统提供一路20MHz最高采样频率、8位采样精度的数据采集通道,在FPGA逻辑控制下,系统可以对16种参差模式的雷选信号进行预置采样。实验证明,数据采集速率满足设计要求,数据传输最高达到100MB/8.可供后续雷达信号实时处理。关键词:PCI总线数据采集变参差工作模式PLX9054FPGASDRAMThevariablepar啪etermodeIadardataacquisitionsystem……
  • 所需E币: 5
    时间: 2020-1-6 14:13
    大小: 91.98KB
    上传者: 978461154_qq
    AlteraAHDL语言设计的PCI总线Core……
  • 所需E币: 3
    时间: 2019-12-25 17:40
    大小: 99.2KB
    上传者: givh79_163.com
    微机原理及接口是一门实用性很强的课程,理工科类多数学科都开设有该课程。我公司于1999年开发出基于PCI总线的SXL-100系列32位微机原理与接口技术教学实验系统,此系统主要面向各大中专院校开设的《微机原理与接口技术》、《汇编语言》、《微机处理器控制技术》》等课程的实验教学及课程设计和毕业设计。……
  • 所需E币: 5
    时间: 2019-12-25 17:40
    大小: 108.93KB
    上传者: rdg1993
    微机原理及接口是一门实用性很强的课程,理工科类多数学科都开设有该课程。我公司于1999年开发出基于PCI总线的SXL-100系列32位微机原理与接口技术教学实验系统,此系统主要面向各大中专院校开设的《微机原理与接口技术》、《汇编语言》、《微机处理器控制技术》》等课程的实验教学及课程设计和毕业设计。……
  • 所需E币: 5
    时间: 2019-12-28 23:59
    大小: 174.5KB
    上传者: rdg1993
    本应用笔记说明了如何计算DS31256HDLC控制器的总线带宽。并展示了一个实验室实测的结果。同时演示了一个总线利用率速算表,该速算表如果需要可以索要。……