基于FPGA的數(shù)字和模擬信號(hào)合成的彩色液晶顯示器
0 引言
FPGA 技術(shù)作為一種新興的技術(shù), 具有靜態(tài)可重復(fù)編程的特性, 芯片上包含的資源豐富, 能夠?qū)嫶蟮摹M足各種需求的、復(fù)雜的數(shù)字電路以及高性能微處理器整合到一塊芯片上實(shí)現(xiàn)片上系統(tǒng)(SoC), 使得系統(tǒng)的開發(fā)周期更短、可靠性更高。
這款同時(shí)顯示數(shù)字和模擬信號(hào)的彩色液晶顯示器可以將多種字體的彩色中西文、直方圖、自由曲線等數(shù)字信號(hào)和視頻模擬信號(hào)以疊加的方式顯示;將固定顯示的內(nèi)容預(yù)先在微機(jī)上進(jìn)行編制,然后將其作為“預(yù)置畫面”送入機(jī)內(nèi)Flash( 閃存) 中。另外, 開放了與BMP、JPEG 等格式圖像文件顯示與操作相關(guān)的命令,極大地提高了二次開發(fā)的效率,使顯示效果得到更完美的體現(xiàn)。
1 系統(tǒng)概述
1.1 液晶顯示器概述
液晶顯示器作為科技時(shí)代的智慧結(jié)晶,為生產(chǎn)生活提供了極大的便利。液晶顯示器將各種信號(hào)及場(chǎng)景直觀地顯示在屏幕上,縮短了顯示到現(xiàn)場(chǎng)的距離,更能體現(xiàn)信號(hào)的各種細(xì)節(jié),方便直觀地為設(shè)計(jì)人員的開發(fā)提供了更加詳細(xì)的數(shù)據(jù)支撐。本文介紹一種新型的液晶顯示器,可以根據(jù)功能需要顯示不同的數(shù)字或視頻信息,體現(xiàn)出細(xì)節(jié)信息,將遠(yuǎn)程的數(shù)字或視頻信息近距離地顯示在眼前,具有很大的實(shí)用性。
1.2 FPGA概述
FPGA 全稱現(xiàn)場(chǎng)可編程門陣列,是一種集成電路芯片,相當(dāng)于把一個(gè)計(jì)算機(jī)系統(tǒng)集成在一個(gè)小的芯片上。本系統(tǒng)采用的FPGA 芯片為京微齊力科技有限公司自主研發(fā)設(shè)計(jì)的CME-M5 芯片。該芯片功能強(qiáng)大,既具備并行執(zhí)行程序的特點(diǎn),又集成了增強(qiáng)型8051 MCU,使得FPGA 的硬件性能大幅提高。采用FPGA 邏輯設(shè)計(jì)的外設(shè)可以確保電路系統(tǒng)穩(wěn)定高速運(yùn)行,嵌入式的8051 MCU 又可以為編程開發(fā)人員的設(shè)計(jì)帶來便利,非常適合用作液晶顯示器的主控芯片[1-2]。
2 系統(tǒng)設(shè)計(jì)
智能型彩色液晶顯示器主要組成部分包括:電源模塊、液晶顯示模塊、RSM232 隔離通信模塊以及視頻轉(zhuǎn)換模塊等。如圖1 所示,加電工作時(shí),首先啟動(dòng)FPGA內(nèi)的配置程序分配資源,明確兩片F(xiàn)PGA(M5)的工作任務(wù)。由其中一片F(xiàn)PGA(1)擔(dān)負(fù)解析數(shù)字信號(hào)指令,負(fù)責(zé)切換分配顯示內(nèi)存等工作任務(wù)。由另一片F(xiàn)PGA(2)處理視頻(ADV7810)解碼后的數(shù)據(jù),根據(jù)指令送入FPGA(1)分配的顯示內(nèi)存中,實(shí)現(xiàn)視頻在指定窗口的顯示。
2.1 電源模塊
電源系統(tǒng)設(shè)計(jì)如圖2 所示,顯示器采用外部12 V或24 V 電源供電, 經(jīng)過LT3995 轉(zhuǎn)換為DC 5 V,DC 5 V 用來驅(qū)動(dòng)7 英寸液晶屏的背光模塊,并經(jīng)過LM1085 轉(zhuǎn)換為DC 3V3;DC 3V3 通過TPS71711 轉(zhuǎn)換為DC 1V1,然后DC 3V3 和DC 1V1 共同驅(qū)動(dòng)FPGA 芯片。本系統(tǒng)用到兩個(gè)同一型號(hào)的FPGA 模塊,F(xiàn)PGA_A用來處理視頻信息,F(xiàn)PGA_D 用來處理數(shù)字信息,兩個(gè)芯片協(xié)同工作保證顯示器穩(wěn)定高效地運(yùn)行;DC 3V3經(jīng)過LM1117-1V8 轉(zhuǎn)換為DC 1V8, 然后DC 3V3 和DC 1V1 共同驅(qū)動(dòng)ADV7180 進(jìn)行模擬視頻信號(hào)的轉(zhuǎn)換工作[3]。
2.2 基于RSM232的隔離通信模塊
數(shù)字信號(hào)的通信使用致遠(yuǎn)RSM232,如圖3 所示,其中C82、C94 作為隔離電容使用。R6、R7 是防止通信線路串入強(qiáng)干擾所加磁珠或電阻[4]。
2.3 基于ADV7180的模擬視頻信號(hào)轉(zhuǎn)換模塊
視頻轉(zhuǎn)換模塊如圖4 所示,IN1、IN2 和IN3 為模擬視頻信號(hào)的輸入端,通過sma 外接模擬攝像頭;BF_PPIx、BF_TMRx 和LLC_CLK 為ADV7180 的輸出信號(hào),連接到FPGA_A 做進(jìn)一步的信號(hào)處理;BF_PFx為IIC 總線,連接至FPGA_D 用來配置ADV7180[5]。
2.4 顯示模塊
系統(tǒng)采用群創(chuàng)7 英寸液晶屏作為顯示終端,分辨率為800×480,采用RGB565 信號(hào)驅(qū)動(dòng)液晶屏顯示。
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件的主要任務(wù)是實(shí)現(xiàn)數(shù)字信號(hào)以及視頻模擬信號(hào)在顯示屏上的正常顯示。上電之后首先進(jìn)行設(shè)備初始化工作,包括液晶顯示屏模塊、串口模塊以及ADV7180 視頻轉(zhuǎn)換模塊的初始化設(shè)置;隨后進(jìn)入串口處理數(shù)據(jù)模塊,根據(jù)指定通信協(xié)議判斷串口是否接收到有效數(shù)據(jù),如果未接收到有效數(shù)據(jù)則返回串口數(shù)據(jù)處理模塊,如果接收到有效數(shù)據(jù)則判斷顯示模式;根據(jù)顯示模式來切換液晶顯示屏的視頻或數(shù)字界面,并將串口接收的數(shù)據(jù)進(jìn)行必要的處理后顯示在界面上的指定位置,到此本次處理結(jié)束,開啟下一次處理以保證顯示信息的實(shí)時(shí)性[6]。
3.1 ADV7180的初始化
系統(tǒng)上電后,F(xiàn)PGA 通過IIC 總線對(duì)ADV7180 進(jìn)行初始化。初始化模塊主要分為IIC 控制模塊,IIC 命令模塊,ROM 模塊。IIC 控制核心是完成數(shù)據(jù)的串并轉(zhuǎn)換以及將命令轉(zhuǎn)換為IIC 總線的SCL/SDA 信號(hào)線的啟動(dòng)、停止、寫、應(yīng)答等具體的時(shí)序關(guān)系;IIC 命令模塊是指IIC 接口間狀態(tài)的轉(zhuǎn)換以及從ROM 模塊中將配置好的數(shù)據(jù)輸出給IIC 控制模塊,ROM 模塊存儲(chǔ)的是FPGA 配置好的ADV7180 的數(shù)據(jù)。當(dāng)啟動(dòng)IIC 開始配置時(shí),從ROM 中讀取配置的內(nèi)容送出即可。初始化代碼如下:UINT8 adv7180_init(void)
{
UINT8 i;
UINT8 * pdate= ADV7180Config;
I2CIoctl(CLOCK_DIVIDE_BY_960);
for(i=0;i<sizeof(ADV7180Config)/2;i++)
{
I2COpen();
i f ( I 2 C M a s t e r W r i t e ( A D V 7 1 8 0 _
ADDRESS,pdate,2)!=I2C_OK)
{
return i+1;
}
I2CClose();
pdate+=2;
}
return 0;
}
3.2 數(shù)據(jù)的處理
采用中斷方式進(jìn)行串口接收處理,接收到的數(shù)據(jù)存放在一個(gè)256 B 的數(shù)據(jù)緩沖區(qū)中。在處理緩沖區(qū)數(shù)據(jù)時(shí)采用狀態(tài)機(jī)的原理,只有當(dāng)前一個(gè)狀態(tài)完成時(shí)才進(jìn)入下一個(gè)狀態(tài)。緩沖區(qū)內(nèi)經(jīng)過判斷正確的數(shù)據(jù)放入一個(gè)數(shù)組中,顯示模塊調(diào)用該數(shù)組的內(nèi)容,這樣做可以保證界面信息的實(shí)時(shí)性,也有效降低了不同模塊之間的關(guān)聯(lián)性,增加了程序的穩(wěn)定性。串口接收,中斷處理的流程如圖6。
3.3 數(shù)字信號(hào)和模擬信號(hào)疊加處理
模擬信號(hào)通過ADV7180 芯片和FPGA 芯片的協(xié)同工作,將其轉(zhuǎn)換為RGB 信號(hào)保存到SDRAM 中,過程如下:首先ADV7180 將攝像頭輸出的視頻信號(hào)解碼后轉(zhuǎn)換為RBT656 信號(hào)發(fā)送給FPGA 芯片,進(jìn)入芯片后首先將RBT656 信號(hào)解碼,同時(shí)為了減少視頻信號(hào)中的干擾,將RBT656 信號(hào)中的Y 信號(hào)濾波,濾波后將Cb、Cr 和Y 信號(hào)轉(zhuǎn)換為RGB 信號(hào),最后根據(jù)解碼后的行信號(hào)和奇偶場(chǎng)信號(hào)將RGB 信號(hào)通過存儲(chǔ)器調(diào)度模塊寫入SDRAM 保存起來,完成視頻信號(hào)的解碼過程。根據(jù)輸入的數(shù)字顯示信號(hào)中的行、場(chǎng)和時(shí)鐘信號(hào)生成地址和讀取信號(hào),從SDRAM 中讀取保存的視頻數(shù)據(jù),通過疊加模塊同數(shù)字顯示數(shù)據(jù)疊加后輸出,實(shí)現(xiàn)顯示。按彩色液晶屏像素的排列格式處理完成后的整屏RGB像素?cái)?shù)據(jù),可以直接送入液晶屏,實(shí)現(xiàn)顯示。這一部分在FPGA 中完成[1],部分源代碼如下:
assign va_s_o = vcount;
assign ha_s_o = hcount;
assign de_s_o = de_m_i;
assign clk_s_o = clk_m_i;
assign clk_o = clk_m_i;
assign de_o = de_m_i;
assign vs_o = vs_m_i;
assign hs_o = hs_m_i;
assign rgb_o = ( rgb_m_i!=16’h8410)?rgb_m_
i:rgb_s_i;
always @(posedge clk_m_i or negedge rst_n) begin
if (!rst_n)
vcount <=10’b0;
else
if(vsmf)
vcount <= 10’b0;
else
if(demb)
vcount <= vcount+1;
else
vcount <= vcount;
end
always @(posedge clk_m_i or negedge rst_n) begin
if (!rst_n)
hcount <=10’h0;
else
if(de_m_i)
hcount <= hcount+1;
else
hcount <=10’h0;
end
4 實(shí)驗(yàn)及結(jié)果分析
對(duì)本系統(tǒng)的硬件和軟件模塊調(diào)試成功后,對(duì)系統(tǒng)進(jìn)行整體功能性測(cè)試。本文設(shè)計(jì)的液晶顯示器需要實(shí)現(xiàn)的功能是:上電后即按照通信協(xié)議將接收到的數(shù)據(jù)包進(jìn)行解析后按照幀定義進(jìn)行顯示,并可以根據(jù)通信協(xié)議自動(dòng)進(jìn)行數(shù)據(jù)刷新或者畫面切換。實(shí)驗(yàn)測(cè)試包含數(shù)字界面能否正常刷新,數(shù)字和視頻界面能否正常切換,視頻和數(shù)字的疊加是否正常和系統(tǒng)運(yùn)行是否穩(wěn)定等。表1 的數(shù)據(jù)是系統(tǒng)測(cè)試200 次的結(jié)果以及運(yùn)行24 h 的穩(wěn)定性結(jié)果[1-4,6]。
5 結(jié)語(yǔ)
本文提出了一種采用雙FPGA 處理器、通信模塊加ADV7810 視頻轉(zhuǎn)換的能同時(shí)實(shí)時(shí)顯示數(shù)字和模擬信號(hào)的彩色液晶顯示器。該顯示器能夠?qū)崿F(xiàn)畫面的高速更新,且互不干擾,可以直接使用攝像頭,真實(shí)還原攝像頭的信號(hào),在很多空間狹小不方便進(jìn)去人員的場(chǎng)合都可以使用。
參考文獻(xiàn):
[1] 魏麗玲,朱平,石永亮.基于FPGA的圖像采集與存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2015,41(10): 67-69.
[2] 曾聲奎.可靠性設(shè)計(jì)與分析[M].北京:國(guó)防工業(yè)出版社,2011.
[3] 王兆安,黃俊.電力電子技術(shù)[M].北京:機(jī)械工業(yè)出版社,2003.
[4] 羅映紅,張博.傳輸線端接阻抗對(duì)線間串?dāng)_的影響研究[J].鄭州大學(xué)學(xué)報(bào)(工學(xué)版),2009,30(4):120-122.
[5] 朱珍民,沈燕飛,何哲.視頻信號(hào)處理技術(shù)及應(yīng)用[J].電子技術(shù)應(yīng)用,2008,34(10).
[6] 陸民燕.軟件可靠性工程[M].北京:國(guó)防工業(yè)出版社,2015.
(本文來源于《電子產(chǎn)品世界》2021年4月期)
評(píng)論