劉 敏,陳金鷹,唐 偉,李 菊
(成都理工大學(xué)信息科學(xué)與技術(shù)學(xué)院,四川 成都 610059)
當(dāng)在兩個(gè)電路間進(jìn)行8或16位數(shù)據(jù)傳輸時(shí),需要8或16要數(shù)據(jù)線進(jìn)行連接,如果兩個(gè)電路相距較遠(yuǎn),采用并行傳輸則不經(jīng)濟(jì),也不可靠,故常用串行方式進(jìn)行數(shù)據(jù)傳輸。由此帶來的問題是傳輸速率將變?yōu)樵瓉淼?/8或1/16。本文提出一種改進(jìn)的傳輸設(shè)計(jì)方案,即將并行數(shù)據(jù)傳輸?shù)紽PGA[1],由FPGA以并行數(shù)據(jù)位數(shù)倍的速率按改進(jìn)的SPI標(biāo)準(zhǔn)進(jìn)行傳輸,從而實(shí)現(xiàn)并行數(shù)據(jù)的遠(yuǎn)程傳輸而保持原來的高速傳輸速率。
并行數(shù)據(jù)轉(zhuǎn)改進(jìn)型SPI輸出接口系統(tǒng)結(jié)構(gòu)如圖1所示。并行數(shù)據(jù)datain從外部輸入到數(shù)據(jù)移位寄存器datars中,也可串行從sdi輸入到數(shù)據(jù)移位寄存器datars中[2]。來自sdi的數(shù)據(jù)可用來進(jìn)行收發(fā)兩端傳輸過程的握手,檢驗(yàn)對(duì)方是否正確收到數(shù)據(jù)。例如,如有必要,對(duì)方可將收到數(shù)據(jù)串行通過sdi發(fā)回到datars中,如果該數(shù)據(jù)與原datain數(shù)據(jù)相同,則表明發(fā)送正確。接收到的sdi數(shù)據(jù)可從數(shù)據(jù)緩沖寄存器databuf得到。當(dāng)datain數(shù)據(jù)發(fā)送完畢,發(fā)送完畢標(biāo)志信號(hào)bf置1。當(dāng)復(fù)位信號(hào)reset為1時(shí),bf變?yōu)榈碗娖剑⑹筺ss為低電平,通知對(duì)方準(zhǔn)備接收數(shù)據(jù)[3]。

圖1 系統(tǒng)結(jié)構(gòu)
系統(tǒng)工作時(shí)鐘為clk,并通過sck為對(duì)方提供驅(qū)動(dòng)時(shí)鐘。當(dāng)數(shù)據(jù)移位寄存器datars中的數(shù)據(jù)被全部移出時(shí),移完標(biāo)志信號(hào)bf置1,并使串行輸出端口sdo輸出為低電平,否則sdo輸出為datain數(shù)據(jù)。這里稱之為改進(jìn)型SPI,其主要特點(diǎn)是在無數(shù)據(jù)傳輸時(shí),SDI,SDO為低電平以省電,在數(shù)據(jù)傳輸方式上任采用SPI思想,因此當(dāng)將該設(shè)計(jì)電路與現(xiàn)有標(biāo)準(zhǔn)SPI進(jìn)行接口時(shí),需要注意這種區(qū)別,界時(shí)可將無數(shù)據(jù)傳輸時(shí)的電平修改一下即可。如果不與其他原SPI標(biāo)準(zhǔn)通信,兩個(gè)該系統(tǒng)電路即可完成高速通信。
系統(tǒng)工作流程如圖2所示。如以發(fā)送端為主設(shè)備,接收端為從設(shè)備,則系統(tǒng)開始工作時(shí),先通過nss輸出低電平使從設(shè)備獲得一個(gè)選通信號(hào),進(jìn)入工作狀態(tài),并向從設(shè)備發(fā)送系統(tǒng)工作時(shí)鐘sck,使主、從設(shè)備能同步傳輸數(shù)據(jù)。此外還使發(fā)送完畢標(biāo)志信號(hào)bf置0。

