HDMI数据的接收发送实验(七)

一、概述

本章节利用FPGA模拟EEPROM的从机响应程序,并创建hex文件写入EDID编码。

二、设计流程

我们可以在FPGA利用代码模拟EEPROM的响应程序,给HDMI主机返回正确的EDID编码。FPGA端把预设的EDID储存在片上ROM中,根据HDMI主机发送的IIC读写请求信号,利用IIC通信标准的时序将主机所读取的EDID编码传输给电脑端。电脑端接收到正确的EDID编码后,就会通过HDMI输出端口,输出所选尺寸的视频输出。该视频输入到FPGA开发板后,经过解码,编码再输出,最后在显示屏上显示出所输出的画面。

三、获取EDID编码

为了获取显示器的原EDID信息,这里提供了一款softMCCS软件,打开软件后左上方的位置可以选择显示器,(如果主机只连接一个显示器就只有一个选项)。里面也可以看到显示器的信息,其中Raw data就是该显示器的EDID内容,点击右边数据可以看到具体的EDID编码。这里只显示了128位的基础EDID内容,不过我们也不用关心扩展的EDID信息。

接下来可以先修改显示器的名称和推荐分辨率的编码内容。H36-H47位置为推荐分辨率,00 00 00 FC 00这5个字节是显示器名称的标志,后边的编码内容为显示器名称,根据ASCII码修改,共13位。倒数第二个字节为扩展标识,因为我们没有用到扩展码,所以扩展标志设置为00。最后一个字节的校验码再进行计算修改。到此我们的EDID内容已经修改完毕,接下来要把修改完的EDID编码储存在hex文件中,初始化加载到自定义的ROM模块中。利用'"$readmemh"语句即可将hex文件中的数据初始化到内存阵列中。

hex文件中的编码内容按照一个字节一行,顺序进行排列。ROM模块如下所示:

module BRAM

#( parameter MEMWIDTH = 8, //256 * data

parameter DATAWIDTH = 32

) // Size = 32KB

(

input wire clk,

input wire wen,

input wire [MEMWIDTH-1:0] waddr,

input wire [MEMWIDTH-1:0] raddr,

input wire [DATAWIDTH-1:0] data_in,

output reg [DATAWIDTH-1:0] data_out

);

// Memory Array

reg [DATAWIDTH-1:0] memory[0:((2**(MEMWIDTH))-1)];

initial

begin

$readmemh("edid_data.hex", memory);

end

always@(posedge clk)

begin

if(wen)

memory[waddr] <= data_in;

end

always@(posedge clk)

begin

data_out <= memory[raddr];

end

endmodule

工程中添加hex文件:

在工程文件里创建一个新的文件夹:
文件夹中创建hex文件:

vivado工程中添加设计文件:

添加已创建文件:

文件类型选择所有类型,点击hex文件并确认:

在vivado工程中选中hex文件,在源文件属性框里选择类型Memory initialization files。

添加hex文件后文件目录如下:

四、总结

现在EDID已经可以存储到rom中,之后的章节来使用仿真模拟主机发送IIC读时序,来验证FPGA端发送的EDID信息。电脑端接收到正确的EDD编码后,会通过HDMI将显示器的视频输出到fpga,视频流经过FPGA后再输出到另一个显示器上。

本文章由威三学社出品

对课程感兴趣可以私信联系

相关推荐
学习永无止境@2 小时前
FPGA设计中,主时钟与虚拟时钟的定义
fpga开发
进击的横打2 小时前
【车载开发系列】系统时钟与定时器
stm32·单片机·fpga开发
Nobody333 小时前
Avalon® 接口规范知识文档(v2018.09.26)
fpga开发
GateWorld4 小时前
FPGA内部模块详解之六 FPGA的“心跳”与“神经网络”——时钟网络与布线资源深度解析
fpga开发·fpga内部时钟网络·fpga布线资源
lit_wei7 小时前
【ZYNQ的DMA获取FPGA数据处理,零拷贝,DMA方式】
fpga开发
FPGA-ADDA8 小时前
Xilinx Zynq UltraScale+ RFSoC XCZU47DR 开发板
fpga开发·fpga·rfsoc·xczu47dr
unicrom_深圳市由你创科技10 小时前
FPGA如何实现高速接口(PCIe/DDR4/QSFP28)?
fpga开发
发光的沙子10 小时前
FPGA----完美解决VFS: Cannot open root device “mmcblk0p2“ or unknown-block179,2)问题
fpga开发
S&Z346311 小时前
[SZ901]下载器常规功能及速度设置(53M MAX)
fpga开发·sz901