新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA的AMLCD控制器的設計

        基于FPGA的AMLCD控制器的設計

        作者: 時間:2011-12-29 來源:網絡 收藏

        飛機座艙圖形顯示系統已發展到第六代,即采用有源矩陣彩色液晶顯示器(ActiveMatrixLiquidCrystalDisplay)。當前高分辨率的軍用顯示模塊還只能依靠進口,且控制電路板須安裝在該顯示模塊提供的機箱內。這種安裝方式對控制電路板的尺寸要求高,要求盡可能減少所設計電路板的尺寸。在筆者設計的新一代飛機座艙圖形顯示系統中使用了大規模現場可編程門陣列(FieldProgrammableGataArray),這種設計方式可以將以前需要多塊集成芯片的電路設計到一塊大模塊可編程邏輯器件中,大大減少了電路板的尺寸,增強了系統的可靠性和設計的靈活性。本文詳細介紹了已在實際項目中應用的基于的圖形式AMLCD設計,這種設計方法稍作修改即可應用于常見VGA視頻接口電路的設計。

        本文引用地址:http://www.104case.com/article/190866.htm

        1圖形顯示系統簡介

        圖1是飛機座艙圖形顯示系統結構框圖。圖中處理器采用AD公司的ADSP21061芯片,AMLCD采用Korry公司的KDM710全彩色液晶顯示模塊,該模塊為5×5英寸、600×600分辨率彩色液晶顯示模塊,24位數字RGB輸入。兩個幀存A和B采用IDT公司的71V424高速異步靜態RAM,系統采用兩個幀存輪流操作的方法:當DSP向其中一個幀存寫象素時,由構成的幀存將另一個幀存中的象素順序讀出送給AMLCD,反之亦然。圖形顯示系統通過IDT公司的71V04雙口RAM接收主機的顯示信息。圖1中的幀存和視頻控制器由Xilinx公司的SpartanII芯片XS2S50實現。

        62.jpg

        2KMD710顯示模塊

        如圖1所示,美國Korry公司提供的KDM710全彩色液晶顯示模塊接口信號主要如下幾組:3個8位RGB數字信號、行同步信號HSYNC、場同步信號VSYNC、數據使能信號DATA_EN和點時鐘輸入DCLK。根據AMLCD數據手冊所需求的時序,確定掃描時序和相應的時序參數如圖2所示。一般,圖形終端顯示器掃描制式與廣播電視的標準有點不同,須根據顯示模塊所提供的時間要求來確定掃描時序,其中的行場同步的前后肩,可以根據需要進行微調,一般為了防止每行的第一個象素丟失,要求行同步后肩C與行同步脈沖寬B盡量相等。圖2中的點時鐘為20MHz,行周期為650個時鐘周期,場周期為615個行周期(場頻為50Hz)。

        63.jpg

        3LCDVGA控制器設計

        設計行場掃描時序,一般有兩種方式:查找表方式和編程邏輯方式。查找表方式主要由存儲芯片構成,如SRAM、EPROM、PORM等。使用時,先根據所要產生的時序在存儲單元寫入相應的數值,查表時再從表內讀出時應存儲單元的數值,以形成掃描時序。掃描時序查找表分為行掃描時序查找表和場掃描時序查找表。場掃描時序查找表的輸入時鐘由行同步脈沖提供。用查找表形成時序的方法存在體積大、計算煩瑣的缺點。隨著大規模邏輯芯片的出現,利用編程邏輯方法產生行場掃描時序是一個發展方向。這種方法具有電路簡單、功能強、修改方便、可靠性高等優點。圖3為LCD控制器的框圖。

        64.jpg

        在本設計中,點時鐘DCLK由處理器DSP的系統時鐘40MHz經數字鎖相環二分頻得到。點時鐘驅動行時序生成器,產生圖2所示的行同步信號HS和行消隱信號HB。為避免毛刺,控制器設計采用同步設計方法,如圖3所示,行同步信號HS通過一個微分電路,產生一個點時鐘周期寬的場時序生成器使能信號。在使能信號有效時,場時序生成器開始計數,并產生場同步信號VS和場消隱信號VB。行消隱信號HB和場消隱信號VB相與后即為數據使能信號DATA_EN。該數據使能信號作為產生幀存地址計數器的計數使能,以保證DATA_EN信號為高時,將象素送給AMLCD顯示。在DCLK的上升沿,幀存地址計數器加一,幀存SRAM經過一段延時后,象素數據出現在總線上。在DCLK的下降沿AMLCD將數據讀入。該LCD控制器的設計方法很容易用于VGA視頻接口。在VGA接口電路的設計中,不需點時鐘電路,只須將行同步信號與場同步信號輸出,將數據使能信號作為復合消隱信號輸入即可。產生行場掃描時序的VHDL描述如下:

        entityseq_genis

        port(clk_seq:instd_logic;

        rst_seq:instd_logic;

        lcd_hs_out : outstd_logic;

        lcd_dataen : outstd_logic;

        lcd_vs_out : outstd_logic;

        pix_clk : outstd_logic);

        endseq_gen;

        architecturertl_seq_genofseq_genis

        signallcd_hb:std_logic;

        signallcd_hs:std_logic;

        signallcd_vb:std_logic;

        signallcd_vs:std_logic;

        signalclken_vcount:std_logic;

        begin

        hcount:block

        signalhcountreg:std_logic_vector(9downto0);

        signalhz_temp:std_logic;

        signallcd_hz:std_logic;

        begin

        process(clk_seq,lcd_hz)

        begin

        if(lcd_hz='1')then

        hcountreg=(others=>'0');

        elsifclk_seq'eventandclk_seq='1'then

        hcountreg=hcountreg+1;

        endif;

        endprocess;

        lcd_hb='0'whenhcountreg>=600andhcountreg650

        else'1';

        lcd_hs='0'whenhcountreg>=610andhcountreg630

        else'1';

        hz_temp='1'whenhcountreg=650else'0';

        lcd_hz=hz_temporrst_seq;

        endblockhcount;

        diff:block

        signalinputrega:std_logic;

        signalinputregb:std_logic;

        begin

        process(clk_seq)

        begin

        ifclk_seq'eventandclk_seq='1'then

        inputregb=inputrega;

        inputrega=notlcd_hs;

        endif;

        endprocess;

        clken_vcount=notinputregbandinputrega;

        endblockdiff;

        vcount:block

        signalvcountreg:std_logic_vector(9downto0);

        signalvz_temp:std_logic;

        signallcd_vz:std_logic;

        begin

        process(clk_seq,lcd_vz)

        begin

        if(lcd_vz='1')then

        vcountreg=(others=>'0');

        elsifclk_seq'eventandclk_seq='1'then

        ifclken_vcount='1'then

        vcountreg=vcountreg+1;

        endif;

        endif;

        endprocess;

        lcd_vb='0'whenvcountreg>=600andvcountreg615

        else'1';

        lcd_vs='0'whenvcountreg>=607andvcounreg610

        else'1';

        vz_temp='1'whenvcountreg=615else'0';

        lcd_vz=vz_temporrst_seq;

        endblockvcount;

        pix_clk=clk_seq;

        lcd_dataen=lcd_hbandlcd_vb;

        lcd_hs_out=lcd_hs;

        lcd_vs_out=lcd_vs;

        endrtl_seq_gen;

        這種用VHDL產生掃描時序的方法簡單、易讀,并且易于修改。在代碼中只須修改一些時序參數就能產生任意時序的波形,具有很好的可重用性。用FPGAExpress3.5半VHDL代碼綜合后,通過Foundation3.1i進行布局和布線,用Foundation提供的門級仿真工具產生的行掃描時序仿真圖。

        采用FPGA技術設計的AMLCD控制器,大大減少了電路板的尺寸,同時增加了系統可靠性和設計靈活性。這種用VHDL語言實現現行場掃描時序生成器的方法,具有簡便。易讀和可重用性強的特點。該AMLCD控制器已用Xilinx公司的SpartanII系列器件XC2S50實現,并在飛機座艙圖形顯示系統中實現應用。



        關鍵詞: AMLCD FPGA 控制器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阜平县| 龙井市| 会泽县| 天水市| 陵川县| 大渡口区| 玛沁县| 霸州市| 濮阳县| 绥滨县| 滨州市| 房产| 土默特左旗| 阿瓦提县| 西城区| 肃宁县| 深水埗区| 班戈县| 呼伦贝尔市| 故城县| 玉屏| 五指山市| 苍南县| 紫阳县| 当阳市| 府谷县| 观塘区| 青龙| 错那县| 绍兴县| 尉犁县| 安达市| 娱乐| 惠安县| 综艺| 化德县| 泰宁县| 仙桃市| 楚雄市| 麻阳| 木里|