《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于FPGA的HDMI多模式顯示模塊設(shè)計
基于FPGA的HDMI多模式顯示模塊設(shè)計
2017年電子技術(shù)應(yīng)用第12期
向梓豪,陸安江
貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽550025
摘要: 通過SOPC進(jìn)行視頻信號處理是目前研究的熱點(diǎn)。針對此類系統(tǒng)的顯示模塊,提出一種基于FPGA的HDMI多模式顯示模塊設(shè)計方案。首先對HDMI的驅(qū)動時序進(jìn)行分析,設(shè)計驅(qū)動信號生成電路,然后根據(jù)配置參數(shù),將多路視頻進(jìn)行多級ALPHA混合,實(shí)現(xiàn)了通過HDMI輸出與顯示多路視頻,并且每路視頻的位置與透明度可設(shè)置。為保證視頻的實(shí)時性,對較為復(fù)雜的計算過程采用流水線設(shè)計方法提升速度。模塊以Verilog HDL的形式進(jìn)行編寫,具有較強(qiáng)的通用性。
關(guān)鍵詞: FPGA 多模式顯示 HDMI ALPHA混合
中圖分類號: TN79;TP391
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.171683
中文引用格式: 向梓豪,陸安江. 基于FPGA的HDMI多模式顯示模塊設(shè)計[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.
Design of HDMI multi mode display module based on FPGA
Xiang Zihao,Lu Anjiang
College of Big Data and Information Engineering,Guizhou University,Guiyang 550025,China
Abstract: Using SOPC to process video signal is a hot research at present. As for the display module of the system, the paper puts forward a kind of design, which contains multi mode display module and is based on FPGA. First,it analyses the timing sequence of HDMI driver and designs driving signal to create circuits. Then, according to the configuration parameters, mixes the multi-channel video together in the form of multistage ALPHA mixing, to realize the output and display of the multi video by HDMI, meanwhile the position and transparency of every video can be set. To assure the real-time of the video, for the more complicated calculating process, it designs the assembly line way to promote the speed. The module is written in the form of Verilog HDL, which has strong versatility.
Key words : FPGA;multi mode display;HDMI;ALPHA mixing

0 引言

    隨著社會信息化程度的不斷提高,人們對視頻處理的要求越來越高,視頻處理系統(tǒng)處理的數(shù)據(jù)量也越來越大。在嵌入式視頻處理系統(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)。對于這類視頻處理系統(tǒng),構(gòu)建可編程片上系統(tǒng)(System-on-a-Programmable-Chip,SOPC)是目前的主流方案。SOPC是一種片上系統(tǒng),即在一塊芯片上實(shí)現(xiàn)整個系統(tǒng)的邏輯功能[1],且具有設(shè)計便捷、配置靈活、可在線調(diào)試、系統(tǒng)可復(fù)用等特點(diǎn)。在視頻處理系統(tǒng)的接口中,HDMI是最新的高清晰度多媒體接口[2],具有高帶寬、小體積、高智能、內(nèi)容保護(hù)等優(yōu)點(diǎn),被廣泛應(yīng)用于高清顯示器、高清電視之中[3]

    針對基于SOPC的視頻處理系統(tǒng),本文提出一種基于FPGA的HDMI多模式顯示模塊設(shè)計方法,可為SOPC提供一種通用的HDMI多模式顯示組件,并可適用于多種HDMI發(fā)送器以及不同參數(shù)的視頻。通過該模塊,可以實(shí)現(xiàn)多路視頻的顯示,并可配置每路視頻的位置與透明度,為視頻處理系統(tǒng)實(shí)現(xiàn)多模式的顯示提供了解決方案。

1 總體方案設(shè)計

    為了驅(qū)動HDMI發(fā)送芯片,以及通過ALPHA混合實(shí)現(xiàn)多模式顯示,需要根據(jù)HDMI的工作時序設(shè)計相應(yīng)的驅(qū)動電路,而且還需根據(jù)指定的坐標(biāo)信息與透明度參數(shù),對各通道視頻的數(shù)據(jù)進(jìn)行多級ALPHA混合計算,最后將驅(qū)動信號以及視頻數(shù)據(jù)輸出。根據(jù)以上功能需求,將整個模塊分為兩個分模塊,即HDMI驅(qū)動模塊和ALPHA混合模塊。系統(tǒng)框圖如圖1所示。

qrs5-t1.gif

    在HDMI驅(qū)動模塊中,根據(jù)HDMI接口的工作時序,設(shè)計兩個計數(shù)器分別對時鐘信號與行進(jìn)行計數(shù),在相應(yīng)的時鐘周期生成行同步信號、場同步信號和數(shù)據(jù)總線使能信號[4]。設(shè)計一個坐標(biāo)指示電路,通過兩個計數(shù)器對當(dāng)前輸出的有效視頻數(shù)據(jù)的行和列進(jìn)行計數(shù),并輸出計數(shù)值,此計數(shù)值用于在相應(yīng)坐標(biāo)讀取視頻數(shù)據(jù)與ALPHA混合計算。

    例化4個ALPHA混合模塊(數(shù)量可根據(jù)需求設(shè)定),最多可以使4路視頻進(jìn)行多模式顯示。在ALPHA混合模塊中,根據(jù)坐標(biāo)指示電路生成的計數(shù)值,在指定的坐標(biāo)區(qū)域發(fā)出數(shù)據(jù)讀取信號對緩存的視頻數(shù)據(jù)進(jìn)行讀取,并且在指定的區(qū)域生成相應(yīng)alpha值(透明度)。設(shè)計一個ALPHA混合計算電路,其負(fù)責(zé)對前景視頻數(shù)據(jù)與后景視頻數(shù)據(jù)進(jìn)行ALPHA混合。ALPHA混合計算電路采用流水線設(shè)計方法,將整個計算過程分為多級進(jìn)行ALPHA混合計算,每一級在一個時鐘周期內(nèi)的計算結(jié)果保存在寄存器中,提供給下一級在下個時鐘周期進(jìn)行計算。ALPHA混合計算會導(dǎo)致數(shù)據(jù)輸出延遲,因此再次例化一個坐標(biāo)指示電路,將同步信號、場同步信號和數(shù)據(jù)總線使能信號都延遲相應(yīng)周期后輸入該電路,以產(chǎn)生新的同步的行和列的計數(shù)值供下一級的ALPHA混合模塊使用。本實(shí)例提供4通道分割顯示與PIP(雙通道的畫中畫)顯示兩種顯示模式用于驗(yàn)證。當(dāng)配置的顯示模式為4通道分割顯示時,第一通道視頻作為前景首先和預(yù)設(shè)的底色背景進(jìn)行ALPHA混合,其中重疊部分背景的透明度為0(完全不顯示),前景的透明度為1(完全顯示),再將混合后的視頻數(shù)據(jù)作為背景與第二通道的視頻進(jìn)行ALPHA混合,按此方案依次完成4個通道的ALPHA混合,每個通道的位置互不重疊。而進(jìn)行PIP顯示時第一通道的視頻作為背景,第二通道的視頻作為前景顯示在顯示器中心位置,重疊部分背景的透明度為0,前景的透明度為1。

2 HDMI驅(qū)動模塊設(shè)計

    HDMI驅(qū)動模塊主要負(fù)責(zé)根據(jù)不同的配置信息輸出相應(yīng)的驅(qū)動信號,使視頻數(shù)據(jù)能夠通過HDMI發(fā)送器正常輸出。

2.1 HDMI發(fā)送器工作方式

    視頻數(shù)據(jù)通過HDMI進(jìn)行傳輸時,HDMI接收/發(fā)送芯片通過最小化傳輸差分信號(TMDS)的編碼技術(shù)將其編碼為數(shù)據(jù)包,雖然FPGA支持多種標(biāo)準(zhǔn)LVDS(低電壓差分信號),但其不能完全兼容TMDS(過渡調(diào)制差分信號),因此需要通過HDMI接收/發(fā)送芯片來實(shí)現(xiàn)HDMI接口功能。FPGA與此類HDMI芯片的傳輸通常通過一組并行總線實(shí)現(xiàn), 包含了數(shù)據(jù)總線、IIC總線、驅(qū)動信號。其中數(shù)據(jù)總線用于傳輸視頻數(shù)據(jù),IIC總線用于FPGA配置HDMI發(fā)送芯片,驅(qū)動信號中的HDMI_CLK為同步時鐘信號,DE_HDMI為數(shù)據(jù)總線使能信號,HSY_HDMI為行同步信號,VSY_HDMI為場同步信號。本模塊正常工作需要將HDMI芯片配置為RGB輸出。HDMI接口傳輸RGB信號的工作時序與VGA接口的工作時序類似,但無需將數(shù)字信號轉(zhuǎn)換為模擬信號。DE_HDMI、HSY_HDMI、VSY_HDMI以固定的時間關(guān)系輸出,HDMI_CLK則作為基準(zhǔn)時鐘與這些信號同步。

    在一場的時間段,根據(jù)視頻刷新頻率以及分辨率的不同,處于同步段時行同步信號首先保持一定周期的高電平,之后置低電平并在間隔相應(yīng)的周期后輸出視頻數(shù)據(jù),這個間隙為顯示后沿。視頻數(shù)據(jù)輸出完成后間隔相應(yīng)的周期后開始下一行的傳輸,這個間隙為顯示前沿。場同步信號的時序依然是首先保持一定周期的高電平,之后置低電平,間隔相應(yīng)的行時間(傳輸一行數(shù)據(jù)所需的時鐘周期)后輸出一場中所有的行,所有行的視頻數(shù)據(jù)傳輸完成后間隔相應(yīng)的行時間后開始下一行的傳輸。其時序分段如圖2所示。

qrs5-t2.gif

    其中VSY_HDMI的時序分段與HSY_HDMI相同。

2.2 Verilog HDL代碼設(shè)計

    在FPGA與HDMI發(fā)送器之間,傳輸視頻數(shù)據(jù)的方式為隨同步時鐘逐個傳送像素數(shù)據(jù),對于每場數(shù)據(jù),順序?yàn)閺牡谝恍虚_始從左至右傳送,傳送完畢后開始傳送第二行,依次傳送直至最后一行數(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ù)值,在相應(yīng)的時間拉高行同步信號和場同步信號,其他時間置低電平,其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ā)送器型號輸入相應(yīng)的配置信息,具有較廣泛的適用性。

