衡 燕, 黃 勇
(上海無線電設備研究所,上海200090)
FPGA全稱Field Programmable Gate Array(現(xiàn)場可編程門陣列),是目前廣泛采用的一種可編程器件,它的應用不僅使得數(shù)字電路系統(tǒng)的設計非常方便,并且大大縮短了系統(tǒng)研制的周期,縮小了數(shù)字電路系統(tǒng)的體積和所用芯片的種類與數(shù)量[1]。
RS-422是一種單機發(fā)送、多機接收的雙向、平衡傳輸規(guī)范,被命名為TIA/EIA-422-A標準,全稱是“平衡電壓數(shù)字接口電路的電氣特性”RS-422標準。RS-422由 RS-232發(fā)展而來,改進了 RS-232通信距離短、速率低的缺點,RS-422定義了一種平衡通信接口,數(shù)據(jù)信號采用差分傳輸方式,傳輸速率提高到了10 Mb/s,傳輸距離延長到約1 200 m,并允許在一條平衡總線上連接最多10個接收器,即一個主設備,其余為從設備,從設備之間不能通信,所以RS-422支持點對多的雙向通信。
在現(xiàn)代數(shù)字信號處理系統(tǒng)中,為了實現(xiàn)RS-422通信,通常采用DSP(數(shù)字信號處理器)+FPGA+外圍芯片的電路設計。FPGA是DSP的通信樞紐,DSP若要與RS-422總線上的主設備實現(xiàn)通信,則FPGA將作為DSP與主設備的數(shù)據(jù)“中轉(zhuǎn)站”,實現(xiàn)RS-422通信數(shù)據(jù)緩存。
傳統(tǒng)的FPGA實現(xiàn)RS-422通信方法采用FPGA+可編程通用異步收發(fā)器+差分線路驅(qū)動器的硬件電路。FPGA通過軟件編程接收可編程通用異步收發(fā)器的并行數(shù)據(jù)或發(fā)送并行數(shù)據(jù)到可編程通用異步收發(fā)器??删幊掏ㄓ卯惒绞瞻l(fā)器用于將串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù)或?qū)⒉⑿袛?shù)據(jù)轉(zhuǎn)化成串行數(shù)據(jù)。差分線路驅(qū)動器分兩種:一種用于發(fā)送,負責接收TTL或COMS輸入電平將其轉(zhuǎn)換成差分電平發(fā)送給RS-422總線;另一種用于接收,將接收到的RS-422總線的差分電平轉(zhuǎn)換成TTL或COMS輸出電平。
本文中以實例來說明傳統(tǒng)方法及改進后方法的硬件和軟件實現(xiàn)。在實例中,F(xiàn)PGA采用xilinx公司的virtex系列XQR300,邏輯門數(shù)為30萬門;可編程通用異步收發(fā)器采用intersil公司的82C52,差分線路驅(qū)動器采用intersil公司的DS26c31和DS26c32。
傳統(tǒng)實現(xiàn)方法硬件采用XQR300+82C52+DS26c31+DS26c32,其硬件電路實現(xiàn)如圖1所示。
圖1 傳統(tǒng)方法的硬件電路實現(xiàn)圖
圖1中,XQR300要與82C52的管腳相連,控制82C52的讀寫、復位、片選與地址譯碼。82C52的串行數(shù)據(jù)輸入管腳SDI與DS26C32的輸出管腳相連,串行數(shù)據(jù)輸出管腳SDO與DS26C31的輸入管腳相連,清除發(fā)送管腳CTS與DS26C32的輸出管腳相連。82C52的時鐘來自外部,通過內(nèi)部的波特率發(fā)生器產(chǎn)生和RS-422通信所采用的波特率同步的時鐘,這樣才能按照RS-422時序要求進行數(shù)據(jù)的收發(fā)。RXD+、RXD-為總線上主設備發(fā)來的數(shù)據(jù),CTS+、CTS-為總線上主設備發(fā)來的清除發(fā)送指令,TXD+、TXD-為FPGA發(fā)送到主設備的數(shù)據(jù)。
采用圖1的硬件電路實現(xiàn)RS422通信時,在XQR300軟件編程時需要用XQR300控制82C52的復位、讀寫與地址譯碼。
XQR300的軟件接口圖,如圖2所示。
圖2 傳統(tǒng)方法的軟件接口圖
圖2中,dsp_rd、dsp_wr為 DSP的讀寫信號,data_from_dsp為來自DSP的8位并行數(shù)據(jù),data_to_dsp為發(fā)送到DSP的8位并行數(shù)據(jù),rs_sel為 RS-422通信模塊片選信號。rs422_rd、rs422_wr為FPGA輸出到82C52的讀寫信號,rs_set為FPGA輸出到82C52的復位信號,rs422_cso為FPGA輸出到82C52的片選信號,DR為82C52輸出到FPGA的數(shù)據(jù)準備好信號,TBRE為82C52輸出到FPGA的發(fā)送緩存器為空信號,RS_DATA_IN為82C52發(fā)送到FPGA的8位并行數(shù)據(jù),RS_DATA_OUT為FPGA發(fā)送到82C52的8位并行數(shù)據(jù)。FPGA在內(nèi)部開辟了一個發(fā)送FIFO和一個接收FIFO,F(xiàn)IFO1為接收FIFO,接收82C52的并行數(shù)據(jù),F(xiàn)IFO2為發(fā)送FIFO,通過82C52發(fā)送數(shù)據(jù)到主設備。
FIFO(First In First Out)可以儲存、緩沖兩個異步時鐘之間的數(shù)據(jù)傳輸,是一種先進先出存儲器,具有兩套數(shù)據(jù)線而無地址線,可在其一端寫操作而在另一端進行讀操作,數(shù)據(jù)在其中順序移動,從而達到較高的傳輸速度和效率[3]。FIFO模塊圖如圖3所示,RD_EN、WR_EN為讀寫使能信號,CLK為時鐘,DATA為8位并行數(shù)據(jù)輸入,Q為8位并行數(shù)據(jù)輸出,EMPTY為FIFO空標志,F(xiàn)ULL為FIFO滿標志,DATA_NUM為內(nèi)部數(shù)據(jù)數(shù),RST為復位信號。
圖3 FIFO模塊圖
FPGA首先完成82C52的初始化,然后自主地查詢82C52的狀態(tài),在它接收Buffer有數(shù)據(jù)時將數(shù)據(jù)讀入并存儲到對應的接收FIFO中;查詢FPGA內(nèi)部發(fā)送FIFO的狀態(tài),若發(fā)送FIFO有數(shù)據(jù)且82C52的發(fā)送Buffer為空,將發(fā)送FIFO的數(shù)據(jù)讀出寫入發(fā)送Buffer。在DSP選通FPGA的RS-422通信模塊時,將FIFO中的數(shù)據(jù)送入DSP或?qū)SP的數(shù)據(jù)寫入FIFO。
傳統(tǒng)的實現(xiàn)方法中,可編程通用異步收發(fā)器一般引腳較多,內(nèi)含許多輔助模塊和一些輔助功能,在實際使用時往往用不到這些功能,基本的通信只需要接收和發(fā)送兩條信號線,因此若采用專用芯片,將會使電路變得復雜,面積增大,從而導致成本增加,系統(tǒng)的穩(wěn)定性和可靠性降低。
由于FPGA的功能日益強大,開發(fā)周期短,可重復編程等優(yōu)點也越來越明顯,因此可以在芯片上集成可編程通用異步收發(fā)器的功能,從而簡化了電路,提高了可靠性、穩(wěn)定性和靈活性。因此,改進后的方法僅采用FPGA+差分線路驅(qū)動器的硬件電路。FPGA直接與差分線路驅(qū)動器實現(xiàn)數(shù)據(jù)交換。
因此,硬件僅采用XQR300+DS26c31+DS26c32,其硬件電路實現(xiàn)圖如圖4所示。
圖4 改進方法的硬件電路實現(xiàn)圖
從圖4可以看出,F(xiàn)PGA只需用兩個IO管腳接收發(fā)送數(shù)據(jù),SDI與DS26C32的輸出管腳相連,接收主設備的422串行通信數(shù)據(jù),SDO與DS26C31的輸入管腳相連,發(fā)送串行通信數(shù)據(jù)到主設備。
采用如上硬件電路實現(xiàn)RS-422通信時,在XQR300軟件編程時需在XQR300芯片上集成異步收發(fā)功能模塊,即要在XQR300內(nèi)部實現(xiàn)數(shù)據(jù)串并轉(zhuǎn)換和并串轉(zhuǎn)換,并在XQR300上實現(xiàn)波特率發(fā)生器的功能。
改進的實現(xiàn)方法的軟件接口圖,如圖5所示。
圖5 改進方法的軟件接口圖
圖中,have_data為接收FIFO的空標志,dsp_rd、dsp_wr為 DSP的讀寫信號,data_from_dsp為來自DSP的8位并行數(shù)據(jù),data_to_dsp為發(fā)送到DSP的8位并行數(shù)據(jù)。rxd為主設備送入的RS-422串行數(shù)據(jù),txd為發(fā)送到主設備的串行數(shù)據(jù)。
FPGA在內(nèi)部開辟了一個發(fā)送FIFO和一個接收FIFO,F(xiàn)IFO的結構與圖3相同,接收FIFO用于接收主設備的數(shù)據(jù),發(fā)送FIFO用于發(fā)送數(shù)據(jù)到主設備。發(fā)數(shù)時DSP先將要發(fā)送的8位并行數(shù)據(jù)寫入發(fā)送FIFO,然后在內(nèi)部時序控制下,F(xiàn)PGA將FIFO中的8位并行數(shù)據(jù)一位一位的發(fā)送出去。當rxd為0,表示數(shù)據(jù)起始位到達,F(xiàn)IFO準備接收主設備RS-422的數(shù)據(jù),采用1個8 bit的寄存器來緩存主設備起始位后的8位數(shù)據(jù),若奇偶校驗位正確且停止位正確,則將此數(shù)送到接收FIFO中。
DSP周期性查詢接收FIFO的非空標志have_data,空標志為“1”即有數(shù)據(jù)時,DSP將接收FIFO中的數(shù)據(jù)讀出;當DSP需要發(fā)送數(shù)據(jù)到主設備時,DSP將數(shù)據(jù)寫入對應的發(fā)送FIFO,然后在時鐘的控制下把數(shù)據(jù)發(fā)送出去。
改進方法與傳統(tǒng)方法相比,硬件設計上不需要使用可編程通用異步收發(fā)器,直接通過FPGA的軟件編程實現(xiàn)可編程通用異步收發(fā)器的功能,減少了芯片的使用種類,減小了印制板的面積,節(jié)約了開發(fā)成本;軟件設計上軟件接口簡單,控制信號減少,降低了軟件編程復雜度和難度[2]。
[1] 賈豫東,封吉平.用FPGA實現(xiàn)任意波形發(fā)生器的兩種方法[J].計算機測量與控制,2004,(12):895-897.
[2] 葛紉龍,韓宇龍.嵌入式應用系統(tǒng)設計[M].北京:高等教育出版社,2008.
[3] 張 雪,徐曉蘇,張國龍.基于DSP和FPGA的高速串行通信系統(tǒng)設計[J].艦船電子工程,2009,(5):66-69.