基于NIOSⅡ處理器的MIL-STD-1553B接口卡設(shè)計(jì)
摘 要: 基于NIOSⅡ處理器搭建了可編程片上系統(tǒng),在該系統(tǒng)中通過(guò)控制HI-6110實(shí)現(xiàn)了MIL-STD-1553B總線協(xié)議,通過(guò)雙口RAM實(shí)現(xiàn)了與PCI總線的通信。重點(diǎn)論述了NIOSⅡ處理器系統(tǒng)的硬件和軟件設(shè)計(jì),雙口RAM的地址空間劃分,PCI9054的驅(qū)動(dòng)軟件設(shè)計(jì)。測(cè)試表明,用本方法設(shè)計(jì)的接口卡能很好地實(shí)現(xiàn)MIL-STD-1553B總線協(xié)議。
關(guān)鍵詞: 現(xiàn)場(chǎng)可編程門(mén)陣列; NIOSⅡ; MIL-STD-1553B; PCI9054; HI-6110
MIL-STD-1553B總線(以下簡(jiǎn)稱1553B總線)是美國(guó)制定的一種軍用串行總線標(biāo)準(zhǔn),國(guó)內(nèi)對(duì)應(yīng)為GJB289A-97,它規(guī)定了數(shù)字式時(shí)分制指令/響應(yīng)型多路傳輸數(shù)據(jù)總線及其接口電子設(shè)備的技術(shù)要求,同時(shí)規(guī)定了多路傳輸數(shù)據(jù)總線的工作原理和總線上的信息流及需要采用的電氣和功能格式[1]。
目前,國(guó)內(nèi)外的1553B板卡大多數(shù)是基于協(xié)議芯片配以相應(yīng)的處理器和存儲(chǔ)器來(lái)實(shí)現(xiàn),硬件電路復(fù)雜,設(shè)計(jì)難度大。SOPC(System On Programmable Chip)技術(shù)是由Altera公司提出的,它以IP核為基礎(chǔ),以硬件描述語(yǔ)言為主要設(shè)計(jì)手段,包括以32位NIOSⅡ軟核處理器為核心的嵌入式系統(tǒng)的硬件配置、硬件設(shè)計(jì)、硬件仿真、軟件設(shè)計(jì)、軟件調(diào)試等。使得由許多IC組成的電子系統(tǒng)集成到一塊FPGA內(nèi)成為可能,從而大大簡(jiǎn)化了系統(tǒng)的硬件設(shè)計(jì),節(jié)省了大量的系統(tǒng)資源[2]。
1 基于NIOSⅡ處理器的1553B板卡硬件設(shè)計(jì)
本系統(tǒng)的硬件設(shè)計(jì)主要由三部分構(gòu)成:(1)與主機(jī)通信的PCI控制器PCI9054,主要實(shí)現(xiàn)DPRAM內(nèi)的數(shù)據(jù)與主機(jī)進(jìn)行通信;(2)基于NIOSⅡ處理器的FPGA設(shè)計(jì),實(shí)現(xiàn)NIOSⅡ硬件平臺(tái)的搭建,實(shí)現(xiàn)對(duì)HI-6110的控制,讀出相關(guān)的1553B報(bào)文,將相關(guān)的控制和數(shù)據(jù)按照特定的格式存儲(chǔ)在DPRAM,或者從DPRAM中讀出相關(guān)的控制和數(shù)據(jù),實(shí)現(xiàn)對(duì)HI-6110的控制;(3)1553B接口電路,主要由HI-6110和相應(yīng)的總線耦合器組成。系統(tǒng)總體結(jié)構(gòu)如圖1所示。
系統(tǒng)硬件配置如下。
(1) NIOSⅡCPU:它是整個(gè)系統(tǒng)的核心部件,本系統(tǒng)選用的是32位NIOSⅡCPU[3]。
(2) SDRAM:由于本系統(tǒng)復(fù)雜,軟件代碼比較大,因此必須要擴(kuò)展外部SDRAM。在NIOSⅡ系統(tǒng)工作時(shí),SDRAM主要用來(lái)存放運(yùn)行程序和數(shù)據(jù),由于NIOSⅡ?qū)DRAM的操作速度非???,本系統(tǒng)的SDRAM選擇的是MT48LC4M32B2,可以滿足工作在50MHz的NIOSⅡ系統(tǒng)要求。
(3) Flash:用來(lái)存放用戶程序,本系統(tǒng)選用的是AM29LV128M。與SDRAM相比較,F(xiàn)lash具有掉電保護(hù)的特性,但它的存取速度遠(yuǎn)遠(yuǎn)低于SDRAM。該芯片可配置成8位或16位,本系統(tǒng)配置為16位。
(4) DPRAM:主要用于NIOSⅡ處理器與PCI9054之間的數(shù)據(jù)交換。其訪問(wèn)時(shí)序和SRAM一樣,通過(guò)添加SRAM模塊就可以對(duì)DPRAM進(jìn)行訪問(wèn)。本系統(tǒng)采用IDT公司的IDT70V28系列DPRAM,它可以提供64K×16bit的存儲(chǔ)空間。
(5) PIO:主要完成NIOSⅡ處理器和HI-6110之間的數(shù)據(jù)、地址、控制信息傳輸。其中Pio_DataIn和Pio_DataOut是16位的數(shù)據(jù)總線,Pio_Addr是16位地址總線,Pio_Ctl是8位控制總線,Pio_StatusFlag是8位狀態(tài)標(biāo)志總線。
(6) 時(shí)鐘模塊:其主要作用是為FPGA模塊提供系統(tǒng)運(yùn)行的工作頻率,并為HI-6110和PCI9054提供時(shí)鐘。本系統(tǒng)選擇的時(shí)鐘頻率是48MHz。
(7) PCI9054:它是PLX公司生產(chǎn)的PCI總線通用接口芯片,符合PCI V2.1和V2.2規(guī)范;在PCI總線端支持32位數(shù)據(jù)寬度,傳輸速率為33MHz;本地端可以編程實(shí)現(xiàn)8位、16位、32位的數(shù)據(jù)寬度,傳輸速率最高可達(dá)132MB/s。本地總線端時(shí)鐘最高可達(dá)50MHz,支持復(fù)用/非復(fù)用的32位地址/數(shù)據(jù)。PCI9054內(nèi)部有6種可編程的FIFO存儲(chǔ)器,以實(shí)現(xiàn)零等待突發(fā)傳輸以及本地總線和PCI總線之間的異步操作。PCI9054工作方式靈活多樣,包括直接主模式、直接從模式和DMA模式。本地總線可工作在M、C、J三種模式[4]。本設(shè)計(jì)采用直接從模式,本地總線工作在C模式。
(8) HI-6110:它是由HOLT公司推出的1553B總線協(xié)議處理芯片,該芯片可以配置成BC、RT、MT、帶RT的MT四種工作方式,支持雙冗余總線。內(nèi)含2個(gè)32×16的FIFO。外部時(shí)鐘可選12MHz或24MHz兩種頻率[5]。
2 基于NIOSⅡ處理器的1553B板卡底層軟件設(shè)計(jì)
2.1 軟件總體設(shè)計(jì)
將系統(tǒng)硬件生成并下載完畢后,就可以進(jìn)行系統(tǒng)的軟件設(shè)計(jì)。整個(gè)軟件的體系結(jié)構(gòu)如圖2所示。
在本系統(tǒng)中,NIOSⅡ作為下位機(jī)來(lái)使用,它通過(guò)PCI總線與上位機(jī)進(jìn)行通信,接收來(lái)自上位機(jī)的命令,并解釋執(zhí)行。NIOSⅡ的軟件需要完成以下任務(wù):讀寫(xiě)DPRAM實(shí)現(xiàn)和PCI總線的通信;控制HI-6110完成1553B數(shù)據(jù)的發(fā)送和接收,實(shí)現(xiàn)1553B總線協(xié)議。
在圖2中NIOSⅡ上電或復(fù)位后初始化程序完成整個(gè)系統(tǒng)的初始化,包括啟動(dòng)定時(shí)器、初始化中斷向量表,初始化DPRAM內(nèi)容、初始化HI-6110內(nèi)寄存器等。然后判斷當(dāng)前的訪問(wèn)地址,如果訪問(wèn)內(nèi)部寄存器,則根據(jù)地址可以讀寫(xiě)板卡內(nèi)的寄存器,如:控制寄存器、RT地址寄存器、描述表基址寄存器、狀態(tài)寄存器、當(dāng)前處理命令寄存器等;如果是訪問(wèn)數(shù)據(jù)區(qū),則根據(jù)當(dāng)前的工作模式分別進(jìn)入BC、RT、MT工作狀態(tài)進(jìn)行不同的數(shù)據(jù)處理,如果數(shù)據(jù)處理正確則寫(xiě)相應(yīng)的寄存器和數(shù)據(jù)區(qū),轉(zhuǎn)入讀下一條訪問(wèn)地址。
2.2 1553B板卡地址劃分
1553B板卡的地址分為兩部分:內(nèi)部寄存器和數(shù)據(jù)區(qū)。內(nèi)部寄存器主要包含控制寄存器和狀態(tài)寄存器,通過(guò)控制寄存器的不同內(nèi)容可實(shí)現(xiàn)對(duì)1553B板卡的控制,通過(guò)讀狀態(tài)寄存器的內(nèi)容可以獲得1553B板卡內(nèi)的通信狀態(tài),內(nèi)部寄存器的地址空間為:0x0000~0x00FF;數(shù)據(jù)區(qū)根據(jù)1553B的操作模式不同,分為三種類型,即BC模式、RT模式、MT模式,其地址空間為:0x0100~0xFFFF。下面僅以1553B板卡工作在RT模式下進(jìn)行介紹。本設(shè)計(jì)采用雙緩沖區(qū)的數(shù)據(jù)儲(chǔ)存策略,將數(shù)據(jù)區(qū)地址分為RT控制塊和RT數(shù)據(jù)存儲(chǔ)兩個(gè)區(qū),每個(gè)控制塊含有4個(gè)字,每個(gè)數(shù)據(jù)儲(chǔ)存區(qū)34字節(jié)[6]。具體定義如圖3所示。
3 PCI總線設(shè)計(jì)
3.1 EEPROM設(shè)計(jì)
PCI9054芯片可以支持有EEPROM和無(wú)EEPROM的啟動(dòng)方式。有EEPROM時(shí),EEDI/DO的管腳必須上拉;無(wú)EEPROM時(shí),EEDI/DO的管腳必須下拉。本系統(tǒng)采用有EEPROM的啟動(dòng)方式。配置芯片選用Microchip Technology公司的93LC46B。EEPROM主要完成對(duì)本地配置寄存器的初始配置以及一些控制寄存器的配置,如本地存儲(chǔ)空間到PCI內(nèi)存空間和I/O空間的映射等。根據(jù)設(shè)計(jì)先將PCI9054的各個(gè)參數(shù)寫(xiě)入93LC46B芯片,系統(tǒng)上電后PCI9054自動(dòng)將EEPROM芯片中的參數(shù)讀入,從而初始化PCI9054[7]。
3.2 PCI訪問(wèn)DPRAM設(shè)計(jì)
本設(shè)計(jì)中,PCI9054使用地址空間0來(lái)訪問(wèn)DPRAM,地址空間0配置為內(nèi)存空間,其地址范圍為1M。PCI9054工作在PCI從模式、本地總線工作在C模式下訪問(wèn)內(nèi)存空間可以有幾種方式:Single Write/Read、Non-Burst Write/Read、Burst Write/Read。另外通過(guò)內(nèi)部Wait State可以添加延時(shí),本地總線通過(guò)Ready#信號(hào)確認(rèn)數(shù)據(jù)讀寫(xiě)操作。為了實(shí)現(xiàn)PCI9054與DPRAM數(shù)據(jù)傳輸無(wú)誤,在FPGA內(nèi)編制了讀寫(xiě)狀態(tài)機(jī)從而實(shí)現(xiàn)兩者之間數(shù)據(jù)傳輸?shù)臅r(shí)序匹配。狀態(tài)機(jī)核心源代碼如下:
always @ (posedge PCI_CLK) //時(shí)鐘,本系統(tǒng)為48MHz
begin
casex(currentstate) //讀寫(xiě)狀態(tài)機(jī)
s0:
begin
if (!PCI_ADS && (PCI_ADDR<=16'hFFFF))
// PCI_ADS為0表示傳輸
begin //開(kāi)始,地址小于128K
PCI_READY=1'b0;
Write_DPRAM=PCI_LWDRD;
……
currentstate = s1;
end
else
currentstate = s0;
end
s1:
begin
if (!PCI_BLAST) //PCI_BLAST為0,表示停止Burst
//Write/Read,轉(zhuǎn)入狀態(tài)0;否則為1,
begin //表示Burst Write/Read
PCI_READY=1'b1;
……
currentstate = s0;
end
else if (PCI_BLAST)
begin
PCI_READY=1'b0;
Write_DPRAM=PCI_LWDRD;
……
end
default:currentstate=s0;
endcase
3.3 PCI驅(qū)動(dòng)設(shè)計(jì)
驅(qū)動(dòng)程序采用Jungo公司的WinDriver開(kāi)發(fā)平臺(tái)。該平臺(tái)的優(yōu)點(diǎn)是:用戶不需要了解操作系統(tǒng)內(nèi)部原理及DDK開(kāi)發(fā)工具。另外,WinDriver對(duì)PCI9054提供了專門(mén)的開(kāi)發(fā)框架,可以大大縮短開(kāi)發(fā)周期。
驅(qū)動(dòng)程序主要由三個(gè)部分組成:初始化硬件、對(duì)硬件資源的訪問(wèn)和函數(shù)庫(kù)的調(diào)用。其中,后面兩個(gè)部分對(duì)于不同的硬件基本一致,不同硬件開(kāi)發(fā)的區(qū)別在于初始化硬件時(shí)對(duì)硬件資源的鎖定。WinDriver庫(kù)函數(shù)是實(shí)現(xiàn)PCI卡驅(qū)動(dòng)的重要模塊,利用這些函數(shù)可以對(duì)PCI接口的擴(kuò)展卡進(jìn)行配置、讀寫(xiě),完成驅(qū)動(dòng)的設(shè)計(jì)。例如:
(1) 函數(shù)WD_Open( ),用來(lái)獲得WinDriver驅(qū)動(dòng)程序的句柄。該函數(shù)必須在所有其他函數(shù)之前執(zhí)行,用來(lái)打開(kāi)一個(gè)WinDriver支持的硬件PCI設(shè)備。
(2) 函數(shù)WD_CardRegister( ),負(fù)責(zé)選定設(shè)備,且對(duì)該設(shè)備的項(xiàng)目進(jìn)行注冊(cè)和資源分配。具體完成三個(gè)功能:①映射設(shè)備的物理空間,使之能夠被核心模式的進(jìn)程和用戶模式的應(yīng)用程序所訪問(wèn);②檢查所需存儲(chǔ)器或I/O資源先前是否被注冊(cè)過(guò),以防設(shè)備沖突;③將有關(guān)中斷請(qǐng)求號(hào)、中斷類型(電平觸發(fā)或邊緣觸發(fā))存儲(chǔ)到WinDriver自定義的數(shù)據(jù)結(jié)構(gòu)中。
4 系統(tǒng)調(diào)試
在實(shí)際調(diào)試中,通過(guò)JTAG端口,使用Quartus II的SignalTap II邏輯分析儀可以測(cè)試板卡的運(yùn)行情況。測(cè)得1553B板卡工作在BC模式下訪問(wèn)HI-6110,如圖4所示;工作在RT模式下訪問(wèn)HI-6110,如圖5所示;PCI9054讀DPRAM,如圖6所示。
以NIOSⅡ處理器為核心設(shè)計(jì)并實(shí)現(xiàn)1553B板卡,采用PCI總線作為主機(jī)和1553B板卡通信。該板卡可實(shí)現(xiàn)BC、RT、MT三種模式,實(shí)現(xiàn)了1553B總線協(xié)議。采用SOPC技術(shù)使得該板卡體積小,節(jié)省了系統(tǒng)資源,而且具有很好的系統(tǒng)升級(jí)性能。目前,該接口卡已成功應(yīng)用于軍隊(duì)某武器控制系統(tǒng)仿真項(xiàng)目中。
參考文獻(xiàn)
[1] 王勇.航空機(jī)載計(jì)算機(jī)與航空電子總線[M].西安:空軍工程大學(xué)工程學(xué)院,2003.
[2] 潘松,黃繼業(yè).SOPC技術(shù)實(shí)用教程[M]. 北京:清華大學(xué)出版社,2005.
[3] Altera Corporation. NIOS Ⅱprocessor reference handbook[DB/OL].http://www.altera.com.cn/literature/hb/qts/n2cpu_nii5v1.pdf. 2007.
[4] Plx Technology. PCI 9054 data book V2.1, 2007[DB/OL].http//www. plxtech. com.2007.
[5] HOLT INC. HI-6110 mil-std-1553/mil-std-1760 BC/RT/MT message processor[DB/OL]. http//www. holtic.com.2007.
[6] 鄧青海,景小寧,劉安. 基于USB的多通道俄制串行總線接口卡設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2006,32(11):55-57.
[7] 顏建峰,吳寧.基于PCI總線的DMA高速數(shù)據(jù)傳輸系統(tǒng)[J].電子科技大學(xué)學(xué)報(bào),2007(10):858-861.