⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edge_detect.v

📁 3x3中值滤波 verilog
💻 V
字号:

// +FHDR------------------------------------------------------------------------
// Copyright (c) 2004, pudn ASIC.
// pudn ASIC Confidential Proprietary
// -----------------------------------------------------------------------------
// FILE NAME      :	edge_detect.v
// TYPE           : parameter
// DEPARTMENT     :	pudn ASIC
// AUTHOR         : Liu Yuxuan
// AUTHOR' EMAIL  : liuyuxuan@pudn.com
// -----------------------------------------------------------------------------
// Release history
// VERSION Date AUTHOR DESCRIPTION
// 0.0  12 Jun 2006, Liu Yuxuan (Create)
// -----------------------------------------------------------------------------
// KEYWORDS : Digital Video Processer, Noise Reduction, Median Filter
// -----------------------------------------------------------------------------
// PURPOSE :   
//            This module is part of the median filter circuit. This file
//            generates the edge detector.
// -----------------------------------------------------------------------------
// PARAMETERS
// PARAM NAME RANGE : DESCRIPTION : DEFAULT : VA UNITS
// -----------------------------------------------------------------------------
// REUSE ISSUES
// Reset Strategy :
// Clock Domains : 
// Critical Timing :
// Test Features :
// Asynchronous I/F : 
// Scan Methodology :
// Instantiations :
// Other :
// -FHDR------------------------------------------------------------------------

`resetall
`timescale 1ns/1ps
module edge_detect(
   clk,
   rst_n,
   edge_tol_y,
   edge_tol_uv,
   mdf_a11,
   mdf_a12,
   mdf_a13,
   mdf_a21,
   mdf_a22,
   mdf_a23,
   mdf_a31,
   mdf_a32,
   mdf_a33,
   
   edge_here
);


// Internal Declarations

input         clk;
input         rst_n;
input  [7:0]  edge_tol_y;
input  [7:0]  edge_tol_uv;
input  [15:0] mdf_a11;
input  [15:0] mdf_a12;
input  [15:0] mdf_a13;
input  [15:0] mdf_a21;
input  [15:0] mdf_a22;
input  [15:0] mdf_a23;
input  [15:0] mdf_a31;
input  [15:0] mdf_a32;
input  [15:0] mdf_a33;

output        edge_here;


wire        clk;
wire        rst_n;
wire [7:0]  edge_tol_y;
wire [7:0]  edge_tol_uv;
wire [15:0] mdf_a11;
wire [15:0] mdf_a12;
wire [15:0] mdf_a13;
wire [15:0] mdf_a21;
wire [15:0] mdf_a22;
wire [15:0] mdf_a23;
wire [15:0] mdf_a31;
wire [15:0] mdf_a32;
wire [15:0] mdf_a33;

reg         edge_here;

// ### Please start your Verilog code here ###

reg  [7:0]  diff_1_y, diff_2_y, diff_3_y, diff_4_y;
reg  [7:0]  diff_5_y, diff_6_y, diff_7_y, diff_8_y;
reg  [7:0]  diff_1_uv, diff_2_uv, diff_3_uv, diff_4_uv;
reg  [7:0]  diff_5_uv, diff_6_uv, diff_7_uv, diff_8_uv;
reg         edge_y;
reg         edge_uv;
wire        edge_here_tmp;
reg         edge_here_d1, edge_here_d2, edge_here_d3; 

//this always block initializes diff_*_y and generates
//correct diff_*_y
always @(posedge clk or negedge rst_n)
  begin
    if(!rst_n)
      begin
      	diff_1_y<=8'b0;
      	diff_2_y<=8'b0;
      	diff_3_y<=8'b0;
      	diff_4_y<=8'b0;
      	diff_5_y<=8'b0;
      	diff_6_y<=8'b0;
      	diff_7_y<=8'b0;
      	diff_8_y<=8'b0;
	    end
	  else
	    begin
	    	diff_1_y<=(mdf_a22[15:8]>=mdf_a11[15:8])?(mdf_a22[15:8]-mdf_a11[15:8]):(mdf_a11[15:8]-mdf_a22[15:8]);
	    	diff_2_y<=(mdf_a22[15:8]>=mdf_a12[15:8])?(mdf_a22[15:8]-mdf_a12[15:8]):(mdf_a12[15:8]-mdf_a22[15:8]);
	    	diff_3_y<=(mdf_a22[15:8]>=mdf_a13[15:8])?(mdf_a22[15:8]-mdf_a13[15:8]):(mdf_a13[15:8]-mdf_a22[15:8]);
	    	diff_4_y<=(mdf_a22[15:8]>=mdf_a21[15:8])?(mdf_a22[15:8]-mdf_a21[15:8]):(mdf_a21[15:8]-mdf_a22[15:8]);
	    	diff_5_y<=(mdf_a22[15:8]>=mdf_a23[15:8])?(mdf_a22[15:8]-mdf_a23[15:8]):(mdf_a23[15:8]-mdf_a22[15:8]);
	    	diff_6_y<=(mdf_a22[15:8]>=mdf_a31[15:8])?(mdf_a22[15:8]-mdf_a31[15:8]):(mdf_a31[15:8]-mdf_a22[15:8]);
	    	diff_7_y<=(mdf_a22[15:8]>=mdf_a32[15:8])?(mdf_a22[15:8]-mdf_a32[15:8]):(mdf_a32[15:8]-mdf_a22[15:8]);
	    	diff_8_y<=(mdf_a22[15:8]>=mdf_a33[15:8])?(mdf_a22[15:8]-mdf_a33[15:8]):(mdf_a33[15:8]-mdf_a22[15:8]);
      end//else if !rst_n
  end//always

