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

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

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

相关推荐
第二层皮-合肥13 小时前
Vivado 自动生成的 AXI‑Lite 从机 IP 的操作步骤
fpga开发
blue_ice .16 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
薛定谔的bug~21 小时前
【vivado】10G ibert 工程
fpga开发
博览鸿蒙21 小时前
新手怎么挑一块靠谱的FPGA开发板?
fpga开发·fpga·fpga开发板
威嵌神州1 天前
VxWorks6.9 BSP 适配:飞腾 D2000/FT2000/4 平台、驱动开发
驱动开发·嵌入式硬件·fpga开发·系统架构
FPGA小迷弟2 天前
【无标题】
fpga开发·dsp开发·fpga·sdr·无线电
szxinmai主板定制专家2 天前
【工控实战】RK3568/RK3588 8路隔离CAN/CANFD完整解决方案|多路总线并行通信、车载/工控量产落地
人工智能·fpga开发·zynq·mpsoc·半导体设备
郝旭帅电子设计团队2 天前
Xilinx FPGA的BANK标号命令规则
fpga开发·郝旭帅电子设计团队·郝旭帅
威嵌神州2 天前
天脉 3 开发环境与 BSP 适配:IDE license、驱动开发、飞腾平台
ide·驱动开发·嵌入式硬件·fpga开发
FPGA小迷弟3 天前
FPGA 应用技术能力的完整闭环(5-8)
fpga开发·dsp开发·fpga·sdr·无线电