圖2 系統(tǒng)工作流程
系統(tǒng)有兩種數(shù)據(jù)輸入方式:
1)當(dāng)復(fù)位信號(hào)reset為1時(shí),將并行數(shù)據(jù)鎖存輸入主設(shè)備,此后在reset為0時(shí)進(jìn)行數(shù)據(jù)的串行輸出[4]。
2)當(dāng)復(fù)位信號(hào)reset為0時(shí),不能從并行輸入端口輸入數(shù)據(jù),但可從串行端口輸入數(shù)據(jù),使該系統(tǒng)不僅具有與并行輸出設(shè)備進(jìn)行通信的能力,同時(shí)具有與串行設(shè)備通信的能力。
串行接收的數(shù)據(jù)通過并行輸出端口databuf從數(shù)據(jù)緩沖寄存器讀出。系統(tǒng)的端口設(shè)置的VHDL語言程序如下:

在Xilinx公司軟件ISE10.1環(huán)境下運(yùn)行程序,從運(yùn)行程序綜合后得到的頂層模塊如圖3所示中,可清楚地看到系統(tǒng)與并行設(shè)備和串行設(shè)備之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)慕涌谝_。

圖3 系統(tǒng)頂層模塊的對(duì)外引腳
圖4中為從并行端口輸入兩位十六進(jìn)制數(shù)據(jù)B1(10110001b)后,再從串口輸入110000111b后的輸入輸出波形圖。從sdo和databuf輸出引腳可見數(shù)據(jù)在時(shí)鐘sck驅(qū)動(dòng)下的輸出情況[5]。表1則反映了在時(shí)鐘驅(qū)動(dòng)下,寄存器中數(shù)據(jù)和輸入輸出端口上信號(hào)的變化過程。

表1 寄存器和輸入輸出端口上信號(hào)的變化過程
從表1中可見本改進(jìn)型SPI串行接口的特點(diǎn):當(dāng)數(shù)據(jù)串行從輸出端口移出時(shí),同時(shí)也在串行從輸入端口移入,并沖掉移位寄存器中原有的數(shù)據(jù)。完成從sdi端口接收一個(gè)字節(jié)數(shù)據(jù),需要在數(shù)據(jù)傳輸完成標(biāo)志bf為高電平后的下一個(gè)時(shí)鐘才能完成[6]。圖4為仿真程序運(yùn)行結(jié)果。

圖4 仿真程序運(yùn)行結(jié)果(截圖)
隨著電子技術(shù)的廣泛應(yīng)用,不同設(shè)備間進(jìn)行通信變得越來越頻繁和重要,常會(huì)遇到不同設(shè)備間由于標(biāo)準(zhǔn)不一致,而造成通信困難。該設(shè)計(jì)可用于解決高速數(shù)據(jù)的并行傳輸轉(zhuǎn)SPI方式的串行輸出,其數(shù)據(jù)傳輸速率與兩個(gè)電子設(shè)備自身內(nèi)部的工作頻率無關(guān)。數(shù)據(jù)傳輸時(shí),只需發(fā)信方將數(shù)據(jù)送到該系統(tǒng),再發(fā)送一個(gè)復(fù)位信號(hào)reset,數(shù)據(jù)便可通過該系統(tǒng)傳到對(duì)方。此外,還可在發(fā)送數(shù)據(jù)的同時(shí),通過sdi接收對(duì)方數(shù)據(jù),并從databuf端口取出,實(shí)現(xiàn)雙向通信。
[1]劉慶豐,陳金鷹,王舟兵,等.基于FPGA的DVB-S調(diào)制器系統(tǒng)設(shè)計(jì)[J]. 電視技術(shù),2010,34(1):37-39.
[2]王巍,陳金鷹,鄭恭明.基于ZigBee標(biāo)準(zhǔn)的FPGA設(shè)計(jì)無線收發(fā)系統(tǒng)[J]. 數(shù)字通信世界,2008(9):43-44.
[3]陳培均.基于 FPGA的802.11b設(shè)計(jì)[D].成都:成都理工大學(xué),2009.
[4]陳卓.基于FPGA的軟件無線電DDC設(shè)計(jì)[D].成都:成都理工大學(xué),2008.
[5]陳金鷹,孫旭,李燦平.高精度頻率測定的ASIC實(shí)現(xiàn)[J].成都理工大學(xué)學(xué)報(bào):自然科學(xué)版,2004,34(4):390-394.
[6]徐國棟,陶安利,徐士敏,等.基于FPGA的DDS函數(shù)發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 機(jī)械制造與自動(dòng)化,2010,39(5):91-94.