Zynq

您所在的位置:网站首页 zynq引脚图 Zynq

Zynq

2023-08-30 20:39| 来源: 网络整理| 查看: 265

目录

1、Schematic

2、TMDS IP

3、Clock Generator

4、Timing Generator

5、Data Generator

6、HDMI top design

7、Top design

8、XDC design

 

有了 《HDMI 1.4 协议浅析》的加持,那么使用 ZYNQ 搞一个 HDMI 输出来玩玩;

工程已上传 gitee:

https://gitee.com/stephenzhou-tech/Zynq7020_PL

1、Schematic

首先,在硬件上,HDMI Connector 信号直接从 PL 端引出来,根据 HDMI 1.4 的协议呢,传输需要以 TMDS 差分信号进行传输

所以呢,在物理上,我们需要关注的管脚有:

HDMI DATA[2:0] 的 TMDS 差分信号对;

HDMI CLK 的 TMDS 差分信号对;

 

 

2、TMDS IP

这里,集成了 TMDS 信号生成的 IP,他是由 Digilent 设计的,针对 Zynq-7000 可快速集成的到 Vivado 环境的 IP:RGB-to-DVI:

https://github.com/Digilent/vivado-library

上面的 github 链接中,有他的最新发布的 IP;这里,我们选择的是 rgb2dvi 的 IP,因为 HDMI 的输出和 DVI 一样,都是 TMDS 差分信号和时钟;

下载到他的 IP 后,里面有个针对 RGB2DVI 的 Doc 文档,里面有对这个 IP 的描述:

再 Vivado 中,IP Catalog 中新增 rgb2dvi 的 IP,并进行配置:

我们可以看到,他的输入有 :

vid_pData[23:0]:RGB888 数据的串行表达;

vid_pHSync:HSync 同步信号;

vid_pVSync:VSync 同步信号;

vid_pVDE:Video 有效信号;

aRst_n:异步复位信号;

PixelClk:像素时钟信号;

SerialClk:5x像素时钟信号;

输出包含:

TMDS_Clk_p:差分时钟 p 端;

TMDS_Clk_n:差分时钟 n 端;

TMDS_Data_p[2:0]:3路差分数据 p 端;

TMDS_Data_n[2:0]:3路差分数据 n 端;

oen:输出有效端;

现在知道这个 IP 的输入输出信号,那么接下来就是例化并使用这个 IP 输出差分信号;

所以,这里我们需要根据具体情况造就这个 IP 的输入信号;

 

3、Clock Generator

首先是造就时钟信号,这里有两个时钟信号:PixelClk 和 SerialClk;其中后者是前者的 5 倍关系(IP指定的);那么这个 PixelClk 是怎么确定的呢?每一种不同的视频格式输出,都有不同的像素时钟,我们以 720p 为例(1280x720p@60Hz);

首先查阅官方的手册:CEA861D(自行下载);

首先可以看到的是,720p 的视频:

每一行:一共 1650 个像素,有效像素 1280 个,370 个 blank 像素;

每一列:一共 750   个像素,有效像素 720  个,30 个 blank 像素;

像素时钟为 74.250MHz,他的计算由来为:1650x750x60Hz;

什么叫 blank 像素呢?就是无效像素,因为每一帧图像中,行和列都存在消隐,如下所示:

根据 rgb2dvi IP 的要求,我们需要提供两路时钟。我们使用 MMCM/PLL 来倍频得到:

板载时钟 50MHz:

倍频出来两路时钟,74.250MHz 和 5x74.250MHz=371.25MHz:

自此,时钟生成完成;

 

4、Timing Generator

上面完成了时钟生成,下面来做时序的生成,需要造就一组 vid_pHSync 和 vid_pVSync,以及 vid_pVDE Video数据有效信号;

而这些信号又和具体的视频的格式相关,这里依然查阅 CEA861D 手册;

每一行:一共 1650 个像素,有效像素 1280 个,HSYNC前有110个像素时钟,HSYNC高有效(有的是低有效)并且维持 40 像素时钟,接着有 220 个像素时钟;

每一列:一共 750   个像素,有效像素 720  个,VSYNC前有 5 个像素时钟,VSYNC高有效(有的是低有效)并且维持 5 像素时钟,接着 20 个像素时钟;

由此,我们定义了一个 hdmi_timing_gen 模块,来描述他的时序:

`timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2021/01/20 21:04:26 // Design Name: // Module Name: hdmi_timing_gen // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // // `include "video_format.v" module hdmi_timing_gen( clk, rst_n, vsync, hsync, video_valid ); // video timing parameter definition // 1280x720 74.250MHz `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 // 1920x1080 148.5Mhz `ifdef VIDEO_1920_1080 parameter H_ACTIVE = 16'd1920; parameter H_FP = 16'd88; parameter H_SYNC = 16'd44; parameter H_BP = 16'd148; parameter V_ACTIVE = 16'd1080; parameter V_FP = 16'd4; parameter V_SYNC = 16'd5; parameter V_BP = 16'd36; parameter HS_POL = 1'b1; parameter VS_POL = 1'b1; `endif parameter H_TOTAL = H_ACTIVE + H_FP + H_SYNC + H_BP; //horizontal total time (pixels) parameter V_TOTAL = V_ACTIVE + V_FP + V_SYNC + V_BP; //vertical total time (lines) input clk ; input rst_n ; output vsync ; output hsync ; output video_valid ; wire clk ; wire rst_n ; wire vsync ; wire hsync ; wire video_valid ; // Internal registers define reg [11:0] h_total_cnt ; reg [11:0] v_total_cnt ; reg hs_reg ; reg hs_reg_d0 ; reg vs_reg ; reg vs_reg_d0 ; reg h_valid ; reg v_valid ; wire video_vaild_reg ; reg video_vaild_reg_d0 ; // Generate the horizontal total counter always @(posedge clk or negedge rst_n) begin if(~rst_n) begin h_total_cnt


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3