新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA的VGA可移植模塊終極設計

        基于FPGA的VGA可移植模塊終極設計

        作者: 時間:2012-03-13 來源:網絡 收藏

        b) 專用視頻轉換芯片

        利用專用視頻轉換芯片,ADV7120等,將數字信號轉換為 RGB的模擬信號。ADV7120為高速D/A芯片,將數字信號轉換為模擬信號輸給,電路如下:

        24.jpg

        三、可設計

        Bingo玩VGA也算是比較早了,當年也是視覺的誘惑,以及唯獨尊的優勢。于是之后一發而不可收拾。本章Bingo將自己這些年最終優化的VGA驅動,發布至此。本所有代碼均Bingo獨家創造,請尊重版權哈。

        本設計已經封裝成模塊,只要修改時序參數、掃描時鐘參數以及在vga_display.v中添加顯示電路,即可。方便,希望對大家有用。

        25.jpg

        1、模塊劃分

        (1)vga_design.v

        工程頂層文件,例化各個模塊。

        (2)sys_ctrl.v

        PLL時鐘分配電路。

        (3)vga_display.v

        顯示電路,根據時序,用于描述VGA的顯示電路。

        (4)vga_driver.v

        VGA驅動電路,對時序,狀態的約束。

        RTL圖如下所示:

        26.jpg

        2、代碼設計

        Bingo例程以16bit RGB VGA驅動為例,不同位數的顯示只要改一下vga_data即可。

        前文以及代碼講述了那么多,此處不再貼完整代碼,而是對代碼中部分結構進行解析。

        代碼下載地址:http://blog.chinaaet.com/detail/21606.html

        (1)vga_driver.v代碼分析

        a) 參數例化列表

        #(

        // VGA_1024_768_60fps_65MHz

        // Horizontal Parameter ( Pixel )

        parameter H_DISP = 11'd1024,

        parameter H_FRONT = 11'd24,

        parameter H_SYNC = 11'd136,

        parameter H_BACK = 11'd160,

        parameter H_TOTAL = 11'd1344,

        // Virtical Parameter ( Line )

        parameter V_DISP = 10'd768,

        parameter V_FRONT = 10'd3,

        parameter V_SYNC = 10'd6,

        parameter V_BACK = 10'd29,

        parameter V_TOTAL = 10'd806

        )

        這樣寫的目的是為了軟件封裝性,能夠在例化的時候修改法分辨率,同時電路結構保持不變。

        DISP,FRONT ,SYNC,BACK,TOTAL分別為顯示期,消隱前肩,消音期,消隱后肩,總時間,各自對應各自的行場信號。

        b) 行同步信號設計

        //------------------------------------------

        // 行同步信號發生器

        reg [10:0] hcnt;

        always @ (posedge clk_vga or negedge rst_n)

        begin

        if (!rst_n)

        hcnt = 0;

        else

        begin

        if (hcnt H_TOTAL-1'b1)

        hcnt = hcnt + 1'b1;

        else

        hcnt = 0;

        end

        end

        //------------------------------------------

        always@(posedge clk_vga or negedge rst_n)

        begin

        if(!rst_n)

        vga_hs = 1;

        else

        begin

        if( (hcnt >= H_DISP+H_FRONT-1'b1) (hcnt H_DISP+H_FRONT+H_SYNC-1'b1) )

        vga_hs = 0;

        else

        vga_hs = 1;

        end

        end

        如上所示,分析代碼可以知道,行同步信號的計數狀態機按照時序的劃分,是以下過程:H_DISP,H_FRONT,H_SYNC,H_BACK,這似乎和上述分析的VGA時序不是完全吻合。但是VGA時序是一個循環,順推H_BACK個時終域便可以得到以上時期劃分,但是這樣更方便后續坐標計數,因為Bingo此處這樣設計,當然實際證明是完全可行的。

        注意:(hcnt >= H_DISP+H_FRONT-1'b1) (hcnt H_DISP+H_FRONT+H_SYNC-1'b1) 只是因為后續坐標計算,就把時序提前了1個時鐘已達到同步。



        關鍵詞: FPGA VGA 移植 模塊

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 松阳县| 集安市| 泉州市| 阜宁县| 绥滨县| 沙坪坝区| 乌海市| 通化市| 沧州市| 柏乡县| 彩票| 丰原市| 金沙县| 十堰市| 嵊州市| 广西| 望谟县| 屯昌县| 二连浩特市| 安宁市| 定远县| 陆良县| 沂水县| 布尔津县| 九寨沟县| 洪洞县| 江西省| 高台县| 磴口县| 永善县| 青铜峡市| 大石桥市| 南漳县| 柳林县| 长子县| 英超| 昭苏县| 水富县| 佛冈县| 建瓯市| 上高县|