王一平 , 王代強 ,2
(1.貴州大學 貴州 貴陽 550025;2.貴州大學 人民武裝學院,貴州 貴陽 550025)
SOPC技術自2000年提出以來,以其靈活性、可裁剪和擴展、系統可編程等優點被廣泛應用于通信、軍事等嵌入式領域。SOPC技術以NiosⅡ處理器為核心采用軟硬件協同設計方案以及IP核復用等技術使得它在可靠性、體積、功耗、設計周期等方面實現了最優化,是未來的SOC和嵌入式發展的方向。
傳統的UART專用芯片引腳多、內部還有許多其他的功能模塊、占用面積大使得電路設計復雜,PCB面積增加。相對于集成度越來越高的SOC系統來說越來越不符合要求。而基于SOPC技術的UART設計可以合理應用在含有FPGA器件的系統中,將UART集成其中起到節約PCB面積的作用[1]。
文中設計了一種基于NiosⅡ的UART,并在EP2C8Q208C芯片上通過串口調試工具加以驗證。
串行異步接口即通用的異步收發器(UART,Universal Asynchronous Receiver Transmitter)成本低、傳輸線少、可靠性高因而應用廣泛于。根據通信接口的傳輸速率、電氣特性、連接特性等的不同, 有 RS-232、RS-423、RS-499、RS-485等不同的通信協議。其中RS-232是目前廣泛采用的一個標準,常用于短距離、低速、低成本的通信[1-2]。
RS-232的基本通信只需要兩條信號線(RXD、TXD)就可以完成數據的相互通信,接受和發生采用全雙工形式,RXD是接受輸入端,TXD是發送輸入端。其基本的通信協議十分簡單:以低電平為起始位,高電平為停止位,中間可傳輸5~8比特數據和1比特奇偶校驗位,奇偶校驗位的有無和數據比特的長度由通信雙方約定,一幀數據傳輸完畢后可以繼續傳輸下一幀數據,也可以繼續保持為高電平,兩幀之間保持高電平,持續時間可以任意長。圖1為UART的數據幀的格式。

圖1 UART的數據幀格式Fig.1 UART data frame form
1)系統的整體硬件結構
SOPC系統一般Nios軟核cpu、存儲器、I/O等構成。用戶的根據需求選擇Nios軟核、存儲器、IP核或自定義IP核,分配好內存地址和中斷優先級別,就構成了所需要的系統。Nios軟核與UART核、其他IP核、SDRAM等通過Avalon總線僑聯并與外設相連[3]。
NiosⅡ提供3種供用戶選擇的軟核,在本文設計中我們選擇NiosⅡ/e(經濟型)軟核,并調用系統自帶的UART核(RS232)、epcs、sdram等構成系統,并設置好中斷級別和內存地址,就生成了SOPC系統[4]。由于用到了SDRAM需要調用控制外部的sdram器件,由FPGA引入時鐘信號后需要加上一個鎖相環(PLL)模塊倍頻生成Nios系統和sdram的控制信號,并設置兩個控制信號間的相位差。整體系統的電路原理圖如圖2所示。

圖2 SOPC系統的組件Fig.2 SOPC system’smodule
2)UART 核的設置
作為整個系統的核心的UART核,是一款quartus軟件自帶的IP核。它內部是包括波特率除數寄存器、接收寄存器、發送寄存器、移位寄存器等。它提供目標系統與開發系統的連接。從功能設計上看:它與Nios軟核通過avalonz總線結構連接,并提供外部的電平轉換模塊的接口。
UART核中初始的波特率設置為115200,Baud rate can be changed by software選項設置成允許軟件設置波特率;檢驗方式、數據位、停止位等設置為none、8和1。
3)電平轉換電路模塊
本文中采用的RS-232標準規定邏輯1的電平為-15~-3 V,邏輯0的電平為+3~+15 V。COMS電路的電平范圍一般是從0 V到電源電壓,FPGA的I/O輸入輸出電壓通常為0~3.3 V,為了保證 FPGA設計的 UART接口與 RS-232電平保持一致,必須加電平轉換芯片,進行UART的TTL/COMS電平與RS-232電平的轉換[5]。本設計采用MAX232電平轉換芯片,支持兩個串口的電平轉換。
1)UART核的寄存器結構及C語言描述
根據表1中UART核的寄存器結構[6-7],筆者在 sopc.h文件中定義一個UART_ST的結構體。它包含在硬件中用到的接收數據位、發送數據位、狀態、控制及除數五個共用體。其中的每個共用體根據偏移量決定順序,并包括一個結構體和用于整體清零WORD的變量。在sopc.h中還用宏定義聲明了UART的基地址。然后需要編寫一個uart.h文件用于以結構體形式聲明UART核工作所用到的receive_flag、receive_count、*init等Nios開發包自帶的需要用到的UART函數。編寫sopc.h及uart.h文件是為了在后面編寫UART核的驅動時候方便調用。

表1 UART核寄存器映射Tab.1 UART nuclear register map
2)UART核的驅動描述
在編寫成功前面 sopc.h及 uart.h文件后, 需要根據UART的工作原理編寫RS232工作的驅動文件uart.c。
在uart.c文件中我們要聲明定義以下函數:
①intuart_send_byte(unsigned char data)用于發送一個字節
②void uart_send_string (unsigned int len, unsigned char*str)發送字符串數據
③intset_baudrate(unsigned intbaudrate)軟件設置波特率
④void uart_ISR(void)聲明 uart所用到的中斷
⑤int uart_init(void)初始化 uart等等。
版面關系僅列舉uart_send_byte函數的代碼:

整個系統的軟件硬件部分都編輯完成后首先通過quartus和Nios IDE軟件編譯并將硬件仿真無錯誤后下載到目標芯片EP2C8Q208C中通過串口調試工具實現PC機和UART的通信。

圖3 串口的調試Fig.3 Serial port debugging
基于NiosⅡ設計的UART在以FPGA為核心控制芯片的嵌入式系統中有著一定的優勢,可以節約PCB面積并且具有成本低、易于升級等優點。該系統實現了基本的UART功能,并且后續的可以通過添加FIFO模塊提升傳輸容量等。
[1]Ahera Corporation.NiosⅡ proce,~sor reference handbook[S].[S.1.]Ahera Corporation,2003.
[2]任愛鋒,初秀琴.基于FPGA的嵌入式系統設計[M].西安:西安電子科技大學出版社,2004.
[3]Ahera Corporation.Quartus 11 version 6.0 handbook[S].[S.1.]Ahera Corporation,2006.
[4]鄭啞民,董曉舟.可編程邏輯器件開發軟件Quartus II[M].北京:國防工業出版社,2006.
[5]夏宇聞.Verilog數字系統設計教程[M].北京:北京航空航天出版社,2003.
[6]王建校,危建國.SOPC設計基礎與實踐[M].西安:西安電子科技大學出版社,2006.
[7]張志剛.FPGA與SOPC設計教程——DE2實踐[M].西安:西安電子科技大學出版社,2007.