查看: 701|回复: 0

[评测分享] 【PGL22G开发板】+HMDI彩条驱动

[复制链接]
  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 66 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2023-5-13 23:26:21 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 feifeiz 于 2023-5-13 23:33 编辑

    一、前言

    在上一篇文章中学习了IP之FIFO,对IP以及FIFO进行了解,通过开发板测试以及仿真分析验证了设计思想,说到IP,一直打算在PGL22G开发板上实现一个软核,但是没找到相关资料以及相关说明,唯一找到过一个集创赛有一个Cortex-M1 SoC,可惜没有放出来,如果有资料,很愿意尝试软核的搭建使用。软核当前是搭建不了了,因此本次选用了一个其他功能进行试验,本次实现HDMI彩条输出试验。


    二、HDMI简介

    HDMI,全称为(High Definition Multimedia Interface)高清多媒体接口,主要用于传输高清音视频信号,是新一代的多媒体接口标准。它能够同时传输视频和音频,简化了设备的接口和连线;同时提供了更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号。
    引脚接口定义:
    1.png
    其中主要的硬件为TMDS,SCL,SDA,HOT PLUG,+5V,TMDS引脚包括TMDS CLOCK、TMDS DATA[2:0],用于传输RGB数字信号、音频信号等,SCL、SDA引脚主要用于获取显示器的EDID信息。HOT PLUG该引脚主要用于显示器通知主机是否插好。


    三、实验目标

    使用板载的HDMI接口驱动电脑显示屏上显示彩条,由于板板子只支持720P,电脑屏幕为1080P的,在实际显示的时候不能显示在整个屏幕上。


    四、硬件设计

    HDMI 的三个数据通道HDMI_D[2:0]和一个时钟通道 HDMI_CLK 直接与 FPGA 的 TMDS 差分引脚相连,硬件原理图如下
    2.png
    管脚分配如下:
      信号名称
      
      方向
      
      管脚
      
      说明
      
      Sys_clk
      
      input
      
      B5
      
      系统时钟,50M
      
      Sys_rst_n
      
      input
      
      G5
      
      系统复位
      
      tmds_data_p[2]
      
      output
      
      R16
      
      TMDS 数据通道2(正极)
      
      tmds_data_p[1]
      
      output
      
      U14
      
      TMDS 数据通道1(正极)
      
      tmds_data_p[0]
      
      output
      
      U15
      
      TMDS 数据通道0(正极)
      
      tmds_clk_p
      
      output
      
      P17
      
      TMDS 时钟通道(正极)
      
      tmds_data_n[2]
      
      output
      
      T16
      
      TMDS 数据通道2(负极)
      
      tmds_data_n[1]
      
      output
      
      V14
      
      TMDS 数据通道1(负极)
      
      tmds_data_n[0]
      
      output
      
      V15
      
      TMDS 数据通道0(负极)
      
      tmds_clk_n
      
      output
      
      P18
      
      TMDS 时钟通道(负极)
      


    五、程序设计

    总体设计,HDMI彩条实验只需要显示图像,不需要识别显示器是否插入,不需要识别显示器的EDID数据,此时可以将HDMI当作DVI接口去驱动。总体框图如下:
    3.png
    在顶层模块中,video_display模块负责产生RGB888格式的彩条图案,然后在video_driver模块的驱动下按照工业标准的VGA显示时序输出视频信号、行场同步信号以及视频有效信号。这些信号作为RGB2DVI模块的输入,最终转换成DVI/HDMI接口标准的TMDS串行数据输出到HDMI接口。
    顶层模块设计:
    modulehdmi_colorbar_top(
    input sys_clk,
    input sys_rst_n,
    output tmds_clk_p, // TMDS 时钟通道
    output tmds_clk_n,

    output [2:0] tmds_data_p, // TMDS数据通道

    output [2:0] tmds_data_n
    );

    //wire define
    wire pixel_clk;
    wire pixel_clk_5x;
    wire clk_locked;

    wire [10:0] pixel_xpos_w;
    wire [10:0] pixel_ypos_w;
    wire [23:0] pixel_data_w;

    wire video_hs;
    wire video_vs;
    wire video_de;
    wire [23:0] video_rgb;

    //*****************************************************
    //** main code
    //*****************************************************

    //例化PLL IP核
    pll_clk u_pll_clk(
    .pll_rst (~sys_rst_n),
    .clkin1 (sys_clk),
    .clkout0 (pixel_clk), //像素时钟
    .clkout1 (pixel_clk_5x), //5倍像素时钟
    .pll_lock (clk_locked)
    );

    //例化视频显示驱动模块
    video_driver u_video_driver(
    .pixel_clk (pixel_clk),
    .sys_rst_n (sys_rst_n),

    .video_hs (video_hs),
    .video_vs (video_vs),
    .video_de (video_de),
    .video_rgb (video_rgb),

    .pixel_xpos (pixel_xpos_w),
    .pixel_ypos (pixel_ypos_w),
    .pixel_data (pixel_data_w)
    );

    //例化视频显示模块
    video_display u_video_display(
    .pixel_clk (pixel_clk),
    .sys_rst_n (sys_rst_n),

    .pixel_xpos (pixel_xpos_w),
    .pixel_ypos (pixel_ypos_w),
    .pixel_data (pixel_data_w)
    );

    //例化HDMI驱动模块
    dvi_transmitter_top u_rgb2dvi_0(
    .pclk (pixel_clk),
    .pclk_x5 (pixel_clk_5x),

    .reset_n (sys_rst_n &clk_locked),

    .video_din (video_rgb),
    .video_hsync (video_hs),
    .video_vsync (video_vs),
    .video_de (video_de),
    .tmds_clk_p (tmds_clk_p),
    .tmds_clk_n (tmds_clk_n),
    .tmds_data_p (tmds_data_p),
    .tmds_data_n (tmds_data_n)
    );

    endmodule
    显示模块:
    模块实现1280x720的分辨率。模块输入变量为像素点横纵坐标,来自于video_driver模块;根据像素坐标,输出该像素坐标的数据。
    module  video_display(
        input                pixel_clk,
        input                sys_rst_n,
       

        input        [10:0] pixel_xpos,  //像素点横坐标

        input        [10:0] pixel_ypos,  //像素点纵坐标

        output  reg [23:0]  pixel_data   //像素点数据

    );

    //parameter define

    parameter  H_DISP =11'd1280;                       //分辨率——行

    parameter  V_DISP =11'd720;                        //分辨率——列


    localparam WHITE  =24'b11111111_11111111_11111111;  //RGB888白色

    localparam BLACK  =24'b00000000_00000000_00000000;  //RGB888黑色

    localparam RED    =24'b11111111_00001100_00000000;  //RGB888红色

    localparam GREEN  =24'b00000000_11111111_00000000;  //RGB888绿色

    localparam BLUE   =24'b00000000_00000000_11111111;  //RGB888蓝色

       
    //*****************************************************
    //**                    main code
    //*****************************************************

    //根据当前像素点坐标指定当前像素点颜色数据,在屏幕上显示彩条
    always @(posedge pixel_clk ) begin
        if (!sys_rst_n)

            pixel_data <=16'd0;

        else begin

            if((pixel_xpos >=0) && (pixel_xpos < (H_DISP/5)*1))

                pixel_data <=WHITE;

            else if((pixel_xpos>= (H_DISP/5)*1) && (pixel_xpos < (H_DISP/5)*2))

                pixel_data <=BLACK;  

            else if((pixel_xpos>= (H_DISP/5)*2) && (pixel_xpos < (H_DISP/5)*3))

                pixel_data <=RED;  

            else if((pixel_xpos>= (H_DISP/5)*3) && (pixel_xpos < (H_DISP/5)*4))

                pixel_data <=GREEN;

            else

                pixel_data <=BLUE;

        end
    end

    endmodule


    六、实验现象

    编译工程,生成.sbit文件
    4.png
    连接开发板
    5.png
    下载
    6.png
    运行结果:
    7.jpg


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 20:03 , Processed in 0.108867 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.