作者:ALINX
* 本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權并注明出處。
適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
在HDMI輸出實驗中講解了HDMI顯示原理和顯示方式,本實驗介紹如何使用FPGA實現字符顯示,通過這個實驗更加深入的了解HDMI的顯示方式。
1. 實驗原理
實驗通過字符轉換工具將字符轉換為16進制coe文件存放到單端口的ROM IP 核中,再從ROM 中把轉換后的數據讀取出來顯示到HDMI上。
2.程序設計
字符顯示例程是在HDMI顯示的基礎上增加了一個osd_display的模塊,“osd_display”模塊是用來讀取存儲在Rom ip核里轉換后的字符信息,并在指定區域顯示。程序框圖如下圖所示:
2.1 在“timing_gen_xy”模塊是根據HDMI時序標準定義了“x_cnt”和“y_cnt”兩個計數器并由這兩個計數器產生了HDMI顯示的“x”坐標和“y”坐標。程序中用“vs_edge”和“de_falling”分別表示場同步開始信號和數據有效結束信號。其原理如下圖所示:
timing_gen_xy模塊端口
2.2 下面介紹如何存儲文字信息的ROMIP,首先需要生成能夠被XILINX FPGA識別的.coe文件。
首先在工程文件夾下找到“FPGA字模提取”工具。
雙擊.exe文件打開工具
在提取工具的“字符輸入”框中輸入需要顯示的字符,字體和字符高度可以自定義選擇。設置完成后點擊“轉換”按鈕,在界面左下角可以看到轉換后的字符點陣大小,點陣的寬和高在程序中是需要用到
點陣的寬和高這里位144x32,需要跟osd_display程序中定義的一致:
點擊“保存”按鈕,將文件保存到本例程源文件目錄下,需要注意的是在保存類型下應該選擇Xilinx(*.coe),點擊“保存”按鈕。
找到生成的.coe文件打開后可以看到如下:
調用單端口Rom IP核的過程在前面ROM的使用中已經介紹過,設置為Single Port ROM
在PortA Options欄中設置如下:
按如下圖添加osd.coe文件(找到前面生成的coe文件),完成后點擊“OK”按鈕:
2.3 osd_display模塊包含timing_gen_xy 模塊和osd_rom模塊。osd_rom里存儲的字符數據,如果數據為1,OSD的區域顯示ROM中的前景紅色(顯示ALINX芯驛),如果數據是0,OSD的區域顯示數據為背景色(彩條)。
設置區域有效信號,也就是字符顯示在此區域中,起始坐標設置成(9,9),區域大小可以根據字符生成工具設置的區域設置。
在ROM的讀地址部分可能很多人不理解,為什么是[15:3],也就是八個時鐘周期才讀出一個數據,這是因為字符的一個點只表示1bit,而ROM的存儲數據寬度是8位,因此需要八個周期取出一個數據,并比較每個bit位的值,將字符一個點轉換成圖像上的一個像素。
osd_display模塊端口
3.實驗現象
連接好開發板和顯示器,連接方式參考《HDMI輸出實驗》教程,需要注意,開發板的各個連接器不要帶電熱插拔,下載好實驗程序,可以看到顯示器顯示以彩條為背景的字符。開發板作為HDMI輸出設備,只能通過HDMI顯示設備來顯示,不要試圖通過筆記本電腦的HDMI接口來顯示,因為筆記本也是輸出設備。
默認字符顯示的位置在坐標為(9,9),另外用戶可以修改下面的pos_y和pos_x的判斷條件將字符顯示在顯示屏的任意位置:
審核編輯:何安
-
FPGA
+關注
關注
1629文章
21729瀏覽量
603005 -
HDMI
+關注
關注
32文章
1694瀏覽量
151864
發布評論請先 登錄
相關推薦
評論