本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處(http://www.alinx.com)。
1. 實(shí)驗(yàn)簡介
在HDMI測(cè)試實(shí)驗(yàn)中講解了HDMI顯示原理和顯示方式,本實(shí)驗(yàn)介紹如何使用FPGA實(shí)現(xiàn)字符顯示,通過這個(gè)實(shí)驗(yàn)更加深入的了解HDMI的顯示方式。
2. 實(shí)驗(yàn)原理
實(shí)驗(yàn)通過字符轉(zhuǎn)換工具將字符轉(zhuǎn)換為16進(jìn)制coe文件存放到單端口的ROM IP 核中,再從ROM 中把轉(zhuǎn)換后的數(shù)據(jù)讀取出來顯示到HDMI上。
3. 程序設(shè)計(jì)
字符顯示例程是在HDMI顯示的基礎(chǔ)上增加了一個(gè)osd_display的模塊,“osd_display”模塊是用來讀取存儲(chǔ)在Rom ip核里轉(zhuǎn)換后的字符信息,并在指定區(qū)域顯示。程序框圖如下圖所示:

osd_display模塊包含timing_gen_xy 模塊和osd_rom模塊。Osd_rom里存儲(chǔ)的字符數(shù)據(jù),如果數(shù)據(jù)為1,OSD的區(qū)域顯示ROM中的前景紅色(顯示ALINX芯驛),如果數(shù)據(jù)是0,OSD的區(qū)域顯示數(shù)據(jù)為背景色(彩條)。
在“timing_gen_xy”模塊是根據(jù)HDMI時(shí)序標(biāo)準(zhǔn)定義了“x_cnt”和“y_cnt”兩個(gè)計(jì)數(shù)器并由這兩個(gè)計(jì)數(shù)器產(chǎn)生了HDMI顯示的“x”坐標(biāo)和“y”坐標(biāo)。程序中用“vs_edge”和“de_falling”分別表示場(chǎng)同步開始信號(hào)和數(shù)據(jù)有效結(jié)束信號(hào)。其原理如下圖所示:

信號(hào)名稱 | 方向 | 說明 |
rst_n | in | 異步復(fù)位輸入,低復(fù)位 |
clk | in | 外部時(shí)鐘輸入 |
i_hs | in | 行同步信號(hào) |
i_vs | in | 場(chǎng)同步信號(hào) |
i_de | in | 數(shù)據(jù)有效信號(hào) |
i_data | in | color_bar數(shù)據(jù) |
o_hs | out | 輸出行同步信號(hào) |
o_vs | out | 輸出場(chǎng)同步信號(hào) |
o_de | out | 輸出數(shù)據(jù)有效信號(hào) |
o_data | out | 輸出數(shù)據(jù) |
x | out | 生成X坐標(biāo) |
y | out | 生成Y坐標(biāo) |
timing_gen_xy模塊端口
下面介紹如何存儲(chǔ)文字信息的ROMIP,首先需要生成能夠被Pango FPGA識(shí)別的.dat文件。
1)在軟件工具及驅(qū)動(dòng)文件夾下找到“FPGA字模提取”工具。
2)雙擊.exe文件打開工具

3)在提取工具的“字符輸入”框中輸入需要顯示的字符,字體和字符高度可以自定義選擇。設(shè)置完成后點(diǎn)擊“轉(zhuǎn)換”按鈕,在界面左下角可以看到轉(zhuǎn)換后的字符點(diǎn)陣大小,點(diǎn)陣的寬和高在程序中是需要用到的

點(diǎn)陣的寬和高這里位152x33需要跟osd_display程序中定義的一致:

4)點(diǎn)擊“保存”按鈕,將文件保存到本例程源文件目錄下,需要注意的是在保存類型下應(yīng)該選擇PGL(*.dat),點(diǎn)擊“保存”按鈕即可。

轉(zhuǎn)換后的字符已經(jīng)成了8bit的數(shù)值文件,一個(gè)字節(jié)代表8個(gè)時(shí)鐘的像素,所以在從Rom IP核中讀取dat文件的值,需要判斷每一位的值,如果值為1,顯示紅色前景色,否則顯示背景色:
always@(posedge pclk)begin if(region_active_d0 == 1'b1) if(q[osd_x[2:0]] == 1'b1) v_data <= 24'hff0000; else v_data <= pos_data; else v_data <= pos_data;end |
5)調(diào)用單端口Rom IP核的過程和調(diào)用其他IP 核一樣,打開菜單下的“IP Compiler”, "并按如下進(jìn)行設(shè)置:

在彈出的界面中地址位寬、數(shù)據(jù)位寬、dat文件及類型進(jìn)行設(shè)置,設(shè)置完成后按Generate即可生成osd_rom IP:

Rom IP核在“osd_display”模塊中例化如下:
osd_rom osd_rom_m0( .address(osd_ram_addr[15:3]), .clock(pclk), .q(q)); |
信號(hào)名稱 | 方向 | 說明 |
rst_n | in | 異步復(fù)位輸入,低復(fù)位 |
pclk | in | 外部時(shí)鐘輸入 |
i_hs | in | 行同步信號(hào) |
i_vs | in | 場(chǎng)同步信號(hào) |
i_de | in | 數(shù)據(jù)有效信號(hào) |
i_data | in | color_bar數(shù)據(jù) |
o_hs | out | 輸出行同步信號(hào) |
o_vs | out | 輸出場(chǎng)同步信號(hào) |
o_de | out | 輸出數(shù)據(jù)有效信號(hào) |
o_data | out | 輸出數(shù)據(jù) |
osd_display模塊端口
4.試驗(yàn)現(xiàn)象
連接好開發(fā)板和顯示器,連接方式參考《HDMI測(cè)試實(shí)驗(yàn)》教程,需要注意,開發(fā)板的各個(gè)連接器不要帶電熱插拔,下載好試驗(yàn)程序,可以看到顯示器顯示以彩條為背景的字符。開發(fā)板做為HDMI輸出設(shè)備,只能通過HDMI顯示設(shè)備來顯示,不要試圖通過筆記本電腦的HDMI接口來顯示,因?yàn)楣P記本也是輸出設(shè)備。
默認(rèn)字符顯示的位置在X坐標(biāo)和Y坐標(biāo)都是9的地方顯示,另外用戶可以修改下面的pos_y和pos_x的判斷條件將字符顯示在顯示屏的任意位置:

-
FPGA
+關(guān)注
關(guān)注
1643文章
21923瀏覽量
612401 -
HDMI
+關(guān)注
關(guān)注
32文章
1807瀏覽量
154173 -
ROM
+關(guān)注
關(guān)注
4文章
577瀏覽量
86860 -
字符
+關(guān)注
關(guān)注
0文章
234瀏覽量
25430 -
紫光同創(chuàng)
+關(guān)注
關(guān)注
5文章
91瀏覽量
27825
發(fā)布評(píng)論請(qǐng)先 登錄
方正微電子亮相第十三屆儲(chǔ)能國際峰會(huì)暨展覽會(huì)

中科億海微亮相第十三屆中國電子信息博覽會(huì)

評(píng)論