梁鵬程,趙 平,孟凡鵬
(西北工業(yè)大學 陜西 西安 710129)
在航空電子綜合化系統(tǒng)中,快速、有效的數(shù)據(jù)傳輸對整個航空電子系統(tǒng)的性能有很大的影響,因此數(shù)據(jù)總線被稱為現(xiàn)代航空電子系統(tǒng)的骨架,利用FPGA技術設計集成多路ARINC429[1]和422[4]通道的通信芯片,可以有效的提高數(shù)據(jù)通信模塊的處理能力和集成度,降低成本,本文以verilog語言為基礎,通過ISE編程,modelsim仿真,仿真無誤后綜合實現(xiàn),用impact將bit文件燒寫到FPGA中,進行硬件調試,并用chipscope進行分析,為了更加方便的進行調試,以workbench為平臺建立驅動。關于429協(xié)議和422協(xié)議已經非常成熟,因此本文主要從硬件調試的角度介紹多路機載總線收發(fā)器的實現(xiàn)。
很多情況下,我們需要一塊板子既具有429[2-3]功能又具有422數(shù)據(jù)傳輸功能,因此我們將429邏輯和422邏輯[6]建立在一個模塊下,分別給429邏輯和422邏輯分配不同的地址空間,通過不同的地址空間控制429和422協(xié)議的片選信號,同時LOCALBUS數(shù)據(jù)是雙向數(shù)據(jù),429和422數(shù)據(jù)是單向數(shù)據(jù),因此需要加一個雙向緩沖器,實現(xiàn)單向數(shù)據(jù)和雙向數(shù)據(jù)之間的轉換。協(xié)議部分已經非常成熟,在此不做贅述。
我們所用的電路板名稱為:MFD-GPM1018。設計原理如圖1:CPU控制FPGA數(shù)據(jù)的寫入和讀出,F(xiàn)PGA通過429或者422接收到的數(shù)據(jù)按照相應的協(xié)議轉換之后由cpu讀出,cpu通過Localbus提供FPGA要發(fā)送的數(shù)據(jù)并配置寄存器。
CPU讀出來的數(shù)據(jù)通過LBC-1-AD00——07到鎖存器把地址和數(shù)據(jù)按一定的控制規(guī)則轉換為單獨的地址信號和數(shù)據(jù)信號。LBC-1-AD00——07表示某時刻是地址信號某時刻是數(shù)據(jù)信號。ROM存儲cpu運行過程中的中間數(shù)據(jù)程。H1-8445電平轉換,將429數(shù)據(jù)電平由bus總線所要求的電平轉換為FPGA需要的3.3V。ASP105885-01是連接器將429、422數(shù)據(jù)連接到GPM調試版上,進行硬件調試。MAX3362將串行數(shù)據(jù)轉換為差分的形式。M25P16-AVMN6T是FPGA的配置芯片,通過JTAG接口將bit文件加載到FPGA中這樣配置之后,下次上電之后就可以直接將bit文件load到FPGA中而不需重新加載。
在Workbench 開發(fā)平臺vxworks[3]操作系統(tǒng)下,首先連接串口網(wǎng)口從調試板到PC機,新建超級終端,選擇通信速率為115200,其他都為默認值,網(wǎng)口下載操作系統(tǒng)到cpu中,串口用來控制cpu,串口網(wǎng)口連接好后,連接JTAG接口,(JTAG連接線連USB下載線連到PC機),電源電壓設置為28V,然后上電,通過調試板上的電壓轉換器轉換為5V供FPGA板子使用,上電之后通過IMPACT下載.bit文件到FPGA中,這種配置類型斷電即丟失,下次上電后需要重新下載,同時打開超級終端,建立串口連接,此時vxworks操作系統(tǒng)將會自動啟動,在此操作系統(tǒng)下輸入一些命令控制cpu,常用的就是讀(d)和寫(m)命令,并且打開chipscope,來進行調試。
圖1 硬件原理圖Fig. 1 Hardware s
為了充分驗證邏輯功能的正確性:我們分別進行內回環(huán)測試,也就是在邏輯內部實現(xiàn)自收自發(fā),然后進行外回環(huán)測試,將板子上發(fā)送接口與接收接口連接起來,實現(xiàn)回環(huán)收發(fā),測試都無誤后進行外部測試,對429協(xié)議采用429的仿真卡進行測試,對422協(xié)議采用串口調試工具進行測試。
2.2.1 429測試
429 的仿真卡發(fā)送429差分數(shù)據(jù),通過FPGA接收,判斷接收到的數(shù)據(jù)是否是發(fā)送的數(shù)據(jù),以此來檢測接收邏輯的正確性。
429 仿真卡BUStools /ARINC v3.20仿真驗證:
1)TX setup :設置發(fā)送通道,波特率、奇偶校驗
2)DEFINE :ADD new message添加發(fā)送通道,我們需要TXD1、TXD2,設置發(fā)送數(shù)據(jù)參數(shù):data——BIN設置32—9位數(shù)據(jù),前8位數(shù)據(jù)通過Label設置,Label是一個233數(shù)據(jù)類型,2指的是2位,比如設置為256,則為10101110,映射到發(fā)送的數(shù)據(jù)為0111 0101,即為0x75,最高位為奇偶校驗位,在發(fā)送過程中自動產生。
圖2 通過串口調試工具測試422邏輯Fig. 2 Test 422 logic through serial debugging tool
3)設置完成后,點擊run,停止發(fā)送的話點擊stop。
通過超級終端讀出接收到的數(shù)據(jù)與發(fā)送的數(shù)據(jù)一致,測試正確。
2.2.2 通過串口調試工具進行422測試
422 的發(fā)送端口和接收端口通過232連到PC機上,PC機通過串口調試工具發(fā)送一串數(shù)據(jù),經過232轉422接收這些數(shù)據(jù),接收到的數(shù)據(jù)在超級終端中打印,檢測接收是否正確,類似的,調用驅動422發(fā)送一串數(shù)據(jù),通過232到PC機通過串口調試工具看到發(fā)送出來的數(shù)據(jù),檢測發(fā)送的數(shù)據(jù)是否正確。調試過程中比較關鍵的一點就是發(fā)送和接收端口波特率要設置一致。
如圖2所示,波特率設置為115 200,奇校驗,數(shù)據(jù)位8位,停止位1位,422發(fā)送數(shù)據(jù),發(fā)送出來的數(shù)據(jù)經232顯示到PC機串口接收窗口中,如下圖接收框顯示數(shù)據(jù)。
如圖2所示,通過串口調試工具,手動發(fā)送數(shù)據(jù)1、2、3、4、5、6、7、8、9、10,經232轉422轉換為422數(shù)據(jù)形式,再經fpga處理。則在超級終端上顯示出接收到的422數(shù)據(jù)個數(shù)以及數(shù)據(jù)。
2.2.3 驅動程序
驅動相當于用戶與底層FPGA邏輯的一個接口,里面包含一些初始化函數(shù)、發(fā)送函數(shù)、接收函數(shù),初始化包括配置寄存器,波特率配置,通道選擇,奇偶校驗設置等,最后根據(jù)需求直接寫一個測試函數(shù),那么在硬件測試時先通過workbench[5]進行調試,調試無誤后,通過wftp下載到cpu中,然后通過超級終端直接調用測試函數(shù)即可,就不需要之前手動單步通過寫、讀操作來進行配置和測試了。
429與422通過檢測狀態(tài)位來控制發(fā)送接收的驅動測試流程如圖3所示。在上述測試過程中,發(fā)送一個數(shù)據(jù)則接收一個數(shù)據(jù),僅僅檢測到了接收與發(fā)送功能上的正確性??紤]到在應用過程中,并非發(fā)送一個數(shù)據(jù)接收完再發(fā)送一個數(shù)據(jù),比如發(fā)送若干個數(shù)據(jù)之后,此時才開始進行接收,那么在這種情況下,接收fifo緩存中將存在若干個數(shù)據(jù),因此引入fifo的data_count計數(shù),表示此時緩沖中儲存有多少個數(shù)據(jù),然后依次把這些數(shù)據(jù)給讀出來,這種情況下,也存在溢出的可能性,因此引出溢出狀態(tài)位。
圖3 檢測狀態(tài)位來控制發(fā)送接收的驅動測試流程Fig. 3 Driving test process by detecting status bit to control the transmission and reception
圖4 引入fifo計數(shù)和溢出狀態(tài)檢測的驅動測試流程Fig. 4 Driving test process by introducing fifo overflow state detection and counts
改進后引入fifo計數(shù)和溢出狀態(tài)檢測的驅動測試流程如圖4所示。
調用驅動對422進行外回環(huán)測試0通道發(fā)0通道收1通道發(fā)1通道收,這時出現(xiàn)問題:當發(fā)送多個數(shù)據(jù)接收多個數(shù)據(jù),或者多次測試時會出現(xiàn)接收數(shù)據(jù)錯誤或者未接收到數(shù)據(jù)的現(xiàn)象,但是通過超級終端單步測試確是是正確的。用chipscope[7]抓信號,發(fā)現(xiàn)接收數(shù)據(jù)時,會出現(xiàn)接收完數(shù)據(jù)后,fifo非空的狀態(tài),正常應是空狀態(tài),這樣就把之前的數(shù)據(jù)再次接收了一遍,抓到的錯誤如圖5,其中test是我們?yōu)榱藴y試方便加的一個參數(shù)用來檢測DAT變化,因為DAT是雙向數(shù)據(jù)無法抓到。
圖5 test數(shù)據(jù)出錯Fig. 5 Test data error
分析原因是由于發(fā)送的數(shù)據(jù)被接收后,再次發(fā)送數(shù)據(jù)前檢測狀態(tài)位未來得及告便,導致錯誤,于是在檢測狀態(tài)位后面加延遲taskdelay(1),測試正確,但是與之而來的問題是這樣大大影響了波特率,因為1代表1/60ms,而波特率是ns級的,于是用一個讀寄存器操作來代替這個延遲,讀一個寄存器狀態(tài)需要的時間大約為us級,具有一定的延時但性能又優(yōu)于taskdelay,并且讀寄存器也不會影響其他的正常功能,至此以為問題解決了。但是后來為了完善功能,在邏輯中添加count,修改驅動進行測試,發(fā)現(xiàn)打印到超級終端上的fifo計數(shù)不正確,發(fā)送一個數(shù)計數(shù)卻是31,繼續(xù)發(fā)送一個逐個計數(shù)為61,91….用chipscope抓信號發(fā)現(xiàn)在tf_push有效時(tf_push控制發(fā)送fifo的寫信號),同一數(shù)據(jù)輸入到fifo了31次,根據(jù)邏輯tf_push在寫信號有效以及地址是發(fā)送緩沖地址且此時是正常工作狀態(tài)時就有效,那么根據(jù)chipscope抓到的,發(fā)現(xiàn)在一個地址有效,寫信號有效的周期內,tf_push持續(xù)有效,持續(xù)計數(shù)就說明此時有效了多個時鐘周期,每個時鐘周期數(shù)據(jù)寫入到發(fā)送fifo中一次,但是我們期望的是寫信號有效地址有效一個周期內,數(shù)據(jù)只寫入一次,因此我們修改邏輯,使tf_push有效的周期縮短為一個時鐘周期,同時根據(jù)這個問題,也判斷了之前接收數(shù)據(jù)總出錯,出現(xiàn)一個數(shù)據(jù)接收兩次的現(xiàn)象,需要加適當?shù)难訒r才不會出錯的原因正是如此。 明白這些之后,我們又把驅動中檢測狀態(tài)位與接收之間的延時去掉,再次測試,這次果如預期的一樣不再出錯,至此才找到了根本原因。對于這個問題Modelsim是發(fā)現(xiàn)不了的,因為Modelsim仿真時輸入激勵比如寫信號wr_n有效設置的就是一個時鐘周期,因此chipscope能夠發(fā)現(xiàn)modelsim發(fā)現(xiàn)不了的問題,這也就是硬件調試的功效。
圖6 修改前tf_push發(fā)送寫信號Fig. 6 Transmit write signal tf_push before amendment
修改前tf_push如圖6所示。
修改后的tf_push,持續(xù)一個時鐘周期,如圖7所示。
圖7 修后tf_push發(fā)送寫信號Fig. 7 Transmit write signal tf_push aftere amendment
針對這個問題,我們總結寫底層邏輯時控制讀信號和寫信號使其持續(xù)時間為一個時鐘周期是非常有必要的,可以有效避免數(shù)據(jù)重復讀入和寫出。
文中以FPGA為基礎,主要介紹了多路422協(xié)議429協(xié)議總線完整的FPGA硬件調試,涉及硬件原理 、調試過程、調試中用到的工具、驅動程序以及對調試過程中遇到問題的分析方法,經過這一系列的調試無誤,此部分將可以接受檢驗,實現(xiàn)穩(wěn)定的數(shù)據(jù)通訊功能。最后將邏輯固話到FPGA中,上電自啟動,自此我們完成了完善的多路機載總線收發(fā)器的設計和實現(xiàn)。
[1] 張新.基于FPGA的多通道ARINC429通信芯片設計[J].航空電子技術,2008,39(1):46-52.ZHANG Xin. Design of Multi-Channel ARINC 429 Communication Chip Based on FPGA[J].Avionics Technology,2008,39(1):46-52.
[2] 力榕.航空用ARINC429總線收發(fā)系統(tǒng)設計與實現(xiàn)[J].計算機測量與控制,2005,13(9):970-972.LI Rong. Design and Implementation of a arinc429 Bus Transmit-receive System[J].Computer Measurement & control,2005,13(9):970-972.
[3] Altera Corporation. FLEX 10K Embedded Programmable Logic Device Family Data Sheet[R]. September 2003
[4] 李精華.基于VHDL的串行通信接口UART設計[J].桂林航天工業(yè)學院學報,2011(2):127-128.LI Jing-hua. Design of serial communication interface UART based on FPGA[J].Journal of Guilin Colleage of Aerospace technology, 2011(2):127-128.
[5] 段培賢.基于vxworks的網(wǎng)絡與串口通信裝換[J].魚雷技術,2009,17(6):58-61.DUAN Pei-xian.Communication conversion between UART and ethernet based on VxWorks[J].Torpedo Technology,2009,17(6):58-61.
[6] 郭樹濤.基于FPGA的串口通訊設計[J].北京電子科技學院學報,2006,14(2):74-78.GUO Shu-tao. Serial communication based on FPGA[J].journal of Beijing Electronic Serial Science and Technology Institute,2006,14(2):74-78.
[7] 萬翔.ChipScope Pro在FPGA調試中的應用[J].計算機與網(wǎng)絡,2005(21):58-59.WAN Xiang. The application of ChipScope Pro in FPGA debug[J].Computer & Network, 2005(21):58-59.