首页 > 技术文章 > 视频数据的行列计数

chensimin1990 2018-07-30 14:40 原文

视频数据的行列计数

本文的代码用于AXI-Stream总线上面传输的视频数据进行行列计数,判断总线上传输的视频数据的有效行和有效列。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: chensimin
// 
// Create Date: 2018/06/28 15:17:37
// Design Name: 
// Module Name: video_cnt
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module video_cnt(

    input wire clk,
    input wire rst_n,
    input wire tvalid,
    input wire tready,
    input wire tlast,
    input wire tuser,

    output wire [15:0]pixel_num,  
    output wire [15:0]row_num

    );


//-----------------------------------------------------------------

reg [15:0]pixel_num_r = 0;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        pixel_num_r <= 0;
    else if(tlast)                              // 传完最后一个视频数据后,pixel 计数器清零
        pixel_num_r <= 0;
    else if(tvalid && tready)                   // 当满足 tvalid 和 tready 同时为高时, pixel 计数器开始计数
        pixel_num_r <= pixel_num_r + 1'b1;
end

assign pixel_num = pixel_num_r;

//-----------------------------------------------------------------

reg [15:0]row_num_r = 0;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        row_num_r <= 0;
    else if(tuser)                            // 在一帧的开头, row 计数器进行清零
        row_num_r <= 0;
    else if(tlast && tvalid && tready)
        row_num_r <= row_num_r + 1'b1;        // 在每一行传送完成后,并且满足 tvalid 和 tready 信号同时为高时, 行计数器加一 
end

assign row_num = row_num_r;


endmodule


/*

add_force {/video_cnt/clk} -radix hex {1 0ns} {0 50000ps} -repeat_every 100000ps
add_force {/video_cnt/rst_n} -radix hex {0 0ns} {1 200ns}
add_force {/video_cnt/tvalid} -radix hex {1 0ns} {0 800ns} {1 1200ns}
add_force {/video_cnt/tready} -radix hex {1 0ns} {0 2000ns} {1 2100ns} {0 3700ns} {1 3800ns}
add_force {/video_cnt/tlast} -radix hex {0 0ns} {1 700ns} {0 1000ns} {1 9500ns} {0 9900ns}
add_force {/video_cnt/tuser} -radix hex {0 0ns} {1 900ns} {0 1300ns} {1 11000ns} {0 11100ns}

*/

仿真结果:

 

推荐阅读