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