3 ALPHA混合模塊設(shè)計

    本模塊根據(jù)配置信息(輸入的視頻坐標(biāo)信息、alpha值),使最多4路視頻數(shù)據(jù)在指定坐標(biāo)范圍內(nèi)顯示,并按照設(shè)定的透明度進(jìn)行ALPHA混合。首先將HDMI驅(qū)動模塊生成的DE_HDMI、HSY_HDMI、VSY_HDMI等同步信號連接到坐標(biāo)指示電路的輸入端,此電路中定義兩組計數(shù)器x_cnt與y_cnt,分別對輸出的有效視頻在顯示區(qū)域內(nèi)的x坐標(biāo)與y坐標(biāo)進(jìn)行計數(shù),從每行起始位置,在輸出有效視頻數(shù)據(jù)的每個時鐘周期x_cnt遞增1,每行有效視頻數(shù)據(jù)計數(shù)完成后清零,y_cnt則從有效視頻的第一行開始,在每行有效視頻傳輸完成后遞增1,場同步后清零。利用坐標(biāo)指示電路生成有效視頻的坐標(biāo)信號,即可根據(jù)設(shè)定的視頻位置信息在相應(yīng)的時刻發(fā)出讀請求信號,讀取有效視頻數(shù)據(jù),同時在相應(yīng)的時刻讀取alpha值。

    ALPHA混合計算電路負(fù)責(zé)將背景視頻數(shù)據(jù)與前景視頻數(shù)據(jù)根據(jù)當(dāng)前的alpha值進(jìn)行ALPHA混合。本模塊通過多級流水線設(shè)計ALPHA混合計算電路,實(shí)現(xiàn)了ALPHA混合計算的硬件加速,極大地提升了計算速度。

    對于RGB編碼的視頻數(shù)據(jù),其進(jìn)行ALPHA混合的公式如式1所示(該公式也適用于YUV編碼的視頻數(shù)據(jù))。

    qrs5-gs1.gif

