形态学滤波(四)

时间:2022-04-28
本文章向大家介绍形态学滤波(四),主要内容包括形态学滤波(四)、之比较子模块设计、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

形态学滤波(四)

之比较子模块设计

考虑到代码维护性和移植性,将基本比较单元设计为单独的子模块。这个子模块需实现以下功能:

(1)输出两个数据的较大值。

(2)输出两个数据的较小值。

考虑到系统鲁棒性,将比较结果打一拍之后输出。根据设计要求,本模块需要一个比较器、两个mux和两个reg。如下图所示:

很明显,本模块开销为1个始终。

设在某时刻连续10个输入数据流为:

Din_a = 3,8,5,9,7,1,2,6,0,4,x;
Din_a = x,3,8,5,9,7,1,2,6,0,4;

则din_a,din_b,min_tmp,max_tmp,dout_max,dout_min连续10个始终的数据如表9-1所示:

module minmax(
clk,
valid,
din_a,
din_b,
dout_min,
dout_max
 );
parameter DW =14;
parameter use_reg =1; //是否将数据缓存打一拍
input clk;
input valid;
input [DW-1:0] din_a;
input [DW-1:0] din_b;
output [DW-1:0] dout_min;
output [DW-1:0] dout_max;
reg [DW-1:0] dout_min;
reg [DW-1:0] dout_max;
reg [DW-1:0] min_reg;
reg [DW-1:0] max_reg;
assign min_tmp = (din_a > din_b) ? din_b : din_a;
assign max_tmp = (din_a > din_b) ? din_a : din_b;
generate
if(use_reg)
begin : map0
always @(posedge clk)
begin
if(valid)
begin
max_reg <= max_tmp;
min_reg <= min_tmp;
end 
end
assign dout_min = min_reg;
assign dout_max = max_reg;
end
endgenerate
generate
if(~use_reg)
begin : map1
assign dout_min = min_tmp;
assign dout_max = max_tmp;
end
endgenerate
endmodule