pci匯流排是一種位址和資料復用的匯流排,即位址和資料占用同一組訊號線ad。pci匯流排的所有訊號都與時鐘訊號同步,及所有的訊號的變化都發生在時鐘的上公升沿,或者在時鐘上公升沿進行取樣。
如下圖所示,除了時鐘訊號clk和資料位址復用訊號ad之外,pci匯流排至少還應包括frame#(用於表示一次資料傳輸的起始)、c/be#(command/byte enable)、irdy#(initiator ready for data)、trdy#(target ready)、desel#(device selec,片選訊號,用於選擇pci裝置)和gnt#(grant)訊號等。
下面來介紹乙個簡單的例子,主機接收來自特定從機的資料。
如上圖所示:
1、在第乙個時鐘上公升沿,frame#和irdy#都為inactive,表明匯流排當前處於空閒狀態。與此同時,某個裝置的gnt#訊號處於active,表明匯流排總裁器已經選定當前裝置為下乙個initiator(可以理解為主機)。
2、在第二個時鐘上公升沿,frame#被initiator拉低,表明新的事務(transaction)已經開始。與此同時,位址和命令被依次傳送到ad上,匯流排上面的所有其他裝置(從機)都會鎖存這些資訊,並檢查位址和命令是否與自己匹配。
3、在第三個時鐘上公升沿,irdy#處於active狀態,表明主機準備就緒,可以接收資料了。ad訊號上的旋轉的箭頭表示ad訊號目前處於三態狀態(處於輸出和輸入的轉換狀態),即turn‐around cycle。需要注意的是,此時的trdy#應當處於inactive狀態,以保證turn‐around cycle順利進行。
4、在第四個時鐘上公升沿,pci匯流排上的某個從機確認身份,並依次將devsel#訊號和trdy#拉低,並將相應的資料輸出到ad上。此時,frame#訊號為active狀態,表明這並不是最後乙個資料。
5、在第五個時鐘上公升沿,trdy#處於inactive狀態,表明從機尚未就緒,因此所有的操作暫緩乙個時鐘週期(或者說插入了乙個wait state)。pci匯流排最多允許8個這樣的wait state。
6、在第六個時鐘上公升沿,從機向主機傳送第二個資料。此時,frame#訊號依舊為active狀態,表明這並不是最後乙個資料。
7、在第七個時鐘上公升沿,irdy#處於inactive狀態,表明主機尚未就緒,再次插入乙個wait state。但是此時從機依舊可以向ad上傳送資料。
8、在第八個時鐘上公升沿,ad上的第三個資料被傳送至主機,由於此時frame#訊號被拉高,即inactive,表明這是本次事務(transaction)的最後乙個資料。此後,所有的控制訊號均被拉高,處於inactive狀態,ad、frame#和c/be#處於三態狀態。
乙個PCI中斷非同步的問題
最近發現由於pci資料傳輸錯誤導致io request得到的資料不正確,這種現象讓我們思考,為什麼系統都已經發現了pci錯誤,io request還能正確結束呢?按照慣例思考,pci傳輸出錯,io request就應該fail掉,但是,事實不是這樣。難道這個問題和pci的中斷非同步有關係?因此,這裡...
乙個典型的集群配置
3 配置集群 乙個典型的集群配置 三颱機器a 172.16.7.110 b 172.16.7.119 c 172.16.7.911 機器a 包含兩個實際的server 乙個是管理伺服器admin 乙個是 伺服器proxy 機器b 包含兩個server 受控伺服器,node1 node2 機器c 同機...
HMAC的乙個典型應用
hmac的乙個典型應用是用在 挑戰 響應 challenge response 身份認證中,1 先由客戶端向伺服器發出乙個驗證請求。2 伺服器接到此請求後生成乙個隨機數並通過網路傳輸給客戶端 此為挑戰 3 客戶端將收到的隨機數提供給epass,由epass使用該隨機數與儲存在epass中的金鑰進行h...