基于FPGA的HDMI图片显示 您所在的位置:网站首页 显示器接hdmi不显示图像怎么回事视频 基于FPGA的HDMI图片显示

基于FPGA的HDMI图片显示

2024-07-11 03:53| 来源: 网络整理| 查看: 265

第一次写博客,就当是练手了吧QAQ 无病呻吟[滑稽] 1.导出图片数据 2.将数据存入ROM中 3.程序设计 运行结果 总结

无病呻吟[滑稽]

首先说一下我用的板子,是XILINX的zynq-7020,这也是我学习的第一块FPGA板子,我知道这块板子的难度是很高的,我的想法是一步到位,如果只买单纯的一块像ax-4010那种的话等我以后想要学一些高阶教程还要重新买板子(穷学生党,怎么实惠怎么来,嘿嘿)。回归正题,这个HDMI图像显示是我的一个突发奇想,灵感来自于官方教程的HDMI字符显示部分,他是在ROM中初始化一段字符的数据,然后通过HDMI显示在显示器上。学完之后我就想能不能将一张图片的数据存储到ROM中然后用同样的方式显示出来,说做就做。

1.导出图片数据

首先要获得存入ROM的图片数据,图片是我在网上找的一张萌图,置于萌不萌大佬们自己看(就是萌,不接受大佬们的反驳): 这张图就是萌,不接受大佬们的反驳 在博客上搜了用matlab将图片导出.coe文件的办法,这里直接把链接放到下面: 链接: Matlab中将图像数据生成coe文件. 以这个代码为模板稍微修改一下就可以用,亲测代码很好用,这张图片的RGB数据我只导入的R部分的数据,都是重复工作,只是一个小点子,我就没有全部导入,如果你想完全还原这张图片的话你可以弄一个24位宽的数组,然后导出来即可。不过导入图片数据的时候给自己挖了一个巨坑,下面会说到。

2.将数据存入ROM中

例化IP的部分这里我就不说了,直接说结构。我用到的这张图片242x400的,ROM的位宽选择8位,深度就根据图片的尺寸来,是96800,ROM设置成单口,然后将coe文件导入到ROM中这一步就结束了。

3.程序设计

这里说几个图片显示所用到的一些时序的概念,显示器显示图片是按照从左上角一点点扫描到右下角,然后探针又返回到左上角这样的反复循环,这里就有了行和列的概念,对于行来说基本单位是图片的一个像素点,一行所显示的像素点个数是由你所定义的显示标准(分辨率)决定的,对于列来说基本单位是行,列的尺寸也是由显示标准决定。在完整的传输一行数据的过程中有几个时序参数:1.行有效信号:这个参数是根据水平同步信号(HSYNC)得来,HSYNC规定了一张图片(一帧)中每一行数据的有效起始点;2.总行时间(h_total):从HSYNC的一个上升沿到下一个上升沿到来所需要的时间;3.行消隐脉冲: (sync_h):各行之间的低电平时间。对于列也有几个时许参数:1.垂直同步信号(VSYNC):规定了一幅图片的起点;2.总列时间(v_total);3.场前肩(torch_f):从场计数开始到场同步的时间;场后肩(torch_b):从场同步结束到行同步开始的时间。(这部分是我从《基于FPGA的数字图像处理原理及应用》书上学到的,这里面的场前肩,场后肩我还没有理解…) 从ROM中存储数据是1位的,而1像素是八位数据,所以按照地址查询数据的时候要每个时钟给地址加8来保证一次传输一个像素数据。没有什么其他注意的点了,这里的RGB转HDMI部分我直接用的官方例程给的IP核,按照官方代码搬过来用的,这个可以上淘宝XILINX官方店里面提供的链接下载到。下面直接上代码吧。

//这个是第一个文件,这部分代码实现把从ROM读出来的数据变成RGB数据然后与生成的行同步信号,场同步信号,图片有效信号一起输出给RGB2HDMI。 // An highlighted block // color bar generator module // // // // Author: meisq // // [email protected] // // ALINX(shanghai) Technology Co.,Ltd // // heijin // // WEB: http://www.alinx.cn/ // // BBS: http://www.heijin.org/ // // // // // // // Copyright (c) 2017,ALINX(shanghai) Technology Co.,Ltd // // All rights reserved // // // // This source file may be used and distributed without restriction provided // // that this copyright statement is not removed from the file and that any // // derivative work contains the original copyright notice and the associated // // disclaimer. // // // // //================================================================================ // Revision History: // Date By Revision Change Description //-------------------------------------------------------------------------------- //2013/4/16 1.0 Original //2013/4/18 1.1 vs timing //2013/5/7 1.2 remove some warning //2017/7/17 1.3 //*******************************************************************************/ `include "video_define.v" module color_bar( input clk, //pixel clock input rst, //reset signal high active output hs, //horizontal synchronization output vs, //vertical synchronization output de, //video valid output[7:0] rgb_r, //video red data output[7:0] rgb_g, //video green data output[7:0] rgb_b //video blue data ); //video timing parameter definition `ifdef VIDEO_1280_720 parameter H_ACTIVE = 16'd1280; //horizontal active time (pixels) parameter H_FP = 16'd110; //horizontal front porch (pixels) parameter H_SYNC = 16'd40; //horizontal sync time(pixels) parameter H_BP = 16'd220; //horizontal back porch (pixels) parameter V_ACTIVE = 16'd720; //vertical active Time (lines) parameter V_FP = 16'd5; //vertical front porch (lines) parameter V_SYNC = 16'd5; //vertical sync time (lines) parameter V_BP = 16'd20; //vertical back porch (lines) parameter HS_POL = 1'b1; //horizontal sync polarity, 1 : POSITIVE,0 : NEGATIVE; parameter VS_POL = 1'b1; //vertical sync polarity, 1 : POSITIVE,0 : NEGATIVE; `endif //480x272 9Mhz `ifdef VIDEO_480_272 parameter H_ACTIVE = 16'd480; parameter H_FP = 16'd2; parameter H_SYNC = 16'd41; parameter H_BP = 16'd2; parameter V_ACTIVE = 16'd272; parameter V_FP = 16'd2; parameter V_SYNC = 16'd10; parameter V_BP = 16'd2; parameter HS_POL = 1'b0; parameter VS_POL = 1'b0; `endif //640x480 25.175Mhz `ifdef VIDEO_640_480 parameter H_ACTIVE = 16'd640; parameter H_FP = 16'd16; parameter H_SYNC = 16'd96; parameter H_BP = 16'd48; parameter V_ACTIVE = 16'd480; parameter V_FP = 16'd10; parameter V_SYNC = 16'd2; parameter V_BP = 16'd33; parameter HS_POL = 1'b0; parameter VS_POL = 1'b0; `endif //800x480 33Mhz `ifdef VIDEO_800_480 parameter H_ACTIVE = 16'd800; parameter H_FP = 16'd40; parameter H_SYNC = 16'd128; parameter H_BP = 16'd88; parameter V_ACTIVE = 16'd480; parameter V_FP = 16'd1; parameter V_SYNC


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有