侯宏錄,齊晶晶
(西安工業(yè)大學 光電工程學院,西安710021)
隨著微電子技術和圖像傳感器技術的發(fā)展,高速視頻采集技術已經(jīng)廣泛應用于航天航空、醫(yī)學圖像分析、現(xiàn)代工業(yè)自動化生產(chǎn)、道路交通和科學研究中.高速視頻采集系統(tǒng)能夠記錄肉眼無法分辨的過程,在后期回放過時,將高速過程清晰地展現(xiàn)出來,為數(shù)字圖像處理、分析和目標識別等提供了依據(jù).高速圖像采集和處理系統(tǒng)中包含多個時鐘,數(shù)據(jù)在不同時鐘域傳輸?shù)闹芷诤拖辔煌耆毩?,因此必須對采集到的?shù)據(jù)進行跨時鐘域處理才能保證數(shù)據(jù)的傳輸無丟失[1].
對于不同時鐘域間的數(shù)據(jù)傳輸,文獻[2]提出了一種基于符號化模型檢驗工具SMV的異步先進先出隊列(First Input First Output,F(xiàn)IFO)的模型驗證方法,利用SMV對該系統(tǒng)模型和系統(tǒng)屬性進行了驗證,有效解決跨時鐘域信號傳輸產(chǎn)生的亞穩(wěn)態(tài)問題;文獻[3]提出了一種在FPGA內(nèi)實現(xiàn)高速異步FIFO的方法;文獻[4]利用異步FIFO實現(xiàn)現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)與數(shù)字信號處理器(Digital Signal Processor,DSP)進行數(shù)據(jù)通信的方案,該方案具有傳輸速度快、穩(wěn)定可靠和實現(xiàn)方便的優(yōu)點;文獻[5]主要針對多時鐘域下的片上網(wǎng)絡的數(shù)據(jù)同步進行了研究,分析了多時鐘域下片上網(wǎng)絡跨時鐘域數(shù)據(jù)傳輸時的亞穩(wěn)態(tài)問題.FPGA內(nèi)部資源豐富,通??筛鶕?jù)需要將FPGA內(nèi)部M9K存儲器模塊配置成單端口、簡單雙端口、真雙端口隨機存取存儲器(Random Access Memory,RAM)、FIFO緩 沖 器 及 只 讀 存 儲 器 (Read Only Memory,ROM)[6].利用FPGA 片內(nèi)存儲資源實現(xiàn)的異步FIFO是一種快速有效的解決方案,F(xiàn)PGA內(nèi)部FIFO比外部FIFO芯片更能提高系統(tǒng)穩(wěn)定性.
本文為了實現(xiàn)高速視頻采集和傳輸系統(tǒng)中數(shù)據(jù)的跨時鐘域處理,提出了基于FPGA的異步FIFO設計方案.該方案通過兩種方式實現(xiàn):①利用Verilog硬件描述語言(Hardware Description Language,HDL)來實現(xiàn)異步FIFO;②利用QuartusII工具中的宏模塊調(diào)用實現(xiàn)異步FIFO.通過在高速視頻采集和傳輸系統(tǒng)中的實驗,驗證了兩種方法的正確性.
異步FIFO是一種先進先出存儲器,先進入的數(shù)據(jù)先讀出,讀時鐘和寫時鐘互相獨立[7].異步FIFO有兩套數(shù)據(jù)線,可在一端進行寫操作的同時在另一端進行讀操作,在數(shù)據(jù)順序傳輸?shù)耐瑫r實現(xiàn)數(shù)據(jù)的緩存.
異步FIFO包括寫時鐘域和讀時鐘域,異步FIFO的核心是由雙端口RAM組成的存儲單元.訪問FIFO時不需要地址線,只需要數(shù)據(jù)線和讀寫控制信號線.在寫時鐘域,寫端口對應寫數(shù)據(jù)信號和寫控制信號,寫入的數(shù)據(jù)存儲在雙端口RAM中;在讀時鐘域,讀端口對應讀數(shù)據(jù)信號和控制信號,數(shù)據(jù)從雙端口RAM中讀出并送入下一級[8].異步FIFO最重要的控制信號Full(滿)、Empty(空)、Almost Full(將滿)、Almost Empty(將空)由寫地址和讀地址相互比較生成.異步FIFO存儲器內(nèi)部結(jié)構(gòu)如圖1所示.
確定異步FIFO的空/滿狀態(tài)需要二進制讀指針和寫指針的比較.FIFO中的讀寫指針值隨著讀寫操作的進行不斷累加,當計數(shù)器滿后返回并繼續(xù)從0開始循環(huán).
圖1 異步FIFO存儲器內(nèi)部結(jié)構(gòu)Fig.1 The internal structure of asynchronous FIFO memory
亞穩(wěn)態(tài)是指觸發(fā)器無法在規(guī)定時間內(nèi)達到確定狀態(tài).當觸發(fā)器進入亞穩(wěn)態(tài)時,無法預測輸出電平,也無法預測何時輸出穩(wěn)定在正確的電平上.在亞穩(wěn)態(tài)期間,觸發(fā)器輸出中間電平或者振蕩狀態(tài),輸出電平沿信號通道上的各個觸發(fā)器級聯(lián)式傳播下去.
在數(shù)字電路中,為了保證每個寄存器的輸入信號正確,所有器件的信號傳輸都有一定的時序要求,輸入寄存器的信號必須在時鐘沿的寄存器建立時間(Tsu)之前保持穩(wěn)定,并且持續(xù)到時鐘沿的寄存器保持時間(Th)之后改變,信號從寄存器的輸入到輸出需要經(jīng)過一定的延遲(Tco).此時,系統(tǒng)的每一個寄存器都有一個穩(wěn)定的狀態(tài)1或者0,且寄存器的輸出電壓在下級門電路的噪聲容限范圍內(nèi)[9].而如果信號的變化不在Tsu和Th的要求內(nèi),寄存器的輸出會處在高電平1和低電平0之間,寄存器的輸出達到高或者低的穩(wěn)定狀態(tài)時需要的時間大于Tco,即輸出的電壓處在下級門電路的噪聲容限范圍外時,則寄存器輸出處于亞穩(wěn)態(tài).亞穩(wěn)態(tài)通常發(fā)生在跨時鐘域傳遞數(shù)據(jù)的系統(tǒng)中,由于數(shù)據(jù)信號可能在任何時間到達異步時鐘域的目的寄存器,從而無法保證滿足Tsu和Th的要求.
圖2所示為跨時鐘域傳輸數(shù)據(jù)中的異步時鐘,前級寄存器的工作時鐘為clka,后級寄存器的工作時鐘為clkb.當前一級的輸入數(shù)據(jù)發(fā)生改變時,后一級電路在讀數(shù)據(jù)的同時可能產(chǎn)生亞穩(wěn)態(tài).
亞穩(wěn)態(tài)不能夠完全消除,只能使其出現(xiàn)的概率降低.由于二進制計數(shù)器從一個時鐘域到另外一個時鐘域同步計數(shù)時可能出現(xiàn)計數(shù)器的多位同時翻轉(zhuǎn),經(jīng)過同步器后的數(shù)值產(chǎn)生多種結(jié)果,格雷碼計數(shù)器每次累加操作后只有一個比特發(fā)生翻轉(zhuǎn),因此在進行時鐘域轉(zhuǎn)換時,不會出現(xiàn)其他不確定值,以便正確比較讀寫指針,準確產(chǎn)生空滿信號.因此,采用格雷碼可有效減少亞穩(wěn)態(tài)的發(fā)生.本文在通過Verilog HDL實現(xiàn)異步FIFO時采用格雷碼來降低亞穩(wěn)態(tài)的出現(xiàn)概率.
圖2 異步時鐘Fig.2 Asynchronous clock
異步FIFO中最重要的控制信號由讀寫指針相互比較生成.為了保證數(shù)據(jù)在FIFO中正確寫入和讀出,避免寫滿和讀空的產(chǎn)生,判讀空/滿標志位的產(chǎn)生成為異步FIFO設計的關鍵.
為解決上述問題,對指針進行附加位比較.為讀寫指針最高位增加一位附加位,當讀指針讀完存儲器中的存儲單元后,會向附加位進一,除附加位外的所有位均為零,寫指針亦然.若讀寫地址指針的最高位不同而其余位相同時,表明寫地址比讀地址多產(chǎn)生了一個循環(huán),即FIFO存儲器為滿.若讀寫地址指針所有位都相同時,表明讀寫地址指針循環(huán)次數(shù)相等,即FIFO存儲器此時狀態(tài)為空.綜上所述,讀寫地址指針有n位地址空間,其中低n-1位用來存放FIFO的讀寫地址.
FPGA內(nèi)部資源豐富,為了簡化系統(tǒng)結(jié)構(gòu),通??筛鶕?jù)需要來配置FPGA內(nèi)部存儲資源.本設計中采用兩種方法通過FPGA內(nèi)部塊RAM來實現(xiàn)異步FIFO,用于解決圖像采集和處理兩個模塊不同時鐘域的數(shù)據(jù)傳輸,異步FIFO緩存圖像采集模塊傳輸過來的圖像數(shù)據(jù),用于下級FPGA控制器按照數(shù)據(jù)傳輸格式讀取數(shù)據(jù),同時將像素數(shù)據(jù)作跨時鐘域處理,系統(tǒng)采集到的圖像數(shù)據(jù)由采集系統(tǒng)82MHz時鐘控制寫入異步FIFO,圖像數(shù)據(jù)經(jīng)異步FIFO緩存后,由圖像處理模塊從異步FIFO中讀出.
本設計中,數(shù)據(jù)采集的分辨率為1 280×1 024,每個像素點包含RGB各8位的數(shù)據(jù),一行傳輸?shù)膱D像數(shù)據(jù)為1 280個24位的圖像數(shù)據(jù).異步FIFO接口信號說明見表1~2.
表1 Verilog HDL實現(xiàn)的異步FIFO輸入信號Tab.1 The input signal of asynchronous FIFO implemented by Verilog HDL
表2 Verilog HDL實現(xiàn)的異步FIFO輸出信號Tab.2 The output signal of asynchronous FIFO implemented by Verilog HDL
結(jié)合上文對異步FIFO設計中的關鍵問題分析,給出Verilog HDL設計中二進制轉(zhuǎn)格雷碼及滿信號產(chǎn)生的關鍵代碼為
二進制轉(zhuǎn)格雷碼
類似可寫出空標志位產(chǎn)生模塊.
在EDA設計時可直接調(diào)用QuartusII軟件中內(nèi)置的宏模塊來簡化設計過程.本文使用Quartus II中MegaWizard宏模塊向?qū)Фㄖ艶IFO,F(xiàn)PGA器件選擇CycloneIV,定制FIFO時需要設置FIFO的數(shù)據(jù)寬度、深度和類型等參數(shù).
FIFO類型選擇異步,數(shù)據(jù)寬度選擇24位,深度選擇1 024,即定制1 280個位寬24位存儲深度1 024的緩存單元.利用宏模塊定制的異步FIFO生成的信號見表3~4.
表3 QuartusII生成的異步FIFO輸入信號Tab.3 The input signal of asynchronous FIFO implemented by QuartusII
表4 QuartusII生成的異步FIFO輸出信號Tab.4 The output signal of asynchronous FIFO implemented by QuartusII
當寫請求wrreq為高電平時,在寫時鐘wrclk的上升沿,將24位的像素數(shù)據(jù)data[23:0]在82 MHz時鐘周期下寫入FIFO的寫指針的指向單元,同時寫指針加1,寫指針指向下一個要寫入的數(shù)據(jù)單元,直到wrreq為低電平或wrfull為高電平時停止寫入數(shù)據(jù),已寫入的數(shù)據(jù)按行存儲.當讀請求rdreq為高電平時,在讀時鐘rd_clk的上升沿,將24位像素數(shù)據(jù)q[23:0]在50MHz時鐘周期下從讀指針指向單元讀出,同時讀指針加1,讀指針指向下一個數(shù)據(jù)單元,直到rdreq為低電平或rdfull為高電平時停止數(shù)據(jù)讀出.
高速視頻采集系統(tǒng)結(jié)構(gòu)如圖3所示,為了測試本文設計的異步FIFO是否滿足要求,首先對設計進行了仿真驗證,再將驗證后的異步FIFO應用到高速視頻采集系統(tǒng)中,通過觀察系統(tǒng)顯示結(jié)果,判斷設計出的異步FIFO適合本系統(tǒng).
圖3 系統(tǒng)結(jié)構(gòu)框圖Fig.3 The system structure diagram
使用Verilog HDL編寫測試腳本和測試用例,調(diào)用第三方軟件ModelSim進行仿真驗證如圖4所示,得到FIFO中的信號輸出波形圖.圖中顯示異步FIFO的寫入時鐘wr_clk頻率高于讀出時鐘rd_clk頻率,當寫使能wr_en信號為高時,數(shù)據(jù)在寫時鐘的上升沿寫入RAM.在讀出時鐘rd_clk的上升沿,當讀使能rd_en信號為高時,數(shù)據(jù)在讀時鐘的上升沿由RAM中讀出.當將滿標識信號afull有效時,在時鐘信號的下一個上升沿停止寫操作,寫滿wr_full信號有效.當將空標識信號aempty有效時,在時鐘信號的下一個上升沿停止讀操作,讀空rd_full信號有效.
圖4 異步FIFO仿真驗證Fig.4 The simulation and verification of asynchronous FIFO
本設計應用于高速視頻采集和傳輸系統(tǒng),采集系統(tǒng)輸出8路視頻數(shù)據(jù),數(shù)據(jù)經(jīng)過設計的異步FIFO后,傳輸給FPGA控制板,最后在FPGA控制下圖像數(shù)據(jù)以60Hz的刷新頻率顯示在液晶顯示器上.
采集系統(tǒng)用到的時鐘為82MHz,即FIFO的寫入時鐘應為82MHz.用示波器跟蹤數(shù)據(jù)寫入FIFO時的時鐘得到波形如圖5所示,波形顯示為82MHz.
圖5 異步FIFO寫入時鐘Fig.5 The write clock of asynchronous FIFO
FPGA控制板的時鐘為50MHz,即FIFO的讀出時鐘應為50MHz.用示波器跟蹤數(shù)據(jù)從FIFO中讀出的時鐘得到波形如圖6所示,波形顯示為50MHz.
圖6 異步FIFO讀出時鐘Fig.6 The read clock of asynchronous FIFO
采用Verilog HDL時序代碼和QuartusII工具宏模塊定制兩種方法實現(xiàn)的異步FIFO經(jīng)過仿真驗證后,在Altera公司Cyclone IV系列的FPGA芯片EP4CGX150DF31上進行實驗驗證,在滿足高速視頻采集系統(tǒng)技術指標的前提下,對靜態(tài)目標進行實時采集,將采集到的圖像經(jīng)過異步FIFO緩存后,通過液晶顯示屏觀察顯示效果.
利用高速視頻采集系統(tǒng)拍攝室外行駛的汽車,采集到的圖像經(jīng)異步FIFO做跨時鐘域處理后,通過液晶顯示器顯示,得到4幀連續(xù)的圖像,如圖7所示.由圖7可以看出,高速相機采集到的圖像數(shù)據(jù)經(jīng)過異步FIFO緩存后,在顯示器上按照從左向右,從上到下的方式掃描顯示出來,與異步FIFO先進先出的工作原理一致.表明本文設計的異步FIFO切實可行.
圖7 跨時鐘域處理后的圖像Fig.7 The image processing of the cross clock domain
通過對采集到的高速數(shù)據(jù)進行跨時鐘域處理,從液晶顯示器顯示的畫面可知:異步FIFO性能達到了技術指標要求,但在調(diào)試過程中畫面出現(xiàn)抖動,經(jīng)過分析發(fā)現(xiàn)在數(shù)據(jù)寫入異步FIFO的過程中同步信號未嚴格對齊;采集到的高速數(shù)據(jù)經(jīng)異步FIFO做跨時鐘域處理時,未對采集的曝光進行調(diào)整,曝光時間太短,圖像顯示過暗;本文設計的異步FIFO帶有空/滿標志位,導致信號通路延時對整個系統(tǒng)工作頻率產(chǎn)生制約,為了避免上述問題,可在異步FIFO設計中省略“滿”信號,只保留“空”信號產(chǎn)生模塊.
1)本文基于高速視頻采集和傳輸系統(tǒng),提出了異步FIFO儲器解決跨時鐘域傳輸數(shù)據(jù)的解決方案.在分析異步FIFO工作原理的基礎上,結(jié)合FPGA內(nèi)部存儲資源,采用兩種方法實現(xiàn)異步FIFO的設計,分別是Verilog HDL編寫邏輯代碼實現(xiàn)的異步FIFO和Quartus II中MegaWizard宏模塊向?qū)Фㄖ频漠惒紽IFO.
2)采用Verilog HDL編寫時序代碼實現(xiàn)的異步FIFO將二進制的指針改為格雷碼,有效減少了數(shù)據(jù)緩存過程中亞穩(wěn)態(tài),并在空/滿信號產(chǎn)生的同時避免了寫滿和讀空的產(chǎn)生.本文設計的異步FIFO具有良好的通用性和可移植性.通過Quartus II中 MegaWizard宏模塊向?qū)Фㄖ频漠惒紽IFO快速有效,在結(jié)構(gòu)相對復雜的系統(tǒng)中可大大簡化系統(tǒng)結(jié)構(gòu).
3)對文中設計的異步FIFO,通過實驗驗證,解決了高速數(shù)據(jù)采集和傳輸系統(tǒng)的前后數(shù)據(jù)傳輸速率不匹配問題,滿足預期設計目標,為后續(xù)的研究工作奠定基礎.
[1] 盧博,王軍.異步FIFO在DSP圖像采集系統(tǒng)中的應用[J].單片機與嵌入式系統(tǒng)應用,2015,32(1):57.LU Bo,WANG Jun.Application of Asynchronous FIFO in DSP Image Acquisition System[J].Micro-controllers and Embedded Systems,2015,32(1):57.(in Chinese)
[2] 劉彬.異步FIFO的設計與形式化驗證[D].長沙:國防科技大學,2011.LIU Bin.Design and Formal Verification of Asynchronous FIFO[D].Changsha:National University of Defense Technology,2011.(in Chinese)
[3] 黃忠朝,趙于前.一種實現(xiàn)高速異步FIFO的FPGA方法[J].計算機工程與應用,2010,46(3):13.HUANG Zhong-chao,ZHAO Yu-qian.Implementation Method of High Speed Asynchronous FIFO U-sing FPGA[J].Computer Engineering and Applications,2010,46(3):13.(in Chinese)
[4] 胡波,李鵬.異步FIFO在FPGA與DSP通信中的運用[J].電子科技,2011,24(3):53.HU Bo,LI Peng.Application of Asynchronous FIFO in Communication Between FPGA and DSP[J].Electronic Science and Technology,2011,24(3):53.(in Chinese)
[5] 趙文晗.多時鐘域下片上網(wǎng)絡同步研究[D].成都:電子科技大學,2013.ZHAO Wen-han.Research on Synchronous Multi-Clock-Domain Network-on-Chip[D].Chengdu:University of Electronic Science and Technology of China,2013.(in Chinese)
[6] 施華鈞.高效異步FIFO的設計實現(xiàn)[D].長沙:湖南大學,2013.SHI Hua-jun.Design and Implementation of Efficient Asynchronous FIFO[D].Changsha:Hunan University,2013.(in Chinese)
[7] 向厚振,張志杰,王鵬.基于FPGA視頻和圖像處理系統(tǒng) 的 FIFO 緩 存 技 術 [J].電 視 技 術,2012,36(9):41.XIANG Hou-zhen,ZHANG Zhi-jie,WANG Peng.FIFO Cache Technology in Video and Image Processing System Based on FPGA[J].Video Engineering,2012,36(9):41.(in Chinese)
[8] 庾志衡,葉俊明,鄧迪文.基于FPGA與DDR2SDRAM的大容量異步FIFO緩存設計[J].微型機與應用,2011,30(4):34.YU Zhi-heng,YE Jun-ming,DENG Di-wen.A Design of High Speed and Deep Asynchronous FIFO Based on FPGA and DDR2SDRAM[J].Microcomputer &Its Applications,2011,30(4):34.(in Chinese)
[9] 司嵐山.一種高速大容量異步FIFO存儲器的設計[D].無錫:江南大學,2013.SI Lan-shan.Design of High Speed and Large Capacity Asynchronous FIFO Memory[D].Wuxi:Jiangnan University,2013.(in Chinese)