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

概述

本章节准备把过解码后的RGB和行场同步信号进行像素信息统计(pixel_message子模块)。由行场同步及de信号可以算出每一帧图像里,行同步有多少,场同步有多少,这就是接收到的视频的像素值。

二、pixel_message模块解析

此模块是一个用于视频时序参数测量模块。通过监测视频同步信号(h_sync、v_sync)和数据有效信号(de),自动计算并输出每行有效像素个数(水平分辨率)和每帧有效行数(垂直分辨率)。该模块用于动态获取输入视频的分辨率信息。

1、模块接口列表:

2、模块功能描述:

模块内部设计两个计数器:

行计数器h_cnt:在 de 为高时每个时钟递增,de 为低时清零。因此 h_cnt 在每个有效行内从 0 开始递增,当 de 变为低时,其值恰好等于该行的有效像素数量。

场计数器v_cnt:在每行有效像素结束(de 下降沿)时递增 1;在 v_sync 上升沿时清零。因此 v_cnt 表示当前帧内已处理的有效行数。

输出寄存器 o_h_cnt 和 o_v_cnt 分别在以下时刻捕获计数器的值:

o_h_cnt:在 de 下降沿(de_reg1 && de0)锁存 h_cnt,即保存每行的宽度。

o_v_cnt:在 v_sync 上升沿(v_sync1 && v_sync_reg0)锁存 v_cnt,即保存上一帧的高度。

通过这种方式,外部逻辑可以随时读取 o_h_cnt 和 o_v_cnt 获取当前视频流的分辨率信息。

3、例程时序分析:

假设输入视频标准为(1024x768@60Hz)。此时每行有效像素数为1024,每帧的有效行数为768。每秒60帧。

行内时序:

de 为高期间,h_cnt 从 0 递增至 1023。

当 de 变为低时,h_cnt 被清零,同时 o_h_cnt 锁存为 1024。

帧内时序:

每完成一行(de 下降沿),v_cnt 递增 1。

当 v_sync 上升沿到来时,v_cnt 已被递增至 768,此时 o_v_cnt 锁存为 768,同时 v_cnt 清零,准备下一帧。

此过程在每个视频帧中循环进行,输出寄存器始终保持当前帧的最新分辨率。

三、模块示例代码

module pixel_message(

input wire pix_clk ,

input wire rst_n ,

input wire h_sync ,

input wire v_sync ,

input wire de ,

output reg11:0 o_h_cnt ,

output reg11:0 o_v_cnt

);

reg h_sync_reg ;

reg v_sync_reg ;

reg de_reg ;

reg11:0 h_cnt ;

reg11:0 v_cnt ;

//h_sync_reg

always@(posedge pix_clk)

if(rst_n==1'b0)

h_sync_reg <= 1'b0;

else

h_sync_reg <= h_sync;

//v_sync_reg

always@(posedge pix_clk)

if(rst_n==1'b0)

v_sync_reg <= 1'b0;

else

v_sync_reg <= v_sync;

//de

always@(posedge pix_clk)

if(rst_n==1'b0)

de_reg <= 1'b0;

else

de_reg <= de;

//h_cnt

always@(posedge pix_clk)

if(rst_n1'b0)
h_cnt <= 0;
else if(de1'b0)

h_cnt <= 0;

else if(de==1'b1)

h_cnt <= h_cnt+1'b1;

//o_h_cnt

always@(posedge pix_clk)

if(rst_n1'b0)
o_h_cnt <= 0;
else if(de1'b0&&de_reg==1'b1)

o_h_cnt <= h_cnt;

//v_cnt

always@(posedge pix_clk)

if(rst_n1'b0)
v_cnt <= 0;
else if(v_sync1'b1&&v_sync_reg1'b0)
v_cnt <= 0;
else if(de1'b0&&de_reg==1'b1)

v_cnt <= v_cnt+1'b1;

//o_v_cnt

always@(posedge pix_clk)

if(rst_n1'b0)
o_v_cnt <= 0;
else if(v_sync1'b1&&v_sync_reg==1'b0)

o_v_cnt <= v_cnt;

endmodule

四、总结

通过对HDMI的输入视频信号的解码和数据分析,得到了实时地动态像素。这个实时像素输出到外部,可以工外部逻辑使用。通过本实验,我们掌握了利用视频数据的行场同步信号和数据有效信号解析出视频像素。

本文章由威三学社威三学院出品

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

相关推荐
1560820721910 小时前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot12 小时前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
樱木花道長13 小时前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
FPGA小迷弟13 小时前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
低慢小uav14 小时前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
szxinmai主板定制专家17 小时前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576
女神下凡17 小时前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范
路上有只喵19 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇5
单片机·嵌入式硬件·fpga开发
爱吃汽的小橘19 小时前
FPGA/数字IC设计的时序优化
fpga开发
FPGA小迷弟19 小时前
FPGA 与无线电:从软件定义无线电到 5G 基带的硬件实现之路
5g·fpga开发·架构·dsp开发·fpga·无线电