FPGA project :HDMI

该博客围绕FPGA开发实验,目标是驱动HDMI显示十色等宽彩条。重点包括掌握TMDS通信协议、rgb565转rgb888、编写HDMI驱动程序等。还提及实验中需注意数据与解析信号的时序对齐、有符号数正负判断,以及看仿真波形的经验和TMDS通信协议相关内容。

实验目标:驱动HdMI显示十色等宽彩条。

本实验的重点是:

1掌握TMDS通信协议。

2rgb565转rgb888。

3编写HDMI驱动程序。

4学会看流程图编写代码。

值得注意的事情

1注意数据与解析数据的信号(比如传入的数据中0或者1的个数),要在时序上与数据进行对齐。

如果解析数据的信号是时序信号,那么它将会滞后数据一个clk。如果后面要用到,数据与对应的解析数据的信号同时做条件,那么需要对数据进行打一拍处理。用打拍过后的数据与解析数据的信号作为条件去做判断。

2如果一个数据是有符号位的,那么判断它的正负,就不能用简单的 > 0 来判断。

比如本实验中cnt就是5位宽的有符号数,判断其正负(cnt[4] == 1) 为负数;(cnt[4] == 0) 为正数。如果是cnt < 0 表述负数的话,那么cnt永远不会被判定为负数。

看仿真波形的经验之谈:

1在本实验与官方的编码模块代码,那么在通过功能方正,验证自己编写的编码模块代码是否正确时,可以把官方的模块例化进工程,然后仿真对比波形是否一致,即可判断自己编写的代码是否正确。

2在遇到不一致的时候,比如输入信号都一致,某个输出信号不一致。

先不要着急看去检查哪些信号会直接影响这个输出信号赋值,因为前面的一些信号,会间接影响输出信号赋值。比如影响直接影响输出信号赋值的信号。

那么此时应该先检查一些直接受输入信号影响的信号,是否正确,是否和官方给的代码波形一致;

然后再看一些”条件“波形是否正确;

也就是说由输入信号逐渐到输出信号这个过程中一次产生(你编写代码的顺序)去检查这些信号是否正确。(自顶向下)。慢慢检查。

3实在检查不出来,看看自己的代码和官方的代码编写的差在哪里。

TMDS通信协议:

一种传输视频/音频/辅助数据的传输技术:最小化传输差分信号。

采用DIV编码。附上几张图:

8bit像素信息到最小化传输直流均衡10bit数据,编码流程:

信源端与接收端的数据传输框图:由图可知,3路差分信号传输,由rgb888转10bit的数据。一路差分信号传输clock。

下面两路ddc信号是从接收端读取硬件工作模式相关信息的,本实验没有用到。(IIC通信协议。)

 模块框图:

时序图:

代码:

/*********************
    功能: 将8位rgb信号,转换成10位信号。编码
    cnt 当前时钟的值
    cnt(t - 1) 相对于当前时钟,上一个时钟周期的值
*/

module encode(
    input       wire            clk_25  ,
    input       wire            rst_n   ,
    input       wire    [7:0]   data_in ,
    input       wire            hsync   , 
    input       wire            vsync   ,
    input       wire            DE      ,

    output      wire    [9:0]   data_out 
);

    reg     [7:0]   data_in_reg1 ;
    reg     [3:0]   data_in_n1  ; // 保存传入数据1的个数.
    wire            crtl_1      ; // 一个判断条件,data_in中1的个数大于4 or 个数等于4且data_in[0] == 0
    wire    [8:0]   q_m         ;
    reg     [8:0]   q_m_reg1    ;
    reg             DE_reg1     ;
    reg             DE_reg2     ;
    reg             C0_reg1     ; // 行同步信号,打拍,为了和数据对齐。
    reg             C1_reg1     ; // 场同步信号,打拍,为了和数据对齐。
    reg             C0_reg2     ; 
    reg             C1_reg2     ; 
    reg     [9:0]   q_out       ; // 最终要输出的10为数据,经过一系列编码。
    wire            ctrl_2      ;
    wire            ctrl_3
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值