天天看点

PCI总线学习(三)---> PCI总线命令

幻灯片 15

PCI总线学习(三)---> PCI总线命令

PCI 命令有4bits,分为IO操作,memory操作,配置操作以及其他操作。

幻灯片 16

PCI总线学习(三)---> PCI总线命令

各个设备的中断引脚会通过router连到中断控制器的IRQ输入上,当有设备发出中断请求时,中断控制器会通过INTR线发信号给处理器,处理器收到信号,如果是X86处理器会产生两次IA bus cycle,host/PCI bridge收到处理器命令,会发两次IA transaction到中断控制器,第一次是命令,中断控制器将同时发出的IRQ请求分个优先次序,选择要处理的请求,第二次要求中断控制器返回中断向量,处理器得到中断向量后,到内存中的中断表中去读取相应的中断服务起始地址,从而转到中断服务程序进行服务。P6处理器之后产生一个IA bus cycle,host/PCI bridge收到这个IA后会产生两次连续IA到中断控制器,模拟X86处理器行为。

幻灯片 17

PCI总线学习(三)---> PCI总线命令

幻灯片 18

PCI总线学习(三)---> PCI总线命令

幻灯片 19

PCI总线学习(三)---> PCI总线命令

当target收到Special Cycle命令时,它不会assert DEVSEL# 信号,此时减解码桥如果发现没有target通过assert DEVSEL#信号来claim transaction,也不会将transaction传到扩展总线上。

幻灯片 20

PCI总线学习(三)---> PCI总线命令

address phase阶段,由于目标为总线上的所有的设备,所以AD信号不是一个合法的地址,只是一个stable pattern, C/BE信号为special cycle命令。Data phase阶段,AD线上为相应的消息,当传shutdown和halt消息时,byte enable信号为BE#[1:0]enable,而X86-specific message时是BE#[3:0]enable。

幻灯片 21

PCI总线学习(三)---> PCI总线命令

使用MWI命令的bus master必须实现cache line Size寄存器,使用MR,MRL,MRM命令的bus master推荐实现cache line Size寄存器。如果没有实现,则默认16或者32bytes。

幻灯片 22

PCI总线学习(三)---> PCI总线命令

幻灯片 23

PCI总线学习(三)---> PCI总线命令

假设处理器往prefechablememory中的buffer1中写入了数据,并指示bus master经过bridge去读取并处理这部分数据。Bus master用MRL或者MRM命令去读取数据,bridge看到这个命令开始进行数据预取,预取的数据可能超过了buffer1的界限,到了buffer2中。假设bus master读完有用的数据后,bridge没有丢弃bus master没用到的数据。那么下一次处理器又在buffer2区域写入数据并指示bus master去读取并处理这部分数据,此时,bus master看到bridge中有buffer2的数据,就会直接读之前预取的数据,而这部分数据并不是最新的数据。

幻灯片 24

PCI总线学习(三)---> PCI总线命令

问题:主存中的一段cache对齐的数据在cpu的cache中被修改,之后,某个bus master又要更新相同的一段数据,这时一种方法是host/PCI bridge先把modified line中的数据写到主存中,再将bus master中最新的数据写到主存中。效率低。可以用WMI命令。当bus master用WMI命令向主存写入数据时,说明bus master保证写入的是一个完整的cache line,这时,host/PCI bridge可以立即接受master的line数据给来更新主存对应的数据。处理器只要将对应的modified line设为无效就可以了,效率更高。用memory write命令不行,因为memory write命令不知道会写入多少数据。

幻灯片 25

PCI总线学习(三)---> PCI总线命令

继续阅读