崔旭晶,李天雷
(1.沈陽理工大學(xué) 信息科學(xué)與工程學(xué)院,遼寧 沈陽 110015;2.中航工業(yè)沈陽發(fā)動機(jī)設(shè)計(jì)研究所 遼寧 沈陽 110015)
基于SOPC的UART IP核設(shè)計(jì)與驅(qū)動開發(fā)及系統(tǒng)移植
崔旭晶1,李天雷2
(1.沈陽理工大學(xué) 信息科學(xué)與工程學(xué)院,遼寧 沈陽 110015;2.中航工業(yè)沈陽發(fā)動機(jī)設(shè)計(jì)研究所 遼寧 沈陽 110015)
設(shè)計(jì)基于SOPC嵌入式系統(tǒng)的UART IP核,依據(jù)UART協(xié)議,采用Verilog HDL進(jìn)行各模塊設(shè)計(jì),使用ModelSim、Quartus II作仿真驗(yàn)證及綜合,結(jié)果表明該UART IP核功能正確,穩(wěn)定可靠。根據(jù)Avalon總線接口協(xié)議實(shí)現(xiàn)UART在系統(tǒng)總線上的掛載,建立SOPC嵌入式硬件系統(tǒng),進(jìn)行UART IP核驅(qū)動開發(fā)。利用超級終端實(shí)現(xiàn)嵌入式系統(tǒng)與上位機(jī)之間的通信,并成功移植uClinux操作系統(tǒng),實(shí)現(xiàn)對嵌入式系統(tǒng)的高級控制。
SOPC;UART;Avalon總線;IP核;uClinux.
計(jì)算機(jī)通信主要通過串口、并口和網(wǎng)絡(luò),UART是計(jì)算機(jī)串行數(shù)據(jù)通信的重要部分,而對嵌入式系統(tǒng)的訪問主要通過UART通信,UART IP核在FPGA開發(fā)中應(yīng)用廣泛,可移植到專用ASIC設(shè)計(jì)中。SOPC嵌入式技術(shù)是一項(xiàng)軟硬件協(xié)同的設(shè)計(jì)技術(shù),它融合了MCU、ASIC、DSP等器件的優(yōu)點(diǎn),具有可編程的靈活性和豐富的IP核支持,為控制系統(tǒng)設(shè)計(jì)提供了一種更為靈活高效的解決方案[1]。uClinux操作系統(tǒng)是針對沒有MMU(內(nèi)存管理器)的CPU,它被使用在具有超前網(wǎng)絡(luò)功能的嵌入式領(lǐng)域,如ARM7/9、MIPS、SH、ColdFire and BlackFin等,uClinux操作系統(tǒng)很好地完成了把內(nèi)核、C庫、應(yīng)用開發(fā)融合在一起的任務(wù),并且占用很少的資源。
根據(jù)UART協(xié)議,UART IP核包含4個模塊,分別為寄存器模塊、波特率模塊、發(fā)送模塊、接收模塊[2]。
1.1 寄存器模塊設(shè)計(jì)
由UART協(xié)議可知,數(shù)據(jù)在傳輸之前必須保證兩端設(shè)置一致才能使數(shù)據(jù)正確地傳輸。寄存器模塊主要完成對設(shè)計(jì)的配置,包括:波特率選擇、數(shù)據(jù)位選擇、停止位選擇、中斷使能、各種情況下的狀態(tài)位。寄存器模塊內(nèi)部設(shè)有4個寄存器:status、rxdata、txdata、control。
1)status寄存器
狀態(tài)寄存器由指示UART內(nèi)部狀態(tài)的多個獨(dú)立狀態(tài)位組成,每個狀態(tài)位與控制寄存器中的中斷允許位一一對應(yīng)。軟件可以隨時(shí)讀取狀態(tài)寄存器而不會改變其內(nèi)容。
2)rxdata寄存器
rxdata寄存器用來保存rxd輸入端接收到的數(shù)據(jù)。當(dāng)一個新的字符通過rxd輸入端接收完畢時(shí),它被傳送到rxdata寄存器,且狀態(tài)寄存器的rflag位被置1;當(dāng)rxdata寄存器中數(shù)據(jù)被讀取時(shí),rflag位被清0。在新數(shù)據(jù)到來之前rxdata寄存器中數(shù)據(jù)要被讀取,無論數(shù)據(jù)是否被讀取新的數(shù)據(jù)都會覆蓋舊的數(shù)據(jù)。
3)txdata寄存器
主設(shè)備將要發(fā)送的字符寫到txdata寄存器,發(fā)送模塊沒有準(zhǔn)備好之前,不應(yīng)該寫字符到txdata寄存器。狀態(tài)寄存器中tflag位表示txdata寄存器狀態(tài),當(dāng)有一個數(shù)據(jù)要被發(fā)送時(shí)tflag位被置1;當(dāng)數(shù)據(jù)被裝載到移位寄存器時(shí)tflag位清0。在新數(shù)據(jù)被寫入之前舊數(shù)據(jù)要被發(fā)送出去,否則新數(shù)據(jù)將會覆蓋舊數(shù)據(jù)。
4)control寄存器
control寄存器由多個控制位構(gòu)成,每一位又可分別控制UART核的相應(yīng)內(nèi)部操作,軟件可隨時(shí)讀取其中的值。control寄存器可以對設(shè)計(jì)中數(shù)據(jù)位的位數(shù)、停止位的位數(shù)、波特率選擇進(jìn)行配置。control寄存器中的每一位允許status寄存器中相應(yīng)位irq,當(dāng)某一個狀態(tài)位和它的中斷允許位均為1時(shí),UART核產(chǎn)生一個中斷irq。
1.2 波特率模塊設(shè)計(jì)
UART傳輸數(shù)據(jù)是通過數(shù)據(jù)兩端設(shè)備來配置相同波特率以確定數(shù)據(jù)傳輸速率。波特率模塊的功能是根據(jù)不同波特率而產(chǎn)生相應(yīng)的傳輸時(shí)鐘頻率,設(shè)計(jì)中使用115200、9600兩個波特率,則時(shí)鐘分頻數(shù)=系統(tǒng)時(shí)鐘頻率/波特率。系統(tǒng)時(shí)鐘為50 MHz,當(dāng)波特率為115200時(shí)對系統(tǒng)時(shí)鐘433分頻,當(dāng)波特率為9600時(shí)對系統(tǒng)時(shí)鐘5219分頻。分頻主要通過計(jì)數(shù)器來完成。
發(fā)送模塊時(shí)鐘頻率和接受模塊時(shí)鐘頻率不一樣,接收時(shí)鐘要在發(fā)送時(shí)鐘的基礎(chǔ)上進(jìn)行16分頻。
1.3 發(fā)送模塊設(shè)計(jì)
發(fā)送模塊的功能是將數(shù)據(jù)正確地發(fā)送出去。就是把從Avalon總線寫入rxdata寄存器的數(shù)據(jù),根據(jù)UART協(xié)議要求的數(shù)據(jù)格式發(fā)送出去,其中包括:串并轉(zhuǎn)換、數(shù)據(jù)寄存器轉(zhuǎn)換、數(shù)據(jù)移位、開始位和停止位添加。
發(fā)送模塊將接收到的數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換后傳送到移位寄存器,移位寄存器向外移數(shù)據(jù)時(shí)在字首加入起始位,在字尾加入停止位。數(shù)據(jù)傳輸過程通過狀態(tài)機(jī)實(shí)現(xiàn),數(shù)據(jù)傳輸分4個狀態(tài),即idle空閑狀態(tài)、start起始狀態(tài)、shift轉(zhuǎn)移狀態(tài)、stop停止?fàn)顟B(tài),每個狀態(tài)實(shí)現(xiàn)不同功能,在信號激勵后進(jìn)行狀態(tài)轉(zhuǎn)移,4個狀態(tài)全部轉(zhuǎn)換一遍完成一次數(shù)據(jù)發(fā)送。
1.4 接收模塊設(shè)計(jì)
接收模塊的功能是檢測接收數(shù)據(jù)。將接收數(shù)據(jù)去掉起始位,停止位,把數(shù)據(jù)位串并轉(zhuǎn)換后傳送到rxdata寄存器,等待系統(tǒng)讀取數(shù)據(jù)。
對于UART核來說接收模塊比發(fā)送模塊復(fù)雜,接收模塊要對接收數(shù)據(jù)進(jìn)行采樣來檢測其數(shù)據(jù)的正確性。具體采樣過程是將接收數(shù)據(jù)采16個樣值,當(dāng)其中大于8位數(shù)為1時(shí)說明采樣數(shù)據(jù)為1;當(dāng)其中大于8位數(shù)為0時(shí)說明采樣數(shù)據(jù)為0。數(shù)據(jù)傳輸過程依然采用狀態(tài)機(jī)實(shí)現(xiàn),分為3個狀態(tài),即idle空閑狀態(tài)、shift移位狀態(tài)、stop停止?fàn)顟B(tài)。接收模塊比發(fā)送模塊少了一個start起始狀態(tài),是因?yàn)榻邮漳K中并沒有發(fā)送起始位[3]。
1.5 UART IP核仿真驗(yàn)證
1.5.1 ModelSim仿真
1)波特率模塊
波特率模塊仿真主要看內(nèi)部計(jì)數(shù)器是否計(jì)數(shù),在相應(yīng)的計(jì)數(shù)值是否產(chǎn)生時(shí)鐘。波特率模塊仿真波形圖如圖1所示。
圖1 波特率模塊仿真波形圖Fig.1 Baud module simulation waveforms
在cont_rxd_high為13時(shí)clk_out_txd變 為1,在cont_ txd_high為216時(shí)clk_out_txd變?yōu)?,波特率模塊驗(yàn)證正確。
2)發(fā)送模塊
發(fā)送模塊仿真主要查看輸入數(shù)據(jù)是否能夠正確輸出。發(fā)送模塊仿真波形圖如圖2所示。
圖2 發(fā)送模塊仿真波形圖Fig.2 Send module simulation waveforms
準(zhǔn)備發(fā)送的數(shù)據(jù)為11100101,當(dāng)txstart為1時(shí)數(shù)據(jù)開始發(fā)送,先發(fā)送起位0,數(shù)據(jù)位再一位一位地移送出去,發(fā)送模塊驗(yàn)證正確。
3)接受模塊
接受模塊仿真是查看數(shù)據(jù)是否正確地接收。接受模塊仿真波形圖如圖3所示。
接受到的起始位為0,數(shù)據(jù)位10100110被一位一位地傳送到移位寄存器中,接受模塊驗(yàn)證正確。
圖3 接受模塊仿真波形圖Fig.3 Accepted module simulation waveforms
1.5.2 Quartus II綜合和布局布線
使用Quartus II軟件將SOPC生成的HDL代碼進(jìn)行綜合和布局布線,最終生成的文件下載到FPGA開發(fā)板上。綜合后出現(xiàn)器件列表,其中包含器件型號,使用寄存器數(shù)量,使用邏輯單元數(shù)量,使用管腳數(shù)量,使用PLL數(shù)量等。
2.1 最小系統(tǒng)搭建
該系統(tǒng)用于對UART IP核測試,系統(tǒng)比較簡單只需幾個組件。使用SOPC Builder硬件平臺工具,配置最小系統(tǒng)組件包括:Nios II/s、On-Chip Merory、JTAG_UART、UART。其中:Nios II/s處理器使用標(biāo)準(zhǔn)型級別就可滿足功能需求,不需要選中MMU(內(nèi)存管理器)。On-Chip Merory有兩個片上存儲器RAM和ROM,RAM存儲數(shù)據(jù),由于設(shè)計(jì)將會使用Printf函數(shù),RAM必須選擇64KB以上;ROM存取程序,由于程序不大選擇8KB即可。UART用于測試自定義UART IP核。首先將UART IP核加到SOPC組件中,同時(shí)系統(tǒng)會生成tcl文件,該文件描述了自定義IP的所有系統(tǒng),可以修改此文件對自定義IP的所有信息進(jìn)行修改。JTAG_UART用于對程序下載調(diào)試[4]。最小系統(tǒng)的SOPC組件列表如圖4所示。
圖4 最小系統(tǒng)的SOPC組件列表Fig.4 SOPC component list of the minimum system
2.2 嵌入式系統(tǒng)搭建
該系統(tǒng)用于完成uClinux系統(tǒng)移植,系統(tǒng)比較復(fù)雜需要大量組件。主要組件有:Nios II/f、Pipeline Bridge、Tristate Bridge、SRAM、Flash、DDR SDRAM、Clock Crossing Bridge、DMA、PIO、Triple-Speed Ethernet、PS2、PLL、Pixel Conventer、Video Sync Gengrator等[6]。其中:Nios II/f處理器是CPU的最高配置,由于系統(tǒng)比較復(fù)雜,需要快速型級別才能滿足系統(tǒng)需求。DDR SDRAM控制器,由于SDRAM的讀取速度比Flash快很多,通常用來運(yùn)行軟件程序。Clock Crossing Bridge時(shí)鐘橋,用于不同時(shí)鐘頻率下的數(shù)據(jù)傳輸,內(nèi)部主要由異步FIFO組成。PLL鎖相環(huán),當(dāng)系統(tǒng)需要多個時(shí)鐘驅(qū)動時(shí),僅靠一個外部晶振不可能滿足要求,必須加入PLL提供不同時(shí)鐘,這里60MHZ用于低速外部接口控制器,100MHZ給CPU供時(shí),133MHZ給SDRAM供時(shí)。Pixel Conventer用于RGB數(shù)據(jù)傳輸。Video Sync Gengrator用于控制LCD[6]。嵌入式系統(tǒng)的SOPC組件列表如圖5所示。
在實(shí)際搭建嵌入式系統(tǒng)時(shí),許多器件配置不僅要考慮外圍芯片的時(shí)序要求,還要考慮內(nèi)部系統(tǒng)總線的時(shí)序要求。每個組件都必須有自己的時(shí)鐘、基地址,為每個組件正確地分配地址是比較復(fù)雜的。由于CPU的尋址空間為4GB,通常把0x00000000到0x1FFFFFFF作為寄存器地址空間。可以把同一個時(shí)鐘頻率的組件劃為一個地址空間區(qū)。組件的實(shí)際地址等于基地址加地址偏移量。
UART驅(qū)動開發(fā)是利用超級終端實(shí)現(xiàn)SOPC嵌入式開發(fā)板(Altera公司的EP3C40 FPGA開發(fā)套件V6工作平臺)與上位機(jī)之間的正常通信,即PC機(jī)向開發(fā)板發(fā)送數(shù)據(jù),同時(shí)開發(fā)板把接收的數(shù)據(jù)再發(fā)送給PC機(jī),在超級終端上回顯。
Nios II IDE集成開發(fā)環(huán)境用于完成基于Nios II系統(tǒng)的軟件開發(fā)和調(diào)試,Nios II IDE提供了HAL系統(tǒng)庫里的兩個重要文件,一個為system.h系統(tǒng)描述文件,提供Nios II系統(tǒng)硬件的軟件描述;另一個為io.h文件,io接口操作文件提供了3種對io口操作的函數(shù),即對8、16、32位數(shù)據(jù)操作函數(shù),由于UART IP核采用32位靜態(tài)地址對齊方式,故軟件 使用對32位數(shù)據(jù)操作函數(shù)IORD、IOWR,這兩個函數(shù)的功能是將數(shù)據(jù)寫/讀到基地址+偏移量*數(shù)據(jù)總線位數(shù)/8。
UART的測試軟件流程為:首先對control寄存器初始化(寫入0x0000),然后系統(tǒng)不斷查詢status寄存器的rflag位,當(dāng)rflag位為1時(shí)說明rxdata寄存器接收了一個新數(shù)據(jù);當(dāng)tflag位為0時(shí)說明txdata寄存器為空可以寫入數(shù)據(jù),將接收到的數(shù)據(jù)寫到txdata寄存器中,發(fā)送給PC機(jī),最終在超級終端上能夠顯示發(fā)送和接受的數(shù)據(jù)。
圖5 嵌入式系統(tǒng)的SOPC組件列表Fig.5 SOPC component list of the embedded system
在使用超級終端測試之前必須對超級終端進(jìn)行設(shè)置,在超級終端屬性欄的“ASCII碼設(shè)置”里,把“ASCII碼接收”、“ASCII碼發(fā)送”全部選中,只有這樣才能在超級終端上查看發(fā)送的數(shù)據(jù)。經(jīng)測試,每發(fā)送一個數(shù)據(jù)都能在超級終端正確回顯,如圖6所示。
圖6 在超級終端上的數(shù)據(jù)回顯Fig.6 Data on the HyperTerminal echo
4.1 建立有關(guān)文件系統(tǒng)
向SOPC嵌入式系統(tǒng)開發(fā)板移植uClinux操作系統(tǒng)主要是為了更自主地開發(fā),實(shí)現(xiàn)系統(tǒng)更高級功能。uClinux操作系統(tǒng)是針對沒有內(nèi)存管理器的微處理器的操作系統(tǒng)。這里移植的nios2-linux-20100621,需要從Altera官方網(wǎng)站下載系統(tǒng)源代碼,由于該系統(tǒng)使用git進(jìn)行管理,在移植系統(tǒng)之前必須具備EPEL安裝包,其為遠(yuǎn)程軟件倉庫管理軟件。nios2-linux-20100621軟件包里面幾乎沒有什么軟件包,必須安裝git、make、gcc等相關(guān)軟件。要在PC機(jī)上編譯Nios II程序,需要安裝交叉編譯器nios2gcc-20080203.tar.bz2。
4.2 移植系統(tǒng)
系統(tǒng)移植需要兩個很重要的文件nios.h和config.c。開發(fā)包通過nios.h文件來管理SOPC組件與uClinux內(nèi)核驅(qū)動設(shè)備的地址映射;config.c文件包含了大部分設(shè)備驅(qū)動支持,各個設(shè)備要通過讀取該文件來獲得設(shè)備驅(qū)動支持。
在移植前必須將兩個文件里的內(nèi)容對比一下,檢查兩個文件的宏定義是否相同。進(jìn)入uClinux-dist目錄輸入make menuconfig配置內(nèi)核,如果第一次配置內(nèi)核必須選擇默認(rèn)選項(xiàng),再生成鏡像文件,保存退出后系統(tǒng)會顯現(xiàn)有錯誤,因?yàn)闆]有指定PTF文件(PTF文件是SOPC生成的系統(tǒng)文件,里面定義了所有關(guān)于SOPC組件的信息),把系統(tǒng)生成的PTF文件復(fù)制到/opt目錄下,定義為nios.ptf。在uClinux-dist目錄下執(zhí)行配置硬件信息文件命令make vendor_hwselect SYSPTF=/opt/nios.ptf之后,系統(tǒng)提示選擇CPU以及運(yùn)行程序的存儲器,選擇后就可以配置內(nèi)核了。
Nios2-linux-20100621通過git來管理,輸入git-branch-l查看分支列表,轉(zhuǎn)到test-nios2 branch目錄下。執(zhí)行make menuconfig后,進(jìn)入系統(tǒng)自定義配置列表,可以根據(jù)自己需要配置內(nèi)核,比如開發(fā)板類型選擇??刂婆_選擇UART,保存退出系統(tǒng)會進(jìn)入應(yīng)用程序配置,可以在這里配置文件系統(tǒng)GUI、Busybox等,保存退出后,輸入make命令來制作系統(tǒng)映像文件,映像文件生成在image文件里的zImage,到此uClinux移植完畢[7]。
啟動nios2 command shell,將生成的zImage燒寫到開發(fā)板的SDRAM中,同時(shí)打開超級終端,超級終端顯示的系統(tǒng)加載如圖7所示。
在超級終端中輸入ls命令,到此系統(tǒng)移植成功,超級終端顯示的系統(tǒng)文件如圖8所示。
使用Altera公司的Cyclone III為FPGA開發(fā)芯片,經(jīng)過基于Avalon總線的UART IP核設(shè)計(jì)及其驅(qū)動過程,在SOPC嵌入式硬件系統(tǒng)[8]中加以實(shí)體性驗(yàn)證,表明自定義設(shè)計(jì)的UART IP核各項(xiàng)功能均達(dá)到預(yù)期要求,實(shí)現(xiàn)了UART的通信功能和uClinux操作系統(tǒng)移植。這種設(shè)計(jì)方法大大縮短了嵌入式系統(tǒng)的軟硬件開發(fā)時(shí)間,增加了系統(tǒng)的靈活性、擴(kuò)展性和實(shí)用性,有效地提高了系統(tǒng)的開發(fā)效率,是當(dāng)今科技含量較高的設(shè)計(jì)思路及實(shí)現(xiàn)方法,具有廣闊的應(yīng)用領(lǐng)域和前景。
圖7 超級終端顯示系統(tǒng)加載Fig.7 HyperTerminal display system load
圖8 超級終端顯示系統(tǒng)文件Fig.8 HyperTerminal display system files
[1] 周立功.SOPC嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2006:16-21.
[2] 李秋菊,楊銀堂,高海霞.基于Verilog HDL的UART IP的設(shè)計(jì)[J].半導(dǎo)體技術(shù),2007,32(6):520-523.
LI Qiu-ju,YANG Yin-tang,GAO Hai-xia.Design of UART Based on Verilog HDL[J].Semiconductor Technology,2007,32(6):520-523.
[3] 鄧偉,徐揚(yáng)婧.基于SOPC技術(shù)的異步串行通信IP核的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2012,20(3):185-188.
DENG Wei,XU Yang-jing.A UART IP Implementation Based on SoPC[J].Electronic Design Engineering,2012,20(3):185-188.
[4] 王剛,張瀲.基于FPGA的SOPC嵌入式系統(tǒng)設(shè)計(jì)與典型實(shí)例[M].北京:電子工業(yè)出版社,2009:250-282.
[5] Altera Corporation.SOPCBuilderUserGuideVersion1.0[EB/OL].[2010-12-01].http//:www.altera.com.cn/literature/ug/ug_sopc_ builder.pdf.
[6] Altera Corporation.Embedded Peripherals IP User Guide[EB/OI].[2010-12-01].http//:www.altera.com.cn/literature/ug/ug_ embedded_ip.pdf.
[7] 巨政權(quán),原亮,滿夢華,等.SOPC系統(tǒng)建立及uClinux移植實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2009,25(11):43-45.
JU Zheng-quan,YUAN Liang,MAN Meng-hua,et al.Establishment of SOPC System with Implementation of uClinux[J].Microcomputer Information,2009,25(11):43-45.
[8] 薛慧敏,武傳華,路后兵.基于SoPC的分布式干擾系統(tǒng)嵌入式網(wǎng)關(guān)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011(6):121-123,127.
XUE Hui-min,WU Chuan-hua,LU Hou-bing.Design of distributed jamming system embedded gateway based on SoPC [J].Modern Electronics Technique,2011(6):121-123,127.
UART IP core design and driver development and system transplanted based on SOPC
CUI Xu-jing,LI Tian-lei
(1.School of Information Science and Engineering,Shenyang Ligong University,Shenyang 110015,China;2.AVIC Shenyang Engine Design and Research Institute,Shenyang 110015,China )
UART IP core Design of embedded systems based on SOPC,according to UART protocol,using Verilog HDL conducted each module design,using ModelSim,Quartus II for simulation and synthesis results show that the UART IP core functions properly,stable and reliable.According to the Avalon bus interface protocol UART mounted on the system bus,achieved the establishment of SOPC embedded hardware system for UART IP core driver development.Use HyperTerminal for communication between the host computer and embedded systems,and successfully transplanted uClinux operating system,advanced control for embedded systems.
SOPC;UART;Avalon bus;IP core;uClinux.
TN332
A
1674-6236(2014)11-0121-05
2014-02-19 稿件編號:201402098
遼寧省教育廳高??蒲杏?jì)劃項(xiàng)目(L2010482)
崔旭晶(1964—),女,天津人,碩士,副教授。研究方向:嵌入式技術(shù)、集成電路設(shè)計(jì)。