呂 浩
(中國航空計算技術研究所,西安710068)
ARINC429總線是廣泛應用在航空電子系統(tǒng)中的一種通訊總線。PCMCIA/JEIDA[1]接口是一種廣泛應用在數(shù)碼電子產品和便攜式計算機上的PC卡接口規(guī)范。在航空通信系統(tǒng)中使用便攜式計算機進行通信調試,應用FPGA來實現(xiàn)PCMCIA規(guī)范接口并完成通信,使板卡具有體積小、性能高、可靠性好的特點。板卡在航空領域應用,方便了現(xiàn)場調試。
通信板卡功能的實現(xiàn)核心是FPGA內部電路的設計,圖1就是FPGA內部設計圖梗概。設計采用PCMACIA接口的16根數(shù)據(jù)線與16根地址線,可用存儲空間達64KB,但使用的只是其中一小部分。PCMCIA規(guī)范規(guī)定16位PC卡有兩種模式,MEMORY ONLY模式和I/O AND MEMORY模式,MEMORY ONLY模式只適用于純粹做存儲卡的PC卡設備。設計采用I/O AND MEMORY模式,但采用的只是MEMORY操作,這相當于在MEMORY空間里實現(xiàn)了一個設備,這個設備用來完成PCMCIA主機和ARINC429芯片的通信。
FPGA內部要實現(xiàn)與HOST主機連接的PCMCIA接口邏輯。PCMCIA規(guī)范將卡的存儲空間分為ATTRIBUTE MEMORY和COMMON MEMORY兩部分,ATTRIBUTE MEMORY主要用來實現(xiàn)卡的配置,在這里邊實現(xiàn)了卡信息結構,以及配置寄存器,而在COMMON MEMORY實現(xiàn)了用于與DEI1016通信的設備。
在FPGA內部實現(xiàn)邏輯時,PCMCIA接口部分相當于主設備,而內部的寄存器、ARINC429設備都是從設備,在FPGA內部必須實現(xiàn)對寄存器讀寫,對ARINC429通信控制信號的時序,對ARINC429接口的讀寫時序的實現(xiàn)是個重點。為了實現(xiàn)從DEI1016芯片接收數(shù)據(jù),在FPGA內部實現(xiàn)了一個64*16bit的FIFO,待FIFO半滿時向PCMCIA主機發(fā)出中斷信號,主機從 FIFO中讀走數(shù)據(jù)。由于從接受ARINC429接口接收數(shù)據(jù)的時序比較復雜,采用狀態(tài)機來實現(xiàn)。向 DEI1016發(fā)送數(shù)據(jù)時,由于DEI1016內部有一個8*32bit的FIFO,PCMCIA的數(shù)據(jù)線和ARINC429的數(shù)據(jù)線都是16位的,可以直接發(fā)送,一些控制信號可以通過寄存器操作或MEMORY地址操作實現(xiàn)。
圖1 通信卡總體結構框圖
2.2.1 PCMCIA/JEIDA 規(guī)范
PCMCIA/JEIDA是由個人電腦存儲卡國際組織和日本電氣工業(yè)協(xié)會提出并推廣的一個便攜式卡接口規(guī)范。其特性如下:
(1)16/32位數(shù)據(jù)線
(2)20MB/S(132MB/S)速率,寬度周期100ns
(3)支持8位/16位DMA操作
(4)兼容 PCMCIA2.1/JEIDA4.2 以及更早的版本,兼容32位卡插槽
(5)硬件探測卡電壓需求可以是5V,3.3V,或更低
(6)支持多功能卡
(7)利用卡信息結構的擴展能力,可以確定卡功能和數(shù)據(jù)格式
2.2.2 卡信息結構和配置寄存器的設計
卡信息結構,簡稱 CIS,是在卡的 ATTRIBUTE MEMORY空間里實現(xiàn)對卡進行配置的結構,相當于一個ROM結構,主機通過讀它來對卡進行配置,它必須從ATTRIBUTE MEMEORY空間的00H地址開始。它由很多的TUPLE組成,每個TUPLE有一定的結構,由若干字節(jié)組成,這些字節(jié)信息只存在于偶數(shù)字節(jié)地址空間,每個TUPLE都固定的含有一個TUPLE特有的序號和相對于下一個TUPLE的偏移量,以及TUPLE體,表明了一定的配置信息,或者功能說明。這些TUPLE連成鏈,用結束TUPLE(序號FFH)表明鏈的結束。16位PC卡的TUPLE最多257個字節(jié):一個字節(jié)的TUPLE號+一個字節(jié)的TUPLE鏈域+FFH的TUPLE體。一個鏈最多有256個TUPLE。
必須要實現(xiàn)的TUPLE有:
CISTPL-DEVICE:5V設備信息 TUPLE,包含卡設備的信息。因為用的都是存儲器操作,實現(xiàn)接口功能,設備速度是200NS,設備大小是兩個512字節(jié)的塊,共1M空間。序號是17H;CISTPL-CONFIG:給出了ATTRIBUTE MEMORY空間里配置寄存器的基地址0200H,給出了最后一個ENTRY TUPLE的序號是01H,以及配置寄存器的個數(shù)是1,就是配置選項寄存器,序號是1AH;CISTPL-CFTABLEENTRY:配置入口TUPLE明確了每一個需要的功能,不同的功能被不同的ENTRY TUPLE區(qū)分,它被自己的配置入口序號所標記。在設計中選擇I/O AND MEMORY接口,使用的是MEMORY映射I/O方式實現(xiàn);中斷方式是脈沖中斷;使用的common memory空間從0300H開始,1K大小,TUPLE序號是1BH;CISTPL-VERS-1:這是卡制造商信息TUPLE,用 PCMCIA2.1/JEIDA4.2 版本,序號是15H;CISTPL-END:鏈結束TUPLE,序號是FFH。
在卡的ATTRIBUTE MEMORY空間里可有一個配置寄存器組,這些配置寄存器都是可讀可寫的,為了簡化設計,一些可選寄存器都沒有實現(xiàn),只實現(xiàn)了必備的配置選項寄存器COR[2]。這個配置選項寄存器的地址是在CIS結構中給出的,在0200H地址單元。一個8位的寄存器。結構如下:
表1 配置選項寄存器
由主機寫入該寄存器的內容,實現(xiàn)第7位寫1,卡被復位,第6位寫1是電平中斷模式,0是脈沖中斷模式,后6位寫入CIS結構中entry tuple的序號,實現(xiàn)該入口對應的配置功能。只實現(xiàn)了一個entry tuple,是設置了一個common memory設備(也是存儲空間):基地址0300的1KB空間。
在接口模塊的MEMORY讀寫操作中,配置空間的CIS是只讀的,COR是可讀可寫的。16位PC卡的讀寫操作屬于異步時序,沒有同步時鐘。
2.3.1 DEI1016接收數(shù)據(jù)時控制信號的實現(xiàn)
采用 DEI1016[3]和 BD429[4]來實現(xiàn) ARINC429數(shù)據(jù)的收發(fā)。HOST向DEI1016發(fā)送數(shù)據(jù)時,由于內部自帶 FIFO,可直接發(fā)送,但要區(qū)分發(fā)送的是WORD1 還是 WORD2,還是控制寄存器數(shù)據(jù)[5]。HOST從DEI1016接收數(shù)據(jù)時,用有限狀態(tài)機來實現(xiàn)讀取控制信號時序,這一過程完成一個32位字的接收,即一次DR1或DR2有效,兩次OE1或OE2為低,兩次16位字的接收,實現(xiàn)過程如圖2。其中OE1#/OE2#:讀出接收通道的數(shù)據(jù);DR1#/DR2#:該通道接收到了數(shù)據(jù);SEL:字選擇信號。
圖2 讀取控制信號狀態(tài)機
2.3.2 FPGA內部接收FIFO設計
當從DEI1016接收數(shù)據(jù)時,在FPGA內部實現(xiàn)了一個64*16bit的 FIFO[6],該 FIFO 從 DEI1016 接收數(shù)據(jù)并緩存,PCMCIA接口接收數(shù)據(jù)時只與FIFO進行通信。
當FIFO從DEI1016接收數(shù)據(jù)時,將FIFO的寫時鐘信號和ARINC429接口的通道1或2的讀信號連接在一起,用ARINC429的讀信號做FIFO的寫時鐘,而將FIFO的寫允許信號始終置為有效‘1’,當oe1/oe2的上升沿來臨時,就對FIFO進行寫操作。當PCMCIA接口從FIFO接收數(shù)據(jù)時,因為主機讀信號是低有效的,所以用PCMCIA接口的讀信號下降沿做FIFO的讀時鐘信號,而將讀允許信號始終置為允許‘1’。
給FIFO的發(fā)送端口固定的地址是0300H,主機從FIFO中接收數(shù)據(jù)相當于對0300H地址進行讀操作。另外用 FIFO的半滿信號做中斷信號,即當FIFO中存在32個字時。FIFO的接收數(shù)據(jù)線與DEI1016的16根數(shù)據(jù)線相連,發(fā)送數(shù)據(jù)線與PCMCIA接口的16位數(shù)據(jù)線相連。
2.3.3 寄存器設計
為了便于對一些信號的控制以及上層軟件訪問的便利,在PCMCIA規(guī)范規(guī)定的common memory空間里實現(xiàn)了一個狀態(tài)寄存器(SR)和一個控制寄存器(CR),將一些控制和狀態(tài)信號裝入寄存器中固定的某位,以便上層軟件的控制訪問。
在common memory的0308H地址單元實現(xiàn)了一個狀態(tài)寄存器,它是只讀寄存器。第0位是TXR信號量,為1表示DEI1016內部的FIFO是空的,可以裝入數(shù)據(jù);第1位是FPGA內部FIFO空信號,為高表示空;第3位是FPGA內部FIFO滿信號,為低表示滿。
在common memory的0310H地址單元實現(xiàn)了一個控制寄存器,它是可讀可寫寄存器。第0位是ENTX信號,是DEI1016發(fā)送數(shù)據(jù)允許信號,為1表示允許發(fā)送;第1位是DEI1016復位信號MR,低有效。
上層軟件在控制向DEI1016的發(fā)送緩沖區(qū)(FIFO)寫數(shù)據(jù)時,應先讀出SR的TXR位,F(xiàn)IFO為空時即TXR為1時才能讓主機向FIFO中寫入數(shù)據(jù)。而用CR的ENTX位控制DEI1016是否能發(fā)送數(shù)據(jù)時也應該先判斷TXR,TXR為高時,即發(fā)送FIFO為空時,DEI1016是不能發(fā)送數(shù)據(jù)的,只有為低時才能發(fā)送;當TXR為低時,也不能強行拉低ENTX,即發(fā)送FIFO中有數(shù)據(jù)時,不能強行禁止發(fā)送,因為這樣破壞了原有數(shù)據(jù)的完整性。
同樣可以通過 common memory中的 FIFOEMPTY信號控制主機從接收FIFO中取數(shù)據(jù);還可以寫DEI1016的復位信號。
卡剛插入筆記本卡插槽的時候,主機主動讀CIS內容,然后可以寫COR,進行配置。對DEI1016操作之前,要先寫控制寄存器里的 MR信號,使DEI1016復位后,再寫入DEI1016的控制寄存器,然后才可以進行數(shù)據(jù)的收發(fā)操作。接收數(shù)據(jù)就是響應中斷信號(FIFO的半滿信號),從FIFO中讀取數(shù)據(jù),直到判斷出FIFO-EMPRY信號有效。發(fā)送數(shù)據(jù)時,要先判斷SR里邊的TXR信號,當DEI1016里的FIFO為空時,再向FIFO里發(fā)送數(shù)據(jù),發(fā)送總字數(shù)不定,但不能超過DEI1016內部FIFO的容量8*32bit,發(fā)送之前拉低ENTX,且每次是先發(fā)送字一,再發(fā)送字二,字一,字二必須成對發(fā)送,發(fā)送完后拉高ENTX,允許DEI1016發(fā)送數(shù)據(jù)。
在FPGA內部實現(xiàn)可利用的存儲區(qū)域概括起來如下:
表2 存儲區(qū)域使用表
介紹了應用FPGA完成PCMCIA接口的ARINC429通信卡的設計方案和其中的難點,通過本次設計也為其它應用FPGA完成PCMCIA接口的PC卡的設計提供了可借鑒方案。除了上述之外,上層應用程序和板卡的配合也是值得注意的。
[1]趙鑫.VHDL與數(shù)字電路設計[M].北京:機械工業(yè)出版社,2005.
[2]PCMCIA/JEIDA,Release 7.0,1999,PC Card Standard[S].JAPAN:PCMCIA/JEIDA,1999.
[3]DEI1016/DEI1016A/DEI1016B ARINC 429 Transceiver[EB/OL].USA:Device Engineering Inc,2004[2008].http://www.icpdf.com.
[4]BD429 ARINC 429 TRANSCEIVER[EB/OL].USA:Device Engineering Inc,2004[2008].http://www.icpdf.com.
[5]賓辰宗.基于MCF5206的ARINC429通信板卡的設計實現(xiàn)[DB/OL].2005[2008].http://www.lunwentianxia.com.
[6]陳曦.PCMCIA 接口 IP設計[DB/OL].2004(2004)[2008].http://www.systemandchip.com.