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

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

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

相关推荐
千寻xun16 小时前
三、实战篇-NVME SSD控制之FPGA实现(一)
fpga开发·nvme ssd·nvme协议
XMAIPC_Robot19 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
upper202020 小时前
从零开始设计riscv cpu记录之七
fpga开发·riscv·riscv设计·btb·分支预测
ARM|X86+FPGA工业主板厂家1 天前
AI视觉跟随运动控制实战|RK3588 NPU检测+FPGA EtherCAT多轴联动精准跟随方案,适用于半导体视觉对位等
人工智能·fpga开发·硬件工程·ethercat·实时系统
XMAIPC_Robot1 天前
RK3588+FPGA半导体设备量产踩坑大全|发热、时序漂移、推理抖动、成像干扰、EMC干扰方案
人工智能·嵌入式硬件·fpga开发·arm+fpga
凡亿卓达方案设计2 天前
FPGA硬件开发怎么选靠谱方案商?
fpga开发
Eloudy2 天前
QSFP28、RoCEv2、RFSoC-4x2 数据传输与器件链路
网络·fpga开发·rocev2
Echo_cy_2 天前
基于ZYNQ-7000的Ethernet驱动配置
linux·驱动开发·嵌入式硬件·fpga开发·ethernet·zynq
現実君2 天前
关于MCU下位替换FPGA的经验与方案
单片机·嵌入式硬件·fpga开发