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

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

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

相关推荐
FPGA小迷弟3 小时前
FPGA状态机设计详解:从Moore到Mealy的完整指南
fpga开发·fpga
zlinear数据采集卡18 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
zlinear数据采集卡1 天前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
何事误红尘1 天前
ZYNQ学习FPGA笔记(一):vivado安装、XC7Z045
fpga开发
zlinear数据采集卡2 天前
D223的SRAM硬件记录仪:外部触发与瞬态波形捕获方案
arm开发·嵌入式硬件·fpga开发·开源
szxinmai主板定制专家2 天前
基于 RK3588 + Xilinx Kintex-7 FPGA 异构工业主控板设计方案
arm开发·人工智能·嵌入式硬件·fpga开发·zynq
Rambo.xia2 天前
RFSoC高速采集卡设计项目:一块板卡串联综合优化5大核心技术
单片机·嵌入式硬件·fpga开发
XMAIPC_Robot2 天前
RK3588+STM32:高性能机器人运动控制解决方案,兼顾实时性与AI算力
人工智能·stm32·嵌入式硬件·算法·fpga开发·机器人·arm+fpga
zlinear数据采集卡2 天前
D223的DDS信号发生器:10000点查找表与4通道16位DAC波形输出
arm开发·嵌入式硬件·fpga开发·开源
物质波波波3 天前
WS-RPE:面向边缘物理AI实时特征值计算的硬件工作窃取调度器与冗余PE激活架构
人工智能·fpga开发·架构·系统架构·硬件架构