梁鵬程,趙 平,孟凡鵬
(西北工業大學 陜西 西安 710129)
在航空電子綜合化系統中,快速、有效的數據傳輸對整個航空電子系統的性能有很大的影響,因此數據總線被稱為現代航空電子系統的骨架,利用FPGA技術設計集成多路ARINC429[1]和422[4]通道的通信芯片,可以有效的提高數據通信模塊的處理能力和集成度,降低成本,本文以verilog語言為基礎,通過ISE編程,modelsim仿真,仿真無誤后綜合實現,用impact將bit文件燒寫到FPGA中,進行硬件調試,并用chipscope進行分析,為了更加方便的進行調試,以workbench為平臺建立驅動。關于429協議和422協議已經非常成熟,因此本文主要從硬件調試的角度介紹多路機載總線收發器的實現。
很多情況下,我們需要一塊板子既具有429[2-3]功能又具有422數據傳輸功能,因此我們將429邏輯和422邏輯[6]建立在一個模塊下,分別給429邏輯和422邏輯分配不同的地址空間,通過不同的地址空間控制429和422協議的片選信號,同時LOCALBUS數據是雙向數據,429和422數據是單向數據,因此需要加一個雙向緩沖器,實現單向數據和雙向數據之間的轉換。協議部分已經非常成熟,在此不做贅述。
我們所用的電路板名稱為:MFD-GPM1018。設計原理如圖1:CPU控制FPGA數據的寫入和讀出,FPGA通過429或者422接收到的數據按照相應的協議轉換之后由cpu讀出,cpu通過Localbus提供FPGA要發送的數據并配置寄存器。
CPU讀出來的數據通過LBC-1-AD00——07到鎖存器把地址和數據按一定的控制規則轉換為單獨的地址信號和數據信號。LBC-1-AD00——07表示某時刻是地址信號某時刻是數據信號。ROM存儲cpu運行過程中的中間數據程。H1-8445電平轉換,將429數據電平由bus總線所要求的電平轉換為FPGA需要的3.3V。ASP105885-01是連接器將429、422數據連接到GPM調試版上,進行硬件調試。MAX3362將串行數據轉換為差分的形式。M25P16-AVMN6T是FPGA的配置芯片,通過JTAG接口將bit文件加載到FPGA中這樣配置之后,下次上電之后就可以直接將bit文件load到FPGA中而不需重新加載。
在Workbench 開發平臺vxworks[3]操作系統下,首先連接串口網口從調試板到PC機,新建超級終端,選擇通信速率為115200,其他都為默認值,網口下載操作系統到cpu中,串口用來控制cpu,串口網口連接好后,連接JTAG接口,(JTAG連接線連USB下載線連到PC機),電源電壓設置為28V,然后上電,通過調試板上的電壓轉換器轉換為5V供FPGA板子使用,上電之后通過IMPACT下載.bit文件到FPGA中,這種配置類型斷電即丟失,下次上電后需要重新下載,同時打開超級終端,建立串口連接,此時vxworks操作系統將會自動啟動,在此操作系統下輸入一些命令控制cpu,常用的就是讀(d)和寫(m)命令,并且打開chipscope,來進行調試。

圖1 硬件原理圖Fig. 1 Hardware s
為了充分驗證邏輯功能的正確性:我們分別進行內回環測試,也就是在邏輯內部實現自收自發,然后進行外回環測試,將板子上發送接口與接收接口連接起來,實現回環收發,測試都無誤后進行外部測試,對429協議采用429的仿真卡進行測試,對422協議采用串口調試工具進行測試。
2.2.1 429測試
429 的仿真卡發送429差分數據,通過FPGA接收,判斷接收到的數據是否是發送的數據,以此來檢測接收邏輯的正確性。
429 仿真卡BUStools /ARINC v3.20仿真驗證:
1)TX setup :設置發送通道,波特率、奇偶校驗
2)DEFINE :ADD new message添加發送通道,我們需要TXD1、TXD2,設置發送數據參數:data——BIN設置32—9位數據,前8位數據通過Label設置,Label是一個233數據類型,2指的是2位,比如設置為256,則為10101110,映射到發送的數據為0111 0101,即為0x75,最高位為奇偶校驗位,在發送過程中自動產生。

