首页 > 其他分享 >24 TPG图像测试数据发生器设计

24 TPG图像测试数据发生器设计

时间:2023-12-29 17:23:10浏览次数:30  
标签:24 TPG begin end tpg vid 测试数据 vs reg

软件版本:VIVADO2021.1

操作系统:WIN10 64bit

硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA

登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!

1 概述

TPG(video_test_pattern generator) 视频测试模式发生器用于产生测试数据,对视频数据通路测试。

2 TPG视频测试模式发生器

2.1 系统框图

I_tpg_ck:视频格式的像素时钟

I_tpg_vs: 视频格式的场同步信号

I_tpg_hs: 视频格式的行同步信号

I_tpg_de: 视频格式的有效数据阶段

 

O_tpg_vs:同I_tpg_vs

O_tpg_hs:同I_tpg_hs

O_tpg_de:同I_tpg_de

O_tpg_data:rgb格式数据输出

 

 

2.2 时序设计

视频数据的有效区域如下图所示:视频数据在H_AcitiveSize和V_AcitiveSize同时有效时候有效

3 TPG源码

产生彩条、纯色、黑白棋方格测试数据,用于视频测试。

`timescale 1ns / 1ns//仿真时间刻度/精度

 

module uitpg

(

input           I_tpg_clk, //系统时钟

input           I_tpg_rstn,//系统复位

input           I_tpg_vs,  //场同步输入

input           I_tpg_hs,  //行同步输入

input           I_tpg_de,  //视频数据有效输入  

output          O_tpg_vs,  //场同步输出

output          O_tpg_hs,  //行同步输出

output          O_tpg_de,  //视频数据有效输出    

output [23:0]   O_tpg_data //有效测试数据

);

 

reg         tpg_vs_r   = 1'b0; //对vs信号寄存

reg         tpg_hs_r   = 1'b0; //对hs信号寄存

reg [7 :0]  grid_data  = 8'd0; //grid棋方格寄存器

reg [23:0]  color_bar  = 24'd0;//RGB 彩条寄存器

reg [10:0]  dis_mode   = 11'd0;//显示模式寄存器

reg [7 :0]  r_reg      = 8'd0; //红寄存器

reg [7 :0]  g_reg      = 8'd0; //绿寄存器

reg [7 :0]  b_reg      = 8'd0; //蓝寄存器

 

always @(posedge I_tpg_clk)begin

    tpg_vs_r <= I_tpg_vs; //对vs信号寄存一次

    tpg_hs_r <= I_tpg_hs; //对hs信号寄存一次

end

 

reg [11:0]v_cnt = 12'd0; //视频垂直方向,行计数器

reg [11:0]h_cnt = 12'd0; //视频水平方向,列计数器

 

//h_cnt计数器模块

always @(posedge I_tpg_clk)

    h_cnt <= I_tpg_de ? h_cnt + 1'b1 : 12'd0; //计数行有效像素,当de无效,重置 h_cnt=0

 

//v_cnt计数器模块

always @(posedge I_tpg_clk)

  if(I_tpg_vs) //通过vs产生同步复位

    v_cnt <= 12'd0; //重置v_cnt=0

  else

    v_cnt <= ((!tpg_hs_r)&&I_tpg_hs) ? v_cnt + 1'b1 : v_cnt; //hs信号的上升沿,v_cnt计数,这种方式可以不管hs有效是高电平还是低电平的情况,v_cnt 视频垂直方向,行计数器,计数行数量

 

//显示模式切换

always @(posedge I_tpg_clk)

   if(I_tpg_rstn==1'b0)

    dis_mode <= 0;

   else

    dis_mode <= ((!tpg_vs_r)&&I_tpg_vs) ? dis_mode + 1'b1 : dis_mode;

 

//grid_data发生器  

always @(posedge I_tpg_clk)begin

    grid_data <= ((v_cnt[4]==1'b1) ^ (h_cnt[4]==1'b1)) ? 8'h00 : 8'hff; //方格大小16*16,黑白交替

end

 

//RGB彩条发生器

always @(posedge I_tpg_clk)

begin

    if(h_cnt==260)

    color_bar   <=  24'hff0000;//红

    else if(h_cnt==420)

    color_bar   <=  24'h00ff00;//绿

    else if(h_cnt==580)

    color_bar   <=  24'h0000ff;//蓝

    else if(h_cnt==740)

    color_bar   <=  24'hff00ff;//紫

    else if(h_cnt==900)

    color_bar   <=  24'hffff00;//黄

    else if(h_cnt==1060)

    color_bar   <=  24'h00ffff;//青蓝

    else if(h_cnt==1220)

    color_bar   <=  24'hffffff;//白

    else if(h_cnt==1380)

    color_bar   <=  24'h000000;//黑

    else

    color_bar   <=  color_bar;

end

 

//测试图形输出

always @(posedge I_tpg_clk)begin

    case(dis_mode[10:7])//截取高位,控制切换显示速度

        4'd0:begin

            r_reg <= 0;

            b_reg <= 0;

            g_reg <= 0;

        end

        4'd1:begin

            r_reg <= 8'b11111111;               //白

            g_reg <= 8'b11111111;

            b_reg <= 8'b11111111;

        end

        4'd2,4'd3:begin//连续两个状态输出相同图形

            r_reg <= 8'b11111111;              //红

            g_reg <= 0;

            b_reg <= 0;  

        end          

        4'd4,4'd5:begin//连续两个状态输出相同图形

            r_reg <= 0;                         //绿

            g_reg <= 8'b11111111;

            b_reg <= 0;

        end                  

        4'd6:begin    

            r_reg <= 0;                         //蓝

            g_reg <= 0;

            b_reg <= 8'b11111111;

        end

        4'd7,4'd8:begin  //连续两个状态输出相同图形  

            r_reg <= grid_data;                 //方格

            g_reg <= grid_data;

            b_reg <= grid_data;

        end                  

        4'd9:begin    

            r_reg <= h_cnt[7:0];                //水平渐变

            g_reg <= h_cnt[7:0];

            b_reg <= h_cnt[7:0];

        end

        4'd10,4'd11:begin //连续两个状态输出相同图形

            r_reg <= v_cnt[7:0];                 //垂直渐变

            g_reg <= v_cnt[7:0];

            b_reg <= v_cnt[7:0];

        end

        4'd12:begin    

            r_reg <= v_cnt[7:0];                 //红垂直渐变

            g_reg <= 0;

            b_reg <= 0;

        end

        4'd13:begin    

            r_reg <= 0;                          //绿垂直渐变

            g_reg <= h_cnt[7:0];

            b_reg <= 0;

        end

        4'd14:begin    

            r_reg <= 0;                          //蓝垂直渐变

            g_reg <= 0;

            b_reg <= h_cnt[7:0];            

        end

        4'd15:begin    

            r_reg <= color_bar[23:16];           //彩条

            g_reg <= color_bar[15:8];

            b_reg <= color_bar[7:0];            

        end              

        endcase

end

 

assign O_tpg_data = {r_reg,g_reg,b_reg};//测试图形RGB数据输出

assign O_tpg_vs = I_tpg_vs;  //VS同步信号

assign O_tpg_hs = I_tpg_hs;  //HS同步信号

assign O_tpg_de = I_tpg_de;  //DE数据有效信号

 

endmodule

4 RTL仿真

4.1 仿真激励文件

/*************视频测试仿真文件****************************************

*********************************************************************/

 

`timescale 1ns / 1ns//仿真时间刻度/精度

 

