《FPGA全程進階---實戰演練》第十章 VGA五彩繽紛

来源:http://www.cnblogs.com/raymon-tec/archive/2016/01/14/5129583.html
-Advertisement-
Play Games

1基礎理論部分 VGA(video graphics array)即視頻圖形陣列,是IBM在1987年隨PS/2一起推出的使用模擬信號的一種視頻傳輸標準。VGA相比與現在的視頻傳輸介面來說已經過時,不過作為最低標準,基本上製造商都會接入此介面,圖11.1是常見的VGA介面。圖11.1 VGA介面 對...


1基礎理論部分

   VGA(video graphics array)即視頻圖形陣列,是IBM在1987年隨PS/2一起推出的使用模擬信號的一種視頻傳輸標準。VGA相比與現在的視頻傳輸介面來說已經過時,不過作為最低標準,基本上製造商都會接入此介面,圖11.1是常見的VGA介面。

wps865A.tmp

圖11.1 VGA介面

  對於VGA15個引腳的相關說明,如下圖所示。

wps866A.tmp

圖11.2 VGA引腳說明

  大家做實驗的時候,可能會有一個誤區,那就是做實驗時直接把實驗板的VGA介面接到筆記本電腦上,還興高采烈的等待著顯示圖像,殊不知筆記本電腦是不能作為普通顯示器顯示的。

  現在的顯示器介面已經經過VGA,DVI(數字信號的傳輸),到現在的HDMI介面標準,實現數字高清影音傳輸的技術,因此最新的顯示器基本上都會支持這幾種介面。

  更多的時序標準,請參考http://tinyvga.com/vga-timing

  由三原色RGB所組成的顏色種類,由RGB888(24位真彩色),RGB565,RGB444;(本實驗所採用的是RGB565),對於帶寬有限,圖像要求不是特別高,這個RGB565已經可以滿足要求了。對於RGB565模型,位的分配,由高到低,分別為R 15..11,G 10..5, B 4..0;

  對於VGA的介面模擬電壓,為0~0.714V,0代表無色,0.714代表滿色,FPGA輸出3.3V,所以還必須要經過DAC的轉換。這些部分在做板子的時候,會繼續補充、基本上現在成熟的方案,採用R-2R或者ADV7123。當然專用晶元成像質量很好。

  對於顯示器而言,VGA的解析度越高,意味著顯示的圖像越清晰,包含信息也越多,畫質更加好,圖像更加保真。由於人眼的視覺暫留,要想實現顯示器的不閃爍,至少需要實現每秒25幀畫面的更新。通常顯示器的掃描頻率都在60幀及以上。

  對於顯示器而言,有的可以相容多個解析度模式,為了實現這種方式,許多顯示器具有scaler功能,能夠實現不同解析度的相容。

wps139E.tmp

圖11.2 場同步信號

wps13CE.tmp

圖11.3 行和場信號工作方式

wps13CF.tmp

wps13E0.tmp

圖11.4 常見的刷新時序表

1.2 VGA驅動電路部分

  現在主要的用於VGA驅動電路的方案,一個是採用電阻R-2R的形式,一個是採用專用晶元,這兩者各有優勢。

  對於VGA來說,有幾路信號比較重要,RED,GREEN, BLUE信號,以及hsync 和vsync信號,其中hsync 和vsync信號可以直接和FPGA的IO口相連,但是rgb信號卻不能,它需要0~0.714V模擬信號。

1.2.1 R-2R結構

wps13E1.tmp

圖11.5 拓撲結構

上圖是視頻DAC拓撲結構模式,根據上述模式計算Rx的值。

wps13F1.tmp

那麼大概得到Rx = 271.6387Ω;

wps13F2.tmp解出wps1403.tmp,所以我們採用Ra = 500Ω,可以選中1K和2K的電阻去串並聯實現R-2R模型。這裡是採用2K和1K串並聯的方式實現5—6—5 ,即16位格式。

wps1404.tmp

圖11.7 VGA介面部分電路

wps1414.tmp

圖11.8 R-2R電路

1.2.2 專用晶元結構

  對於專用晶元去用於視頻操作的,我們常用ADV7123。此款晶元最大採樣率為330MHz,低功耗,3路10位DAC視頻轉換器。圖11.9是原理圖部分,圖11.10是實物圖。

wps1425.tmp

圖11.9  ADV7123原理圖

wps1426.tmp

圖11.10 VGA實物圖

 

2 Verilog代碼實現部分

  本次實驗實現彩條測試功能,板卡載有一顆ADV7123晶元,FPGA驅動該晶元並產生VGA所需要的行和場信號,圖11.11是RTL視圖。

wps7D4.tmp

圖11.11 RTL視圖

wps7F4.tmp

  在lcd_para.v文件中定義了彩條各參數和VGA所需要的行和場信號所需要的像素數,這裡利用了define和 ifdef指令,註意其用法。