其中R1、G1、B1對應(yīng)混合后的視頻數(shù)據(jù)的R、G、B分量,Rf、Gf、Bf對應(yīng)前景數(shù)據(jù)的R、G、B分量,Rb、Gb、Bb對應(yīng)背景數(shù)據(jù)的R、G、B分量。在流水線設(shè)計中,將組合邏輯分成三級,第一級對擴(kuò)大后的數(shù)據(jù)通過乘法器進(jìn)行乘法累加運(yùn)算,第二級進(jìn)行加法運(yùn)算,第三級進(jìn)行縮小運(yùn)算,該模塊框圖如圖3所示。

qrs5-t3.gif

    由于FPGA設(shè)計屬于數(shù)字電路設(shè)計,電路層面上無法直接計算小數(shù)點(diǎn)。故采用將計算數(shù)據(jù)先擴(kuò)大,計算完成后再縮小的方法。具體方法為先將公式左右兩端分別擴(kuò)大256倍,計算完成后再縮小256倍,將擴(kuò)大后的公式分為三步計算。

    第一步:進(jìn)行乘法操作,如式(2)、式(3)所示。

    qrs5-gs2-3.gif

    第二步:進(jìn)行加法操作,將第一級計算出的前景數(shù)據(jù)中間值R11、G11、B11與背景數(shù)據(jù)中間值R12、G12、B12分別相加,如式4所示。

    qrs5-gs4.gif

    第三步:進(jìn)行縮小操作,分別對第二步得到的中間值右移8位,為保證數(shù)據(jù)的精確性,對得到的數(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é)果

    將該模塊作為一個基于SOPC的四通道視頻處理系統(tǒng)的顯示模塊,編譯后配置到FPGA中并在開發(fā)板上運(yùn)行,HDMI發(fā)送器為ADV7513,加載的配置信息為4通道分割顯示,并將輸出的視頻數(shù)據(jù)直接在顯示器上顯示,其實(shí)際效果如圖4所示。

