摘 要: 介紹了基于現(xiàn)場(chǎng)可編程門陣列(FPGA)技術(shù)實(shí)現(xiàn)波形顯示的兩種方法,,同時(shí)針對(duì)波形顯示中出現(xiàn)的不穩(wěn)定性提出了一種穩(wěn)定顯示波形的策略,。首先利用高速A/D轉(zhuǎn)換器將采集的波形信號(hào)進(jìn)行波形穩(wěn)定控制,然后存進(jìn)FPGA片內(nèi)的RAM中,,最后以VGA方式實(shí)時(shí)地顯示出來,。給出了兩種方法的VGA波形顯示圖,并對(duì)比分析了兩種方法的特點(diǎn),。
關(guān)鍵詞: 現(xiàn)場(chǎng)可編程門陣列,; 視頻圖形陣列; 波形顯示方法
隨著微電子技術(shù)的發(fā)展,,應(yīng)用FPGA技術(shù)開發(fā)的信號(hào)處理系統(tǒng)在各種行業(yè)中得到了廣泛的應(yīng)用,。VGA是IBM公司在1987年隨PS/2機(jī)一起推出的一種視頻傳輸標(biāo)準(zhǔn),具有分辨率高,、顯示速度快,、顏色豐富等優(yōu)點(diǎn),在彩色顯示器領(lǐng)域得到了廣泛的應(yīng)用,。采用FPGA設(shè)計(jì)VGA控制器也是近幾年研究的一個(gè)熱點(diǎn),,這種方式設(shè)計(jì)的顯示系統(tǒng),在不使用VGA顯示卡的情況下,,實(shí)現(xiàn)圖像的顯示和控制,,具有成本低,、結(jié)構(gòu)簡單、應(yīng)用靈活的優(yōu)點(diǎn),。目前關(guān)于這方面的研究論文主要集中在顯示原理的介紹,、FPGA設(shè)計(jì)VGA時(shí)序控制器[1-2]以及圖像顯示方法[3-4]上,至于波形的顯示方法主要集中在計(jì)算機(jī)上通過顯卡實(shí)現(xiàn),,利用FPGA而無需顯卡的VGA顯示波形的討論比較少見,。本文依據(jù)VGA顯示原理,介紹兩種VGA顯示波形的方法,,給出了兩種波形顯示方法的流程圖,,同時(shí)針對(duì)波形顯示中出現(xiàn)的不穩(wěn)定性提出了一種穩(wěn)定顯示波形的策略,并給出了VGA顯示的結(jié)果波形,。顯示方法利用Verilog HDL 語言作為邏輯描述手段,,在QuartusII軟件環(huán)境下使用Stratix II系列的FPGA芯片完成。 1 VGA顯示原理
常見的彩色顯示器一般由CRT構(gòu)成,,彩色由R,、G、B三色組成,。采用逐行掃描的顯示方式,,陰極射線槍發(fā)出的電子束打在涂有熒光粉的熒光屏上,產(chǎn)生R,、G,、B 三基色,最后合成一個(gè)彩色圖像,。
對(duì)于圖像的顯示,,可以利用行、場(chǎng)同步信號(hào)的計(jì)數(shù)器,,在顯示可視區(qū)間內(nèi)按照?qǐng)D片的大小劃定行和列的起始坐標(biāo)和終止坐標(biāo),,當(dāng)掃描點(diǎn)在圖像顯示區(qū)域內(nèi)時(shí),根據(jù)掃描點(diǎn)在圖像顯示區(qū)中的相對(duì)坐標(biāo)位置,,計(jì)算得到當(dāng)前要顯示的圖像像素點(diǎn)在圖像存儲(chǔ)器中的地址,,然后讀取顯示。
如圖1所示,,x表示行計(jì)數(shù)器的計(jì)數(shù)值(行坐標(biāo)),,y表示列計(jì)數(shù)器計(jì)數(shù)值(列坐標(biāo)),顯示的分辨率為H×V,,(x,y)為顯示區(qū)域內(nèi)的任意一像素點(diǎn),。波形顯示區(qū)域的大小為M×N,,起始點(diǎn)為(m0,n0),,(m,n)則為掃描點(diǎn)在波形顯示區(qū)域中的相對(duì)坐標(biāo),。當(dāng)掃描點(diǎn)到達(dá)波形顯示區(qū)域時(shí), 即滿足以下關(guān)系:
則有m=x-m0,n=y-n0,;此時(shí),,可以將m作為波形存儲(chǔ)器的地址,取出波形數(shù)據(jù)進(jìn)行顯示,,波形存儲(chǔ)器的大小可以設(shè)置為大于或等于M,。
2 波形顯示方法
在這里討論兩種波形顯示的方法。假設(shè)存儲(chǔ)在波形RAM中的數(shù)據(jù)為x(k),,(m,n)為掃描點(diǎn)在波形顯示區(qū)域中的相對(duì)坐標(biāo),。
方法一:如圖2(a)流程所示,當(dāng)掃描點(diǎn)進(jìn)入波形顯示區(qū)域時(shí),,開始讀取波形RAM中的數(shù)據(jù),,將讀出的數(shù)據(jù)x(k)與當(dāng)前掃描點(diǎn)在波形顯示區(qū)域中的縱坐標(biāo)n或者N-n作比較,如果相等則顯示,,否則不顯示,。圖2(b)所示為方法一顯示的效果圖。
方法二:如圖3(a)流程所示,,當(dāng)掃描點(diǎn)進(jìn)入波形顯示區(qū)域時(shí),,開始讀取波形RAM中的數(shù)據(jù),將當(dāng)前掃描點(diǎn)在波形顯示區(qū)域中的縱坐標(biāo)n或者N-n與讀出的當(dāng)前數(shù)據(jù)x(k)和上一個(gè)波形數(shù)據(jù)x(k-1)進(jìn)行對(duì)比,,如果掃描點(diǎn)剛好處于這兩個(gè)值之間則顯示,,否則不予顯示。圖3(b)所示為方法二顯示的效果圖,。
3 顯示控制器設(shè)計(jì)
VGA顯示控制器須提供R,、G、B三基色圖像信號(hào),,HS行同步信號(hào)和VS場(chǎng)同步信號(hào),。由于VGA接口顯示器僅能處理串行模擬信號(hào),因此,VGA控制器所產(chǎn)生的信號(hào)經(jīng)D/A轉(zhuǎn)換器將數(shù)字信號(hào)轉(zhuǎn)變?yōu)槟M信號(hào)后發(fā)送給顯示器使用,。VGA顯示器正確,、完整地顯示數(shù)字圖像包括時(shí)序的構(gòu)建和數(shù)字圖像信息的模擬化兩個(gè)方面。據(jù)此系統(tǒng)硬件實(shí)現(xiàn)框圖如圖4所示,系統(tǒng)硬件由ADC控制模塊,、波形穩(wěn)定控制模塊,、RAM存儲(chǔ)模塊、VGA控制模塊組成,。在ADC控制模塊的控制下將A/D轉(zhuǎn)換器轉(zhuǎn)換后的數(shù)字信號(hào)經(jīng)波形穩(wěn)定模塊處理后,存入數(shù)據(jù)緩存器RAM內(nèi),,而后VGA控制器在驅(qū)動(dòng)顯示器的時(shí)候,讀取數(shù)據(jù)緩存器中的數(shù)據(jù)進(jìn)行顯示[5],。通常VGA顯示器顯示的數(shù)據(jù)量較大,,而FPGA內(nèi)置的片內(nèi)存儲(chǔ)器資源很難滿足存儲(chǔ)量的需求,,因此,一般都需要通過外接存儲(chǔ)器進(jìn)行擴(kuò)展,,對(duì)于圖像等大數(shù)據(jù)量處理系統(tǒng)通常選用SDRAM進(jìn)行擴(kuò)展[6],,本系統(tǒng)只進(jìn)行波形的顯示,不進(jìn)行數(shù)據(jù)處理等操作,,故片內(nèi)存儲(chǔ)器足夠滿足使用要求,。
需要說明的是,信號(hào)的A/D采集時(shí)鐘選為125 MHz,,而VGA的顯示標(biāo)準(zhǔn)選擇的是視頻電子標(biāo)準(zhǔn)協(xié)會(huì)VESA(Video Electronics Standards Association)即為1 280×1 024@60 Hz,,故像素時(shí)鐘為108 MHz。為了產(chǎn)生這兩種時(shí)鐘,,在FPGA片外接100 MHz的晶振,,使用FPGA內(nèi)部兩個(gè)鎖相環(huán)經(jīng)倍頻后得到。對(duì)于不同時(shí)鐘速率之間的數(shù)據(jù)交換, 一般會(huì)通過使用FIFO進(jìn)行緩沖,,本文使用雙端口RAM進(jìn)行緩存,,配置為一個(gè)讀端口和一個(gè)寫端口,兩個(gè)端口擁有各自獨(dú)立的時(shí)鐘(分別為108 MHz和125 MHz),, 設(shè)計(jì)簡單的控制時(shí)序就可實(shí)現(xiàn)數(shù)據(jù)的正確讀寫,。
3.1 存儲(chǔ)數(shù)據(jù)寬度的選擇
通常ADC的分辨率為12 bit或者14 bit,支持補(bǔ)碼形式表示,數(shù)字信號(hào)表示的最大范圍為4 096或者16 384,而實(shí)際的顯示器的分辨率遠(yuǎn)遠(yuǎn)小于此值,常見的有640×480,、1 024×768,、1 280×1 024等。因此根據(jù)顯示波形區(qū)域的大小,,存儲(chǔ)在顯示緩存器中數(shù)據(jù)寬度可以縮減,,例如波形顯示區(qū)域的大小為1 024×512,選用橫向顯示,,則可將顯示數(shù)據(jù)的寬度截取為9 bit,,這樣一來最大值不會(huì)超過511,避免了數(shù)據(jù)值較大而無法顯示的情況,。本文中所選用的波形顯示區(qū)域大小為1 024×768,,即M=1 024,N=768,,顯示數(shù)據(jù)截取為10 bit,,但需注意,并不是從采集進(jìn)來的數(shù)字信號(hào)直接截取,。為了防止數(shù)據(jù)較大而溢出波形顯示區(qū)域,,作如下處理:首先從ADC采集進(jìn)來的數(shù)據(jù)分別截取9 bit和8 bit,然后將截取后的兩個(gè)數(shù)據(jù)進(jìn)行相加,結(jié)果為10 bit數(shù)據(jù),,其最大值不會(huì)超過768,,這樣就防止了顯示溢出而導(dǎo)致的波形顯示失真,。
3.2 穩(wěn)定顯示波形策略
由于系統(tǒng)采集的時(shí)鐘與VGA顯示的像素時(shí)鐘不同,通常都會(huì)選取部分?jǐn)?shù)據(jù)進(jìn)行顯示,,而其余的數(shù)據(jù)將會(huì)被丟棄,因此如何選取數(shù)據(jù)變得尤為重要,,如果選取不合適,,會(huì)造成顯示波形閃動(dòng),無法分辨,。為了使顯示的波形穩(wěn)定,,在數(shù)據(jù)采集時(shí)進(jìn)行了預(yù)處理:首先判斷掃描點(diǎn)是否在波形顯示區(qū)域內(nèi),如果在,,則讀取波形RAM中的數(shù)據(jù)并顯示,;否則對(duì)采集進(jìn)來的信號(hào)進(jìn)行基準(zhǔn)點(diǎn)檢測(cè),當(dāng)檢測(cè)到基準(zhǔn)點(diǎn)時(shí),,開始向波形RAM中寫數(shù)據(jù),,寫滿時(shí)停止寫入,而后面采集的信號(hào)全部丟棄,。利用這種方式,,顯示的基準(zhǔn)點(diǎn)位于顯示區(qū)域最左邊線,而通常需要將顯示的基準(zhǔn)點(diǎn)移至顯示區(qū)域的中心位置,。對(duì)于這種方式的實(shí)現(xiàn)方案是:首先定制大于或等于2倍于顯示寬度大小的波形RAM,,當(dāng)掃描點(diǎn)不在波形顯示區(qū)域中時(shí),開始將采集的數(shù)據(jù)進(jìn)行存儲(chǔ),。當(dāng)數(shù)據(jù)存儲(chǔ)地址大于顯示區(qū)域?qū)挾纫话霑r(shí),,開始檢測(cè)基準(zhǔn)點(diǎn),同時(shí)將采集的數(shù)據(jù)繼續(xù)寫入波形RAM中,,檢測(cè)到基準(zhǔn)點(diǎn)時(shí),,將此點(diǎn)對(duì)應(yīng)的數(shù)據(jù)地址tadd保存起來,而后繼續(xù)存儲(chǔ)直至存滿為止,。當(dāng)掃描點(diǎn)到達(dá)波形顯示區(qū)域時(shí),,從地址radd開始讀取數(shù)據(jù)進(jìn)行顯示,這樣就達(dá)到了目的,。其中地址radd的計(jì)算公式為:
需要說明的是,以上介紹的穩(wěn)定顯示波形策略,,存儲(chǔ)器資源占用很少,大量采集的數(shù)據(jù)將會(huì)被丟失。當(dāng)VGA控制器以像素時(shí)鐘讀取波形RAM時(shí),,從ADC采集進(jìn)來的數(shù)據(jù)不會(huì)寫入波形RAM,以保持波形的完整性,;當(dāng)VGA控制器不讀取波形RAM時(shí),ADC采集進(jìn)來的數(shù)據(jù)以采集速率寫入波形RAM中,,直到寫滿后停止,。對(duì)于本系統(tǒng)設(shè)計(jì),,當(dāng)VGA控制器不讀取波形RAM時(shí),能夠保證波形RAM寫滿完整一幀數(shù)據(jù),。當(dāng)n0≤y≤n0+N成立時(shí),,需要的時(shí)間為1 280×768÷108 MHz≈9.102μs,對(duì)波形RAM不進(jìn)行寫入操作,。不滿足時(shí),,需要的時(shí)間為1280×256÷108 MHz≈2.427 μs;如果波形RAM的大小為2 KB,,采集速率為125 MHz,, 則寫入波形RAM的時(shí)間為2048÷125 MHz≈16.384 ns,可見對(duì)于波形RAM有足夠的時(shí)間進(jìn)行寫入操作,。以上分析均沒有考慮消隱所用的時(shí)間,。3.3 VGA時(shí)序
在VGA 接口協(xié)議中,不同的顯示模式都有嚴(yán)格的工業(yè)標(biāo)準(zhǔn),、不同的分辨率或不同的刷新頻率,,故其時(shí)序也不相同[7]。VESA的標(biāo)準(zhǔn)參考顯示時(shí)序如圖5所示,B為行同步信號(hào),占用112個(gè)像素時(shí)鐘周期,,C為行消隱后肩,, E為行消隱前肩,D為有效數(shù)據(jù)顯示期,;P為場(chǎng)同步信號(hào),,占用3個(gè)行周期,Q為場(chǎng)消隱后肩,,S為場(chǎng)消隱前肩,,R為行有效顯示期。在逐行掃描情況下,,1 280×1 024分辨率有效顯示區(qū)域?yàn)槊啃? 280個(gè)像素,一場(chǎng)1 024行,,實(shí)際考慮到行消隱和場(chǎng)消隱時(shí)間的影響,實(shí)際分辨率為1 688×1 066,。場(chǎng)同步信號(hào)VS用來確定一幀圖像的開始和結(jié)束時(shí)間,,確保圖像數(shù)據(jù)從左到右、從上到下掃描,,以形成一幅幅圖像,。行同步信號(hào)HS標(biāo)志著一行像素的開始和結(jié)束,使圖像數(shù)據(jù)顯示在屏幕從左到右的有效區(qū)域,。
首先根據(jù)刷新頻率確定主時(shí)鐘頻率,,然后由主時(shí)鐘頻率和圖像分辨率計(jì)算出行總周期數(shù),再把同步、消隱各時(shí)序段的時(shí)間按照主計(jì)數(shù)脈沖源頻率折算成時(shí)鐘周期數(shù),。在FPGA中利用計(jì)數(shù)器,,以計(jì)算出的各時(shí)序段時(shí)鐘周期數(shù)為基準(zhǔn)產(chǎn)生不同寬度和周期的脈沖信號(hào),利用它們的邏輯組合產(chǎn)生視頻DAC的控制信號(hào)和VGA接口的同步信號(hào),。
4 實(shí)驗(yàn)結(jié)果及分析
對(duì)本文提到的波形顯示方法進(jìn)行了實(shí)驗(yàn)驗(yàn)證,,分別對(duì)采集的正弦波和方波進(jìn)行兩種方法的顯示。圖6(a)為方法一顯示的方波,,可以看出,,方法一對(duì)于變化比較陡峭的波形顯示,會(huì)出現(xiàn)很多虛點(diǎn),,視覺效果不佳,,不利于顯示波形變化陡峭的波形,。圖6(b)為方法二顯示的方波,,這種方法對(duì)于任意波形的顯示都具有很好的顯示效果,不存在方法一中提到的波形不連續(xù)情況,,視覺上達(dá)到平滑的效果,。由此可見,方法二顯示的波形線條清晰,,適合各種波形的顯示,,比方法一顯示的波形視覺效果更好。
本文針對(duì)VGA顯示波形的美觀性要求,,首先在介紹VGA顯示原理和時(shí)序控制器的設(shè)計(jì)方法的基礎(chǔ)上研究了波形存儲(chǔ)器的數(shù)據(jù)寬度選擇以及一種波形穩(wěn)定顯示的策略,,然后探討了兩種VGA顯示波形的方法,第一種方法可以顯示“變化緩慢”的波形,,對(duì)于“比較陡峭”的波形顯示不連續(xù),,效果不佳;第二種方法對(duì)于任意一種波形都可以連續(xù)地顯示,,具有很好的視覺顯示效果,。本文所述的波形顯示方法為新型示波器的設(shè)計(jì)提供了設(shè)計(jì)思路。
參考文獻(xiàn)
[1] 趙麗莉,邸志剛.用FPGA實(shí)現(xiàn)數(shù)字語音系統(tǒng)中的VGA控制器[J].電視技術(shù), 2007, 47(6):166-170.
[2] 鄧春健,王琪,徐秀知. 基于FPGA和ADV7123的BGA顯示接口的設(shè)計(jì)和應(yīng)用[J].電子器件,2006,29(12):1325-1328.
[3] 王恒心,熊慶國,王鑫. 基于FPGA/CPLD的嵌入式VGA顯示系統(tǒng)[J].微計(jì)算機(jī)信息, 2008,24(9-2):146-148.
[4] 陳彬,伍乾永,劉永春.基于FPGA的VGA的控制模塊設(shè)計(jì)[J].微電子學(xué),2008,38(4):306-308.
[5] 陳兆節(jié),盧建華.基于FPGA的VGA顯示接口的研究與設(shè)計(jì)[J].交通與計(jì)算機(jī),2005,23(2): 47-49.
[6] 孫艷,孫愛良,王紫婷.基于FPGA的VGA顯示控制器的實(shí)現(xiàn)[J].自動(dòng)化與儀器儀表,2008(6):106-107.
[7] 曹允.基于FPGA的VGA時(shí)序彩條信號(hào)實(shí)現(xiàn)方法及應(yīng)用[J].電子工程師,2002,28(7):42-45.