module video_test_tb;

 

localparam SYS_TIME = 20;//系统时钟周期10ns

 

reg I_vid_rstn,I_vid_clk;

wire O_vid_vs,O_vid_hs,O_vid_de;

wire [7:0]O_rgb_r,O_rgb_g,O_rgb_b;

 

//例化video_test

video_test video_test_inst

(

.I_vid_clk(I_vid_clk),

.I_vid_rstn(I_vid_rstn),

.O_vid_vs(O_vid_vs),

.O_vid_hs(O_vid_hs),

.O_vid_de(O_vid_de),

.O_rgb_r(O_rgb_r),

.O_rgb_g(O_rgb_g),

.O_rgb_b(O_rgb_b)

);

 

//初始化

initial begin

    I_vid_clk  = 1'b0;

    I_vid_rstn = 1'b0;

    #100;//产生100ns的系统复位

    I_vid_rstn = 1'b1;//复位完成

end

//产生仿真时钟

always #(SYS_TIME/2) I_vid_clk= ~I_vid_clk;

 

endmodule

 

 

 

为简化仿真,这里模拟的视频格式为320*5 即一行的有效数据为350个像素,一帧数据有5行像素数据。

4.2 仿真结果

 

标签:24,TPG,begin,end,tpg,vid,测试数据,vs,reg
From: https://www.cnblogs.com/milianke/p/17935322.html

