中值滤波器
2010年04月22日
本人最近写的中值滤波
/******************************************************************************
*
* File Name: MidFilter.v
* Version: 1.1
* Date: 2010 4-24
* Model: MidFilter Chip
* DeName:寇飞强
*
******************************************************************************/
module MidFilter(input sys_clk,
input sys_rst,
input[7:0] midvar1,
input[7:0] midvar2,
input[7:0] midvar3,
output [7:0]midvar_OUT,
output reg clk_2);
reg [7:0] c_img[3:1];
reg [7:0] midvar_cp1[3:1];
reg[7:0] MID_BUF[2:1];
reg [1:0] count;
reg [7:0] cmg_buf;
reg[2:0] cnt;
reg [7:0] midvar;
reg f,f1;
//对列进行排序
always @(posedge sys_clk or negedge sys_rst)
if(!sys_rst)
count=c_img[1])&&(c_img[3]=cmg_buf)
begin
midvar_cp1[1]=midvar_cp1[2])
begin
midvar_cp1[3]=MID_BUF[1])&&(cmg_buf=MID_BUF[2])&&(cmg_buf=cmg_buf)&&(MID_BUF[1]=MID_BUF[2])&&(MID_BUF[1]<=cmg_buf)))
begin
midvar<=MID_BUF[1];
end
else
begin
midvar<=MID_BUF[2];
end
end
end
default:cnt<=2'd0;
endcase
//输出最终结果
assign midvar_OUT=f1?midvar:8'dz;
//数据输入同步时钟
reg[1:0] div_fen;
always @(posedge sys_clk or negedge sys_rst)
if(!sys_rst)
begin
div_fen<=2'd0;
clk_2<=1'b0;
end
else
if(div_fen==2'd1)
begin
clk_2<=~clk_2;
div_fen<=2'd0;
end
else
div_fen<=div_fen+1'b1;
endmodule
测试如下
module t;
reg sys_clk;
reg sys_rst;
reg[7:0] midvar1;
reg[7:0] midvar2;
reg[7:0] midvar3;
wire[7:0]midvar;
wire clk_2;
//reg[1:0] div_fen;
//reg clk_3;
/*always @(posedge sys_clk or negedge sys_rst)
if(!sys_rst)
begin
div_fen<=2'd0;
clk_3<=1'b0;
end
else
if(div_fen==2'd1)
begin
clk_3<=~clk_3;
div_fen<=2'd0;
end
else
div_fen<=div_fen+1'b1; */
initial
begin
sys_clk=1'b0;
sys_rst=1'b0;
midvar1=8'd0;
midvar2=8'd0;
midvar3=8'd0;
#5 sys_rst=1'b1;
end
always #2 sys_clk=~sys_clk;
always @(posedge clk_2)
begin
midvar1<=$random();
midvar2<=$random();
midvar3<=$random();
end
MidFilter m(.sys_clk(sys_clk),
.sys_rst(sys_rst),
.midvar1(midvar1),
.midvar2(midvar2),
.midvar3(midvar3),
.midvar_OUT(midvar),
.clk_2(clk_2));
endmodule
2010年04月22日
本人最近写的中值滤波
/******************************************************************************
*
* File Name: MidFilter.v
* Version: 1.1
* Date: 2010 4-24
* Model: MidFilter Chip
* DeName:寇飞强
*
******************************************************************************/
module MidFilter(input sys_clk,
input sys_rst,
input[7:0] midvar1,
input[7:0] midvar2,
input[7:0] midvar3,
output [7:0]midvar_OUT,
output reg clk_2);
reg [7:0] c_img[3:1];
reg [7:0] midvar_cp1[3:1];
reg[7:0] MID_BUF[2:1];
reg [1:0] count;
reg [7:0] cmg_buf;
reg[2:0] cnt;
reg [7:0] midvar;
reg f,f1;
//对列进行排序
always @(posedge sys_clk or negedge sys_rst)
if(!sys_rst)
count=c_img[1])&&(c_img[3]=cmg_buf)
begin
midvar_cp1[1]=midvar_cp1[2])
begin
midvar_cp1[3]=MID_BUF[1])&&(cmg_buf=MID_BUF[2])&&(cmg_buf=cmg_buf)&&(MID_BUF[1]=MID_BUF[2])&&(MID_BUF[1]<=cmg_buf)))
begin
midvar<=MID_BUF[1];
end
else
begin
midvar<=MID_BUF[2];
end
end
end
default:cnt<=2'd0;
endcase
//输出最终结果
assign midvar_OUT=f1?midvar:8'dz;
//数据输入同步时钟
reg[1:0] div_fen;
always @(posedge sys_clk or negedge sys_rst)
if(!sys_rst)
begin
div_fen<=2'd0;
clk_2<=1'b0;
end
else
if(div_fen==2'd1)
begin
clk_2<=~clk_2;
div_fen<=2'd0;
end
else
div_fen<=div_fen+1'b1;
endmodule
测试如下
module t;
reg sys_clk;
reg sys_rst;
reg[7:0] midvar1;
reg[7:0] midvar2;
reg[7:0] midvar3;
wire[7:0]midvar;
wire clk_2;
//reg[1:0] div_fen;
//reg clk_3;
/*always @(posedge sys_clk or negedge sys_rst)
if(!sys_rst)
begin
div_fen<=2'd0;
clk_3<=1'b0;
end
else
if(div_fen==2'd1)
begin
clk_3<=~clk_3;
div_fen<=2'd0;
end
else
div_fen<=div_fen+1'b1; */
initial
begin
sys_clk=1'b0;
sys_rst=1'b0;
midvar1=8'd0;
midvar2=8'd0;
midvar3=8'd0;
#5 sys_rst=1'b1;
end
always #2 sys_clk=~sys_clk;
always @(posedge clk_2)
begin
midvar1<=$random();
midvar2<=$random();
midvar3<=$random();
end
MidFilter m(.sys_clk(sys_clk),
.sys_rst(sys_rst),
.midvar1(midvar1),
.midvar2(midvar2),
.midvar3(midvar3),
.midvar_OUT(midvar),
.clk_2(clk_2));
endmodule