0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用FPGA实现字符显示

电子设计 来源:电子设计 作者:电子设计 2022-02-09 10:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:ALINX

* 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处。

适用于板卡型号:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

实验Vivado工程为“hdmi_char”。

在HDMI输出实验中讲解了HDMI显示原理和显示方式,本实验介绍如何使用FPGA实现字符显示,通过这个实验更加深入的了解HDMI的显示方式。

1. 实验原理

实验通过字符转换工具将字符转换为16进制coe文件存放到单端口的ROM IP 核中,再从ROM 中把转换后的数据读取出来显示到HDMI上。

2.程序设计

字符显示例程是在HDMI显示的基础上增加了一个osd_display的模块,“osd_display”模块是用来读取存储在Rom ip核里转换后的字符信息,并在指定区域显示。程序框图如下图所示:

pIYBAGAJbwiABA5_AACDMYqn5qM256.png

2.1 在“timing_gen_xy”模块是根据HDMI时序标准定义了“x_cnt”和“y_cnt”两个计数器并由这两个计数器产生了HDMI显示的“x”坐标和“y”坐标。程序中用“vs_edge”和“de_falling”分别表示场同步开始信号和数据有效结束信号。其原理如下图所示:

o4YBAGAJb4WAPkl1AAA_z3eNx_A049.png

timing_gen_xy模块端口

2.2 下面介绍如何存储文字信息的ROMIP,首先需要生成能够被XILINX FPGA识别的.coe文件。

首先在工程文件夹下找到“FPGA字模提取”工具。

pIYBAGAJb82AGcrLAAACb-XdSDs808.png

双击.exe文件打开工具

在提取工具的“字符输入”框中输入需要显示的字符,字体和字符高度可以自定义选择。设置完成后点击“转换”按钮,在界面左下角可以看到转换后的字符点阵大小,点阵的宽和高在程序中是需要用到

点阵的宽和高这里位144x32,需要跟osd_display程序中定义的一致:

pIYBAGAJcJGALjJZAAACd2FyqGw689.png

点击“保存”按钮,将文件保存到本例程源文件目录下,需要注意的是在保存类型下应该选择Xilinx(*.coe),点击“保存”按钮。

找到生成的.coe文件打开后可以看到如下:

o4YBAGAJcQ6AAHDyAAARYbJQeyc512.png

调用单端口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的区域显示数据为背景色(彩条)。

o4YBAGAJchGAOBWMAAAUSFeMZK4808.png

设置区域有效信号,也就是字符显示在此区域中,起始坐标设置成(9,9),区域大小可以根据字符生成工具设置的区域设置。

pIYBAGAJck-AHimWAAAaMQ9ftS8526.png

在ROM的读地址部分可能很多人不理解,为什么是[15:3],也就是八个时钟周期才读出一个数据,这是因为字符的一个点只表示1bit,而ROM的存储数据宽度是8位,因此需要八个周期取出一个数据,并比较每个bit位的值,将字符一个点转换成图像上的一个像素。

pIYBAGAJco-Aa47nAAAMJLGS_rE191.png

pIYBAGAJcs2AYy0WAAA3dOkFW5Y690.png

osd_display模块端口

3.实验现象

连接好开发板和显示器,连接方式参考《HDMI输出实验》教程,需要注意,开发板的各个连接器不要带电热插拔,下载好实验程序,可以看到显示器显示以彩条为背景的字符。开发板作为HDMI输出设备,只能通过HDMI显示设备来显示,不要试图通过笔记本电脑的HDMI接口来显示,因为笔记本也是输出设备。

默认字符显示的位置在坐标为(9,9),另外用户可以修改下面的pos_y和pos_x的判断条件将字符显示在显示屏的任意位置:

o4YBAGAJc0qAbiR9AAAKp6OGA3E495.png

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1656

    文章

    22292

    浏览量

    630434
  • HDMI
    +关注

    关注

    34

    文章

    1874

    浏览量

    158871
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何用FPGA控制ADV7513实现HDMI画面显示和音频播放

    HDMI接口显示使用DMT时序+TMDS编码来实现。当用FPGA控制HDMI的数据传输时,通常可以采用纯RTL实现TMDS算法或者使用专门的HDMI芯片(如ADV7513)这两种方案来
    的头像 发表于 12-02 11:05 2884次阅读
    如何用<b class='flag-5'>FPGA</b>控制ADV7513<b class='flag-5'>实现</b>HDMI画面<b class='flag-5'>显示</b>和音频播放

    MS6460国产OSD字符叠加芯片

    OSD是一种用于监控系统中在视频画面叠加字符信息的电子设备,主要应用于银行、电梯、交通、收费站等场所,实现位置、时间、状态等信息的可视化记录。MS6460是国产品牌:杭州瑞盟科技产品简述MS6460
    发表于 11-28 11:05

    如何使用FPGA实现SRIO通信协议

    本例程详细介绍了如何在FPGA实现Serial RapidIO(SRIO)通信协议,并通过Verilog语言进行编程设计。SRIO作为一种高速、低延迟的串行互连技术,在高性能计算和嵌入式系统中广
    的头像 发表于 11-12 14:38 5088次阅读
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>SRIO通信协议

    如何利用Verilog HDL在FPGA实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDL在FPGA实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。在FPGA实现SRAM读写测试,包括设计SRA
    的头像 发表于 10-22 17:21 3975次阅读
    如何利用Verilog HDL在<b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>SRAM的读写测试

    如何用FPGA实现4K视频的输入输出与处理

    在游戏、影视和显示领域,4K 已经成为标配。而今天,我们就来聊聊——如何用 FPGA 实现 4K 视频的输入输出与处理。
    的头像 发表于 10-15 10:47 1695次阅读
    如何用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>4K视频的输入输出与处理

    基于FPGA的压缩算法加速实现

    本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA实现该算法时,可
    的头像 发表于 07-10 11:09 2094次阅读
    基于<b class='flag-5'>FPGA</b>的压缩算法加速<b class='flag-5'>实现</b>

    基于易灵思国产FPGA Ti60F225 实现6目同步1080P实时成像系统

    基于FPGA实现单目的采集,并没有什么难的。 但基于FPGA实现多目的同步采集→存储→显示,就不是那么好做了。
    的头像 发表于 03-04 12:00 2535次阅读
    基于易灵思国产<b class='flag-5'>FPGA</b> Ti60F225 <b class='flag-5'>实现</b>6目同步1080P实时成像系统

    ADS8361 fpga如何实现

    ADS8361项目中用到ADS8361,Verilog或者vhdl语言怎么实现对ad的读写?? ADS8361的误差有多少?我用FPGA写的误差有30mv,什么原因?求赐教
    发表于 01-20 06:15

    字符串在编程中的应用实例

    常以字符串的形式出现。例如,在命令行程序中,用户输入的命令和参数都是字符串。 输出信息 :程序也经常需要向用户显示信息,这些信息同样可以以字符串的形式呈现。例如,打印欢迎消息、错误提示
    的头像 发表于 01-07 15:33 1142次阅读

    字符串与字符数组的区别

    在编程语言中,字符串和字符数组是两种基本的数据结构,它们都用于存储和处理文本数据。尽管它们在功能上有一定的重叠,但在内部表示、操作方式和使用场景上存在显著差异。 1. 内部表示 字符字符
    的头像 发表于 01-07 15:29 1695次阅读

    字符串反转的实现方式

    在编程中,字符串反转是一个基础而重要的操作,它涉及到将一个字符串中的字符顺序颠倒过来。这个操作在多种编程语言中都有不同的实现方式,本文将探讨几种常见的
    的头像 发表于 01-07 15:27 1252次阅读

    字符串处理方法 字符串转数字的实现

    在编程中,将字符串转换为数字是一个常见的需求。不同的编程语言有不同的方法来实现这一功能。以下是一些常见编程语言中的字符串转数字的实现方法: Python 在Python中,可以使用内置
    的头像 发表于 01-07 15:26 1411次阅读

    利用FPGA实现USB 2.0通信接口

    USB 2.0接口的实现方式 利用FPGA实现USB 2.0接口的方式一般有两种,一是借助外围的USB接口芯片,二是FPGA内部实现USB
    的头像 发表于 12-30 13:59 3799次阅读
    利用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>USB 2.0通信接口

    基于FPGA实现图像直方图设计

    简单,单采用FPGA实现直方图的统计就稍显麻烦。若使用Xilinx和Altera的FPGA芯片,可以使用HLS来进行图像的加速处理。但这暂时不是我的重点。 用C语言实现直方图统计:u
    的头像 发表于 12-24 10:24 1211次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>图像直方图设计

    FPGA驱动AD芯片之实现与芯片通信

    概述: 利用FPGA实现AD芯片的时序,进一步实现与AD芯片数据的交互,主要熟悉FPGA对时序图的实现,掌握时序图转换Verilog硬件描述
    的头像 发表于 12-17 15:27 1525次阅读
    <b class='flag-5'>FPGA</b>驱动AD芯片之<b class='flag-5'>实现</b>与芯片通信