文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.171683
中文引用格式: 向梓豪,,陸安江. 基于FPGA的HDMI多模式顯示模塊設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2017,,43(12):48-51.
英文引用格式: Xiang Zihao,,Lu Anjiang. Design of HDMI multi mode display module based on FPGA[J].Application of Electronic Technique,2017,,43(12):48-51.
0 引言
隨著社會(huì)信息化程度的不斷提高,,人們對(duì)視頻處理的要求越來(lái)越高,,視頻處理系統(tǒng)處理的數(shù)據(jù)量也越來(lái)越大。在嵌入式視頻處理系統(tǒng)中,,目前主流的方案主要有3種:基于ARM,、基于DSP和基于FPGA。其中FPGA不同于其他兩種芯片,,它是一種半定制電路,,擁有大量邏輯單元,通過配置這些邏輯單元,,可以構(gòu)建相應(yīng)的電路以實(shí)現(xiàn)所需的功能,。正因?yàn)槠渚哂谢谟布铀俚奶攸c(diǎn),F(xiàn)PGA被廣泛應(yīng)用于高速視頻處理系統(tǒng),。對(duì)于這類視頻處理系統(tǒng),,構(gòu)建可編程片上系統(tǒng)(System-on-a-Programmable-Chip,,SOPC)是目前的主流方案,。SOPC是一種片上系統(tǒng),即在一塊芯片上實(shí)現(xiàn)整個(gè)系統(tǒng)的邏輯功能[1],,且具有設(shè)計(jì)便捷,、配置靈活、可在線調(diào)試,、系統(tǒng)可復(fù)用等特點(diǎn),。在視頻處理系統(tǒng)的接口中,,HDMI是最新的高清晰度多媒體接口[2],具有高帶寬,、小體積,、高智能、內(nèi)容保護(hù)等優(yōu)點(diǎn),,被廣泛應(yīng)用于高清顯示器,、高清電視之中[3]。
針對(duì)基于SOPC的視頻處理系統(tǒng),,本文提出一種基于FPGA的HDMI多模式顯示模塊設(shè)計(jì)方法,,可為SOPC提供一種通用的HDMI多模式顯示組件,并可適用于多種HDMI發(fā)送器以及不同參數(shù)的視頻,。通過該模塊,,可以實(shí)現(xiàn)多路視頻的顯示,并可配置每路視頻的位置與透明度,,為視頻處理系統(tǒng)實(shí)現(xiàn)多模式的顯示提供了解決方案,。
1 總體方案設(shè)計(jì)
為了驅(qū)動(dòng)HDMI發(fā)送芯片,以及通過ALPHA混合實(shí)現(xiàn)多模式顯示,,需要根據(jù)HDMI的工作時(shí)序設(shè)計(jì)相應(yīng)的驅(qū)動(dòng)電路,,而且還需根據(jù)指定的坐標(biāo)信息與透明度參數(shù),對(duì)各通道視頻的數(shù)據(jù)進(jìn)行多級(jí)ALPHA混合計(jì)算,,最后將驅(qū)動(dòng)信號(hào)以及視頻數(shù)據(jù)輸出,。根據(jù)以上功能需求,將整個(gè)模塊分為兩個(gè)分模塊,,即HDMI驅(qū)動(dòng)模塊和ALPHA混合模塊,。系統(tǒng)框圖如圖1所示。
在HDMI驅(qū)動(dòng)模塊中,,根據(jù)HDMI接口的工作時(shí)序,,設(shè)計(jì)兩個(gè)計(jì)數(shù)器分別對(duì)時(shí)鐘信號(hào)與行進(jìn)行計(jì)數(shù),在相應(yīng)的時(shí)鐘周期生成行同步信號(hào),、場(chǎng)同步信號(hào)和數(shù)據(jù)總線使能信號(hào)[4],。設(shè)計(jì)一個(gè)坐標(biāo)指示電路,通過兩個(gè)計(jì)數(shù)器對(duì)當(dāng)前輸出的有效視頻數(shù)據(jù)的行和列進(jìn)行計(jì)數(shù),,并輸出計(jì)數(shù)值,,此計(jì)數(shù)值用于在相應(yīng)坐標(biāo)讀取視頻數(shù)據(jù)與ALPHA混合計(jì)算。
例化4個(gè)ALPHA混合模塊(數(shù)量可根據(jù)需求設(shè)定),,最多可以使4路視頻進(jìn)行多模式顯示,。在ALPHA混合模塊中,根據(jù)坐標(biāo)指示電路生成的計(jì)數(shù)值,,在指定的坐標(biāo)區(qū)域發(fā)出數(shù)據(jù)讀取信號(hào)對(duì)緩存的視頻數(shù)據(jù)進(jìn)行讀取,,并且在指定的區(qū)域生成相應(yīng)alpha值(透明度),。設(shè)計(jì)一個(gè)ALPHA混合計(jì)算電路,其負(fù)責(zé)對(duì)前景視頻數(shù)據(jù)與后景視頻數(shù)據(jù)進(jìn)行ALPHA混合,。ALPHA混合計(jì)算電路采用流水線設(shè)計(jì)方法,,將整個(gè)計(jì)算過程分為多級(jí)進(jìn)行ALPHA混合計(jì)算,每一級(jí)在一個(gè)時(shí)鐘周期內(nèi)的計(jì)算結(jié)果保存在寄存器中,,提供給下一級(jí)在下個(gè)時(shí)鐘周期進(jìn)行計(jì)算,。ALPHA混合計(jì)算會(huì)導(dǎo)致數(shù)據(jù)輸出延遲,因此再次例化一個(gè)坐標(biāo)指示電路,,將同步信號(hào),、場(chǎng)同步信號(hào)和數(shù)據(jù)總線使能信號(hào)都延遲相應(yīng)周期后輸入該電路,以產(chǎn)生新的同步的行和列的計(jì)數(shù)值供下一級(jí)的ALPHA混合模塊使用,。本實(shí)例提供4通道分割顯示與PIP(雙通道的畫中畫)顯示兩種顯示模式用于驗(yàn)證,。當(dāng)配置的顯示模式為4通道分割顯示時(shí),第一通道視頻作為前景首先和預(yù)設(shè)的底色背景進(jìn)行ALPHA混合,,其中重疊部分背景的透明度為0(完全不顯示),,前景的透明度為1(完全顯示),再將混合后的視頻數(shù)據(jù)作為背景與第二通道的視頻進(jìn)行ALPHA混合,,按此方案依次完成4個(gè)通道的ALPHA混合,,每個(gè)通道的位置互不重疊。而進(jìn)行PIP顯示時(shí)第一通道的視頻作為背景,,第二通道的視頻作為前景顯示在顯示器中心位置,,重疊部分背景的透明度為0,前景的透明度為1。
2 HDMI驅(qū)動(dòng)模塊設(shè)計(jì)
HDMI驅(qū)動(dòng)模塊主要負(fù)責(zé)根據(jù)不同的配置信息輸出相應(yīng)的驅(qū)動(dòng)信號(hào),,使視頻數(shù)據(jù)能夠通過HDMI發(fā)送器正常輸出,。
2.1 HDMI發(fā)送器工作方式
視頻數(shù)據(jù)通過HDMI進(jìn)行傳輸時(shí),HDMI接收/發(fā)送芯片通過最小化傳輸差分信號(hào)(TMDS)的編碼技術(shù)將其編碼為數(shù)據(jù)包,,雖然FPGA支持多種標(biāo)準(zhǔn)LVDS(低電壓差分信號(hào)),,但其不能完全兼容TMDS(過渡調(diào)制差分信號(hào)),因此需要通過HDMI接收/發(fā)送芯片來(lái)實(shí)現(xiàn)HDMI接口功能,。FPGA與此類HDMI芯片的傳輸通常通過一組并行總線實(shí)現(xiàn),, 包含了數(shù)據(jù)總線、IIC總線,、驅(qū)動(dòng)信號(hào),。其中數(shù)據(jù)總線用于傳輸視頻數(shù)據(jù),IIC總線用于FPGA配置HDMI發(fā)送芯片,,驅(qū)動(dòng)信號(hào)中的HDMI_CLK為同步時(shí)鐘信號(hào),,DE_HDMI為數(shù)據(jù)總線使能信號(hào),,HSY_HDMI為行同步信號(hào),,VSY_HDMI為場(chǎng)同步信號(hào),。本模塊正常工作需要將HDMI芯片配置為RGB輸出。HDMI接口傳輸RGB信號(hào)的工作時(shí)序與VGA接口的工作時(shí)序類似,,但無(wú)需將數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào),。DE_HDMI、HSY_HDMI,、VSY_HDMI以固定的時(shí)間關(guān)系輸出,,HDMI_CLK則作為基準(zhǔn)時(shí)鐘與這些信號(hào)同步。
在一場(chǎng)的時(shí)間段,,根據(jù)視頻刷新頻率以及分辨率的不同,,處于同步段時(shí)行同步信號(hào)首先保持一定周期的高電平,之后置低電平并在間隔相應(yīng)的周期后輸出視頻數(shù)據(jù),,這個(gè)間隙為顯示后沿,。視頻數(shù)據(jù)輸出完成后間隔相應(yīng)的周期后開始下一行的傳輸,這個(gè)間隙為顯示前沿,。場(chǎng)同步信號(hào)的時(shí)序依然是首先保持一定周期的高電平,,之后置低電平,間隔相應(yīng)的行時(shí)間(傳輸一行數(shù)據(jù)所需的時(shí)鐘周期)后輸出一場(chǎng)中所有的行,,所有行的視頻數(shù)據(jù)傳輸完成后間隔相應(yīng)的行時(shí)間后開始下一行的傳輸,。其時(shí)序分段如圖2所示。
其中VSY_HDMI的時(shí)序分段與HSY_HDMI相同,。
2.2 Verilog HDL代碼設(shè)計(jì)
在FPGA與HDMI發(fā)送器之間,,傳輸視頻數(shù)據(jù)的方式為隨同步時(shí)鐘逐個(gè)傳送像素?cái)?shù)據(jù),對(duì)于每場(chǎng)數(shù)據(jù),,順序?yàn)閺牡谝恍虚_始從左至右傳送,,傳送完畢后開始傳送第二行,依次傳送直至最后一行數(shù)據(jù)傳送完畢,。因此在代碼中定義兩個(gè)計(jì)數(shù)值,,分別為x軸計(jì)數(shù)值x_cnt與y軸計(jì)數(shù)值y_cnt,x_cnt在每個(gè)時(shí)鐘周期遞增1,,計(jì)數(shù)完一行清零,;y_cnt則是x_cnt每計(jì)數(shù)完一行遞增1,一場(chǎng)的所有行全部計(jì)數(shù)完清零,。計(jì)數(shù)器Verilog HDL代碼如下:
always @(posedge clk or negedge rst_n)
if(!rst_n) x_cnt<= 12′d0;
else if(x_cnt >= HDMI_HTT) x_cnt<= 12′d0;
else x_cnt <= xcnt+1′b1;
always @(posedge clk or negedge rst_n)
if(!rst_n) y_cnt <= 12′d0;
else if(x_cnt== HDMI_HTT) begin
if(y_cnt >= HDMI_VTT) y_cnt<= 12′d0;
else y_cnt <= y_cnt +1′b1;
其中HDMI_HTT為傳輸一行所需的時(shí)鐘周期的個(gè)數(shù),,HDMI_VTT為傳輸一場(chǎng)中所有行的數(shù)量。根據(jù)計(jì)數(shù)值,,在相應(yīng)的時(shí)間拉高行同步信號(hào)和場(chǎng)同步信號(hào),,其他時(shí)間置低電平,其Verilog HDL代碼如下:
always @(posedge clk or negedge rst_n)
if(!rst_n) HSY_HDMI <= 1′b0;
else if(xcnt < HDMI_HST ) HSY_HDMI <= 1′b1;
else hdmi_hsy <= 1′b0;
always @(posedge clk or negedge rst_n)
if(!rst_n) VSY_HDMI <= 1′b0;
else if(ycnt < HDMI_VST) VSY_HDMI <= 1′b1;
elseVSY_HDMI<= 1′b0;
其中HDMI_HST為行同步段占用的時(shí)鐘周期的個(gè)數(shù),,HDMI_VST為場(chǎng)同步段所有行的數(shù)量,。在屬于數(shù)據(jù)段的計(jì)數(shù)區(qū)域,,數(shù)據(jù)總線使能信號(hào)置高電平,此時(shí)間段傳送的是有效視頻數(shù)據(jù),,其Verilog HDL代碼如下:
always @(posedge clk or negedge rst_n)
if(!rst_n) DE_HDMI <= 1′b0;
else if((xcnt >= (HDMI_HST+ HDMI_HBP)) && (xcnt < (HDMI_HST+ HDMI_HBP+ HDMI_HVT))&& (ycnt >= (HDMI_VST+HDMI_VBP)) && (ycnt < (HDMI_VST+HDMI_VBP+ HDMI_VVT)))
DE_HDMI <= 1′b1;
else DE_HDMI <= 1′b0;
其中HDMI_HBP為每行數(shù)據(jù)段占用的時(shí)鐘周期的個(gè)數(shù),,HDMI_VBP為每行數(shù)據(jù)段所有行的數(shù)量。HDMI_HTT,、HDMI_VTT,、HDMI_HST、HDMI_VST,、HDMI_HBP,、HDMI_VBP等參數(shù)信號(hào)接入模塊的輸入端,可根據(jù)視頻參數(shù)以及HDMI發(fā)送器型號(hào)輸入相應(yīng)的配置信息,,具有較廣泛的適用性,。
3 ALPHA混合模塊設(shè)計(jì)
本模塊根據(jù)配置信息(輸入的視頻坐標(biāo)信息、alpha值),,使最多4路視頻數(shù)據(jù)在指定坐標(biāo)范圍內(nèi)顯示,并按照設(shè)定的透明度進(jìn)行ALPHA混合,。首先將HDMI驅(qū)動(dòng)模塊生成的DE_HDMI、HSY_HDMI,、VSY_HDMI等同步信號(hào)連接到坐標(biāo)指示電路的輸入端,,此電路中定義兩組計(jì)數(shù)器x_cnt與y_cnt,分別對(duì)輸出的有效視頻在顯示區(qū)域內(nèi)的x坐標(biāo)與y坐標(biāo)進(jìn)行計(jì)數(shù),,從每行起始位置,,在輸出有效視頻數(shù)據(jù)的每個(gè)時(shí)鐘周期x_cnt遞增1,每行有效視頻數(shù)據(jù)計(jì)數(shù)完成后清零,,y_cnt則從有效視頻的第一行開始,,在每行有效視頻傳輸完成后遞增1,場(chǎng)同步后清零,。利用坐標(biāo)指示電路生成有效視頻的坐標(biāo)信號(hào),,即可根據(jù)設(shè)定的視頻位置信息在相應(yīng)的時(shí)刻發(fā)出讀請(qǐng)求信號(hào),讀取有效視頻數(shù)據(jù),,同時(shí)在相應(yīng)的時(shí)刻讀取alpha值,。
ALPHA混合計(jì)算電路負(fù)責(zé)將背景視頻數(shù)據(jù)與前景視頻數(shù)據(jù)根據(jù)當(dāng)前的alpha值進(jìn)行ALPHA混合。本模塊通過多級(jí)流水線設(shè)計(jì)ALPHA混合計(jì)算電路,,實(shí)現(xiàn)了ALPHA混合計(jì)算的硬件加速,,極大地提升了計(jì)算速度。
對(duì)于RGB編碼的視頻數(shù)據(jù),,其進(jìn)行ALPHA混合的公式如式1所示(該公式也適用于YUV編碼的視頻數(shù)據(jù)),。
其中R1、G1、B1對(duì)應(yīng)混合后的視頻數(shù)據(jù)的R,、G,、B分量,Rf,、Gf、Bf對(duì)應(yīng)前景數(shù)據(jù)的R,、G,、B分量,Rb,、Gb,、Bb對(duì)應(yīng)背景數(shù)據(jù)的R、G,、B分量,。在流水線設(shè)計(jì)中,將組合邏輯分成三級(jí),,第一級(jí)對(duì)擴(kuò)大后的數(shù)據(jù)通過乘法器進(jìn)行乘法累加運(yùn)算,,第二級(jí)進(jìn)行加法運(yùn)算,第三級(jí)進(jìn)行縮小運(yùn)算,,該模塊框圖如圖3所示,。
由于FPGA設(shè)計(jì)屬于數(shù)字電路設(shè)計(jì),電路層面上無(wú)法直接計(jì)算小數(shù)點(diǎn),。故采用將計(jì)算數(shù)據(jù)先擴(kuò)大,,計(jì)算完成后再縮小的方法。具體方法為先將公式左右兩端分別擴(kuò)大256倍,,計(jì)算完成后再縮小256倍,,將擴(kuò)大后的公式分為三步計(jì)算。
第一步:進(jìn)行乘法操作,,如式(2),、式(3)所示。
第二步:進(jìn)行加法操作,將第一級(jí)計(jì)算出的前景數(shù)據(jù)中間值R11,、G11,、B11與背景數(shù)據(jù)中間值R12、G12,、B12分別相加,,如式4所示。
第三步:進(jìn)行縮小操作,,分別對(duì)第二步得到的中間值右移8位,,為保證數(shù)據(jù)的精確性,對(duì)得到的數(shù)據(jù)進(jìn)行溢出處理。代碼如下:
assign o_data_R=data_R_tmp[8] ? 8′hff : data_R_tmp[7 : 0];
assign o_data_G=data_G_tmp[8] ? 8′hff : data_G_tmp[7 : 0];
assign o_data_B=data_B_tmp[8] ? 8′hff : data_B_tmp[7 : 0];
其中o_data_R,、o_data_G,、o_data_B為完成ALPHA混合和溢出處理后的視頻的R分量、G分量,、B分量,,data_R_tmp、data_G_tmp,、data_B_tmp為完成ALPHA混合但未經(jīng)溢出處理的視頻的R分量,、G分量、B分量,。溢出處理為判斷經(jīng)過流水線輸出的9 bit視頻數(shù)據(jù)的最高位是否為0,,不為0輸出8′hff,否則輸出前8 bit數(shù)據(jù),。
4 驗(yàn)證結(jié)果
將該模塊作為一個(gè)基于SOPC的四通道視頻處理系統(tǒng)的顯示模塊,,編譯后配置到FPGA中并在開發(fā)板上運(yùn)行,HDMI發(fā)送器為ADV7513,,加載的配置信息為4通道分割顯示,,并將輸出的視頻數(shù)據(jù)直接在顯示器上顯示,其實(shí)際效果如圖4所示,。
由于實(shí)驗(yàn)條件所限,,只有一路信號(hào)源,因此將該信號(hào)源分別連接4個(gè)通道,,可以看出每個(gè)通道的視頻都能完全顯示,。將配置信息切換為PIP顯示,重疊部分背景透明度為0,,窗口為1,,其實(shí)際效果如圖5所示。
可以看出重疊部分窗口能完全顯示,,背景完全不顯示,。整個(gè)系統(tǒng)工作正常,模塊實(shí)現(xiàn)了相應(yīng)功能,。
5 結(jié)論
本文設(shè)計(jì)了一個(gè)基于FPGA的HDMI多模式顯示模塊,,該模塊能夠驅(qū)動(dòng)HDMI輸出顯示多路視頻,并且可以配置每路視頻的顯示位置以及重疊部分的透明度,。通過設(shè)置驅(qū)動(dòng)信息,,模塊可適用于多種型號(hào)HDMI的發(fā)送器以及不同參數(shù)的視頻。設(shè)計(jì)中通過流水線提升了處理速度,,加強(qiáng)了顯示的即時(shí)性,。因此在基于SOPC的視頻處理系統(tǒng)中,可以作為一種通用、高速,、多功能的HDMI輸出顯示組件,,具有較好的應(yīng)用前景。
參考文獻(xiàn)
[1] 劉紫燕,,馮亮,,祁佳.一種基于FPGA的實(shí)時(shí)視頻跟蹤系統(tǒng)硬件平臺(tái)設(shè)計(jì)[J].傳感器與微系統(tǒng),2014,,33(7):98-102.
[2] 李煌.基于FPGA的HDMI顯示系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].上海:華東師范大學(xué),,2008.
[3] 梁義,濤唐垚,,史衛(wèi)亞,,等.基于Cyclone IV的Camera Link-HDMI高清視頻轉(zhuǎn)換器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2013,,39(5):12-14.
[4] 陳志杰.高清混合視頻矩陣的研究及FPGA實(shí)現(xiàn)[D].泉州:華僑大學(xué),2014.
作者信息:
向梓豪,,陸安江
(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,,貴州 貴陽(yáng)550025)