Virtex-5FPGA設(shè)計Gbps無線通信基站
1、引言
隨著集成電路(IC)技術(shù)進入深亞微米時代,片上系統(tǒng)SoC(System-on-a-Chip)以其顯著的優(yōu)勢成為當代IC設(shè)計的熱點?;谲浻布f(xié)同設(shè)計及IP復(fù)用技術(shù)的片上系統(tǒng)具有功能強大、高集成度和低功耗等優(yōu)點,可顯著降低系統(tǒng)體積和成本,縮短產(chǎn)品上市的時間。IP核是SoC設(shè)計的一個重要組成部分,已成為目前微電子設(shè)計的熱點和主要方向[1]。
UART 核以其可靠性、傳送距離遠的特點被廣泛應(yīng)該到通信系統(tǒng)和嵌入式微處理器上。利用傳統(tǒng)的EDA工具通過對RTL代碼仿真、驗證、綜合、布局布線后生成網(wǎng)表,下載到FPGA中實現(xiàn),這樣做成的核主要用于驗證的[2],不適合用來做掩膜。在ASIC/SoC技術(shù)日漸成熟的今天,設(shè)計商更希望得到能夠做掩膜的IP核,從而便于嵌入到ASIC/SoC設(shè)計中。本文描述的UART核采用SYNOPSYS軟件的設(shè)計流程,在RTL級上進行優(yōu)化,解決了綜合優(yōu)化中碰到的一些常見問題。利用VCS 仿真、編寫測試激勵來驗證,最后用design compile 綜合優(yōu)化做成的IP核可以滿足此要求,應(yīng)用到ASIC/SoC設(shè)計中將產(chǎn)生巨大的效益。
2、UART核的功能分析和設(shè)計
2.1 UART 核的傳輸協(xié)議與總體模塊設(shè)計
通常信息是通過數(shù)據(jù)幀來傳送的,由起始位、8位數(shù)據(jù)位、停止位組成。起始位為低電平,表示串行數(shù)據(jù)開始傳輸,停止位為高電平,表示數(shù)據(jù)傳送結(jié)束。
UART的結(jié)構(gòu)框圖如圖1所示[3],主要有由波特率發(fā)生器、發(fā)送部分和接收部分等組成。本設(shè)計采用全雙工異步通信的方式,通過層次結(jié)構(gòu)化、劃分模塊的方法來實現(xiàn)。
圖1 UART 的結(jié)構(gòu)框圖
2.2 UART 核的功能設(shè)計
2.2.1 波特率發(fā)生器
波特率是用來實現(xiàn)數(shù)據(jù)接收和發(fā)送的異步,波特率實際上就是分頻器。UART的數(shù)據(jù)接收和發(fā)送是通過對波特率的設(shè)置進行實現(xiàn)的,本文采用16分頻[3]。
2.2.2 接收器模塊設(shè)計
接收器模塊將8 位串行數(shù)據(jù)并行發(fā)出,用loadbuf 信號來裝載八位串行數(shù)據(jù)。接收8位串行數(shù)據(jù)之前先要判斷起始位;當起始位到來后經(jīng)過5個clk16x采樣,使采樣點接近中央位置,這樣數(shù)據(jù)穩(wěn)定。然后每過16個時鐘clk16x后,將8位串行數(shù)據(jù)逐位接收進來。當數(shù)據(jù)接收完畢,檢查是否到達停止位,若是則表示接收成功,否則出現(xiàn)幀錯誤(framing_err), 并重新檢測等待。當數(shù)據(jù)接收完畢后,等待數(shù)據(jù)的并行發(fā)出,當中斷信號(rask)有效時發(fā)送數(shù)據(jù)。
接收數(shù)據(jù)停止位的判斷采用9位移位寄存器(shift_reg)來實現(xiàn)。開始時將shift_reg全部置1,當16個clk16x到來時候,將串行數(shù)據(jù)從低位到高位逐位地移入到shift_reg的低位到高位。每接收一位數(shù)據(jù)后,判斷是否接收完,由于起始位是最先進入shift_reg的,所以當數(shù)據(jù)全部接收完后。起始位已經(jīng)進入了shift_reg的最后一位,表示數(shù)據(jù)接收完,如果在接收到停止位的邏輯是0,則表示產(chǎn)生幀錯誤(framing_err),等待再次檢測直到停止位為1,表示接收完畢。采用狀態(tài)機來實現(xiàn)數(shù)據(jù)起始位、停止位的判斷和串行數(shù)據(jù)的接收[4]。
圖2給出了接收模塊的仿真波形。由波形可以看出,當輸入0F0H,并行輸出正確,其中state、reset、clk1x、flag、dout和rbuffer分別是狀態(tài)機、復(fù)位信號、使異步的時鐘同步、數(shù)據(jù)發(fā)送出去的標志、并行數(shù)據(jù)輸出和數(shù)據(jù)緩沖器,而ask、rask和flag是中斷發(fā)送控制,其中rask是控制數(shù)據(jù)發(fā)送。
圖2 接收模塊的仿真波形
2.2.3 發(fā)送器模塊設(shè)計
發(fā)送器模塊將8位并行數(shù)據(jù)串行發(fā)出,用wr寫信號裝載并行進來的8位數(shù)據(jù)到9位移位寄存器(shift_reg)的低8位,最高位置為0,表示數(shù)據(jù)的起始位,數(shù)據(jù)發(fā)送完后發(fā)送1。
數(shù)據(jù)發(fā)送前先發(fā)送1表示等待數(shù)據(jù)的到來。等待16個clk16x之后,先發(fā)送一個1,再過16個clk16x之后,發(fā)送起始位0;以后每過16個clk16x,發(fā)送一位數(shù)據(jù),直到數(shù)據(jù)發(fā)送完。16個clk16x用計數(shù)器設(shè)計,數(shù)據(jù)發(fā)送用狀態(tài)機實現(xiàn)。為了避免時序問題以及保證可測試性,采用單時鐘沿同步觸發(fā),在15個clk16x到來時,將clk1x置1,在下一個clk16x時鐘的上升沿到來后發(fā)送一位數(shù)據(jù),由于clk1x為高電平持續(xù)時間為一個clk16時鐘周期,也就是在clk1x的下降沿把一位數(shù)據(jù)發(fā)送出去。即
always@(posedge clk16x)
…………
if(clk1x==1)
…………
圖3給出發(fā)送模塊的仿真波形。由波形可以看出,當輸入的并行數(shù)據(jù)是70H,串行輸出正確,其中state、reset、clk1 x、flag和dout分別是狀態(tài)機、 復(fù)位信號、使異步的時鐘同步、數(shù)據(jù)發(fā)送出去的標志和串行數(shù)據(jù)輸出,而div8和ask分別是4位計數(shù)器和中斷請求信號。
圖3 發(fā)送模塊的仿真波形
3 UART 核的仿真、驗證與綜合、優(yōu)化
3.1 UART 核的仿真和驗證
UART的功能仿真與驗證通過測試平臺(testbench)使用SYNOPSYS軟件的VCS工具,其流程如圖4所示[5]。接收和發(fā)送數(shù)據(jù)的正確性已通過圖2和3所示仿真波形驗證了。
圖4 基于testbench 的仿真流程
3.2 UART 核的綜合、優(yōu)化
3.2.1 綜合存在的問題
一般在UART設(shè)計中,采用多時鐘,電平觸發(fā),并且判斷數(shù)據(jù)的起始和停止采用額外的存儲器或計數(shù)器,這必然給驗證和綜合優(yōu)化帶來時序上的問題,同時會產(chǎn)生毛刺和亞穩(wěn)態(tài),使得電路設(shè)計不夠完善。
3.2.2 毛刺的解決
在通常的UART設(shè)計中存在組合邏輯,當輸入的信號由高電平變低電平而其它某個信號由低電平變高電平時,由于在信號變化的瞬間,組合邏輯的輸出并非同時變化,而是有先后之分,將導(dǎo)致輸出出現(xiàn)尖脈沖,即產(chǎn)生毛刺。本文采用時鐘沿(上升沿)觸發(fā),即將組合邏輯輸出端通過加到寄存器后輸出,從而避免毛刺的產(chǎn)生。
3.2.2 多時鐘與亞穩(wěn)態(tài)的解決
在通常的UART設(shè)計中,由于CPU時鐘與UART的數(shù)據(jù)接收、發(fā)送時鐘是處在不同的時鐘域,時鐘頻率和相位上存在差異,導(dǎo)致時序不能滿足建立時間和保持時間的要求,即數(shù)據(jù)的輸出處于不確定狀態(tài),從而出現(xiàn)時序違反(slack<0)和亞穩(wěn)態(tài)。本文通過采用同步電路設(shè)計,有效地解決時序和亞穩(wěn)態(tài)的問題[6][7]。
3.2.3 UART 核的綜合與優(yōu)化
通過對RTL級進行優(yōu)化,再仿真驗證正確后,可以對UART核進行綜合優(yōu)化。本文采用SYNOPSYS軟件的design compile進行綜合優(yōu)化,利用tcl(tool command language)語言編寫綜合優(yōu)化的腳本。采用0.35um的工藝,將時鐘周期設(shè)置為5ns,在滿足時序(slack>0)的基礎(chǔ)上經(jīng)過綜合優(yōu)化,生成的時序、功耗、面積等參數(shù)如表1所示,優(yōu)化后的功耗和面積滿足了ASIC/SoC的要求。
表1 接收/發(fā)送模塊綜合得出的功耗、面積、時序等參數(shù)
4 結(jié)束語
本文利用SYNOPSYS軟件設(shè)計IP核,更適合用于ASIC/SoC設(shè)計,而采用傳統(tǒng)的EDA軟件實現(xiàn)的則適合用在FPGA上,不適合用來做掩膜生成ASIC/SoC。本UART核的邏輯設(shè)計采用VerilogHDL語言,用狀態(tài)機和移位寄存器設(shè)計使整個設(shè)計的時序清晰,同時減少了接收模塊停止位的判斷,通過對RTL級優(yōu)化避免了毛刺、亞穩(wěn)態(tài)、多時鐘等問題,仿真和驗證采用的是SYNOPSYS軟件的VCS,通過對時序、功耗、面積的綜合考慮,最后通過SYNOPSYS軟件的design compile 綜合優(yōu)化完成的IP 核可成功應(yīng)用到ASIC/SoC 設(shè)計上。
本文作者創(chuàng)新點是利用SYNOPSYS軟件設(shè)計IP核,適合直接應(yīng)用到ASIC/SoC設(shè)計中,并對RTL級做了優(yōu)化,消除了在UART設(shè)計中碰到毛刺、亞穩(wěn)態(tài)、多時鐘等問題;通過測試平臺(testbench)來仿真和驗證,RTL 代碼精簡,時序、面積和功耗都做了優(yōu)化,達到了IP核的要求。