zoukankan      html  css  js  c++  java
  • FPGA-中值滤波

    `timescale 1ns/1ns
    module Median_Filter_top(
        //system 
        clk                ,          //像素时钟的同步,coms_clk , vga_clk
        rst_n            ,          //复位信号        
        //coms or vga                    
        pre_vs            ,       //前行同步
        pre_hs            ,       //前场同步  
        pre_en            ,       //前数据有效
        pre_img_Y        ,         //数据灰度图像
        //output                                
        post_vs            ,       //输出行同步
        post_hs            ,       //输出场同步  
        post_en            ,       //输出数据有效
        post_img_Y                 //输出数据灰度图像
    
    );
    //************************* input and output ***************************//
        //system 
        input            clk                ;          //像素时钟的同步,coms_clk , vga_clk
        input            rst_n            ;          //复位信号        
        //coms or vga                
        input            pre_vs            ;       //前行同步
        input            pre_hs            ;       //前场同步  
        input            pre_en            ;       //前数据有效
        input    [7:0]    pre_img_Y        ;         //数据灰度图像
        
        output            post_vs            ;       //输出行同步
        output            post_hs            ;       //输出场同步  
        output            post_en            ;       //输出数据有效
        output    [7:0]    post_img_Y        ;         //输出数据灰度图像
    
    
    
    //************************* main code ********************************//
    
    wire [7:0]   matrixp11,matrixp12,matrixp13;
    wire [7:0]   matrixp21,matrixp22,matrixp23;
    wire [7:0]   matrixp31,matrixp32,matrixp33;
    wire         matrix_vs        ;
    wire         matrix_hs        ;
    wire         matrix_en        ;
    
    Generate_Matrix_3x3_8bit Generate_Matrix_3x3_8bit(
        //system 
        .clk                (clk            ),         //像素时钟的同步,coms_clk , vga_clk
        .rst_n                (rst_n            ),          //复位信号        
        //coms or vga    
        .pre_vs                (pre_vs            ),          //前行同步                
        .pre_hs                (pre_hs            ),          //前场同步              
        .pre_en                (pre_en            ),          //前数据有效        
        .pre_img_Y            (pre_img_Y        ),         //数据灰度图像        
        .matrixp11            (matrixp11        ),
        .matrixp12            (matrixp12        ),
        .matrixp13            (matrixp13        ),
        .matrixp21            (matrixp21        ),
        .matrixp22            (matrixp22        ),
        .matrixp23            (matrixp23        ),
        .matrixp31            (matrixp31        ),
        .matrixp32            (matrixp32        ),
        .matrixp33            (matrixp33        ),
        .matrix_vs            (matrix_vs        ),
        .matrix_hs            (matrix_hs        ),
        .matrix_en            (matrix_en        )
    );
    wire [7:0] median_data;
    Median_Filter_3X3 Median_Filter_3X3(
        //system 
        .clk                (clk            ),         //像素时钟的同步,coms_clk , vga_clk
        .rst_n                (rst_n            ),          //复位信号        
        //coms or vga    
        .matrixp11            (matrixp11        ),
        .matrixp12            (matrixp12        ),
        .matrixp13            (matrixp13        ),
        .matrixp21            (matrixp21        ),
        .matrixp22            (matrixp22        ),
        .matrixp23            (matrixp23        ),
        .matrixp31            (matrixp31        ),
        .matrixp32            (matrixp32        ),
        .matrixp33            (matrixp33        ),
        .median_data        (median_data    )    
    );
    
    //行-列-行 3个时钟的延迟
    reg [2:0] matrix_vs_r; 
    reg [2:0] matrix_hs_r;
    reg [2:0] matrix_en_r;
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            matrix_vs_r <= 'd0;
            matrix_hs_r <= 'd0;
            matrix_en_r <= 'd0;
        end
        else begin
            matrix_vs_r <= {matrix_vs_r[1:0],matrix_vs};
            matrix_hs_r <= {matrix_hs_r[1:0],matrix_hs};
            matrix_en_r <= {matrix_en_r[1:0],matrix_en};
        end
    end
    
     assign post_vs    = matrix_vs_r[2]                 ;
     assign post_hs    = matrix_hs_r[2]                 ;
     assign post_en    = matrix_en_r[2]                 ;
     assign post_img_Y = (post_en) ? median_data:8'd0;
    
    endmodule
      1 `timescale 1ns/1ns
      2 module Median_Filter_top_tb;
      3 
      4 
      5 
      6 
      7     //system 
      8     reg                clk                ;          //像素时钟的同步,coms_clk , vga_clk
      9     reg                rst_n            ;          //复位信号        
     10     //coms or vga                
     11     reg                pre_vs            ;       //前行同步
     12     reg                pre_hs            ;       //前场同步  
     13     reg                pre_en            ;       //前数据有效
     14     reg        [7:0]    pre_img_Y        ;         //数据灰度图像
     15     
     16     wire            post_vs            ;       //输出行同步
     17     wire            post_hs            ;       //输出场同步  
     18     wire            post_en            ;       //输出数据有效
     19     wire    [7:0]    post_img_Y        ;         //输出数据灰度图像
     20 
     21 initial clk = 1;
     22     always #5 clk = ~clk;
     23     
     24     initial begin
     25         rst_n = 0;
     26         pre_vs =0 ;
     27         pre_hs = 0;
     28         pre_en = 0;
     29         pre_img_Y = 0;
     30         #51;
     31         rst_n = 1;
     32         pre_vs = 1;
     33         #20;
     34         pre_hs = 1;
     35         #20;
     36         pre_en = 1;
     37         #60;
     38         pre_en = 0;
     39         #20;
     40         pre_hs = 0;
     41         #20;
     42         pre_hs = 1;
     43         #20;
     44         pre_en = 1;
     45         #60;
     46         pre_en = 0;
     47         #20;
     48         pre_hs = 0;
     49         #20;
     50         pre_hs = 1;
     51         #20;
     52         pre_en = 1;
     53         #60;
     54         pre_en = 0;
     55         #20;
     56         pre_hs = 0;
     57         #20;
     58         pre_hs = 1;
     59         #20;
     60         pre_en = 1;
     61         #60;
     62         pre_en = 0;
     63         #20;
     64         pre_hs = 0;
     65         #20;
     66         pre_hs = 1;
     67         #20;
     68         pre_en = 1;
     69         #60;
     70         pre_en = 0;
     71         #20;
     72         pre_hs = 0;
     73         $stop;
     74     end
     75     
     76     reg [7:0] shiftin;
     77     always@(posedge clk or negedge rst_n ) begin
     78         if(!rst_n)
     79             shiftin <= 'd1;
     80         else if(pre_en) 
     81             shiftin <= shiftin + 1'b1;
     82         else
     83             shiftin <= shiftin;
     84     end
     85 
     86 
     87 Median_Filter_top Median_Filter_top(
     88     //system 
     89     .clk                (clk        ),          //像素时钟的同步,coms_clk , vga_clk
     90     .rst_n                (rst_n        ),          //复位信号        
     91     //coms or vga                    
     92     .pre_vs                (pre_vs        ),       //前行同步
     93     .pre_hs                (pre_hs        ),       //前场同步  
     94     .pre_en                (pre_en        ),       //前数据有效
     95     .pre_img_Y            (shiftin    ),         //数据灰度图像
     96     //output                                
     97     .post_vs            (post_vs    ),       //输出行同步
     98     .post_hs            (post_hs    ),       //输出场同步  
     99     .post_en            (post_en    ),       //输出数据有效
    100     .post_img_Y            (post_img_Y    )     //输出数据灰度图像
    101 
    102 );
    103 
    104 
    105 
    106 
    107 endmodule
  • 相关阅读:
    ATI Radeon HD 5450 with full QE/CI Support ( 转载 )
    从零开始学iPhone开发(5)——使用MapKit
    从零开始学iPhone开发(4)——使用WebView
    从零开始学iPhone开发(3)——视图及控制器的使用
    从零开始学iPhone开发(2)——控件的使用
    从零开始学iPhone开发(1)——工具的使用
    实战做项目如何选择开源许可协议(一)-了解协议
    git使用3
    git团队开发操作
    git分支管理
  • 原文地址:https://www.cnblogs.com/wanglinwensi/p/12836925.html
Copyright © 2011-2022 走看看