文獻(xiàn)標(biāo)識碼: B
文章編號: 0258-7998(2010)11-0086-05
目前國內(nèi)外在解決儀器GPIB接口與RS-232或USB接口的轉(zhuǎn)接問題時能常遵循“微處理器+專用接口控制芯片”和“微處理器+FPGA”的設(shè)計思路,其中微處理器主要為單片機、ARM、PowerPC 和 MIPS等硬核處理器;FPGA的作用主要是用來實現(xiàn)專用接口芯片的功能,方法是在FPGA內(nèi)部編寫專用接口芯片的IP核?!拔⑻幚砥?專用接口控制芯片”的設(shè)計方案雖然成本較低,技術(shù)門檻也不高,但是不利于系統(tǒng)的功能擴展與性能升級;而“微處理器+FPGA”的設(shè)計方案中,IP核的編寫難度較大,開發(fā)周期太長;如果購買IP核,價格又過于昂貴。綜合分析以上方法的優(yōu)缺點,本文提出一種基于Nios II軟核處理器的SoPC解決方案,利用Nios II軟核處理器的優(yōu)異性能以及uC/OS-II嵌入式實時操作系統(tǒng)在執(zhí)行效率、占用內(nèi)存、實時性能以及可擴展性等方面的優(yōu)勢,設(shè)計了GPIB、RS-232和USB接口協(xié)議轉(zhuǎn)換器,實現(xiàn)了GPIB-USB、GPIB-UART及UART-USB協(xié)議之間的轉(zhuǎn)換[1,2]。該方案具有設(shè)計靈活、可重構(gòu)、集成度高、實現(xiàn)風(fēng)險低、開發(fā)周期短的優(yōu)點。1 總體設(shè)計方案
設(shè)計選用Altera公司的低成本SoPC平臺——Cyclone II系列FPGA。Cyclone II提供百萬級門陣列資源,包含4 608~68 416個邏輯單元;提供1個全局時鐘網(wǎng)絡(luò)與4個鎖相環(huán);支持的存儲器類型包括雙端口及單口RAM、ROM和FIFO緩沖器,存儲器的數(shù)據(jù)總線最大可達(dá)36 bit,頻率可達(dá)250 MHz。Cyclone II系列提供最高622個用戶自定義I/O引腳,為接口協(xié)議轉(zhuǎn)換器的設(shè)計提供了充裕的接口資源。圖1給出了基于Cyclone II平臺的儀器接口協(xié)議轉(zhuǎn)換器的總體設(shè)計方案。
圖1中的Nios II微處理器、存儲器接口、片上存儲器、定時器以及各類接口控制器都是由FPGA內(nèi)部的邏輯單元和RAM資源提供的。方案中RS-232接口協(xié)議的實現(xiàn)相對比較簡單,可以根據(jù)Altera公司提供的UART軟核配置獲得,而USB和GPIB協(xié)議部分均選用專用接口芯片來完成。Nios處理器通過Avalon Switch Fabric總線將Nios II處理器、存儲器和接口控制器等系統(tǒng)組件橋接在一起,形成一個接口統(tǒng)一的高性能SoPC系統(tǒng)[3]。其中,Nios II處理器主要完成協(xié)議之間的轉(zhuǎn)換,并將?滋C/OS-II操作系統(tǒng)內(nèi)核移植到Nios II處理器上。開發(fā)中使用的工具包括Quartus II(含有集成的SoPC Builder工具包)、Nios II IDE以及仿真軟件ModelSim,利用Verilog語言進(jìn)行硬件設(shè)計,利用C語言進(jìn)行軟件開發(fā)。
2 接口硬件電路設(shè)計
2.1 GPIB接口電路設(shè)計
GPIB接口芯片選用NI公司的標(biāo)準(zhǔn)GPIB控制芯片NAT9914,它能夠完成IEEE488.2標(biāo)準(zhǔn)協(xié)議中所有接口功能,并且在軟件上與TI公司的TMS9914A及NEC公司的?滋PD7120兼容,具有可編程時鐘和波特率,直接存儲器存取等功能。NAT9914配套使用數(shù)據(jù)轉(zhuǎn)換器75160以及握手線和控制線轉(zhuǎn)換器75162完成GPIB接口的設(shè)計。GPIB接口電路設(shè)計如圖2所示。
2.2 USB接口電路設(shè)計
ISP1362是飛利浦公司推出的OTG(On-The-Go)產(chǎn)品,在單芯片上集成了一個OTG控制器、一個高級主控制器(PSHC)和一個基于飛利浦公司ISP1181的外設(shè)控制器。ISP1362的OTG控制器完全兼容USB2.0及OTG Suppliment 1.0協(xié)議,主機和設(shè)備控制器兼容USB 2.0協(xié)議,支持12 Mb/s的高速傳輸和1.5 Mb/s的低速傳輸。本設(shè)計中USB接口目前主要用來完成設(shè)備的功能,但考慮到以后繼續(xù)開發(fā)中功能升級的需要,所以選用ISP1362芯片來完成USB接口的設(shè)計,它可以實現(xiàn)繼續(xù)開發(fā)中USB的主機和OTG功能。
2.3 RS-232接口電路設(shè)計
SoPC Builder的標(biāo)準(zhǔn)組件庫中提供了UART組件,使用這個組件可以方便地實現(xiàn)UART接口功能。為了保證UART的電氣相容性,使用了一片MAX232來實現(xiàn)UART的電平轉(zhuǎn)換。
圖3為RS-232接口系統(tǒng)框圖,具有Avalon接口的通用UART核在FPGA上的Nios II處理器和外設(shè)之間實現(xiàn)了一種串行字符流通信方式,然后通過MAX232芯片實現(xiàn)電平轉(zhuǎn)換,從而實現(xiàn)了RS-232接口功能。可以根據(jù)需要對其硬件進(jìn)行配置,改變其波特率、奇偶校驗位、停止位、傳輸?shù)臄?shù)據(jù)位以及其他可選的RTS-CTS流控制信號等。
3 SoPC Builde中總體架構(gòu)設(shè)計
設(shè)計中的Nios II微處理器內(nèi)核、onchip_mem IP核、timer IP核、 JTAG調(diào)試模塊jtag_uart、Flash控制器cfi_flash、SDRAM控制器sdram、UART組件uart以及用于液晶屏顯示的組件lcd等均使用SoPC Builder工具在標(biāo)準(zhǔn)組件庫中定制,而用于實現(xiàn)Avalon總線與片外NAT9914芯片和ISP1362芯片連接的接口控制器組件是通過自己編寫Verilog代碼來自定制的。在SoPC Builder中通過Avalon Switch Fabric總線將各組件互連起來。
Nios II嵌入式處理器是基于哈佛結(jié)構(gòu)的RISC通用嵌入式處理器軟核,能與用戶邏輯相結(jié)合,編程至Altera的FPGA中。處理器具有32位指令集,32位數(shù)據(jù)通道和可配置的指令以及數(shù)據(jù)緩沖。它針對可編程邏輯進(jìn)行了優(yōu)化設(shè)計,也為可編程單芯片系統(tǒng)設(shè)計了一套綜合解決方案[2]。Nios II處理器系列包括三種內(nèi)核:高性能的內(nèi)核Nios II/f、低成本內(nèi)核Nios II/e及性能/成本折中的標(biāo)準(zhǔn)內(nèi)核Nios II/s。本系統(tǒng)采用高性能的內(nèi)核Nios II/f以獲得最強的處理器性能。
4 接口協(xié)議轉(zhuǎn)換器軟件開發(fā)
4.1 軟件總體框架
軟件部分需要完成的任務(wù)主要包括:GPIB接口功能的開發(fā)、RS-232接口功能的開發(fā)和USB接口功能的開發(fā);μC/OS-II嵌入式操作系統(tǒng)在Nios II處理器上的移植;在Nios II處理器上實現(xiàn)接口協(xié)議的轉(zhuǎn)換,完成各個接口之間的相互通信。Nios II系統(tǒng)下的軟件分層架構(gòu)如圖4所示。
Nios II 處理器硬件系統(tǒng)是軟件開發(fā)的基礎(chǔ),同時也是整個分層架構(gòu)的核心。
設(shè)備驅(qū)動軟件是實現(xiàn)處理器與設(shè)備通信的特殊程序,它相當(dāng)于硬件的接口,操作系統(tǒng)只有通過這個接口才能控制硬件設(shè)備的工作,如果設(shè)備沒有對應(yīng)的驅(qū)動軟件便不能正常工作。
硬件抽象層應(yīng)用程序接口HAL API(Application Program Interface),是由HAL系統(tǒng)庫提供的,它常與NewLib C標(biāo)準(zhǔn)庫集成在一起,為用戶訪問外設(shè)提供了標(biāo)準(zhǔn)的接口,開發(fā)人員可以非常方便地使用這些接口來與底層硬件通信。
μC/OS-II內(nèi)核在Nios II的HAL系統(tǒng)庫之上進(jìn)行操作,它可以訪問所有的HAL服務(wù),并且能夠調(diào)用HAL的API函數(shù)。μC/OS-II提供信號量、消息郵箱、消息隊列、事件標(biāo)志、消息傳遞、存儲管理、時間管理等函數(shù)。本設(shè)計中主要用它來完成接口協(xié)議轉(zhuǎn)換時的多任務(wù)調(diào)度。
GPIB組件、USB組件和RS-232組件分別實現(xiàn)了Nios II微處理器和GPIB、USB、RS-232外設(shè)之間的通信。
系統(tǒng)初始化部分用于初始化μC/OS-II、GPIB組件、USB組件和RS-232組件,實現(xiàn)所有應(yīng)用程序的任務(wù)、信號量、隊列和事件標(biāo)志的實時操作系統(tǒng)任務(wù)之間通信資源的創(chuàng)建。
最外一層包含發(fā)送GPIB命令和數(shù)據(jù)任務(wù)、接收GPIB數(shù)據(jù)和命令任務(wù)、發(fā)送USB命令和數(shù)據(jù)任務(wù)、接收USB命令和數(shù)據(jù)任務(wù)、發(fā)送RS-232命令和數(shù)據(jù)任務(wù)、接收RS-232命令和數(shù)據(jù)任務(wù)等。同時,該層通過信號量、隊列和事件標(biāo)志實現(xiàn)任務(wù)之間的通信。
4.2 GPIB接口的軟件開發(fā)
GPIB數(shù)據(jù)通信部分的代碼編程方式主要有查詢方式和中斷方式兩種。盡管查詢方式也能較好地實現(xiàn)數(shù)據(jù)通信的基本要求,但其功能單一、系統(tǒng)資源利用率低,不適合系統(tǒng)功能的維護(hù)和擴展。因此,本設(shè)計中主要采用了中斷方式完成GPIB數(shù)據(jù)通信部分的代碼編程。引起NAT9914向處理器發(fā)出中斷信號的事件主要有發(fā)送數(shù)據(jù)事件(BO)、接收數(shù)據(jù)事件(BI)、接收數(shù)據(jù)結(jié)束事件(END)、接收GET命令事件和接收DCAS命令事件。一旦這些事件發(fā)生,NAT9914就會觸發(fā)Nios II處理器的外部中斷,Nios II終止正常工作,將現(xiàn)場數(shù)據(jù)壓入堆棧保護(hù),并調(diào)用外部中斷處理函數(shù),響應(yīng)NAT9914芯片的中斷申請[3-4]。中斷處理服務(wù)流程圖如圖5所示。
4.3 UART接口的軟件開發(fā)
在 Nios II 下,由于HAL的存在,UART編程已經(jīng)變成標(biāo)準(zhǔn)的文件操作了。Nios II 把對UART的流操作當(dāng)成了一種文件操作。操作一個UART時,只需要對它相應(yīng)的設(shè)備驅(qū)動讀寫數(shù)據(jù)。Altera提供的UART驅(qū)動程序是一個集成到HAL系統(tǒng)中的HAL字符模式設(shè)備驅(qū)動程序,可以采用標(biāo)準(zhǔn)輸入/輸出流的方式使用UART。使文件指針指向打開的UART設(shè)備,即可通過標(biāo)準(zhǔn)C庫函數(shù)fwrite、fread、fprintf、fget等來進(jìn)行串口的讀/寫操作了。
在寫設(shè)備程序時需要通過寄存器直接訪問UART。altera_avalon_uart_reg.h定義了UART核的寄存器映像,提供訪問底層硬件的符號常量,該文件的符號僅被設(shè)備驅(qū)動程序使用。altera_avalon_uart.h、altera_avalon_uart.c為HAL庫提供了UART核設(shè)備的驅(qū)動程序。
4.4 USB接口的軟件開發(fā)[5]
ISP1362在設(shè)計中作為USB設(shè)備使用。USB設(shè)備與Nios II系統(tǒng)通信的原理框圖如圖6所示。系統(tǒng)上電后,Nios II首先自身進(jìn)行初始化,初始化完成后,通過發(fā)送相關(guān)指令,完成對ISP1362芯片的初始化。ISP1362芯片初始化完成后,主機就會給設(shè)備分配地址,并根據(jù)設(shè)備提供的描述符完成對設(shè)備的配置,從而實現(xiàn)USB設(shè)備的一般功能。
USB接口控制器的軟件結(jié)構(gòu)如圖7所示。軟件包括信息處理和中斷服務(wù)例程兩部分。硬件抽象層用于將數(shù)據(jù)從硬件傳輸?shù)綄⒁恢餮h(huán)處理的存儲器空間中。HAL4SYS.C、HAL4D13.C、ISR.C、CHAP_9.C、D13BUS.C和MAINLOOP.C是實現(xiàn)USB設(shè)備控制器功能的六個主要的程序文件。其中,HAL4SYS.C和HAL4D13.C程序文件作為硬件抽象層,ISR.C程序文件作為中斷服務(wù)例程,CHAP_9.C和D13BUS.C作為協(xié)議層,MAINLOOP.C用于主循環(huán)控制。
ISP1362在Nios II系統(tǒng)中采用中斷的方法進(jìn)行任務(wù)處理。當(dāng)ISP1362收到包含設(shè)備地址的輸出或設(shè)置事務(wù)時,通過軟件控制將接收到的數(shù)據(jù)存儲在適當(dāng)?shù)亩它c位置,然后觸發(fā)一個中斷。設(shè)備的中斷服務(wù)例程處理接收到的數(shù)據(jù)。當(dāng)設(shè)備收到包含設(shè)備地址的輸入事務(wù)時,如果ISP1362有準(zhǔn)備傳給主機的數(shù)據(jù),它從指定的端點送出數(shù)據(jù),然后觸發(fā)一個中斷,設(shè)備的中斷服務(wù)例程做適當(dāng)?shù)奶幚恚缓鬁?zhǔn)備下一個輸入事務(wù)。
4.5 μC/OS-II實時操作系統(tǒng)
根據(jù)多功能儀器接口協(xié)議轉(zhuǎn)換器的特點,設(shè)計需滿足實時性和并發(fā)性的要求,以便更好地支持多種接口協(xié)議運行時的多任務(wù)環(huán)境的調(diào)度,所以應(yīng)用軟件應(yīng)該基于嵌入式實時操作系統(tǒng)。考慮到?滋C/OS-II的規(guī)模較小、實時性和可靠性較高,以及Nios II IDE開發(fā)環(huán)境對?滋C/OS-II的良好支持,故操作系統(tǒng)選擇?滋C/OS-II。它通過為每個任務(wù)分配單獨的任務(wù)堆棧來保存任務(wù)工作環(huán)境,提供任務(wù)管理與調(diào)度,任務(wù)間的同步、互斥與通信,時間和中斷管理、內(nèi)存的動態(tài)分配等多種系統(tǒng)服務(wù)。設(shè)計中?滋C/OS-II主要完成任務(wù)的管理與調(diào)度,通過創(chuàng)建消息郵箱、信號量實現(xiàn)任務(wù)與任務(wù)之間、任務(wù)與中斷服務(wù)程序之間的同步與互斥,以保證它們協(xié)調(diào)運行[6]。
5 系統(tǒng)功能驗證
5.1 RS-232與GPIB接口通信功能測試
通過UART數(shù)據(jù)線將計算機的UART接口與接口轉(zhuǎn)換器的UART接口連接,將接口轉(zhuǎn)換器的GPIB接口與Aglient 33250A連接。
運行串口調(diào)試助手,并在串口調(diào)試助手中進(jìn)行如下設(shè)置:串口設(shè)置為COM1,波特率設(shè)置為57 600,校驗位為NONE,數(shù)據(jù)位為8,停止位為1。設(shè)置完成后,在串口調(diào)試助手中手動發(fā)送GPIB接口的SCPI命令。
以發(fā)送*IDN?命令為例,串口調(diào)試助手下方輸入*IDN?,之后點擊發(fā)送,觀察串口調(diào)試助手接收窗口的顯示變化,這時會顯示Received String: Agilent Technologies,33250A,0,2.04-1.01-2.00-03-2,其中Agilent Technologies,33250A,0,2.04-1.01-2.00-03-2是33250A接收到來自計算機串口的識別查詢命令后,要將自己的標(biāo)識發(fā)往的計算機串口號。
5.2 RS-232與USB接口通信功能測試
分別通過USB接口線和RS-232接口線將計算機主機USB接口與接口轉(zhuǎn)換器USB接口相連,同時通過UART數(shù)據(jù)線將計算機的UART接口與接口轉(zhuǎn)換器的UART接口連接。
運行USB調(diào)試助手和串口調(diào)試助手,同時觀察USB接口發(fā)送數(shù)據(jù)到串口的情況。主機通過USB調(diào)試助手向協(xié)議轉(zhuǎn)換器發(fā)送8 B數(shù)據(jù)“6e 69 68 61 6f 6d 61 00”,這8 B數(shù)據(jù)ASCII碼對應(yīng)的字符串為“nihaoma”,觀察USB調(diào)試助手接收區(qū)和串口調(diào)試助手的接收區(qū),這時USB調(diào)試助手接收區(qū)顯示“6e 69 68 61 6f 6d 61 00”,串口調(diào)試助手的接收區(qū)顯示“usb received 8 bytes data is:nihaoma”。
系統(tǒng)基于SoPC平臺,采用軟硬件協(xié)同設(shè)計的方法完成了GPIB、UART和USB接口協(xié)議轉(zhuǎn)換器的設(shè)計。實現(xiàn)了RS-232接口的收發(fā)功能、USB設(shè)備控制器功能、GPIB接口的控者、聽者、講者、源方掛鉤、受方掛鉤五大功能,以及通過RS-232接口控制GPIB接口功能和通過USB接口控制RS-232接口功能。
參考文獻(xiàn)
[1] 吳杲,顧亞平,陳光礻禹 . USB-GPIB控制器設(shè)計[J].測控技術(shù),2004,23(3):59-61.
[2] 李蘭英. Nios II 嵌入式軟核SoPC設(shè)計原理及應(yīng)用[M]. 北京:航空航天大學(xué)出版社,2006.
[3] 黃君凱,吳延軍. RS232-GPIB控制器的設(shè)計[J]. 電子技術(shù)應(yīng)用,2006,32(3):90-92.
[4] National Instruments Corp. Nat9914 Reference Manual[Z]. 1995.
[5] Philips Semiconductors. ISP1362 Embedded Programming Guide Rev: 0.9[Z]. 2002.
[6] [美] Jean J. Labrosse. 嵌入式實時操作系統(tǒng)?滋C/OS-II [M]. 邵貝貝,等譯. 第2版. 北京:北京航空航天大學(xué)出版社,2003.