fpga驱动rgb液晶屏_用FPGA设计LCD 转 VGA 其实vga和lcd驱动 非常类似
這個東西其實是在上一個冬天就做完了,而且似乎已經產業化了,當時是為一位朋友做的,這個朋友再賣給產業化的人,就像流于俗套的故事一樣,這個朋友拿到了錢,不過不像項目開始時說的那樣與我有關。想想多年前一起吃喝拉撒的場景,嘆了一口氣抹去那些記憶,也只能算了。現在把這個設計寫在博文博文中,一方面可以回憶回憶當時的設計思路,也希望可以為其他設計FPGA的兄弟姐妹們提供一點參考。
當時的寫的ppt文檔可在下列地址下載:
這個板子其實就是在爛大街的S3C2410的板子上加一片FPGA EP2C5,SDRAM和ADV7123。由于2410有LCD控制器,在LCD接口的外面加一片Video DAC,這個板子上的ADV7123就可以輸出VGA信號,就可以接顯示器了。但是當輸出的分辨率過高,比如1024x768甚至更高的時候,LCD接口要求的帶寬過高,這樣就會影響2410上面的應用的運行速度。
因此就產生了這個設計,這個設計的目的就是讓2410輸出高分辨率低幀率的信號,比如1024x768@20HZ,通過FPGA把輸出的圖像保存在其控制的SDRAM中,然后FPGA中的圖像產生部分再把這些數據讀出來,按照1024x768@60HZ的速度輸出到ADV7123上。
這個設計對于心電監護這樣的設備已經夠用了,因為心電信號的更新低于20HZ,其實它適用于所有刷新率要求不高但是要接VGA顯示器的場合。
系統的框架大概就是上面這個樣子的了,LCD Receiver是從2410LCD接口接收數據的了,其實就是檢測到HSYNC,VSYNC,VDEN后通過CLK將數據采集進來,然后存儲到FIFO中,這部分的邏輯需要根據2410的LCD時序進行設計。使用FIFO有兩個用處,一方面是匹配讀寫的速度,一方面是轉換數據寬度,因為只是用2410 LCD輸出數據中的8bit數據,即RGB332, 而SDRAM和RW Control 模塊都是按照16bit進行操作的,因此可以通過一個8bit輸入16bit輸出的FIFO進行轉換。
RW Control模塊顧名思義,主要是進行SDRAM讀寫控制了,當收到dcfifo2的Almost Full的時候讀取dcfifo2將其寫入SRAM,當收到dcfifo1的Almost Empty的時候,讀取SDRAM中的數據將其寫入dcfifo1供VGA模塊轉換。dcfifo1是一個16bit輸入8bit輸出的FIFO,其功能和dcfifo2 正好相反。
其中的PLL、FIFO模塊用的就是Altera Quartus中的現成模塊,SDRAM用的也是altera的開源模塊,就是ref-sdr-sdram-verilog.zip,在google搜索有一大堆,只要把其中定義總線寬度的地方改一改就差不多可以用了,其它的關于刷新時間之類的SDRAM的初始化參數則是在RW Control模塊啟動的時候發出命令,再讓SDRAM控制模塊傳給SDRAM芯片的。
VGA產生模塊從dcfifo1讀取圖像數據,產生相應的信號控制Video DAC。主要是要搞清楚前肩,后肩的概率,其實就是每一行(或一幀)后面和前面的間隙時間。輸出的時鐘頻率盡量符合標準的規范。
就像所有的開發一樣,設計只是其中很小的一部分,最大的一部分是調試。Altera SignalTrap相當于是一個免費的邏輯分析儀,雖然其存儲深度和芯片內部的存儲器大小相關,但是還是相當方便的。如何使用可以參考altera的application note。
參考資料
http://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-2613737244.20.P9tQJG&id=43634840829
http://www.cnblogs.com/ccjt/p/4376525.html
總結
以上是生活随笔為你收集整理的fpga驱动rgb液晶屏_用FPGA设计LCD 转 VGA 其实vga和lcd驱动 非常类似的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何从bitbucket到github的
- 下一篇: rgw bucket reshard流程