PCI總線目標控制器的設(shè)計
狀態(tài)機共分為10個狀態(tài),下面對每個狀態(tài)的意義及狀態(tài)跳轉(zhuǎn)條件的詳細說明:
目標空閑(idle):當PCI總線有新的命令但控制器正忙于未完成的數(shù)據(jù)傳輸或寄存器配置時,狀態(tài)機跳轉(zhuǎn)到check_abort;控制器空閑但寄存器內(nèi)有記錄的未完成的讀操作,狀態(tài)機跳轉(zhuǎn)到check_addr;PCI總線上有數(shù)據(jù)傳輸要求而又未出現(xiàn)上面的兩種情況,狀態(tài)機跳轉(zhuǎn)至cmd_start。
啟動命令解碼(cmd_start):滿足放棄條件如奇偶校驗錯誤、強制放棄等條件時,狀態(tài)機跳轉(zhuǎn)至start_abort;不滿足放棄條件,若目標設(shè)備沒有突發(fā)傳輸能力,狀態(tài)機跳轉(zhuǎn)至start_single,若目標設(shè)備有突發(fā)傳輸能力且主設(shè)備發(fā)起的是寫命令,狀態(tài)機跳轉(zhuǎn)至start_multiple,如果目標設(shè)備有突發(fā)傳輸能力且主設(shè)備發(fā)起的是延遲讀命令,狀態(tài)機跳至start_retry;上述情況均未發(fā)生,狀態(tài)機跳轉(zhuǎn)至start_wait_rd1。
檢查地址匹配(check_addr):滿足放棄條件如奇偶校驗錯誤、強制放棄等條件時,狀態(tài)機跳轉(zhuǎn)至start_abort;如果地址與之前的請求地址一致,對目標設(shè)備進行延遲讀,狀態(tài)機跳轉(zhuǎn)至start_multiple;如果地址不一致狀態(tài)機跳轉(zhuǎn)至start_retry。
放棄條件檢測(check_abort):滿足放棄條件如奇偶校驗錯誤、強制放棄等條件時,狀態(tài)機跳轉(zhuǎn)至start_abort;不滿足條件,狀態(tài)機轉(zhuǎn)至start_retry。
讀等待狀態(tài)1(start_wait_rd1):如果FIFO中有了待傳輸?shù)臄?shù)據(jù),狀態(tài)機跳轉(zhuǎn)至start_wait_rd2;否則一直等待在狀態(tài)start_wait_rd1。
讀等待狀態(tài)2(start_wait_rd2):FIFO中已經(jīng)有了所要讀取的數(shù)據(jù),狀態(tài)機跳轉(zhuǎn)至start_multiple。
目標設(shè)備放棄(start_abort):一直維持該狀態(tài)直到主設(shè)備聲明傳輸結(jié)束,狀態(tài)機轉(zhuǎn)至idle。
單數(shù)據(jù)傳輸(start_single):如果主設(shè)備聲明最后一個數(shù)據(jù)傳輸,狀態(tài)機跳轉(zhuǎn)至idle;如果主設(shè)備繼續(xù)對該目標設(shè)備進行讀寫操作,狀態(tài)機跳轉(zhuǎn)至start_retry。
數(shù)據(jù)突發(fā)傳輸(start_multiple):如果剩下最后一個字節(jié)傳輸,狀態(tài)機跳轉(zhuǎn)到idle;如果地址信息無效或地址越界,狀態(tài)機跳轉(zhuǎn)到start_retry;如果接收FIFO幾乎滿了而PCI主設(shè)備繼續(xù)往其中寫入數(shù)據(jù),狀態(tài)機跳轉(zhuǎn)到start_retry;其它情況狀態(tài)機保持start_multiple狀態(tài)不變。
重試(start_retry):一直維持該狀態(tài)直到主設(shè)備聲明傳輸結(jié)束,狀態(tài)機轉(zhuǎn)至idle。
3數(shù)據(jù)通路實現(xiàn)
目標控制器的數(shù)據(jù)通路具體可通過兩種類型的目標接口實現(xiàn):寄存器型目標接口和FIFO型目標接口。
3.1寄存器型目標接口
每個PCI功能擁有64個配置雙字的單元[1](前16個雙字的格式和用法由PCI規(guī)范預(yù)定),保留用于實現(xiàn)配置寄存器。本地可以有一些功能設(shè)備,這些設(shè)備都有相應(yīng)的控制/狀態(tài)寄存器,PCI總線上的主設(shè)備要對這些控制寄存器進行編程,進而控制相應(yīng)的功能設(shè)備完成特定功能。兩類寄存器可以歸為一個數(shù)據(jù)通道實現(xiàn),寄存器型目標接口就為本地的功能設(shè)備提供了這樣一種接口,使得PCI總線上的主設(shè)備可以通過它來訪問功能設(shè)備的寄存器。由于PCI總線主設(shè)備的訪問目標是一些寄存器,所以該接口無需支持突發(fā)傳輸,主設(shè)備每一次訪問最多只涉及到32位的數(shù)據(jù)傳輸。
3.2FIFO型目標接口
FIFO型的目標通道主要用于大量的數(shù)據(jù)傳輸,可以將本地的存儲器掛接在該接口上,這樣PCI總線主設(shè)備可以通過FIFO型目標通道訪問到本地的存儲器,針對PCI主設(shè)備對本地存儲器的讀和寫操作,設(shè)置了兩個異步FIFO,讀FIFO和寫FIFO。其結(jié)構(gòu)如圖3
命令解碼器和目標狀態(tài)機組成了該接口的控制單元。FIFO型目標接口由地址解碼器、讀寫控制單元和讀/寫異步FIFO四部分組成,在控制部件的協(xié)調(diào)控制下,共同完成PCI總線上的其它主設(shè)備對本地存儲器的數(shù)據(jù)存儲或讀取。
讀寫控制單元:主要用于目標延遲讀的控制,存儲并比照前后數(shù)據(jù)傳輸請求的地址和命令信息,聲明本次傳輸請求是否為有效的延遲讀請求。
讀/寫FIFO:異步FIFO,用于緩存PCI主設(shè)備到本地存儲器的讀寫數(shù)據(jù)。
地址解碼器:解碼PCI總線上的地址信息,識別對FIFO型目標接口的訪問。對于地址解碼器的實現(xiàn),在最初PCI系統(tǒng)分配地址時,F(xiàn)IFO型的目標接口被分配到某一段地址區(qū)內(nèi),通過地址翻譯將其映射到本地的系統(tǒng)中[4]。
![](http://editerupload.eepw.com.cn/fetch/20140414/239050_2_0.jpg)
圖3FIFO型目標接口邏輯結(jié)構(gòu)
對PCI主設(shè)備發(fā)起的寫操作,數(shù)據(jù)會先以PCI時鐘寫入接口內(nèi)的寫FIFO,同時PCI控制器會通知本地存儲器控制器有數(shù)據(jù)寫入。本地存儲器控制器待FIFO中達到一定數(shù)據(jù)量時以自己的時鐘讀取FIFO中的數(shù)據(jù)存入本地存儲器,如果FIFO讀空,存儲器會暫停等待直到FIFO中有新的數(shù)據(jù)寫入,才進行讀取。
對PCI主設(shè)備發(fā)起的讀本地存儲器的操作,為了提高讀數(shù)據(jù)的效率,設(shè)計中根據(jù)不同數(shù)據(jù)傳輸?shù)奶攸c,把讀操作劃分為兩個類型,即立即讀和延遲讀。
?。?)立即讀:在PCI總線主設(shè)備發(fā)起讀操作后,一直占用PCI總線等待,PCI總線控制器向本地存儲器請求對應(yīng)的數(shù)據(jù),直到本地存儲器將數(shù)據(jù)寫入讀FIFO中,PCI控制器讀取FIFO中數(shù)據(jù)開始PCI總線上的數(shù)據(jù)傳輸。這種讀類型一般適用于進行數(shù)據(jù)量小的傳輸且本地存儲器可以在較短的時間內(nèi)將要求的數(shù)據(jù)送到PCI總線。
?。?)延遲讀:PCI總線主設(shè)備的讀請求到達PCI目標總線控制器時,控制器鎖存地址和命令信息,并回應(yīng)主設(shè)備讓它重試。同時PCI目標總線控制器向本地存儲器請求數(shù)據(jù),本地存儲器將數(shù)據(jù)寫入總線控制器中的FIFO中。此時如果PCI總線上的主設(shè)備重試先前的數(shù)據(jù)傳輸請求,PCI目標控制器就可以響應(yīng)請求將數(shù)據(jù)發(fā)送到PCI總線上。這個過程中,PCI總線主設(shè)備在收到重試回應(yīng)后就會釋放PCI總線,允許其它的主設(shè)備占用總線進行數(shù)據(jù)傳輸,這樣從而提高了總線的利用率。圖4給出了PCI主設(shè)備突發(fā)讀時采用延遲讀的仿真結(jié)果圖
![](http://editerupload.eepw.com.cn/fetch/20140414/239050_2_1.jpg)
圖4突發(fā)讀時仿真波形
4結(jié)束語
本文基于PCI2.2總線規(guī)范完成了通用PCI目標控制器的RTL級設(shè)計。經(jīng)驗證設(shè)計完全實現(xiàn)了目標控制器的功能,目前已通過了FPGA原型驗證并應(yīng)用到CMOS圖象傳感器的數(shù)據(jù)傳輸中。在后續(xù)的開發(fā)中,可以考慮在控制器內(nèi)部加入電源管理模塊,進一步降低PCI目標控制器的功耗。
本文的創(chuàng)新點:該設(shè)計方案將目標控制器整體分為控制邏輯和數(shù)據(jù)通道兩部分,并根據(jù)目標設(shè)備的不同類型,在數(shù)據(jù)通道內(nèi)實現(xiàn)不同的目標接口,并引入了立即讀和延遲讀機制實現(xiàn)數(shù)據(jù)傳輸,使整個設(shè)計取得了較高的效率。
參考文獻
[1]TomShanley,DonAnderson著.林輝等譯.PCI系統(tǒng)結(jié)構(gòu).電子工業(yè)出版社,2000.
[2]沈涵飛,甘萌.PCI總線目標控制器的設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計.2004,25(11):2101~2104
[3]施少敏,馬彥恒.基于接口芯片PCI9030的PCI總線接口卡的設(shè)計[J].微計算機信息.2006,11-2:295~297
[4]TinooshMohsenin.DesignandEvaluationofFPGA-BasedGigabit-Ethernet/PCINetwordInterfaceCard.MasterDegreeDissertationofRice
University.2004:71~74
[5]JanickBergeron,WritingTestbenches-FunctionalVerificationofHDLModels.Boston,KluwerAcademicPublisher,2000.
評論