圖2 通過串口調試工具測試422邏輯Fig. 2 Test 422 logic through serial debugging tool
3)設置完成后,點擊run,停止發送的話點擊stop。
通過超級終端讀出接收到的數據與發送的數據一致,測試正確。
2.2.2 通過串口調試工具進行422測試
422 的發送端口和接收端口通過232連到PC機上,PC機通過串口調試工具發送一串數據,經過232轉422接收這些數據,接收到的數據在超級終端中打印,檢測接收是否正確,類似的,調用驅動422發送一串數據,通過232到PC機通過串口調試工具看到發送出來的數據,檢測發送的數據是否正確。調試過程中比較關鍵的一點就是發送和接收端口波特率要設置一致。
如圖2所示,波特率設置為115 200,奇校驗,數據位8位,停止位1位,422發送數據,發送出來的數據經232顯示到PC機串口接收窗口中,如下圖接收框顯示數據。
如圖2所示,通過串口調試工具,手動發送數據1、2、3、4、5、6、7、8、9、10,經232轉422轉換為422數據形式,再經fpga處理。則在超級終端上顯示出接收到的422數據個數以及數據。
2.2.3 驅動程序
驅動相當于用戶與底層FPGA邏輯的一個接口,里面包含一些初始化函數、發送函數、接收函數,初始化包括配置寄存器,波特率配置,通道選擇,奇偶校驗設置等,最后根據需求直接寫一個測試函數,那么在硬件測試時先通過workbench[5]進行調試,調試無誤后,通過wftp下載到cpu中,然后通過超級終端直接調用測試函數即可,就不需要之前手動單步通過寫、讀操作來進行配置和測試了。
429與422通過檢測狀態位來控制發送接收的驅動測試流程如圖3所示。在上述測試過程中,發送一個數據則接收一個數據,僅僅檢測到了接收與發送功能上的正確性。考慮到在應用過程中,并非發送一個數據接收完再發送一個數據,比如發送若干個數據之后,此時才開始進行接收,那么在這種情況下,接收fifo緩存中將存在若干個數據,因此引入fifo的data_count計數,表示此時緩沖中儲存有多少個數據,然后依次把這些數據給讀出來,這種情況下,也存在溢出的可能性,因此引出溢出狀態位。

圖3 檢測狀態位來控制發送接收的驅動測試流程Fig. 3 Driving test process by detecting status bit to control the transmission and reception

圖4 引入fifo計數和溢出狀態檢測的驅動測試流程Fig. 4 Driving test process by introducing fifo overflow state detection and counts
改進后引入fifo計數和溢出狀態檢測的驅動測試流程如圖4所示。
調用驅動對422進行外回環測試0通道發0通道收1通道發1通道收,這時出現問題:當發送多個數據接收多個數據,或者多次測試時會出現接收數據錯誤或者未接收到數據的現象,但是通過超級終端單步測試確是是正確的。用chipscope[7]抓信號,發現接收數據時,會出現接收完數據后,fifo非空的狀態,正常應是空狀態,這樣就把之前的數據再次接收了一遍,抓到的錯誤如圖5,其中test是我們為了測試方便加的一個參數用來檢測DAT變化,因為DAT是雙向數據無法抓到。

圖5 test數據出錯Fig. 5 Test data error
分析原因是由于發送的數據被接收后,再次發送數據前檢測狀態位未來得及告便,導致錯誤,于是在檢測狀態位后面加延遲taskdelay(1),測試正確,但是與之而來的問題是這樣大大影響了波特率,因為1代表1/60ms,而波特率是ns級的,于是用一個讀寄存器操作來代替這個延遲,讀一個寄存器狀態需要的時間大約為us級,具有一定的延時但性能又優于taskdelay,并且讀寄存器也不會影響其他的正常功能,至此以為問題解決了。但是后來為了完善功能,在邏輯中添加count,修改驅動進行測試,發現打印到超級終端上的fifo計數不正確,發送一個數計數卻是31,繼續發送一個逐個計數為61,91….用chipscope抓信號發現在tf_push有效時(tf_push控制發送fifo的寫信號),同一數據輸入到fifo了31次,根據邏輯tf_push在寫信號有效以及地址是發送緩沖地址且此時是正常工作狀態時就有效,那么根據chipscope抓到的,發現在一個地址有效,寫信號有效的周期內,tf_push持續有效,持續計數就說明此時有效了多個時鐘周期,每個時鐘周期數據寫入到發送fifo中一次,但是我們期望的是寫信號有效地址有效一個周期內,數據只寫入一次,因此我們修改邏輯,使tf_push有效的周期縮短為一個時鐘周期,同時根據這個問題,也判斷了之前接收數據總出錯,出現一個數據接收兩次的現象,需要加適當的延時才不會出錯的原因正是如此。 明白這些之后,我們又把驅動中檢測狀態位與接收之間的延時去掉,再次測試,這次果如預期的一樣不再出錯,至此才找到了根本原因。對于這個問題Modelsim是發現不了的,因為Modelsim仿真時輸入激勵比如寫信號wr_n有效設置的就是一個時鐘周期,因此chipscope能夠發現modelsim發現不了的問題,這也就是硬件調試的功效。

圖6 修改前tf_push發送寫信號Fig. 6 Transmit write signal tf_push before amendment
修改前tf_push如圖6所示。
修改后的tf_push,持續一個時鐘周期,如圖7所示。

圖7 修后tf_push發送寫信號Fig. 7 Transmit write signal tf_push aftere amendment
針對這個問題,我們總結寫底層邏輯時控制讀信號和寫信號使其持續時間為一個時鐘周期是非常有必要的,可以有效避免數據重復讀入和寫出。
文中以FPGA為基礎,主要介紹了多路422協議429協議總線完整的FPGA硬件調試,涉及硬件原理 、調試過程、調試中用到的工具、驅動程序以及對調試過程中遇到問題的分析方法,經過這一系列的調試無誤,此部分將可以接受檢驗,實現穩定的數據通訊功能。最后將邏輯固話到FPGA中,上電自啟動,自此我們完成了完善的多路機載總線收發器的設計和實現。
[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總線收發系統設計與實現[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].桂林航天工業學院學報,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的網絡與串口通信裝換[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].計算機與網絡,2005(21):58-59.WAN Xiang. The application of ChipScope Pro in FPGA debug[J].Computer & Network, 2005(21):58-59.