//this always block initializes diff_*_uv and generates
//correct diff_*_uv
always @(posedge clk or negedge rst_n)
  begin
    if(!rst_n)
      begin
      	diff_1_uv<=8'b0;
      	diff_2_uv<=8'b0;
      	diff_3_uv<=8'b0;
      	diff_4_uv<=8'b0;
      	diff_5_uv<=8'b0;
      	diff_6_uv<=8'b0;
      	diff_7_uv<=8'b0;
      	diff_8_uv<=8'b0;
	    end
	  else
	    begin
	    	diff_1_uv<=(mdf_a22[7:0]>=mdf_a11[7:0])?(mdf_a22[7:0]-mdf_a11[7:0]):(mdf_a11[7:0]-mdf_a22[7:0]);
	    	diff_2_uv<=(mdf_a22[7:0]>=mdf_a12[7:0])?(mdf_a22[7:0]-mdf_a12[7:0]):(mdf_a12[7:0]-mdf_a22[7:0]);
	    	diff_3_uv<=(mdf_a22[7:0]>=mdf_a13[7:0])?(mdf_a22[7:0]-mdf_a13[7:0]):(mdf_a13[7:0]-mdf_a22[7:0]);
	    	diff_4_uv<=(mdf_a22[7:0]>=mdf_a21[7:0])?(mdf_a22[7:0]-mdf_a21[7:0]):(mdf_a21[7:0]-mdf_a22[7:0]);
	    	diff_5_uv<=(mdf_a22[7:0]>=mdf_a23[7:0])?(mdf_a22[7:0]-mdf_a23[7:0]):(mdf_a23[7:0]-mdf_a22[7:0]);
	    	diff_6_uv<=(mdf_a22[7:0]>=mdf_a31[7:0])?(mdf_a22[7:0]-mdf_a31[7:0]):(mdf_a31[7:0]-mdf_a22[7:0]);
	    	diff_7_uv<=(mdf_a22[7:0]>=mdf_a32[7:0])?(mdf_a22[7:0]-mdf_a32[7:0]):(mdf_a32[7:0]-mdf_a22[7:0]);
	    	diff_8_uv<=(mdf_a22[7:0]>=mdf_a33[7:0])?(mdf_a22[7:0]-mdf_a33[7:0]):(mdf_a33[7:0]-mdf_a22[7:0]);
      end//else if !rst_n
  end//always
 
assign edge_here_tmp=edge_y&&edge_uv;

//this always block initializes edge_here_d*, edge_here and generates
//correct edge_here_d*, edge_here
always @(posedge clk or negedge rst_n)
  begin
    if(!rst_n)
      begin
      	edge_here_d1<=1'b0;
      	edge_here_d2<=1'b0;
      	edge_here_d3<=1'b0;
      	edge_here<=1'b0;
	    end
	  else
	    begin
	    	edge_here_d1<=edge_here_tmp;
	    	edge_here_d2<=edge_here_d1;
	    	edge_here_d3<=edge_here_d2;
	    	edge_here<=edge_here_d3;
      end//else if !rst_n
  end//always
  
//this always block initializes edge_y, edge_uv and generates
//correct edge_y, edge_uv
always @(posedge clk or negedge rst_n)
  begin
    if(!rst_n)
      begin
      	edge_y<=1'b0;
      	edge_uv<=1'b0;
	    end
	  else
	    begin
	    	if((diff_1_y<=edge_tol_y)||(diff_2_y<=edge_tol_y)||(diff_3_y<=edge_tol_y)||(diff_4_y<=edge_tol_y)
	    	  ||(diff_5_y<=edge_tol_y)||(diff_6_y<=edge_tol_y)||(diff_7_y<=edge_tol_y)||(diff_8_y<=edge_tol_y))
	    	  edge_y<=1'b1;
	    	else
	    	  edge_y<=1'b0;
	    	if((diff_1_uv<=edge_tol_uv)||(diff_2_uv<=edge_tol_uv)||(diff_3_uv<=edge_tol_uv)||(diff_4_uv<=edge_tol_uv)
	    	  ||(diff_5_uv<=edge_tol_uv)||(diff_6_uv<=edge_tol_uv)||(diff_7_uv<=edge_tol_uv)||(diff_8_uv<=edge_tol_uv))
	    	  edge_uv<=1'b1;
	    	else
	    	  edge_uv<=1'b0;
      end//else if !rst_n
  end//always
  
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -