形态学滤波(四)

2018-02-26 11:37:05 浏览数 (1)

形态学滤波(四)

之比较子模块设计

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

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

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

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

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

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

代码语言:js复制
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所示:

代码语言:js复制
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

0 人点赞