基于IP核的PCI總線接口設(shè)計與實現(xiàn)
pci總線是高性能的32/64位同步總線,具有嚴格的規(guī)范保證數(shù)據(jù)傳輸?shù)目煽啃?,微處理器與高集成度的外圍設(shè)備提供高速安全的接口,是迄今為止最成功的總線規(guī)范之一。
由于pci總線協(xié)議非常復(fù)雜,目前實現(xiàn)pci總線接口主要是使用兩種方式:(1)采用專用接口芯片,如amcc公司的s5933和plx公司的9054、9080。使用接口芯片開發(fā)人員可以不考慮pci接口的實現(xiàn)問題,但是在實際應(yīng)用中通常只用到接口芯片的部分功能,造成了資源的浪費,同時接口芯片占用了板卡上的有限空間,給應(yīng)用設(shè)計帶來不便。(2)使用可編程邏輯器件實現(xiàn)pci總線控制器,使用這種方式開發(fā)難度大,消耗周期長,系統(tǒng)驗證困難,且不具備通用性。
隨著ic產(chǎn)業(yè)的迅速發(fā)展,傳統(tǒng)的、基于標準單元的數(shù)字ic設(shè)計方法已經(jīng)發(fā)展到基于ip(知識產(chǎn)權(quán))復(fù)用的soc設(shè)計方法,根據(jù)實現(xiàn)的硬件描述級的不同,ip核分為軟核、硬核和固核。其中,軟核是采用可綜合的hdl實現(xiàn)的rtl級設(shè)計,與具體實現(xiàn)工藝無關(guān),相比于固核和硬核具有較大的靈活性,在fpga中定制pci接口軟核實現(xiàn)pci接口控制具有明顯的優(yōu)勢:可以在單片fpga中同時完成pci接口和用戶邏輯的設(shè)計,縮減成本,提高集成度,減少資源浪費,實現(xiàn)32/64位的pci、pci-x及兼容compact
pci的pci主設(shè)備/目標設(shè)備接口,消除pci接口芯片與本地通信的信號線的硬線連接,提高用戶邏輯設(shè)計的彈性,降低因硬件設(shè)計不當造成的損失;統(tǒng)一設(shè)計工具和平臺,縮短開發(fā)周期。
本文應(yīng)用pci接口控制ip實現(xiàn)了pci多卡測控系統(tǒng)中pci總線到本地總線的轉(zhuǎn)換,實際應(yīng)用表明,采用此設(shè)計方案的pci卡運行穩(wěn)定可靠。
1 應(yīng)用背景
本文的應(yīng)用背景為某一工業(yè)測控系統(tǒng),該系統(tǒng)采用fpga實現(xiàn)測量數(shù)據(jù)的采集和控制信號的輸出,通過定制pci接口ip實現(xiàn)一個32位目標設(shè)備的pci總線接口轉(zhuǎn)換。pci核選用altera
pci編譯器所包括的pei_t32兆核函數(shù),fpga選用altera公司的cyclone系列芯片eplc6q240c8,以配合32位/33mhz的pci接口的i/o標準和速度要求,在硬件設(shè)計上,為保證3.3v
fpga對pci 2.2、5v總線的兼容性要求,在pci總線接口與fpga引腳間加入總線開關(guān)進行電平轉(zhuǎn)換。由于系統(tǒng)應(yīng)用在工業(yè)生產(chǎn)控制場合,因此fpga與外部數(shù)據(jù)的i/o接口間需要加入光電隔離器件以增量系統(tǒng)的抗干擾能力,系統(tǒng)結(jié)構(gòu)如圖1所示。
2 pci接口兆核函數(shù)
altera的pci編譯器(pci compiler)提供了使用altera器件實現(xiàn)pci接口設(shè)計的完全解決方案,包括4個32/64位、主/從模式pci接口控制器兆核函數(shù)(即接口ip)及相關(guān)測試平臺,通過選擇合適的芯片速度,可以滿足運行在33mhz或66mhz
pci時鐘下的時序要求,支持altera的stratix ii、stratix、stratix gx、cyclone、cyclone
ii和max ii系列器件,支持pci配置空間讀寫、內(nèi)存方式讀寫和i/o方式讀寫,支持預(yù)先讀取模式,支持可參數(shù)化的配置寄存器,包括參數(shù)化的設(shè)備信息、6個可變長度的基址空間和一個擴展rom空間,具有奇偶校驗檢錯,支持pci終止、重試和斷開作業(yè)及中斷操作,并提供靈活的本地端接口,pci_t32兆核函數(shù)的32位目標設(shè)備控制器,其結(jié)構(gòu)和總線接口信號如圖2所示。
在pci總線端,ip核提供32位數(shù)據(jù)線和目標設(shè)備控制信號、中斷請求信號及錯誤報告信號,本地總線端提供32位數(shù)據(jù)線和地址線、控制信號、中斷輸入信號和狀態(tài)表示信號接口。其中,本地端信號l_adi為地址/數(shù)據(jù)輸入,l_adro為地址輸出,l_dato為數(shù)據(jù)輸出,l_beno為字節(jié)使能輸出,l_cmdo為本地命令輸出??刂菩盘杔t_abortn、lt_discn和lt_rdyn為本地端輸入,分別標志本地設(shè)備終止、斷開和準確好、lt_framen、lt_ackn和lt_dxfrn為目標傳輸控制信號,相當于pci總線的frame#、devsel#和trdy#。lt_tsr為目標作業(yè)狀態(tài)寄存器輸出。lirqn為中斷輸入信號。
可以通過pci編譯器ip工具臺或編輯兆核函數(shù)頭文件的方式修改pci配置空間信息,本系統(tǒng)gci兆核函數(shù)的配置信息如下:
3 本地總線讀寫狀態(tài)機
在用戶邏輯中,通過總線讀寫狀態(tài)機實現(xiàn)內(nèi)存方式單周期或迸發(fā)讀寫、i/o單周期或迸發(fā)讀寫以及在設(shè)備不能完成作業(yè)時發(fā)起(目標)或響應(yīng)(主)終止、斷開或重試等作業(yè),保證pci作業(yè)正確結(jié)束,以帶迸發(fā)模式的內(nèi)存讀寫作業(yè)為例,作為目標設(shè)備的本地總線讀寫狀態(tài)轉(zhuǎn)移圖如圖3所示。
idle為設(shè)備空閑狀態(tài)。
add_latch為地址鎖定狀態(tài)。lt_framen有效表示ip核接到一次pci讀寫作業(yè)并啟動本地端做出響應(yīng),此時目標設(shè)備鎖存地址l_adro及命令l_cmdo,并對命令做出解釋。l_cmdo的值為6,則進入memory_read狀態(tài);為7,則進入ip_ready狀態(tài);其他值,則使能lt_discn并進入retry狀態(tài)。
mem_read為內(nèi)存讀作業(yè)狀態(tài),lt_ackn有效驅(qū)動目標設(shè)備將數(shù)據(jù)放到總線上,如為迸發(fā)方式,則lt_rdyn和lt_dxfrn持續(xù)有效,驅(qū)使目標設(shè)備連續(xù)將地址相連的數(shù)據(jù)輸出,如目標設(shè)備在迸發(fā)作業(yè)中需延緩迸發(fā)作業(yè),則可使lt_rdyn無效來進入等待周期,此時狀態(tài)機回到add_latch狀態(tài),直到目標設(shè)備再次準備好,并同時使lt_rdyn有效并輸出數(shù)據(jù)。
retry為設(shè)備重試狀態(tài),在作業(yè)開始,目標設(shè)備尚未準備好發(fā)送或接收數(shù)據(jù),則發(fā)起一次重試作業(yè),即在lt_framen有效后使lt_discn有效并等待主設(shè)備結(jié)束作業(yè)。
discn為設(shè)備斷開狀態(tài),在迸發(fā)讀寫左右中,目標設(shè)備檢測到地址超出有效范圍,則發(fā)起目標斷開作業(yè),在迸發(fā)寫作業(yè)中斷,在最后一次有效寫數(shù)據(jù)前一時鐘使lt_discn有效,在迸發(fā)讀作業(yè)中,將最后一個數(shù)據(jù)放在總線上的同時使lt_discn有效。
ip_ready為內(nèi)存寫操作ip核準備傳輸數(shù)據(jù)狀態(tài)。
mem_write為內(nèi)存寫作業(yè)狀態(tài),在同時使能lt_rdyn后等待lt_ackn和lt_dxfrn有效時讀取總線上的數(shù)據(jù)l_dato,迸發(fā)寫或加入等待周期的時序與讀作業(yè)類似。
stat_chech為狀態(tài)檢測;lt_ackn和lt_dxfrn同時無效標志著內(nèi)存單次/迸發(fā)讀作業(yè)完成,然后檢測作業(yè)狀態(tài)寄存器lt_tsr并返回idle狀態(tài)。
每一次作業(yè)開始,都啟動計數(shù)器,防止操作超時。
使用signaltap ii嵌入式邏輯分析儀實際捕獲的pci內(nèi)存讀寫作業(yè)的pci和本地總線信號時序圖如圖4所示,采樣時鐘為pci總線時鐘。
4 pci電氣特性要求設(shè)計
由于目前絕大多數(shù)主板采用5v的pci規(guī)范,而altera的cyclone系列fpga的i/o口電壓只支持3.3v,因此需要在fpga和pci連接器間加入電平轉(zhuǎn)換電路。
實現(xiàn)電平轉(zhuǎn)換的原理是在總線間加入nmos總線開關(guān),實現(xiàn)方式如圖5所示。
其中總線開關(guān)選用idt公司的qs3861,首先,考慮電平轉(zhuǎn)換的實現(xiàn)方法,當總線選通信號be#使能,總線a的輸入電壓上升,總線b的電壓隨之上升,當總線a的電壓超過vcc-vt(vt的典型值為1v)時,總線b的電壓將被箝位到vcc-vt,而不會繼續(xù)上升,因此選擇vcc位4.3v,則能保證總線b的信號滿足3.3v標準。當3.3v總線b驅(qū)動總線a時,由于5v
pci規(guī)范中定義的邏輯高電壓是2v-5.5v,因此也能夠保證fpga端驅(qū)動pci的高電壓要求。 其次,驗證是否滿足pci時序要求,pci2.2協(xié)議規(guī)定一個時鐘周期分為4部分:
t(30ns)=tval+tprop+tsu+tskew
其中:tval為時鐘到輸出信號有效延遲,tsu為輸入建立時間,tpro為最大總線傳輸時間,tskew為時鐘抖動時間。pci 2.2協(xié)議規(guī)定的保持時間為0。
tprop是由于pci總線采用反射波技術(shù)引入的,典型值為10ns,tprop與tskew的和不超過12ns。pci 2.2規(guī)范規(guī)定33mhz信號的建立時間為7ns,66mhz信號的建立時間為3ns,由qs3861引入的數(shù)據(jù)傳輸延遲為0.25ns。但由于所有pci信號都經(jīng)過總線開關(guān)進行電平轉(zhuǎn)換,到達fpga的信號整體只有0.25ns的延遲,因此fpga的建立時間仍然設(shè)置為7ns,fpga經(jīng)過運算輸出的信號時序由時鐘到信號有效延遲tval所限定。pci
2.2規(guī)范規(guī)定33mhz時tval最大為11ns,最小為2ns,由于電平轉(zhuǎn)換芯片在雙向數(shù)據(jù)通路的延遲累加,fpga必須包括時鐘到信號最大延遲在10.5ns以內(nèi)。
最后,考慮布局布線因素,在加入總線開關(guān)后,要保證從pci連接器到總線開關(guān)及總線開關(guān)到fpga的所有32位信號線(除中斷輸入信號、系統(tǒng)信號和jtag信號)的走線長度和不大于1.5英寸、時鐘線長度和為2.5±0.1英寸。
fpga中定制ip核實現(xiàn)pci總線到本地總線的轉(zhuǎn)換,能夠有效節(jié)約pci設(shè)備的成本,提高硬件資源利用率,縮短開發(fā)時間,目標設(shè)備讀寫狀態(tài)機對本地總線進行監(jiān)測,完成設(shè)備的內(nèi)存、i/o讀寫并提供迸發(fā)作業(yè)支持,在發(fā)生異常狀況時,及時發(fā)起重試,斷開或終止作業(yè),保證pci總線傳輸正確結(jié)束,防止不安全的數(shù)據(jù)操作出現(xiàn),為了滿足pci電氣規(guī)范,在硬件設(shè)計時需要注意3.3v設(shè)備掛接5v總線的電平轉(zhuǎn)換及其帶來的時序和布線問題。
評論