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
  • 相关阅读:
    IDEA中好用的插件
    Win10安装Docker
    win10系统关闭此电脑的文件夹
    postgreSQL主键自增长
    【设计模式】工厂模式
    vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响),转载
    springCloud中的组件学习
    使用springBoot+jsp+redis解决单一用户问题
    使用HtmlUnit动态获取网页数据
    java爬取网站中所有网页的源代码和链接
  • 原文地址:https://www.cnblogs.com/wanglinwensi/p/12836925.html
Copyright © 2011-2022 走看看