wps815.tmp

  在lcd_display.v中,將lcd_para.v文件進行調用,且在23行到26行有幾種測試實驗,一種是水平彩條,一種是豎直彩條,灰度圖以及紋理圖。

wps825.tmp

  上述就是具體每一種測試實驗所對應的生成程式。

wps846.tmp

  在lcd_driver.v中,生成驅動ADV7123的信號和產生VGA所需要的16位數據,以及在lcd_display.v中所需要的x和y坐標值。

wps856.tmp

行信號的生成部分。

wps867.tmp

  場信號生成部分,75行到77行是AD7123所需要的信號,可以看到驅動是非常簡單的。這裡75行ADV7123的驅動時鐘和主時鐘相反,以此來達到在主時鐘的上升沿對數據進行採樣。

wps868.tmp

  上述是對總的模塊進行例化部分,註意25行到27行,由於ADV7123晶元需要RGB的格式為565,所以定義lcd_red,lcd_green,以及lcd_blue。

wps878.tmp

  註意62行是對剛纔定義的RGB信號的分配,由於lcd_rgb是16位數據,分別將高5位送給lcd_red,將中6位送給lcd_green,將低五位送給lcd_blue。

3 Modelsim模擬部分

wps889.tmp

  上述是testbench中的時鐘模擬信號和複位模擬信號的產生,其中11行是模擬25MHz時鐘。

wps8B9.tmp

  註意上述模擬時調用的模塊名,因為我們想觀察到各個信號的輸出情況,所以只調用重要的兩個模塊lcd_driver和lcd_display即可,32行到43行是對調用模塊的各個輸出信號的聲明,這裡也可以看到,需要觀察輸出什麼樣的信號,只需定義為wire類型即可,前提是調用各個模塊時,wire定義的變數必須是相對於輸出的信號。

wps8CA.tmp

  69行到78行是對lcd_display模塊進行的例化。82行到85行是對輸入信號的初始化,外部輸入信號暫時沒有,所有沒有初始化任何信號。

  另外為了節省模擬時間在lcd_driver中將各參數適當縮小,以達到縮減模擬時間的目的,如下麵所述。

wps8DA.tmp

3.1 模擬波形

  圖11.11是時鐘的模擬波形,時鐘信號周期40ns,滿足25MHz。圖11.12是行和場信號的模擬,可以看到6個行信號,1個場信號。這和之前的VGA時序分析是一致的。圖11.13是lcd_en信號和lcd_blank信號,這兩個信號都和行和場信號有關。圖11.14是RGB數據模擬出的波形

wps8DB.tmp

圖11.11 時鐘信號模擬

wps8DC.tmp

圖11.12 行和場模擬信號

wps8ED.tmp

圖11.13 使能和空白信號

wps8EE.tmp

圖11.14 RGB輸出的波形


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 突然想到有關C#中使用event特性時關於線程安全的問題,以前雖然有遵從“複製引用+null判斷”的模式(盲目地),但沒有深入瞭解和思考。為之查詢了資料和實驗,對此有了進一步的理解。一般event使用模式定義(field-like event):public event EventHandler D...
  • 生成器提供了一種更容易的方法來實現簡單的對象迭代,相比較定義類實現 Iterator 介面的方式,性能開銷和複雜性大大降低。
  • //讀取方法public static String txt2String(String path){ String fileContent = ""; try { File f = new File(path);...
  • 這篇文章主要介紹了python中的字典詳細介紹,字典是Python中最強大的數據類型之一,本文講解了什麼是字典、創建字典和給字典賦值 、字典的基本操作、映射類型操作符、映射相關的函數、字典的方法等內容,需要的朋友可以參考下一、什麼是字典?字典是Python語言中唯一的映射類型。映射類型對象里哈希值(...
  • 無標題文檔=$pagetot){ $pagenum=$pagetot; }$offset=($pagenum-1)*$length;$sql="select * from q1 order by id limit {$offset},{$length}";$ret=mysql_query($sql)...
  • 前言 在使用cdh集群過程中,難免會因為某些不可抗拒的原因導致節點IP或hostName變動,而cm的監控界面無法完成這些事情,但是cm將集群中所有的主機的信息都存在postgresql資料庫的hosts表中, 現在讓我們來通過修改hosts來完成這個操作。第一步,關閉服務1. 關閉集群服務,及 ....
  • 直接上代碼 String hsql = "delete XTable x where x.Userid= ?"; Query query = this.getSession().createQuery(hsql); query.setString(0, "0...
  • 0. 原碼、補碼、反碼 初學者只做瞭解即可 見 張子秋的博客1. & 按位 與「AND」 功能:對應的兩個二進位均為1 時,結果為1,否則 為0 例子:9&5= 1001&0101 = 0001,即 9&5=1 *規律:二進位中與 1&保持原位,與 0& 為02. | 按位 或「OR」 功能:對應的...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...