zoukankan      html  css  js  c++  java
  • 视频数据的行列计数

    视频数据的行列计数

    本文的代码用于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}
    
    */

    仿真结果:

  • 相关阅读:
    Python环境搭建-anaconda
    UITableView的基本使用方法
    模拟网易新闻上方滚动条
    iOS之导航栏基本设置
    UITextField 方法和代理的使用
    UITextField详解
    init方法的重写与自定义
    OC中协议的理解protocal
    IOS中检测键盘出现和消失的消息
    怎么重装系统(一)
  • 原文地址:https://www.cnblogs.com/chensimin1990/p/9390468.html
Copyright © 2011-2022 走看看