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