PCI總線(二)

5. PCI仲裁器工作原理

假設PCI仲裁器上接三個PCI設備,如下圖所示。

假定PCI1,PCI2,PCI3三個設備的優先級相同,上電後,PCI總線仲裁器會將PCI1設備的GNT1信號驅動爲低電平(有效)。即PCI1佔用PCI總線。如果此時PCI1上沒有數據傳輸,但PCI2上有數據要傳輸,PCI2設備就會驅動REQ2爲低電平來向仲裁器發出PCI總線使用請求。仲裁器在時鐘的上升沿採樣到REQ2信號,在下一個時鐘沿,PCI2FRAMEIRDY驅動爲低電平(FRAMEIRDY是所有PCI設備共用的),仲裁器在時鐘的上升沿採樣到這兩個信號後,就將GNT2驅動爲低電平,應答PCI2的請求,這樣,PCI2就擁有了PCI總線的使用權。

這裏有一個問題,爲什麼PCI總線仲裁器不在採樣到REQ2信號有效後立即將GNT2置低,將PCI總線的使用權交給PCI2設備,而是要等到PCI2設備的FRAMEIRDY信號有效後才執行呢? 這主要是仲裁器避免某些PCI設備申請總線使用權而實際上不使用,所以要等到FRAMEIRDY信號有效後(表示數據傳輸準備就緒)才授權使用總線。如果仲裁器在採樣到REQ2有效後,一直沒有采樣到FRAMEIRDY信號有效,仲裁器會不會一直等待下去呢?答案是不會,仲裁器內部有一個定時器,等到定時器超時後,仲裁器就不再等了。

仲裁規則:優先級高設備搶佔優先級低設備資源

假設三個PCI設備的優先級順序爲:PCI3>PCI2>PCI1

某個時刻,PCI1正在使用PCI總線傳輸數據,如果此時PCI2想要使用PCI總線,於是將REQ2驅動爲低,向PCI總線仲裁器申請PCI總線的使用權,此時REQ1REQ2都處於有效狀態,雖然PCI2的優先級高於PCI1,但是總線仲裁器不會馬上響應PCI2的請求。而是等待PCI1完成一次操作(注意:是一次操作,不是全部)後,PCI1FRAMEIRDY總線驅動爲高(每完成一次操作都需要進行此操作的)PCI2探測到PCI總線空閒後,將FRAMEIRDY信號驅動爲低。總線仲裁器採樣到這兩個信號有效後,將GNT1驅動爲高,同時將GNT2驅動爲低,將總線的使用權轉交給PCI2

此時,如果PCI1完成了全部傳輸,會將REQ1驅動爲高。

如果PCI1還有數據等待傳輸,那麼它會將REQ1一直保持爲低電平,一直進行總線申請。一直等待到PCI2完成所有操作後,還會將PCI總線的使用權釋放給PCI1

6.PCI操作類型

前面已經說過了,在FRAME信號有效後的第一時鐘週期,AD[31:0]總線上傳輸的是目標PCI器件的地址,C/BE[3:0]上傳輸的操作命令類型。如下圖所示。

7.PCI總線的讀寫時序

PCI總線寫時序如下圖所示

如上圖所示,在FRAME#有效後的第一個時鐘週期內,AD上傳輸的是要寫入目標PCI設備的地址信息,C/BE#上傳輸的是命令類型(I/O寫命令爲0011)DEVSEL#信號有效後,表明目標PCI設備已經被選擇到,IRDY#TRDY#同時有效後,主PCI設備向目標PCI設備中傳輸要寫入的數據,在第5個時鐘週期時,IRDY#TRDY#同時變爲無效狀態,AD總線上被插入一個等待週期,第6和第7個時鐘週期時,IRDY#有效,但是TRDY#無效,傳輸仍然不能有效進行,總線上被繼續插入兩個等待週期,第8個時鐘週期時,IRDY#TRDY#都有效,數據傳輸繼續。 PCI總線的讀時序如下圖所示。

讀操作同寫操作類似,只是在FRAME#有效後的第一個時鐘週期內,C/BE#上傳輸的是讀操作命令而已(I/O讀操作命令爲0010)

8. PCI設備的配置空間

所有除主橋之外的設備功能,必須實現配置地址空間,目前有三種類型的首部格式:首部類型0,用於全部除PCI橋之外的設備;首部類型1,用於PCI-PCI橋;首部類型2,用於Card Bus橋。

每個PCI設備的配置空間大小爲256字節,用來存放PCI配置文件,其中文件頭標識區佔64字節,下圖爲Type0類型首部。

1).廠家ID(Vender ID):用來區別每個PCI設備生產商,由PCI-SIG組織分配,0xFFFF表示無效。

2).設備ID:用來標識設備類型。

3).命令寄存器:爲發出PCI和響應PCI總線命令提供粗略控制。

4).狀態寄存器:用於記錄PCI總線的事件狀態信息。

5).版本標識:標識PCI設備的版本。

6).分類代碼:用來表示PCI設備的功能分類和特定的編程接口,爲只讀存儲器。

7).Cache行大小:指定系統中高速緩存cache一行的長度,以Dword爲單位,可讀寫。

8).持有定時器:指定PCI總線主設備的延時計時值,以PCI總線的時鐘爲單位。

9).配置類型:表示頭標區類型,以及是否爲多功能設備。

10).自測能力BISTBuilt-In self test,支持自測的PCI設備爲1,不支持的爲0

11).基地址0~5:實現PCI設備所有使用地址空間的再定位。

12).擴展ROM基地址:表示ROM再內存中的起始地址,執行其中代碼完成PCI初始化。

13).中斷線:報告PCI設備與系統中斷連接情況。

14).中斷引腳:表示PCI設備使用了哪些中斷引腳。

15).最短獲准時間:指定PCI設備對延時計數器的設定值。

16).最大等待時間:指定PCI設備對延時計數器的設定值。

9.PCI總線小案例

在測試PCI總線的TRDY信號時,發現該信號從低電平拉昇到高電平時太緩慢,如下圖所示。

 

問題分析:

 TRDYs/t/s信號,在前面已經講過了,s/t/s信號有如下特點:

  1).在某一個時刻只能由一個設備驅動;

  2).在釋放之前必須將該信號驅動到高電平,並且至少保持一個時鐘週期;

  3).其它設備必須等到該信號釋放至少一個時鐘週期後才能重新驅動它。

  4).該信號必須進行外部上拉處理。

經過分析該PCI總線的邏輯代碼得知,該邏輯在處理s/t/s信號時沒有完全按照規範要去來做,在將TRDY信號置爲低電平有效後直接釋放到高阻態,沒有將它驅動到高電平後再釋放,因此,TRDY在低電平位置被釋放到高阻態後,完全依靠外部的上拉電阻將其拉到高電平位置,由於外部上拉比較弱,導致我們上面見到的TRDY電平上升緩慢現象。修改邏輯代碼後,問題消失。

發佈了1 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章