qrs5-t4.gif

    由于實(shí)驗(yàn)條件所限,只有一路信號源,因此將該信號源分別連接4個通道,可以看出每個通道的視頻都能完全顯示。將配置信息切換為PIP顯示,重疊部分背景透明度為0,窗口為1,其實(shí)際效果如圖5所示。

qrs5-t5.gif

    可以看出重疊部分窗口能完全顯示,背景完全不顯示。整個系統(tǒng)工作正常,模塊實(shí)現(xiàn)了相應(yīng)功能。

5 結(jié)論

    本文設(shè)計了一個基于FPGA的HDMI多模式顯示模塊,該模塊能夠驅(qū)動HDMI輸出顯示多路視頻,并且可以配置每路視頻的顯示位置以及重疊部分的透明度。通過設(shè)置驅(qū)動信息,模塊可適用于多種型號HDMI的發(fā)送器以及不同參數(shù)的視頻。設(shè)計中通過流水線提升了處理速度,加強(qiáng)了顯示的即時性。因此在基于SOPC的視頻處理系統(tǒng)中,可以作為一種通用、高速、多功能的HDMI輸出顯示組件,具有較好的應(yīng)用前景。

參考文獻(xiàn)

[1] 劉紫燕,馮亮,祁佳.一種基于FPGA的實(shí)時視頻跟蹤系統(tǒng)硬件平臺設(shè)計[J].傳感器與微系統(tǒng),2014,33(7):98-102.

[2] 李煌.基于FPGA的HDMI顯示系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].上海:華東師范大學(xué),2008.

[3] 梁義,濤唐垚,史衛(wèi)亞,等.基于Cyclone IV的Camera Link-HDMI高清視頻轉(zhuǎn)換器設(shè)計[J].電子技術(shù)應(yīng)用,2013,39(5):12-14.

[4] 陳志杰.高清混合視頻矩陣的研究及FPGA實(shí)現(xiàn)[D].泉州:華僑大學(xué),2014.



作者信息:

向梓豪,陸安江

(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽550025)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。