alinx001 发表于 2021-2-19 13:49:15

【紫光同创国产FPGA教程】【第十三章】字符显示实验

本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com)。1. 实验简介在HDMI测试实验中讲解了HDMI显示原理和显示方式,本实验介绍如何使用FPGA实现字符显示,通过这个实验更加深入的了解HDMI的显示方式。2. 实验原理实验通过字符转换工具将字符转换为16进制coe文件存放到单端口的ROM IP 核中,再从ROM 中把转换后的数据读取出来显示到HDMI上。3. 程序设计字符显示例程是在HDMI显示的基础上增加了一个osd_display的模块,“osd_display”模块是用来读取存储在Rom ip核里转换后的字符信息,并在指定区域显示。程序框图如下图所示:https://pic2.zhimg.com/80/v2-28edbf473dcd853530e73f9779851065_720w.jpgosd_display模块包含timing_gen_xy 模块和osd_rom模块。Osd_rom里存储的字符数据,如果数据为1,OSD的区域显示ROM中的前景红色(显示ALINX芯驿),如果数据是0,OSD的区域显示数据为背景色(彩条)。在“timing_gen_xy”模块是根据HDMI时序标准定义了“x_cnt”和“y_cnt”两个计数器并由这两个计数器产生了HDMI显示的“x”坐标和“y”坐标。程序中用“vs_edge”和“de_falling”分别表示场同步开始信号和数据有效结束信号。其原理如下图所示:https://pic4.zhimg.com/80/v2-18f1b0249e985a925e79fae34a71dd2b_720w.jpg
信号名称方向说明
rst_nin异步复位输入,低复位
clkin外部时钟输入
i_hsin行同步信号
i_vsin场同步信号
i_dein数据有效信号
i_dataincolor_bar数据
o_hsout输出行同步信号
o_vsout输出场同步信号
o_deout输出数据有效信号
o_dataout输出数据
xout生成X坐标
yout生成Y坐标
timing_gen_xy模块端口下面介绍如何存储文字信息的ROMIP,首先需要生成能够被Pango FPGA识别的.dat文件。1)在软件工具及驱动文件夹下找到“FPGA字模提取”工具。https://pic2.zhimg.com/80/v2-87c1dfdd8e67bd7f5f241c23f4ebe39d_720w.jpg2)双击.exe文件打开工具https://pic2.zhimg.com/80/v2-00b9c0dd31c33a80b93224a13dbe13b5_720w.jpg3)在提取工具的“字符输入”框中输入需要显示的字符,字体和字符高度可以自定义选择。设置完成后点击“转换”按钮,在界面左下角可以看到转换后的字符点阵大小,点阵的宽和高在程序中是需要用到的https://pic3.zhimg.com/80/v2-236018395935109d84e9c8248fced762_720w.jpg点阵的宽和高这里位152x33需要跟osd_display程序中定义的一致:https://pic4.zhimg.com/80/v2-5e1d1a050fbc801f9d10143e3bc20d7f_720w.jpg4)点击“保存”按钮,将文件保存到本例程源文件目录下,需要注意的是在保存类型下应该选择PGL(*.dat),点击“保存”按钮即可。https://pic3.zhimg.com/80/v2-72ff3067cd8d4cc4005ea992fa369ada_720w.jpg转换后的字符已经成了8bit的数值文件,一个字节代表8个时钟的像素,所以在从Rom IP核中读取dat文件的值,需要判断每一位的值,如果值为1,显示红色前景色,否则显示背景色:
always@(posedge pclk)begin if(region_active_d0 == 1'b1) if(q] == 1'b1) v_data <= 24'hff0000; else v_data <= pos_data; else v_data <= pos_data;end
5)调用单端口Rom IP核的过程和调用其他IP 核一样,打开菜单下的“IP Compiler”, "并按如下进行设置:https://pic3.zhimg.com/80/v2-6fff677f7758daeebba54b257d2ad3fa_720w.jpg在弹出的界面中地址位宽、数据位宽、dat文件及类型进行设置,设置完成后按Generate即可生成osd_rom IP:https://pic2.zhimg.com/80/v2-d712182ad1e1da4f73314e1897fb6891_720w.jpgRom IP核在“osd_display”模块中例化如下:
osd_rom osd_rom_m0( .address(osd_ram_addr), .clock(pclk), .q(q));

信号名称方向说明
rst_nin异步复位输入,低复位
pclkin外部时钟输入
i_hsin行同步信号
i_vsin场同步信号
i_dein数据有效信号
i_dataincolor_bar数据
o_hsout输出行同步信号
o_vsout输出场同步信号
o_deout输出数据有效信号
o_dataout输出数据
osd_display模块端口4.试验现象连接好开发板和显示器,连接方式参考《HDMI测试实验》教程,需要注意,开发板的各个连接器不要带电热插拔,下载好试验程序,可以看到显示器显示以彩条为背景的字符。开发板做为HDMI输出设备,只能通过HDMI显示设备来显示,不要试图通过笔记本电脑的HDMI接口来显示,因为笔记本也是输出设备。https://pic4.zhimg.com/80/v2-64c18ca081411b66cc4522d151fac8af_720w.jpg默认字符显示的位置在X坐标和Y坐标都是9的地方显示,另外用户可以修改下面的pos_y和pos_x的判断条件将字符显示在显示屏的任意位置:https://pic4.zhimg.com/80/v2-dad3553e0e44218c71eb42204645fa37_720w.jpg
页: [1]
查看完整版本: 【紫光同创国产FPGA教程】【第十三章】字符显示实验