天天看點

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總線指令

繼續閱讀