基于PCD656的高速PCI總線接口的設(shè)計(jì)與實(shí)現(xiàn)
4 局部總線端設(shè)計(jì)
本設(shè)計(jì)中,局部總線端采用了C模式。C模式下可配置3種數(shù)據(jù)傳輸方式:?jiǎn)沃芷诜绞剑⊿ingle Cycle Mode)、4字方式(Brust-4 Mode)和連續(xù)突發(fā)傳輸方式(Continuous Mode),在本設(shè)計(jì)中采用了連續(xù)突發(fā)方式,可以有效地提高輸出效率。
PCI9656在局部總線為為主設(shè)備,始終占用局部總線,局部總線端的FPGA始終響應(yīng)PCI9656的操作。方案中使用PCI9656的DMA傳輸模式,在本地端不需要進(jìn)行地址譯碼,因此可以對(duì)PCI9656的控制信號(hào)進(jìn)行簡(jiǎn)化處理,PCI9656的局部端主要控制信號(hào)如下
ADS#:一次總線訪問(wèn)開(kāi)始;
Blast#:總線訪問(wèn)結(jié)束;
LW/R#:讀寫(xiě)控制信號(hào);
Ready#:從設(shè)備準(zhǔn)備好信號(hào),有效時(shí)表示總線訪問(wèn)進(jìn)行中;
LHOLD:PCI9656占用本地總線申請(qǐng)信號(hào);
LHOLDA:占用本地總線應(yīng)答信號(hào);
Wait#:主設(shè)備傳輸暫停信號(hào);
EOT#:數(shù)據(jù)傳輸異常中止信號(hào),用于FIFO溢出或空時(shí)中斷數(shù)據(jù)傳輸;
Lint#:用于引起CompaetPCI總線端的中斷信號(hào);
LRST#:本地總線復(fù)位信號(hào);
CCS#:配置寄存器選擇信號(hào)。
在DMA傳輸過(guò)程中主要關(guān)心的信號(hào)可簡(jiǎn)化為:ADS#、Blast#、LW/R#、Ready#、LHOLD、LHOLDA,如圖3所示。
圖3 PCI局部總線控制時(shí)序
圖3中,lclk為本地總線時(shí)鐘,當(dāng)PCI9656要發(fā)起一次DMA操作時(shí),先發(fā)送lhold信號(hào)申請(qǐng)本地總線,若本地總線空閑則FPGA發(fā)出lholda信號(hào)響應(yīng)PCI9656,然后PCI有效ads_n信號(hào)以示總線傳輸開(kāi)始,F(xiàn)PGA使ready_n有效以示總線傳輸正在進(jìn)行中,此時(shí)本地?cái)?shù)據(jù)通過(guò)局部數(shù)據(jù)線傳送到PCI總線,或著數(shù)據(jù)由PCI總線傳送到局部邏輯。一次傳輸結(jié)束時(shí)PCI使blast_n信號(hào)有效并使lhold信號(hào)無(wú)效,然后FPGA使lholda信號(hào)和ready_n信號(hào)無(wú)效,一次DMA傳輸完成。傳輸中若是DMA讀操作則lwr信號(hào)拉低,若為寫(xiě)操作則拉高。
本地總線位寬為32位,因此本地總線理論速度為264MB·s-1,由于應(yīng)用程序的效率問(wèn)題和傳輸中一些無(wú)效狀態(tài)的存在,目前PCI總線平均速率達(dá)到212 MB·s-1,可以滿足目前高速數(shù)據(jù)采集、傳輸對(duì)總線傳輸速度的要求。
PCI9656本地總線時(shí)序設(shè)計(jì)中需要注意blast_n信號(hào)有效說(shuō)明為突發(fā)傳輸最后一個(gè)時(shí)鐘周期,此時(shí)ready_n信號(hào)仍然為有效,否則會(huì)造成總線等待;在正常讀寫(xiě)訪問(wèn)中CCS#信號(hào)應(yīng)置高,否則總線訪問(wèn)將指向配置空間而非內(nèi)存或I/O空間。
5 結(jié)束語(yǔ)
利用PCI9656和FPGA實(shí)現(xiàn)了一種高速PCI總線接口,較全面地論述了總線驅(qū)動(dòng)開(kāi)發(fā)和局部時(shí)序設(shè)計(jì)的過(guò)程。這種設(shè)計(jì)提高了總線傳輸速度,為高速數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)創(chuàng)造了條件。
評(píng)論