相关文章

  • P9994 [Ynoi Easy Round 2024] TEST_132 题解
    题解怎么都是用暴力日过去的啊。思路考虑根号分治,设阈值为\(B\)。对于第二维出现次数超过\(B\)的,我们可以在修改时暴力更改,这部分复杂度为\(O(\frac{nm}{B})\)。对于第二维出现次数小于\(B\)的,我们可以在修改是打标记,查询时遍历一遍,这部分的复杂度为\(O(mb)\)。大多数......
  • P9970 [THUPC 2024 初赛] 套娃
    题面定义一个集合的\(\operatorname{mex}\)是最小的不在\(S\)中的非负整数。给定一个序列\(a_1,\dots,a_n\),对于每个\(1\leqk\leqn\),我们按照如下方式定义\(b_k\):对于\(a\)的所有长为\(k\)的子区间,求出这个子区间构成的数集的\(\operatorname{mex}\)。对于求出......
  • Navisworks Manage 2024:让建筑工程项目尽在掌控之中
    AutodeskNavisworksManage2024是一款功能强大的建筑工程项目模拟和协作软件,它为建筑师、工程师和其他专业人士提供了一个全面的解决方案,以实现更高效、准确的建筑工程项目管理和协作。点击获取AutodeskNavisworksManage2024首先,NavisworksManage2024具备出色的模型协调......
  • 24.异常自动截图
    目录 异常截图场景异常截图实现异常截图场景 场景:增加自动化测试代码的可测性丰富报告实现原理 装饰器自动化关键数据记录截图日志page_source实现代码 #装饰器逻辑defui_exception_record(func):defrun(*args,**......
  • MAXON Cinema 4D 2024 (macOS, Windows) - 三维计算机动画、建模、模拟和渲染
    MAXONCinema4D2024(macOS,Windows)-三维计算机动画、建模、模拟和渲染作者主页:sysin.orgCinema4D三维计算机动画、建模、模拟和渲染软件。Artist:SebastianMarek新特性Cinema4D2024为您最苛刻的创意场景提供无与伦比的速度和性能。刚体模拟现在可以与所有现有的力、......
  • Adobe Photoshop 2024 v25.0 (macOS, Windows) 发布 - 照片和设计软件
    AdobePhotoshop2024v25.0(macOS,Windows)-照片和设计软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD作者主......
  • Xcode 15 Release Candidate (15A240d) 发布 - Apple 平台 IDE
    Xcode15ReleaseCandidate(15A240d)发布-Apple平台IDEIDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS作者主页:sysin.orgvisonOS支持已更新。Xcode15使您能够为所有Apple平台开发、测试和分发应用程序。通过增强的代码完成、交互式预览和实时动画,更快地编写和设计您的......
  • Adobe InCopy 2024 v19.0 (macOS, Windows) - 编写和副本编辑软件
    AdobeInCopy2024v19.0(macOS,Windows)-编写和副本编辑软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD作者主......
  • 写在2024元旦前夕
    今天没啥事,突然想到要翻找一下以前写的一些博客,看看到底写了啥,看着看着发现原来自己以前可以很有技术感、也可以很有文艺感。哈哈,随便写写。 时间真的过的很快,以前没怎么发觉,现在一年到头下来,感觉越来越慌,但却不知道自己到底在慌什么。没赚钱?没名?没权,人很奇怪,我相信即便有了这......
  • 2024年1月北京/上海/深圳DAMA-CDGP数据治理专家认证到这真优惠
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......