天天看點

PCI總線學習(二)---> PCI總線仲裁

幻燈片 9

PCI總線學習(二)---> PCI總線仲裁

在一定時間内,可能有多個bus master請求使用總線傳輸資料,每個請求總線的master都會assert它的REQ#信号,來告訴仲裁器他要申請使用總線,仲裁器一般內建于晶片組中。

幻燈片 10

PCI總線學習(二)---> PCI總線仲裁

如果仲裁器是可程式設計的,啟動配置軟體可以通過讀取Max_Lat配置寄存器來決定每個bus mater的優先級。如果總裁器件不支援程式設計,則可以忽略這個寄存器。

幻燈片 11

PCI總線學習(二)---> PCI總線仲裁

A,B是需要經常通路總線的,XYZ是不經常通路總線的,是以仲裁器決定的他們通路總線的順序可能為:

A->B->X->A->B->Y->A->B->Z.。。。

幻燈片 12

PCI總線學習(二)---> PCI總線仲裁

如果一個master發起了一個transaction之後,立即又要進行另一個transaction,則它會在assert了FRAME#信号,開始目前transaction後繼續保持REQ#信号。否則,master會deassert REQ#信号。

      隐藏總線仲裁:PCI規範允許目前bus master進行資料傳輸的同時進行總線仲裁,如果仲裁器決定将下次transaction的總線所有權給另一個master,則它會移除目前master的GNT#信号,而向下一個總線所有者發出GNT#信号。

      Bus parking:總線仲裁可以設計實作bus parking機制,當總線處于空閑狀态時,仲裁器可以assert一個預設的bus master的GNT#信号,這樣,當這個bus master申請總線的時候,它可以立即得到總線所有權。如果接下來這個bus master還要用總線,則它不需要assert REQ#信号,而隻需看一下如果總線處于空閑狀态并且自己的GNT#信号處于assert狀态,那麼它就可以立即發起transaction。将bus park在哪個master上取決于仲裁器的設計,spec推薦将bus park在最後一個使用總線的master上。

如果仲裁器實作了bus parking,則當總線空閑時,bus park在的那個master要負責驅動AD,C/BE 和par信号,防止它們懸空。如果仲裁沒有實作bus parking機制,則仲裁器要負責這件事情。   

幻燈片 13

PCI總線學習(二)---> PCI總線仲裁

LT (Master Latency Timer):定義了bus master在獲得了總線所有權,并開始了一次transaction後,它允許保持總線所有權的最少時間。

工作方式:發起transaction後,master的LT初始化為寫入的起始值。接下來在每個時鐘上升沿,LT減一。如果master在進行一次transaction時,仲裁器移除了它的GNT# 信号,此時,目前LT尚未過期的話(LT>0),則它可以繼續擁有總線,直到結束了這次burst transaction或者LT過期才釋放總線。

Min_Gnt (read only) 和 PCI bus speed 共同決定LT值。

幻燈片 14

PCI總線學習(二)---> PCI總線仲裁

Example of Arbitration

Clock1的上升沿,仲裁器檢測到master A申請總線,于是在第一個clock中assert GNT# A,在第一個clock中master B開始申請使用總線。

Clock2的上升沿,master A檢測到自己的GNT# asserted,表明總線已經分給自己,并且FRAME#信号和IRDY#信号均為deassert狀态,表明總線空閑,是以在clock2期間assert FRAME#信号開始第一個transaction,并在address phase驅動起始位址和command資料到AD和C/BE線上。因為master A還有一個transaction要進行,是以他保持它的REQ#信号處于assert狀态。總裁器在上升沿時檢測到兩個master均在申請總線,于是進行總線仲裁,仲裁結果是master B勝,是以在clock2期間deassert GNT# A,仲裁器會延時一個周期assert GNT#B,因為如果同時的話可能會引起AD線的競争(總線技術上可能處于idle)

Clock3的上升沿,master A檢測到自己的GNT#信号被deassert,即總線被強占,但由于它的LT尚未過期,是以可以繼續擁有總線,master A開始第一個DATA phase write,drive data和byte enable信号到總線上,并assert IRDY#信号表明資料已經準備好。Clock3期間,仲裁器assert GNT#B。

Clock4的上升沿,IRDY#信号和TRDY#信号均為asserted,第一個data傳輸完成。Master B會在每個clock上升沿持續檢測它的GNT#信号直到它取得總線。

Clock5的上升沿IRDY#信号和TRDY#信号均為asserted,第二個data傳輸完成。Clock5期間,master A 保持IRDY#  asserted 并deassert FRAME#信号,表明這是最後一個data phase。

Clock6的上升沿,IRDY#信号和TRDY#信号均為asserted,第三個data傳輸完成。Clock6期間,master A deassert IRDY#信号,總線傳回到空閑狀态。

Clock7的上升沿,master B檢測到總線空閑,并且自己的GNT#處于assert狀态,表明它擁有總線,于是在clock7期間關閉REQ#信号并assert它的FRAME#信号開始transaction,master B驅動位址和command指令到總線上。

Clock8的上升沿,仲裁器檢測到master B REQ#deassert而master A REQ#still asserted,則仲裁器在clock8期間deassert master B的GNT#并assert master A的GNT#。Clock8期間,master B deassert它的FRAME#信号表明這是它唯一的data phase,并驅動data和byte enable到總線,它assert它的IRDY#信号表明資料已經準備好。

Clock9的上升沿,,IRDY#信号和TRDY#信号均為asserted,data傳輸完成。在clock9期間,master B deassert它的IRDY#,總線傳回空閑狀态。

Clock10的上升沿,master A檢測到總線空閑,并且自己的GNT#處于assert狀态,于是在clock10期間deassert它的REQ#信号,并assert它的FRAME#信号開始它的第二次transaction。

繼續閱讀