PCI協定
- PCI基本協定
-
- 什麼是PCI?
- PCI總線接口及傳輸協定
- PCI Bus波形
PCI基本協定
什麼是PCI?
PCI是一種總線協定,目PCI-E的使用範圍很廣,而PCI是早于PCI-E的基本協定,很多主流的CPU架構中同樣在使用。
PCI的工作頻率有:33MHz,66MHz和133MHz三種;總線位寬有:32bit和64bit兩種,是以說PCI可以支援不同的工作帶寬。
PCI總線接口及傳輸協定

接口名稱 | 信号類型 | 描述 |
---|---|---|
AD[31:0]/AD[63:0] | t/s | 資料和位址線 ,用作傳輸位址和資料,位寬為32bit或者64bit |
C/BE[3:0]/C/BE[7:0] | t/s | 用于傳輸command和byte enable,由于位址線可能為64bit,是以BE需要支援8bit位寬 |
PAR/PAR64 | t/s | 校驗位,奇偶校驗 |
FRAME# | s/t/s | 低有效,由高變低表示一組資料的傳輸開始 |
IRDY# | s/t/s | 低有效,表示master準備好傳輸資料 |
TRDY# | s/t/s | 低有效,表示slave準備好發送資料 |
STOP# | s/t/s | 低有效,表示slave請求master停止目前的transaction |
LOCK# | s/t/s | 低有效,這個不是太懂。。 |
DEVSEL# | s/t/s | 作為input,表示device被選中,作為output表示device解碼之後發現自己被選中 |
IDSEL | input | 用作configuration write或者read的device的選擇信号 |
PERR# | s/t/s | 表示奇偶校驗錯誤 |
SERR# | o/d | 表示重大錯誤,是open drain信号類型 |
REQ# | t/s | 表示device向仲裁請求占用總線 |
GNT# | t/s | 表示device被仲裁授權 |
信号中帶#表示低有效。
對于open drain類型的信号:同一條總線上所有device共同驅動,隻要有一個device有效,那麼信号輸出為有效。
t/s也就是三态信号,沒有device驅動時就是高阻狀态。
s/t/s信号是sustained tri-state信号,就是device釋放這個信号之前必須要先拉高為1再釋放為z。
PCI Bus波形
上圖是基本讀操作:
2T:
FRAME# 從1變0,AD傳輸讀位址,C/BE傳輸command;
3T:
turn_around, 此時C/BE為byte_enable,slave可以根據byte_enable準備資料;
4T:
IRDY,TRDY同時有效,表示slave将read data傳回給了master.
5T:
IRDY有效,表示master還有資料需要讀取,TRDY無效,表示slave沒有準備好資料;
6T:
IRDY,TRDY同時有效,表示完成了1T資料的傳輸;
7T:
IRDY無效,TRDY有效,插入wait cycle;
8T:
FRAME# 無效,表示這是master傳輸的最後1T資料。
turn_around: 同一條bus可能被很多device驅動,turn_around 就是用于不同device之間的轉換。
wait :IRDY或TRDY無效,傳輸暫停。
可預取:可預取的概念,對讀transaction的影響很大,第一:什麼叫可預取?可預取就是表示目前的這個存儲區域多次的讀操作不會造成不可挽回的影響。比方說FIFO,如果我需要讀1個data,device讀3個data,那麼就會造成2個data的損失。第二:可預取對讀transaction的影響?首先要明确,pci協定發起一筆交易,隻提供了讀位址并未提供讀長度,也就是說slave并不知道master要讀多少資料。針對不可預取的區域,每次slave都隻讀一個data(并且在BE資訊有效後去讀), 如果master沒有将Frame置為1(表示還有資料需要傳輸),slave就會插入wait,之後再去讀address+1處的資料,就會大大降低讀資料的速度。如下圖。
上圖是基本寫操作:
2T:
FRAME# 從1變0,AD傳輸讀位址,C/BE傳輸command;
3T:
傳輸第1T資料;
4T:
傳輸第2T資料;
5T:
wait state;
6T:
wait state;
7T:
wait state;
8T:
FRAME# 無效,表示這是master傳輸的最後1T資料。
注意以下問題:
master需要傳輸3T資料,那麼在5T時,為什麼沒有将FRAME#拉高表示還剩最後1T資料?
這是因為5T時,IRDY無效,如果FRAME也無效,那麼總線會進入IDLE狀态,仲裁可能會在下一T将控制權交給其他的device.
在5T時,AD線的data還未準備好,但是C/BE線上的byte_enable以及準備好了,這是因為spec中規定即使master要進入wait狀态,也不能延遲byte_enable的輸出。
後續還會整理PCI中的産銷模型,報錯機制和配置空間等。