而桥设备的主要作用是管理下游的PCI总线,并转发上下游总线之间的总线事务。PCI总线规范将PCI主从设备统称为PCI Agent设备。PCI规范也没有规定如何设计HOST主桥。在PCI总线中,还有一类特殊的设备,即桥设备。本书重点介绍PCI桥,而不介绍其他桥设备的实现原理。PCI桥的出现使得采用PCI总线进行大规模系统互连成为可能。其中对PCI设备配置空间的访问可以从上游总线转发到下游总线,而数据传送可以双方向进行。......
2023-10-20
如上文所述,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所示。
图3-3 Dock插座与笔记本的连接关系
当笔记本与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桥。(www.chuimin.cn)
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窗口[36]命中时,该PCI桥将使用正向译码方式接收该总线事务,并根据实际情况决定是否将这个总线事务转发到Secondary Bus。
图3-4 PCI桥使用的正向译码方式
当一个总线事务是从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主桥将接收这个总线事务,并将其转换为存储器域的读写总线事务,与主存储器进行数据交换。
有关PCI Express体系结构导读的文章
而桥设备的主要作用是管理下游的PCI总线,并转发上下游总线之间的总线事务。PCI总线规范将PCI主从设备统称为PCI Agent设备。PCI规范也没有规定如何设计HOST主桥。在PCI总线中,还有一类特殊的设备,即桥设备。本书重点介绍PCI桥,而不介绍其他桥设备的实现原理。PCI桥的出现使得采用PCI总线进行大规模系统互连成为可能。其中对PCI设备配置空间的访问可以从上游总线转发到下游总线,而数据传送可以双方向进行。......
2023-10-20
在Linux系统中,PCI设备使用的irq号存放在pdev→irq参数中,该参数在Linux设备驱动程序进行初始化时,由pci_enable_device函数设置。本书在第12.3.2节曾简要介绍过这个函数,下文进一步说明如何使用该函数设置PCI设备的irq号。在acpi_prt_list链表中存放PCI总线的中断路由表,本章将在第15.1.2节进一步介绍该表。其中PCI设备使用低电平触发方式。值得注意的是,PCI设备的INTA#信号首先与LPC的PIRQA#信号相连,而PIRQA#信号再与I/O APIC1的IRQ_PIN16相连。......
2023-10-20
PCI桥可以采用Combining、Merging和Collapsing三种方式,优化数据通过PCI桥的效率。PCI桥进行这种Combining操作时需要注意数据传送的“顺序”。使用PCI桥的Collapsing方式是,具有某些条件限制,在多数情况下,PCI桥不能使用Collapsing方式合并多个存储器写总线事务。PCI规范仅是提出了Collapsing方式的概念,几乎没有PCI桥支持这种数据合并方式。......
2023-10-20
图12-11 Capric卡的DMA写过程首先处理器填写Capric卡的WR_DMA_ADR、WR_DMA_SIZE和DCSR2寄存器,经过延时D0之后,这些命令陆续到达Capric卡。Capric卡收到处理器的DMA写请求后,将向RC连续发送存储器写TLP,并由RC将数据写入到主存储器。处理器收到MSI报文后,将执行中断处理程序,Capric卡的中断处理例程通过RC读取中断控制状态寄存器INT_REG,并结束整个DMA写操作。首先处理器填写Capric卡的寄存器启动DMA读。......
2023-10-20
在一段程序中,存在大量的分支预测指令,因而在某种程度上增加了指令Fetch的难度。但是分支预测单元并不会每次都能正确判断分支指令的执行路径,这为指令Fetch制造了不小的麻烦,在这个背景下许多分支预测策略应运而生。在PowerPC处理器中,条件转移指令“bc”表示Taken;而“bc-”表示Not Taken。BTB的功能相当于存放转移指令的Cache,其状态机转换也与Cache类似。转移指令B执行完毕后,将实际执行结果Rc更新到BHR寄存器中,并同时更新PHT中对应的Entry。......
2023-10-20
如图8-6所示,Detect状态由Detect.Quiet、Detect.Active两个子状态组成。在正常情况下,PCIe链路将从Detect状态迁移到Polling状态。而在Detect状态中,PCIe设备的发送逻辑TX将直接进入到“Electrical Idle”状态,并不会使用Idle序列通知对端设备的接收逻辑RX。当PCIe设备处于Detect.Quiet状态超过12ms之后,或者检测到PCIe链路上的任何一个Lane退出“Electrical Idle”状态时,PCIe设备将进入Detect.Active状态。......
2023-10-20
而PCI总线的突发传送仍然存在缺陷。为此PCI-X总线使用基于数据块的突发传送方式,发送端以ADB为单位,将数据发送给接收端,一次突发读写为一个以上的ADB。采用这种方式,接收端可以事先预知是否有足够的接收缓冲,接收来自发送端的数据,从而可以及时断连当前总线周期,以节约PCI-X总线的带宽。因此在PC领域和嵌入式领域很少有基于PCI-X总线的设备,PCI-X设备仅在一些高端服务器上出现。因此本节不对PCI-X总线做进一步描述。......
2023-10-20
MSI Capability结构共有四种组成方式,分别是32和64位的Message结构,32位和64位带中断Masking的结构。MSI Capability寄存器的结构如图10-1所示。图10-1 MSI Capability结构●Capability ID字段记载MSI Capability结构的ID号,其值为0x05。表10-1 MSI Cabalibities结构的Message Control字段[67] 此时PCI设备配置空间Command寄存器的“Interrupt Disable”位为1。当MSI En able位有效时,该字段存放MSI报文使用的数据。该字段需要与Mask Bits字段联合使用。......
2023-10-20
相关推荐