王一平 , 王代強 ,2
(1.貴州大學 貴州 貴陽 550025;2.貴州大學 人民武裝學院,貴州 貴陽 550025)
SOPC技術自2000年提出以來,以其靈活性、可裁剪和擴展、系統(tǒng)可編程等優(yōu)點被廣泛應用于通信、軍事等嵌入式領域。SOPC技術以NiosⅡ處理器為核心采用軟硬件協(xié)同設計方案以及IP核復用等技術使得它在可靠性、體積、功耗、設計周期等方面實現(xiàn)了最優(yōu)化,是未來的SOC和嵌入式發(fā)展的方向。
傳統(tǒng)的UART專用芯片引腳多、內部還有許多其他的功能模塊、占用面積大使得電路設計復雜,PCB面積增加。相對于集成度越來越高的SOC系統(tǒng)來說越來越不符合要求。而基于SOPC技術的UART設計可以合理應用在含有FPGA器件的系統(tǒng)中,將UART集成其中起到節(jié)約PCB面積的作用[1]。
文中設計了一種基于NiosⅡ的UART,并在EP2C8Q208C芯片上通過串口調試工具加以驗證。
串行異步接口即通用的異步收發(fā)器(UART,Universal Asynchronous Receiver Transmitter)成本低、傳輸線少、可靠性高因而應用廣泛于。根據(jù)通信接口的傳輸速率、電氣特性、連接特性等的不同, 有 RS-232、RS-423、RS-499、RS-485等不同的通信協(xié)議。其中RS-232是目前廣泛采用的一個標準,常用于短距離、低速、低成本的通信[1-2]。
RS-232的基本通信只需要兩條信號線(RXD、TXD)就可以完成數(shù)據(jù)的相互通信,接受和發(fā)生采用全雙工形式,RXD是接受輸入端,TXD是發(fā)送輸入端。其基本的通信協(xié)議十分簡單:以低電平為起始位,高電平為停止位,中間可傳輸5~8比特數(shù)據(jù)和1比特奇偶校驗位,奇偶校驗位的有無和數(shù)據(jù)比特的長度由通信雙方約定,一幀數(shù)據(jù)傳輸完畢后可以繼續(xù)傳輸下一幀數(shù)據(jù),也可以繼續(xù)保持為高電平,兩幀之間保持高電平,持續(xù)時間可以任意長。圖1為UART的數(shù)據(jù)幀的格式。
圖1 UART的數(shù)據(jù)幀格式Fig.1 UART data frame form
1)系統(tǒng)的整體硬件結構
SOPC系統(tǒng)一般Nios軟核cpu、存儲器、I/O等構成。用戶的根據(jù)需求選擇Nios軟核、存儲器、IP核或自定義IP核,分配好內存地址和中斷優(yōu)先級別,就構成了所需要的系統(tǒng)。Nios軟核與UART核、其他IP核、SDRAM等通過Avalon總線僑聯(lián)并與外設相連[3]。
NiosⅡ提供3種供用戶選擇的軟核,在本文設計中我們選擇NiosⅡ/e(經(jīng)濟型)軟核,并調用系統(tǒng)自帶的UART核(RS232)、epcs、sdram等構成系統(tǒng),并設置好中斷級別和內存地址,就生成了SOPC系統(tǒng)[4]。由于用到了SDRAM需要調用控制外部的sdram器件,由FPGA引入時鐘信號后需要加上一個鎖相環(huán)(PLL)模塊倍頻生成Nios系統(tǒng)和sdram的控制信號,并設置兩個控制信號間的相位差。整體系統(tǒng)的電路原理圖如圖2所示。
圖2 SOPC系統(tǒng)的組件Fig.2 SOPC system’smodule
2)UART 核的設置
作為整個系統(tǒng)的核心的UART核,是一款quartus軟件自帶的IP核。它內部是包括波特率除數(shù)寄存器、接收寄存器、發(fā)送寄存器、移位寄存器等。它提供目標系統(tǒng)與開發(fā)系統(tǒng)的連接。從功能設計上看:它與Nios軟核通過avalonz總線結構連接,并提供外部的電平轉換模塊的接口。
UART核中初始的波特率設置為115200,Baud rate can be changed by software選項設置成允許軟件設置波特率;檢驗方式、數(shù)據(jù)位、停止位等設置為none、8和1。
3)電平轉換電路模塊
本文中采用的RS-232標準規(guī)定邏輯1的電平為-15~-3 V,邏輯0的電平為+3~+15 V。COMS電路的電平范圍一般是從0 V到電源電壓,F(xiàn)PGA的I/O輸入輸出電壓通常為0~3.3 V,為了保證 FPGA設計的 UART接口與 RS-232電平保持一致,必須加電平轉換芯片,進行UART的TTL/COMS電平與RS-232電平的轉換[5]。本設計采用MAX232電平轉換芯片,支持兩個串口的電平轉換。
1)UART核的寄存器結構及C語言描述
根據(jù)表1中UART核的寄存器結構[6-7],筆者在 sopc.h文件中定義一個UART_ST的結構體。它包含在硬件中用到的接收數(shù)據(jù)位、發(fā)送數(shù)據(jù)位、狀態(tài)、控制及除數(shù)五個共用體。其中的每個共用體根據(jù)偏移量決定順序,并包括一個結構體和用于整體清零WORD的變量。在sopc.h中還用宏定義聲明了UART的基地址。然后需要編寫一個uart.h文件用于以結構體形式聲明UART核工作所用到的receive_flag、receive_count、*init等Nios開發(fā)包自帶的需要用到的UART函數(shù)。編寫sopc.h及uart.h文件是為了在后面編寫UART核的驅動時候方便調用。
表1 UART核寄存器映射Tab.1 UART nuclear register map
2)UART核的驅動描述
在編寫成功前面 sopc.h及 uart.h文件后, 需要根據(jù)UART的工作原理編寫RS232工作的驅動文件uart.c。
在uart.c文件中我們要聲明定義以下函數(shù):
①intuart_send_byte(unsigned char data)用于發(fā)送一個字節(jié)
②void uart_send_string (unsigned int len, unsigned char*str)發(fā)送字符串數(shù)據(jù)
③intset_baudrate(unsigned intbaudrate)軟件設置波特率
④void uart_ISR(void)聲明 uart所用到的中斷
⑤int uart_init(void)初始化 uart等等。
版面關系僅列舉uart_send_byte函數(shù)的代碼:
整個系統(tǒng)的軟件硬件部分都編輯完成后首先通過quartus和Nios IDE軟件編譯并將硬件仿真無錯誤后下載到目標芯片EP2C8Q208C中通過串口調試工具實現(xiàn)PC機和UART的通信。
圖3 串口的調試Fig.3 Serial port debugging
基于NiosⅡ設計的UART在以FPGA為核心控制芯片的嵌入式系統(tǒng)中有著一定的優(yōu)勢,可以節(jié)約PCB面積并且具有成本低、易于升級等優(yōu)點。該系統(tǒng)實現(xiàn)了基本的UART功能,并且后續(xù)的可以通過添加FIFO模塊提升傳輸容量等。
[1]Ahera Corporation.NiosⅡ proce,~sor reference handbook[S].[S.1.]Ahera Corporation,2003.
[2]任愛鋒,初秀琴.基于FPGA的嵌入式系統(tǒng)設計[M].西安:西安電子科技大學出版社,2004.
[3]Ahera Corporation.Quartus 11 version 6.0 handbook[S].[S.1.]Ahera Corporation,2006.
[4]鄭啞民,董曉舟.可編程邏輯器件開發(fā)軟件Quartus II[M].北京:國防工業(yè)出版社,2006.
[5]夏宇聞.Verilog數(shù)字系統(tǒng)設計教程[M].北京:北京航空航天出版社,2003.
[6]王建校,危建國.SOPC設計基礎與實踐[M].西安:西安電子科技大學出版社,2006.
[7]張志剛.FPGA與SOPC設計教程——DE2實踐[M].西安:西安電子科技大學出版社,2007.