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