FPGA采集IT6802视频HDMI输出,提供两套工程源码和技术支持
IT6802是宝岛台湾联阳半导体设计生产的HDMI接受芯片,数据手册有49页,编程手册79页,想要看懂并操作还是有难度的,所以直接上干货。
开发板:Kintex7板子;
开发环境:vivado2019.1;
输入:IT6802解码的HDMI视频流;
输出:HDMI;
提供两套工程:
第一套:IT6802采集后直接环出显示;
第二套:IT6802采集后经DDR3缓存三帧后输出显示;
芯片架构如下:
视频接受处理流程如下:
视频输出时钟如下:根据不同的输入分辨率选择约束不同的时钟。
我用电脑主机的1080P@60hz输出给板子接收,所以IT6802输出给FPGA的像素时钟就是148.5M,在XDC的输入时钟约束就应如下:
根据时序图,FPGA应该在上升沿采集数据,如下:
根据官方手册,上电后,复位引脚应至少保持10ms的低电平,如下:
代码中给了20ms的低电平复位时间。
IT6802的输出位宽一共36位,根据不同的视频格式自行选择输出引脚的原理图设计,我的板子选择的是RGB24位宽视频输入,数据手册参考部分如下:
对应的原理图设计就应如下:
RGB4:4:4模式下的视频输入时许如下:
i2c配置:
器件地址由PCADR引脚决定,如下:
我的板子是拉低,所以期间地址为0x90,如下:
IT6802的期间地址是7位,寄存器地址是8位,数据位是8位;
IT6802有上百个寄存器(具体见编程手册),但由于本次实验制作视频采集,所以只需配置3个寄存器即可,如下:
第一套:IT6802采集后直接环出显示;
工程代码结构如下:
直接给出顶层代码,如下:
module it6802_rx_top(input sys_clk_27m ,input i_it6802_clk ,input i_it6802_hs ,input i_it6802_vs ,input i_it6802_de ,input [23:0] i_it6802_rgb,output o_it6802_sck ,inout o_it6802_sda ,output o_it6802_rstn ,output o_hdmi_cc_p ,output o_hdmi_cc_n ,output o_hdmi_d0_p ,output o_hdmi_d0_n ,output o_hdmi_d1_p ,output o_hdmi_d1_n ,output o_hdmi_d2_p ,output o_hdmi_d2_n );localparam TM6802_RSTN_20MS=20_000_000/1000/100-1;wire i_it6802_clk_bufg;
wire clk_100m;
wire rst_n;
wire init_done;
reg [1:0] r_i_it6802_hs ;
reg [1:0] r_i_it6802_vs ;
reg [1:0] r_i_it6802_de ;
reg [47:0]r_i_it6802_rgb;
reg [20:0] it6802_rstn_cnt;
assign o_it6802_rstn=(it6802_rstn_cnt==TM6802_RSTN_20MS);BUFG u_BUFG (.O(i_it6802_clk_bufg), // 1-bit output: Clock output.I(i_it6802_clk) // 1-bit input: Clock input); clk_wiz_0 u_clk_wiz_0(// Clock out ports.clk_out1(clk_100m), // output clk_100m// Status and control signals.locked(rst_n), // output locked// Clock in ports.clk_in1(sys_clk_27m)); // input clk_in1 i2c_it6802_cfg #( .CLK_FREQ (100_000_000), //?????????.I2C_FREQ (250000 ) //IIC_SCL?????
)
u_i2c_it6802_cfg(.ADV_CLK (clk_100m ),.ADV_RSTN (rst_n ),//?????.ADV_SCLK (o_it6802_sck),.ADV_SDAT (o_it6802_sda),.init_done(init_done )
);always @(posedge clk_100m) beginif(~init_done) it6802_rstn_cnt<='d0;else if(it6802_rstn_cnt==TM6802_RSTN_20MS) it6802_rstn_cnt<=TM6802_RSTN_20MS;else it6802_rstn_cnt<=it6802_rstn_cnt+'d1;
endalways @(posedge i_it6802_clk_bufg) beginif(~init_done) beginr_i_it6802_hs <='d0;r_i_it6802_vs <='d0;r_i_it6802_de <='d0;r_i_it6802_rgb<='d0;endelse beginr_i_it6802_hs <={r_i_it6802_hs [0], i_it6802_hs };r_i_it6802_vs <={r_i_it6802_vs [0], i_it6802_vs };r_i_it6802_de <={r_i_it6802_de [0], i_it6802_de };r_i_it6802_rgb<={r_i_it6802_rgb[23:0],i_it6802_rgb};end
end dvi_transmitter_top helai_hdmi_out(.ref_clk (i_it6802_clk_bufg ),.i_vga_hs (r_i_it6802_hs [1] ),.i_vga_vs (r_i_it6802_vs [1] ),.i_vga_de (r_i_it6802_de [1] ),.i_vga_rgb (r_i_it6802_rgb[47:24]), .tmds_clk_p (o_hdmi_cc_p ),.tmds_clk_n (o_hdmi_cc_n ),.tmds_data0b_p(o_hdmi_d0_p ),.tmds_data0b_n(o_hdmi_d0_n ),.tmds_data1g_p(o_hdmi_d1_p ),.tmds_data1g_n(o_hdmi_d1_n ),.tmds_data2r_p(o_hdmi_d2_p ),.tmds_data2r_n(o_hdmi_d2_n ),.o_vga_rclk (),.o_vga_hs (), .o_vga_vs (),.o_vga_de (),.o_x_pos (),.o_y_pos () );
endmodule
第二套:IT6802采集后经DDR3缓存三帧后输出显示;
BD工程如下:
BD工程搭建了一个DDR三帧缓存的架构;
工程代码结构如下:
直接给出顶层代码,如下:
module it6802_rx_ddr3_hdmi_top(input sys_clk_27m ,input i_it6802_clk ,input i_it6802_hs ,input i_it6802_vs ,input i_it6802_de ,input [23:0] i_it6802_rgb ,output o_it6802_sck ,inout o_it6802_sda ,output o_it6802_rstn ,output o_hdmi_cc_p ,output o_hdmi_cc_n ,output o_hdmi_d0_p ,output o_hdmi_d0_n ,output o_hdmi_d1_p ,output o_hdmi_d1_n ,output o_hdmi_d2_p ,output o_hdmi_d2_n ,
// DDR3 output [12:0]DDR3_0_addr ,output [2:0] DDR3_0_ba ,output DDR3_0_cas_n ,output [0:0] DDR3_0_ck_n ,output [0:0] DDR3_0_ck_p ,output [0:0] DDR3_0_cke ,output [3:0] DDR3_0_dm ,inout [31:0] DDR3_0_dq ,inout [3:0] DDR3_0_dqs_n ,inout [3:0] DDR3_0_dqs_p ,output [0:0] DDR3_0_odt ,output DDR3_0_ras_n ,output DDR3_0_reset_n,output DDR3_0_we_n ,output ddr3_ok );localparam TM6802_RSTN_20MS=20_000_000/1000/100-1;wire i_it6802_clk_bufg;
wire clk_100m;
wire rst_n;
wire init_done;
reg [1:0] r_i_it6802_vs ;
reg [1:0] r_i_it6802_de ;
reg [47:0]r_i_it6802_rgb;
reg [20:0] it6802_rstn_cnt;
assign o_it6802_rstn=(it6802_rstn_cnt==TM6802_RSTN_20MS);BUFG u_BUFG (.O(i_it6802_clk_bufg), // 1-bit output: Clock output.I(i_it6802_clk) // 1-bit input: Clock input); i2c_it6802_cfg #( .CLK_FREQ (100_000_000), //?????????.I2C_FREQ (250000 ) //IIC_SCL?????
)
u_i2c_it6802_cfg(.ADV_CLK (clk_100m ),.ADV_RSTN (rst_n ),//?????.ADV_SCLK (o_it6802_sck),.ADV_SDAT (o_it6802_sda),.init_done(init_done )
);always @(posedge clk_100m) beginif(~init_done) it6802_rstn_cnt<='d0;else if(it6802_rstn_cnt==TM6802_RSTN_20MS) it6802_rstn_cnt<=TM6802_RSTN_20MS;else it6802_rstn_cnt<=it6802_rstn_cnt+'d1;
endalways @(posedge i_it6802_clk_bufg) beginif(~init_done) beginr_i_it6802_vs <='d0;r_i_it6802_de <='d0;r_i_it6802_rgb<='d0;endelse beginr_i_it6802_vs <={r_i_it6802_vs [0], i_it6802_vs };r_i_it6802_de <={r_i_it6802_de [0], i_it6802_de };r_i_it6802_rgb<={r_i_it6802_rgb[23:0],i_it6802_rgb};end
end wire [31:0] fdma_raddr_0 ;
wire fdma_rareq_0 ;
wire fdma_rbusy_0 ;
wire [127:0]fdma_rdata_0 ;
wire fdma_rready_0;
wire [15:0] fdma_rsize_0 ;
wire fdma_rvalid_0;
wire [31:0] fdma_waddr_0 ;
wire fdma_wareq_0 ;
wire fdma_wbusy_0 ;
wire [127:0] fdma_wdata_0 ;
wire fdma_wready_0;
wire [15:0] fdma_wsize_0 ;
wire fdma_wvalid_0;
wire ui_clk_200m ;
wire rst_n ;design_1 u_design_1(.DDR3_0_addr (DDR3_0_addr ),.DDR3_0_ba (DDR3_0_ba ),.DDR3_0_cas_n (DDR3_0_cas_n ),.DDR3_0_ck_n (DDR3_0_ck_n ),.DDR3_0_ck_p (DDR3_0_ck_p ),.DDR3_0_cke (DDR3_0_cke ),.DDR3_0_dm (DDR3_0_dm ),.DDR3_0_dq (DDR3_0_dq ),.DDR3_0_dqs_n (DDR3_0_dqs_n ),.DDR3_0_dqs_p (DDR3_0_dqs_p ),.DDR3_0_odt (DDR3_0_odt ),.DDR3_0_ras_n (DDR3_0_ras_n ),.DDR3_0_reset_n(DDR3_0_reset_n),.DDR3_0_we_n (DDR3_0_we_n ),.clk_in1_0 (sys_clk_27m ),.ddr3_ok (ddr3_ok ),.fdma_raddr_0 (fdma_raddr_0 ),.fdma_rareq_0 (fdma_rareq_0 ),.fdma_rbusy_0 (fdma_rbusy_0 ),.fdma_rdata_0 (fdma_rdata_0 ),.fdma_rready_0 (fdma_rready_0 ),.fdma_rsize_0 (fdma_rsize_0 ),.fdma_rvalid_0 (fdma_rvalid_0 ),.fdma_waddr_0 (fdma_waddr_0 ),.fdma_wareq_0 (fdma_wareq_0 ),.fdma_wbusy_0 (fdma_wbusy_0 ),.fdma_wdata_0 (fdma_wdata_0 ),.fdma_wready_0 (fdma_wready_0 ),.fdma_wsize_0 (fdma_wsize_0 ),.fdma_wvalid_0 (fdma_wvalid_0 ),.ui_clk_0 (ui_clk_200m ),.rst_n (rst_n ),.clk_100m (clk_100m ));fdma_contrl #(.VIDEO_H_SRTI_W (1920 ),.VIDEO_H_SIZE_W (1920 ), //输入图像行分辨率.VIDEO_V_SIZE_W (1080 ), //输入图像场分辨率.VIDEO_H_SRTI_R (1920 ), .VIDEO_H_SIZE_R (1920 ), //输入图像行分辨率.VIDEO_V_SIZE_R (1080 ), //输入图像场分辨率 .VIDEO_DAAR_0 (32'h80000000), //第1帧图像缓存基地址.VIDEO_DAAR_1 (32'h81000000), //第2帧图像缓存基地址.VIDEO_DAAR_2 (32'h82000000), //第3帧图像缓存基地址.FDMA_TRANS_DIV (2 ), //一行图像分2次FDMA突发写传输.FDMA_FRAME_NUM (3 ) //缓存3帧
)
helai_fdma_contrl(.ui_clk_200m (ui_clk_200m ), .rst_n (rst_n ), .cmos_pclk (i_it6802_clk_bufg ),.senser_vs (r_i_it6802_vs [1] ), .senser_de (r_i_it6802_de [1] ), .senser_rgb (r_i_it6802_rgb[47:24]), .vga_clk (vga_clk ),.vga_vs (vga_vs ),.vga_de (vga_de ),.o_vga_rgb (vga_data ),.fdma_waddr_0 (fdma_waddr_0 ),.fdma_wareq_0 (fdma_wareq_0 ),.fdma_wbusy_0 (fdma_wbusy_0 ),.fdma_wdata_0 (fdma_wdata_0 ),.fdma_wready_0(fdma_wready_0 ),.fdma_wsize_0 (fdma_wsize_0 ),.fdma_wvalid_0(fdma_wvalid_0 ),.fdma_raddr_0 (fdma_raddr_0 ),.fdma_rareq_0 (fdma_rareq_0 ),.fdma_rbusy_0 (fdma_rbusy_0 ),.fdma_rdata_0 (fdma_rdata_0 ),.fdma_rready_0(fdma_rready_0 ),.fdma_rsize_0 (fdma_rsize_0 ),.fdma_rvalid_0(fdma_rvalid_0 ) );wire vga_clk;
wire vga_hs;
wire vga_vs;
wire vga_de;
wire [23:0] vga_data;dvi_transmitter_top helai_hdmi_out(.ref_clk (ui_clk_200m),.i_vga_hs (vga_hs ),.i_vga_vs (vga_vs ),.i_vga_de (vga_de ),.i_vga_rgb (vga_data ), .tmds_clk_p (o_hdmi_cc_p),.tmds_clk_n (o_hdmi_cc_n),.tmds_data0b_p(o_hdmi_d0_p),.tmds_data0b_n(o_hdmi_d0_n),.tmds_data1g_p(o_hdmi_d1_p),.tmds_data1g_n(o_hdmi_d1_n),.tmds_data2r_p(o_hdmi_d2_p),.tmds_data2r_n(o_hdmi_d2_n),.o_vga_rclk (vga_clk ),.o_vga_hs (vga_hs ), .o_vga_vs (vga_vs ),.o_vga_de (vga_de ),.o_x_pos (),.o_y_pos () );
endmodule
上班调试结果:
硬件连接:
输出结果:
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
也可以直接下载工程源码,下载链接:
点击下载工程源码
网盘资料如下:
FPGA采集IT6802视频HDMI输出,提供两套工程源码和技术支持相关推荐
- Zynq UltraScale系列使用MIPI CSI-2 RX Subsystem 解码MIPI视频PD输出 提供2套工程源码和技术支持
目录 1.前言 2.设计思路和架构 3.vivado工程详解 4.上板调试验证 5.福利:工程代码的获取 1.前言 本设计采用OV5640摄像头MIPI模式作为输入,分辨率为1280x720@60Hz ...
- FPGA USB FX2 ov5640摄像头视频采集 驱动CY7C68013A实现 提供2套工程源码和技术支持
目录 1.前言 2.我这儿已有的 FPGA USB 通信方案 3.CY7C68013A芯片解读和硬件设计 FX2 简介 SlaveFIFO模式及其配置 4.工程详细设计方案 5.vivado工程 6. ...
- FPGA HLS双线性插值图像缩放视频拼接,上板验证稳定通过,提供3套工程源码和技术支持
目录 1.前言 2.HLS实现双线性插值图像缩放 3.vivado工程1:1080P缩小720P 4.vivado工程2:1080P缩小后mixer二分频 5.上板调试验证并演示 6.福利:工程代码的 ...
- FPGA基于Tri Mode Ethernet MAC实现UDP通信 提供3套工程源码和技术支持
目录 1.前言 2.我这里已有的UDP方案 3.米联客UDP协议栈 4.详细设计方案 5.Tri Mode Ethernet MAC的使用 6.vivado工程1详解 7.vivado工程2详解 8. ...
- FPGA纯verilog实现视频拼接,纯逻辑资源搭建,提供4套工程源码和技术支持
目录 1.本方案的实用价值 2.总体设计方案 3.视频拼接方案算法 4.工程1:单路视频输出 5.工程2:2路视频拼接输出 6.工程3:3路视频拼接输出 7.工程4:4路视频拼接输出 8.上板调试验证 ...
- zynq实现视频动态字符叠加OSD,提供2套工程源码和技术支持
目录 1.网上同行的OSD方案(太low) 2.本方案OSD的优势 3.HLS实现方案 4.OSD延时和资源占用情况 5.工程1:zynq7100实现字符叠加 6.上板调试验证 7.福利:工程源码获取 ...
- FPGA实现GTX视频传输,全网最细讲解,提供2套工程源码和技术支持
目录 1.前言: 2.工程整体框架: 3.GTX IP 配置及细节讲解 4.GTX收发数据编解码讲解 5.工程1介绍:OV5640转GTX 6.工程2介绍:HDMI转GTX 7.上板调试 8.福利领取 ...
- FPGA采集AD7606全网最细讲解 提供串行和并行2套工程源码和技术支持
目录 1.前言 2.AD7606数据手册解读 输入信号采集范围 输出模式选择 过采样率设置 3.AD7606串行输出采集 4.AD7606并行输出采集 5.vivado仿真 6.上板调试验证 7.福利 ...
- FPGA实现CSI-2 解码MIPI视频 2line 720P分辨率 OV5647采集 提供工程源码和技术支持
目录 1.前言 2.Xilinx官方主推的MIPI解码方案 3.纯Vhdl方案解码MIPI 4.vivado工程介绍 5.上板调试验证 6.福利:工程代码的获取 1.前言 FPGA图像采集领域目前协议 ...
最新文章
- C和C++安全编码笔记:格式化输出
- MS SQL入门基础:备份和恢复系统数据库
- 【Ubuntu】Windows硬盘安装Ubuntu14.04
- 特征工程中的IV和WOE详解
- 小短文 | 高并发系统,如何计算并发量和峰值数据?
- Bootstrap中实现图片圆角效果
- 使用MvcContrib的FormHelper
- 21 CO配置-控制-产品成本控制-成本对象控制-检查制造订单 (PP) 的成本核算变式
- 风格之争:Coroutine vs Callback
- split和join和pop和remove用法
- Python代码规范
- css布局Absolute的垂直水平居中
- 软件项目管理/ IT项目管理 总复习
- 燕姿几首歌的歌词-偶得
- 计算机黑屏无法启动,电脑黑屏无法启动
- redis的三种特殊数据类型
- 秒杀(小米网抢购系统开发实践--“米粉节”背后的故事)
- 总结:第一章:从入门到入职拿到过万月薪我需要这些技能(400多篇博文系统归类)P5级
- html时间日期 年月日时分秒,年月日时分秒的即时显示
- php文件直链源码,蓝奏网盘文件夹直链解析源码
热门文章
- 树莓派玩转WIN10之安装篇
- http://code4app.com/ios/SCCaptureCamera/530ad8cccb7e84ba4d8b630e
- CH573/CH571低功耗集成BLE 32位微控制器MCU
- java javac_JAVA和JAVAC 命令详细介绍
- python Fluidsynth win10 安装记录
- JavaScript 1 JavaScript 教程
- 量子计算(十六):其他类型体系的量子计算体系
- 广东省智慧城市建设历程及现状——以中山市为例
- 数字孪生=仿真?一文了解数字孪生技术和应用场景
- Java实现银行复利利息计算