史 赟,鄭永秋,任勇峰
(中北大學電子測試技術國家重點實驗室,山西太原 030051)
在高速通信過程中,發(fā)送方和接收方之間沒有握手信號,發(fā)送方不停地向接收方發(fā)送數(shù)據(jù),而不管接收方的狀態(tài)。接收方要將收到的數(shù)據(jù)通過USB電纜上傳到終端計算機進行分析,需要數(shù)據(jù)緩存保證數(shù)據(jù)流中的數(shù)據(jù)不丟失,而終端計算機對其內部的USB設備是通過輪詢算法檢測的,每次讀完USB設備中的512 Byte數(shù)據(jù)后,向USB設備發(fā)送讀請求,就去檢測其他設備,直到下次檢測到USB設備,才會讀走數(shù)據(jù)??梢钥闯?,讀數(shù)操作是不連續(xù)的,在終端計算機進程任務繁重時,對USB設備的檢測周期就會延長,滯留在USB設備中的512 Byte數(shù)據(jù)不能被及時讀走,就不會向接收方發(fā)送讀數(shù)請求,接收方的可編程門陣列(field programmable gate array,F(xiàn)PGA)不斷接收數(shù)據(jù),數(shù)據(jù)在FPGA中存儲,而利用FPGA內部的先進先出(first in first out,F(xiàn)IFO)作為緩存,其容量有限,很容易導致緩存溢出,出現(xiàn)丟數(shù)問題。因此,需要較大的存儲介質作為數(shù)據(jù)緩存,而靜態(tài)隨機存儲器(static random access memery,SRAM)具備讀寫速度快,控制簡單,已廣泛應用于需要快速存取數(shù)據(jù)的場合[1]。
本文在FPGA外部引入容量為1MByte的SRAM作為外部緩存,設計并實現(xiàn)了三級緩存結構,輸入級和輸出級緩存為FPGA內部的FIFO,用于實現(xiàn)與發(fā)送方和終端計算機的通信接口,中間級緩存為SRAM,作為核心存儲,對數(shù)據(jù)進行實時緩存。利用FPGA控制數(shù)據(jù)的傳輸和對SRAM的讀寫操作,簡化了硬件設計和邏輯設計[2]。
圖1為三級緩存結構示意圖。一級緩存為數(shù)據(jù)的輸入緩存,是三級緩存結構與外部的輸入接口,它是利用FPGA內部的BLOCK RAM構成的,F(xiàn)PGA選用XILINX公司的Spartan3系列的XC3S200芯片,選用其內部容量為2 KByte的同步雙口RAM(RAMB16_S9_S9)構成一個8位數(shù)據(jù)位寬,容量為2 KByte的內部FIFO。與之對稱的是三級緩存,它的構造和一級緩存一樣,是數(shù)據(jù)的輸出緩存,作為輸出接口與外部計算機進行通信。為了不使數(shù)據(jù)在輸入緩存丟數(shù),設定輸入的高速數(shù)據(jù)在輸入緩存中達到10 Byte后,就會存入二級緩存,使容量更大的二級緩存作為主要的存儲緩存;而只有接到讀數(shù)請求后,二級緩存才會將數(shù)據(jù)寫入輸出緩存,輸出緩存中有512 Byte數(shù)據(jù)時,數(shù)據(jù)就會上傳到計算機,所以將輸入和輸出緩存容量設置為2 KByte,緩存容量有較大的冗余量,不會存在溢出問題。
圖1 三級緩存結構Fig.1 Tri-stage buffer structure
二級緩存為FPGA外接的容量為1 MByte的SRAM。為確保不丟數(shù),應使緩存容量足夠大,本設計選用的SRAM容量為1 MByte,可以確保數(shù)據(jù)傳輸可靠性,保證數(shù)據(jù)不會因為緩存容量不夠而丟失。二級緩存實時地存儲高速數(shù)據(jù),是高速數(shù)據(jù)存儲的核心部分,數(shù)據(jù)經(jīng)過一級緩存后,主要存儲在二級緩存,當接到三級緩存的讀取數(shù)據(jù)請求時,才把數(shù)據(jù)寫入三級緩存。采用這種三級緩存結構,輸入和輸出緩存為FPGA內部的FIFO,便于實現(xiàn)FPGA對數(shù)據(jù)傳輸?shù)目刂疲虚g級緩存只需在FPGA外部連接一個SRAM即可,利用FPGA實現(xiàn)對SRAM的讀寫操作,從而簡化了硬件電路。
硬件原理框圖如圖2所示。硬件結構主要由FPGA,SRAM芯片、RS485接口芯片、USB2.0芯片等組成。FPGA控制數(shù)據(jù)存入和讀出緩存以及和計算機的USB通信過程,利用其內部資源構成三級緩存結構的輸入和輸出緩存。SRAM芯片連接在FPGA外部,作為三級緩存結構的中間級緩存。RS485芯片負責將差分形式的數(shù)據(jù)轉換為串行形式的數(shù)據(jù)傳遞給FPGA。USB2.0芯片負責FPGA與計算機USB接口的數(shù)據(jù)通信過程。
圖2 硬件原理框圖Fig.2 Hardware Schematic block diagram
FPGA選用 XILINX公司的 Spartan3系列的XC3S200芯片,它采用多電壓供電,其中內核電壓為1.2 V,I/O口驅動電壓為3.3 V,其他的輔助電壓為2.5 V。該芯片含有4 320個邏輯資源、141個可用的I/O口。外部晶振源頻率為36.864 MHz,利用FPGA內部的倍頻模塊對它進行倍頻后作為高速數(shù)據(jù)接收的外部時鐘[3]。
數(shù)據(jù)接收是以RS485標準為物理層基礎,硬件設計選用RS485芯片分別實現(xiàn)高速數(shù)據(jù)接口和高速時鐘接口。數(shù)據(jù)信號進入FPGA之前,必須經(jīng)過RS485接口芯片進行電壓轉換。根據(jù)設計要求,高速接口最高的輸出碼率為7.372 8 Mbit/s,由于本通信系統(tǒng)只是接收數(shù)據(jù),所以工作在單工模式。因此,RS485接口芯片選用MAX3490,它采用3.3 V單電源供電,波特率最高可達10 Mbit/s,可以支持全雙工工作模式,輸入電壓范圍為-7~+12 V,輸出電壓高電平為最小供電電壓減去0.4 V,低電平最大為0.4 V。
SRAM芯片選用CY7C1059DV33,它的深度為1 M(1M代表106,深度代表SRAM中的位置數(shù),一個位置8位)。寬度為8 bit,容量為1×8 Mbit,3個控制端控制SRAM的讀寫操作。經(jīng)過RS485芯片轉換的數(shù)據(jù)首先進入FPGA內部FIFO,然后進入與FPGA相連的外部SRAM,計算機下發(fā)讀數(shù)請求后,才將SRAM存儲的數(shù)據(jù)讀出,經(jīng)過FPGA內部FIFO送至USB口。
FPGA利用CY7C68013芯片通過USB接口與計算機進行通信。CY7C68013屬于Cypress公司的FX2系列產(chǎn)品,是 Cypress公司生產(chǎn)的第一款USB2.0芯片。CY7C68013是一個帶增強型MCS51內核和USB接口的單片機,完全遵從USB2.0協(xié)議,可提供高達480 Mbit/s的傳輸速率;內部集成PLL(鎖相環(huán)),最高可使5l內核工作在48 MHz;對外提供2個串口,可以方便地與外部通信;片內擁有8 KByte的RAM,可完全滿足系統(tǒng)每次傳輸數(shù)據(jù)的需要,無需再外接 RAM[4]。
基于XILINX公司的XILINX7.1開發(fā)環(huán)境利用超高速集成電路硬件描述語言(VHDL)進行邏輯設計。FPGA內部模塊主要包括高速寫FIFO模塊、SRAM控制模塊和讀FIFO模塊。圖3為三級緩存的邏輯框圖。
圖3 邏輯框圖Fig.3 Logic block diagram
高速寫FIFO模塊負責將數(shù)據(jù)暫時存入內部FIFO中;SRAM控制模塊的功能主要是控制SRAM的讀出、寫入,將一級緩存 FIFO中的數(shù)據(jù)寫入SRAM,將SRAM中的數(shù)據(jù)讀出寫入三級緩存FIFO中。讀FIFO模塊主要是根據(jù)計算機下發(fā)的命令,選擇讀取高速FIFO,并將數(shù)據(jù)送至數(shù)據(jù)總線。
高速接口包括時鐘和數(shù)據(jù)兩個接口,高速數(shù)據(jù)接收采用同步RS485通信協(xié)議,高速時鐘速率為3.686 4 MHz,與數(shù)據(jù)發(fā)送時鐘同源,可以利用同步時鐘實現(xiàn)數(shù)據(jù)接收同步。高速數(shù)據(jù)具有特定的幀格式,由標志字、ID字和數(shù)據(jù)組成,每幀容量為2 KByte。用特殊的標志字來表示數(shù)據(jù)幀的起始位置,可以識別有效的數(shù)據(jù)信息,從而實現(xiàn)同步[5]。標志字選用16進制數(shù)“FDB18540”,這種標志字經(jīng)過大量測試表明它的獨立性很好,不會和數(shù)據(jù)內容重復,可以有效避免假同步現(xiàn)象。高速數(shù)據(jù)進入一級緩存時,在同步高速時鐘的下降沿時,檢測高速數(shù)據(jù)的標志字,當檢測到標志字時,就意味著有效數(shù)據(jù)的到來,將數(shù)據(jù)寫入FPGA內部FIFO緩存中。寫FIFO模塊流程圖如圖4所示。
圖4 寫FIFO模塊流程圖Fig.4 Flow chart ofwriting FIFOmodule
讀FIFO模塊是通過FPGA內部集成FIFO半滿信號觸發(fā)CY7C68013單片機進行讀數(shù)的,單片機通過與FPGA相連的PA2接口利用運行在其內的固件程序檢測到FIFO半滿信號后,單片機才開始從FIFO中讀取數(shù)據(jù),執(zhí)行每次讀操作,連續(xù)從FIFO中讀取512 Byte數(shù)據(jù),F(xiàn)IFO半滿信號是讀FIFO模塊通過比較FIFO讀寫地址的差值而對其賦值的,當寫地址與讀地址之差大于512時,F(xiàn)IFO半滿信號賦值為0,否則為1,這里設定讀寫地址差值為512,是由于USB設備一次只讀取512 Byte數(shù)據(jù),F(xiàn)IFO中緩存的數(shù)據(jù)只要大于512 Byte時,就應觸發(fā)USB設備讀取數(shù)據(jù),這樣可以避免多余數(shù)據(jù)在FIFO中積存引起的丟數(shù)現(xiàn)象。利用FIFO半滿信號控制讀數(shù)過程,可以有效防止空讀和誤讀現(xiàn)象[6]。
SRAM控制模塊包括寫SRAM和讀SRAM兩部分,寫SRAM是由一級緩存FIFO的半滿信號觸發(fā)的,當半滿信號有效時,開始寫SRAM。讀SRAM是通過讀FIFO模塊傳遞過來的request信號來控制的,當request信號有效時,讀取SRAM中的數(shù)據(jù),然后將它寫入到三級FIFO。通過SRAM的3個控制端來控制外部的SRAM的讀寫操作,具體的SRAM控制模塊的流程圖如圖5所示。
圖5 SRAM控制模塊的流程圖Fig.5 Flow chart of SRAM controlmodule
SRAM 的訪問控制由wesram,oesram,cesram 3個控制端決定,寫SRAM和讀SRAM時,控制線、地址線和數(shù)據(jù)線要有一定的時序先后,才能保證操作正確。設計中對寫SRAM和讀SRAM進行了時序仿真。圖6和圖7分別示意了SRAM的寫時序和讀時序。外部時鐘速率為36.864 MHZ。
圖6 SRAM寫時序Fig.6 Time sequence of writing SRAM
執(zhí)行寫SRAM操作時,cesram保持低電平,oesram保持高電平,先將地址送到地址線上,同時wesram變?yōu)榈碗娖?,低電平狀態(tài)至少要保持7 ns,才會保證數(shù)據(jù)寫入SRAM,本設計中,wesram低電平保持時間約為80 ns。地址保持一個時鐘周期后,將數(shù)據(jù)送到數(shù)據(jù)線上,數(shù)據(jù)寫入SRAM,完成一次寫SRAM過程。而后,寫地址遞增,以后的寫SRAM操作重復此過程。
圖7 SRAM讀時序Fig.7 Time sequence of reading SRAM
讀SRAM時,cesram保持低電平,wesram保持高電平,請求信號request為低電平。先將讀地址送到地址線上,同時oesram變?yōu)榈碗娖?,在?shù)據(jù)到來之前,oesram的低電平狀態(tài)至少要保持5 ns,本設計低電平保持時間約為160 ns。地址保持兩個時鐘周期后,數(shù)據(jù)被讀出送到數(shù)據(jù)線上,完成一次讀SRAM過程。而后,讀地址遞增,重復此過程。
為驗證三級緩存設計在高速通信應用過程中的可靠性和穩(wěn)定性,進行了多次讀數(shù)測試,并將接收到的結果進行分析,結果表明,運用此技術后,高速數(shù)據(jù)通信過程中沒有出現(xiàn)丟數(shù)現(xiàn)象,而沒有應用此技術的情形,丟數(shù)現(xiàn)象在測試中會隨機出現(xiàn)。引入
SRAM作為外部緩存,結合FPGA內部FIFO設計的三級緩存結構,可以可靠地緩存高速數(shù)據(jù),目前在高速通信中已得到了很好的應用。
[1]王鵬,伊鵬,金德鵬,等.基于三級存儲陣列緩存高速數(shù)據(jù)包及性能分析[J].軟件學報,2005,16(12):2181-2189.
WANG Peng,YIPeng,JIN De-peng,etal.Buffering highspeed packetswith tri-stagememortarray and its performance analysis[J].Journalof Software,2005,16(12):2181-2189.
[2] 夏金軍,莊奕琪,包軍林,等.一種基于FPGA的高速數(shù)據(jù)緩存的設計[J].微計算機信息,2008,24(11):226-228.
XIA Jin-jun,ZHUANG Yi-qi,BAO Jun-lin,et al.The design ofone type of high-speed data cache based on FPGA[J].Control and automation publication group,2008,24(11):226-228.
[3]張永樂,任勇峰,李圣昆.FPGA在多串口讀數(shù)系統(tǒng)中的應用[J].電子技術,2010,2:7-8.
ZHANG Yong-le,REN Yong-feng,LI Sheng-kun.The application of FPGA on the data system with several UART[J].Electronic Technology,2010,2:7-8.
[4]林剛勇,馬善農(nóng),許邦蓮.CY7C68013在數(shù)據(jù)傳輸中的應用[J].微計算機信息,2007,23(10):76-78.
LIN Gang-yong, MA Shan-nong, XU Bang-lian.CY7C68013 at the application among data transfer[J].Control and automation publication group,2007,23(10):76-78.
[5]宮克存,黃永平.一種高效的串行通信協(xié)議及實現(xiàn)[J].長春科技大學學報,2000,30(1):98-101.
GONG Ke-cun,HUANG Yong-pin.A high efficient serial communication protocol and implementatio[J].Journal of changchun university of science and technology,2000,30(1):98-101.
[6] 于祥鳳,劉學斌,胡炳樑,等.基于FPGA的高速數(shù)據(jù)存儲系統(tǒng)中FIFO控制的設計[J].核電子學與探測技術,2010,30(1):59-62.
YU Xiang-feng,LIU Xue-bin,HU Bing-liang,et al.Design of FIFO in High Speed Data Storage System Based on FPGA[J].Nuclear Electronics& Detection Technology,2010,30(1):59-62.