原理
都是线性滤波器。
均值滤波
该点处的像素值=滤波核范围的像素值取平均
降噪
高斯滤波
平滑
该点处的像素值=滤波核范围的像素值乘上高斯系数的和
eg
sobel算子
边缘检测,
计算方式跟高斯滤波同
fpga实现均值滤波
直接实现
流水
步骤
- 一维求和
- 二维求和
- 除法转换
- 行缓存并实现行列像素对齐
一维求和
连续打四拍,两两并行相加,注意时序
增量更新法
增量更新是指在进行更新操作时,只更新需要改变的地方,不需要更新或者已经更新过的地方则不会重复更新。
假定要计算连续5个数据流的和,在上一个时刻t0,这5个待计算的数值是a0,a1,a2,a3,a4, sum=a0+(a1+a2+a3+a4),
在本时刻t1 待计算的数值是a1,a2,a3,a4,a5。sum’=(a1+a2+a3+a4)+a5
中间有4个值是相同元素。
如此如果每次计算都将5个数重新相加,就有点浪费资源。正确的做法是加上一个新值,再减去一个最老的值。
则 sum’=sum+(a5-a1)
`timescale 1ps/1ps
module sum_1d(
clk,
din,
din_valid,
dout_valid,
dout
);
parameter DW = 14;
parameter KSZ = 3;
input clk;
input [DW-1:0] din;
input din_valid;
output dout_valid;
output [2*DW-1:0] dout;
reg [KSZ:0] din_valid_r;
reg [DW-1:0] reg_din[0:KSZ];
reg [2DW-1:0] sum;
wire [2DW-1:0] sub_out;
wire [2*DW-1:0] diff;
integer j;
always @(posedge clk)
begin
din_valid_r <= #1 ({
din_valid_r[KSZ - 1:0], din_valid});
reg_din[0] <= #1 din;
for (j = 1; j <= KSZ; j = j + 1)
reg_din[j] <= #1 reg_din[j - 1];
end
always @(posedge clk)
begin
if (din_valid 1’b1 & ((~(din_valid_r[0]))) == 1’b1)
sum <= #1 {
2*DW-1+1{
1’b0}};
else if ((din_valid_r[0]) 1’b1)
sum <= #1 sum + diff;
end
assign sub_out = ((din_valid_r[0] == 1’b1 & din_valid_r[KSZ] == 1’b1)) ?
({
{
DW{
1’b0}},reg_din[KSZ]}) : ({2*DW{1’b0}});
assign diff = ({ { DW{ 1’b0}},reg_din[1]}) - sub_out;
assign dout_valid = din_valid_r[0];
assign dout = sum;
endmodule
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
2维求和
5行的结果,重复一行法1的做法
//--------------------------------------------------------------------------------------------
//
// Generated by X-HDL VHDL Translator - Version 2.0.0 Feb. 1, 2011
// ?? 3? 16 2016 10:59:46
//
// Input file :
// Component name : sum_2d
// Author :
// Company :
//
// Description :
//
//
//--------------------------------------------------------------------------------------------
`timescale 1ps/1ps
module sum_2d(
rst_n<span class="token punctuation">,</span>
clk<span class="token punctuation">,</span>
din_valid<span class="token punctuation">,</span>
din<span class="token punctuation">,</span>
dout<span class="token punctuation">,</span>
vsync<span class="token punctuation">,</span>
vsync_out<span class="token punctuation">,</span>
is_boarder<span class="token punctuation">,</span>
dout_valid
<span class="token punctuation">)</span><span class="token punctuation">;</span>
parameter DW = 8;
parameter KSZ = 5;
parameter IH = 512;
parameter IW = 640;
input rst_n;
input clk;
input din_valid;
input [DW-1:0] din;
output [2*DW-1:0] dout;
input vsync;
output vsync_out;
reg vsync_out;
output is_boarder;
output dout_valid;
parameter radius = ((KSZ >> 1));
parameter num_all = KSZ * KSZ;
parameter fifo_num = KSZ - 1;
parameter med_idx = ((num_all >> 1));
reg rst_all;
reg [DW-1:0] line_dinl[0:KSZ-2];
wire [DW-1:0] line_doutl[0:KSZ-2];
reg [DW-1:0] line_dinh[0:KSZ-2];
wire [DW-1:0] line_douth[0:KSZ-2];
wire [KSZ-2:0] line_emptyl;
wire [KSZ-2:0] line_fulll;
wire [KSZ-2:0] line_rdenl;
wire [KSZ-2:0] line_wrenl;
wire [KSZ-2:0] line_emptyh;
wire [KSZ-2:0] line_fullh;
wire [KSZ-2:0] line_rdenh;
wire [KSZ-2:0] line_wrenh;
wire [9:0] line_countl[0:KSZ-2];
wire [9:0] line_counth[0:KSZ-2];
wire [9:0] line_count[0:KSZ-2];
wire din_valid_r;
wire [2DW-1:0] sum;
wire [2DW-1:0] sum_col;
reg [KSZ-2:0] buf_pop_en;
reg valid_r;
reg [10:0] in_line_cnt;
reg [15:0] flush_cnt;
reg flush_line;
reg [15:0] out_pixel_cnt;
reg [10:0] out_line_cnt;
reg [2DW-1:0] dout_temp_r;
reg dout_valid_temp_r;
wire [2DW-1:0] dout_temp;
wire dout_valid_temp;
wire [2DW-1:0] sum_row1;
wire [2DW-1:0] sum_row2;
reg [2DW-1:0] sum_1_2;
reg [2DW-1:0] sum_col_r;
reg [2*DW-1:0] sum_all;
wire is_boarder_tmp;
reg is_boarder_r;
wire valid;
wire row_valid;
wire [31:0] j;
wire [31:0] k;
reg [10:0] line_valid_r;
wire [2DW-1:0] sum_row3;
wire [2DW-1:0] sum_row4;
reg [2DW-1:0] sum_3_4;
reg [2DW-1:0] sum_0_1_2;
reg [2DW-1:0] sum_3_4_r;
wire [2DW-1:0] sum_row5;
wire [2*DW-1:0] sum_row6;
reg [2DW-1:0] sum_5_6;
reg [2DW-1:0] sum_3_4_5_6;
wire [2DW-1:0] sum_row7;
wire [2DW-1:0] sum_row8;
wire [2DW-1:0] sum_row9;
wire [2DW-1:0] sum_row10;
wire [2DW-1:0] sum_row11;
wire [2DW-1:0] sum_row12;
wire [2DW-1:0] sum_row13;
wire [2DW-1:0] sum_row14;
reg [2DW-1:0] sum_7_8;
reg [2DW-1:0] sum_9_10;
reg [2DW-1:0] sum_11_12;
reg [2DW-1:0] sum_13_14;
reg [2DW-1:0] sum_7_8_9_10;
reg [2DW-1:0] sum_11_12_13_14;
reg [2DW-1:0] sum_0_to_6;
reg [2DW-1:0] sum_7_to_14;
reg row_valid_r;
wire vsync_out_tmp;
reg <span class="token punctuation">[</span>DW<span class="token operator">-</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span> xhdl4<span class="token punctuation">[</span><span class="token number">0</span><span class="token operator">:</span>KSZ<span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
reg [DW-1:0] xhdl5[0:KSZ-2];
wire[DW*2-1:0] xhdl13;
assign valid <span class="token operator">=</span> din_valid <span class="token operator">|</span> flush_line<span class="token punctuation">;</span>
always @<span class="token punctuation">(</span>posedge clk <span class="token operator">or</span> negedge rst_n<span class="token punctuation">)</span>
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>rst_n <span class="token operator">==</span> <span class="token number">1</span>'b0<span class="token punctuation">)</span>
rst_all <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b1<span class="token punctuation">;</span>
<span class="token keyword">else</span>
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>vsync <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
rst_all <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b1<span class="token punctuation">;</span>
<span class="token keyword">else</span>
rst_all <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b0<span class="token punctuation">;</span>
end
end
always @<span class="token punctuation">(</span>posedge clk<span class="token punctuation">)</span>
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>rst_all <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
row_valid_r <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b1<span class="token punctuation">;</span>
<span class="token keyword">else</span>
row_valid_r <span class="token operator"><=</span> #<span class="token number">1</span> row_valid<span class="token punctuation">;</span>
end
sum_1d #<span class="token punctuation">(</span>DW<span class="token punctuation">,</span> KSZ<span class="token punctuation">)</span>
<span class="token function">row_sum</span><span class="token punctuation">(</span>
<span class="token punctuation">.</span><span class="token function">clk</span><span class="token punctuation">(</span>clk<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">din</span><span class="token punctuation">(</span>din<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">din_valid</span><span class="token punctuation">(</span>valid<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">dout</span><span class="token punctuation">(</span>sum_col<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">dout_valid</span><span class="token punctuation">(</span>row_valid<span class="token punctuation">)</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
generate
begin <span class="token operator">:</span> line_buffer_inst
genvar i<span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><=</span> KSZ <span class="token operator">-</span> <span class="token number">2</span><span class="token punctuation">;</span> i <span class="token operator">=</span> i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span>
begin <span class="token operator">:</span> line_buf
<span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span>
begin <span class="token operator">:</span> row_1st
always @<span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> line_dinl<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> sum_col<span class="token punctuation">[</span>DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
always @<span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> line_dinh<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> sum_col<span class="token punctuation">[</span><span class="token number">2</span> <span class="token operator">*</span> DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span>DW<span class="token punctuation">]</span><span class="token punctuation">;</span>
assign line_wrenl<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> row_valid<span class="token punctuation">;</span>
assign line_wrenh<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> row_valid<span class="token punctuation">;</span>
end
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token operator">~</span><span class="token punctuation">(</span>i <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
begin <span class="token operator">:</span> row_others
always @<span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> line_dinl<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> line_doutl<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
always @<span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> line_dinh<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> line_douth<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
assign line_wrenh<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> line_rdenh<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
assign line_wrenl<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> line_rdenl<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
end
assign line_rdenl<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> buf_pop_en<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">&</span> row_valid<span class="token punctuation">;</span>
assign line_rdenh<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> buf_pop_en<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">&</span> row_valid<span class="token punctuation">;</span>
always @<span class="token punctuation">(</span>posedge clk<span class="token punctuation">)</span>
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>rst_all <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
buf_pop_en<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b0<span class="token punctuation">;</span>
<span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>line_countl<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> IW<span class="token punctuation">)</span>
buf_pop_en<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b1<span class="token punctuation">;</span>
end
always @<span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> xhdl4<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> line_dinl<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>
line_buffer #<span class="token punctuation">(</span>DW<span class="token punctuation">,</span> IW<span class="token punctuation">)</span>
<span class="token function">line_buf_l</span><span class="token punctuation">(</span>
<span class="token punctuation">.</span><span class="token function">rst</span><span class="token punctuation">(</span>rst_all<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">clk</span><span class="token punctuation">(</span>clk<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">din</span><span class="token punctuation">(</span>xhdl4<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">dout</span><span class="token punctuation">(</span>line_doutl<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">wr_en</span><span class="token punctuation">(</span>line_wrenl<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">rd_en</span><span class="token punctuation">(</span>line_rdenl<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span>line_emptyl<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">full</span><span class="token punctuation">(</span>line_fulll<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">count</span><span class="token punctuation">(</span>line_countl<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
always @<span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> xhdl5<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> line_dinh<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>
line_buffer #<span class="token punctuation">(</span>DW<span class="token punctuation">,</span> IW<span class="token punctuation">)</span>
<span class="token function">line_buf_h</span><span class="token punctuation">(</span>
<span class="token punctuation">.</span><span class="token function">rst</span><span class="token punctuation">(</span>rst_all<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">clk</span><span class="token punctuation">(</span>clk<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">din</span><span class="token punctuation">(</span>xhdl5<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">dout</span><span class="token punctuation">(</span>line_douth<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">wr_en</span><span class="token punctuation">(</span>line_wrenh<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">rd_en</span><span class="token punctuation">(</span>line_rdenh<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span>line_emptyh<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">full</span><span class="token punctuation">(</span>line_fullh<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token function">count</span><span class="token punctuation">(</span>line_counth<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
end
end
endgenerate
endgenerate
generate
<span class="token keyword">if</span> <span class="token punctuation">(</span>KSZ <span class="token operator">==</span> <span class="token number">3</span><span class="token punctuation">)</span>
begin <span class="token operator">:</span> sum_ksz_3
assign sum_row1 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>line_douth<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> line_doutl<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
assign sum_row2 <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span>buf_pop_en<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">?</span>
<span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>line_douth<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> line_doutl<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">:</span>
<span class="token punctuation">{<!-- --></span><span class="token number">2</span><span class="token operator">*</span>DW<span class="token operator">-</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">{<!-- --></span><span class="token number">1</span>'b0<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
assign dout_valid_temp <span class="token operator">=</span> line_valid_r<span class="token punctuation">[</span><span class="token number">1</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
always @<span class="token punctuation">(</span>posedge clk<span class="token punctuation">)</span>
begin
line_valid_r<span class="token punctuation">[</span><span class="token number">2</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator"><=</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>line_valid_r<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> line_rdenl<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>line_rdenl<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
sum_col_r <span class="token operator"><=</span> #<span class="token number">1</span> sum_col<span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>line_rdenl<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
sum_1_2 <span class="token operator"><=</span> #<span class="token number">1</span> sum_row2 <span class="token operator">+</span> sum_row1<span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>line_valid_r<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
sum_all <span class="token operator"><=</span> #<span class="token number">1</span> sum_1_2 <span class="token operator">+</span> sum_col_r<span class="token punctuation">;</span>
end
end
endgenerate
endmodule
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
除法
换成移位操作
module Mean_2D(rst_n, clk, din_valid, din, din_delay, din_valid_delay, dout, vsync, vsync_out, is_boarder, dout_valid);
parameter DW = 14;
parameter KSZ = 15;
parameter IH = 512;
parameter IW = 640;
input rst_n;
input clk;
input din_valid;
input [DW-1:0] din;
output [DW-1:0] din_delay;
output din_valid_delay;
output [2*DW-1:0] dout;
input vsync;
output vsync_out;
output is_boarder;
output dout_valid;
parameter radius = ((KSZ >> 1));
parameter num_all = KSZ KSZ;
parameter fifo_num = KSZ - 1;
parameter med_idx = ((num_all >> 1));
parameter DW_ADD = DW 2;
reg rst_all;
reg [DW-1:0] line_din[0:KSZ-2];
wire [DW-1:0] line_dout[0:KSZ-2];
wire [KSZ-2:0] line_empty;
wire [KSZ-2:0] line_full;
wire [KSZ-2:0] line_rden;
wire [KSZ-2:0] line_wren;
wire [9:0] line_count[0:KSZ-2];
wire din_valid_r;
reg [KSZ-2:0] buf_pop_en;
reg valid_r;
reg [10:0] in_line_cnt;
reg [15:0] flush_cnt;
reg flush_line;
reg [15:0] out_pixel_cnt;
reg [10:0] out_line_cnt;
reg [2DW-1:0] dout_temp_r;
reg [10:0] dout_valid_temp_r;
wire [2DW-1:0] dout_temp;
wire dout_valid_temp;
wire [2DW-1:0] sum_row7;
wire [2DW-1:0] sum_row8;
wire [2DW-1:0] sum_row9;
wire [2DW-1:0] sum_row10;
wire [2DW-1:0] sum_row11;
wire [2DW-1:0] sum_row12;
wire [2DW-1:0] sum_row13;
wire [2DW-1:0] sum_row14;
wire [2DW-1:0] sum_1_2;
wire [2DW-1:0] sum_col_r;
wire [2DW-1:0] sum_col[0:KSZ-1];
wire [2DW-1:0] sum_all;
wire is_boarder_tmp;
reg is_boarder_r;
wire [KSZ-1:0] sum_valid;
reg [radius-1+10:0] din_valid_tmp;
reg [(radius+10)*DW-1:0] din_tmp;
reg [2DW-1:0] sum_tmp1;
reg [2DW-1:0] sum_tmp2;
reg [2DW-1:0] sum_tmp6;
reg [2DW+1:0] sum_tmp3;
reg [2DW+1:0] sum_tmp4;
reg [2DW+1:0] sum_tmp5;
wire valid;
wire [31:0] j;
wire sum_all_valid;
wire [DW_ADD*2-1:0] add_all;
wire [DW2KSZ-1:0] data_tmp1;
wire [DW*2-1:0] data_tmp2;
wire dout_valid_tmp;
assign dout_valid = dout_valid_tmp;
assign valid = din_valid | flush_line;
always @(posedge clk or posedge rst_n)
if (((~(rst_n))) 1’b1)
rst_all <= #1 1’b1;
else
begin
if (vsync 1’b1)
rst_all <= #1 1’b1;
else
rst_all <= #1 1’b0;
end
generate
begin : xhdl0
genvar i;
for (i = 0; i <= KSZ - 2; i = i + 1)
begin : buf_inst
if (i == 0)
begin : xhdl4
always @(*) line_din[i] <= din;
assign line_wren[i] = valid;
end
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token operator">~</span><span class="token punctuation">(</span>i <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
begin <span class="token operator">:</span> xhdl5
always @<span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> line_din<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> line_dout<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
assign line_wren<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> line_rden<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
end
line_buffer <span class="token function">line_buf_inst</span><span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token function">rst</span><span class="token punctuation">(</span>rst_all<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">clk</span><span class="token punctuation">(</span>clk<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">din</span><span class="token punctuation">(</span>line_din<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">dout</span><span class="token punctuation">(</span>line_dout<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">wr_en</span><span class="token punctuation">(</span>line_wren<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">rd_en</span><span class="token punctuation">(</span>line_rden<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span>line_empty<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">full</span><span class="token punctuation">(</span>line_full<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">count</span><span class="token punctuation">(</span>line_count<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
assign line_rden<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> buf_pop_en<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">&</span> valid<span class="token punctuation">;</span>
always @<span class="token punctuation">(</span>posedge clk<span class="token punctuation">)</span>
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>rst_all <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
buf_pop_en<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b0<span class="token punctuation">;</span>
<span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>line_count<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">==</span> IW<span class="token punctuation">)</span>
buf_pop_en<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b1<span class="token punctuation">;</span>
end
Sum_1D #<span class="token punctuation">(</span>DW<span class="token punctuation">,</span> KSZ<span class="token punctuation">)</span> <span class="token function">row_sum</span><span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token function">clk</span><span class="token punctuation">(</span>clk<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">din</span><span class="token punctuation">(</span>line_dout<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">din_valid</span><span class="token punctuation">(</span>line_rden<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">dout</span><span class="token punctuation">(</span>sum_col<span class="token punctuation">[</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token function">dout_valid</span><span class="token punctuation">(</span>sum_valid<span class="token punctuation">[</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
end
end
endgenerate
Sum_1D #(DW, KSZ) row_sum_din(.clk(clk), .din(din), .din_valid(din_valid), .dout(sum_col[0]), .dout_valid(sum_valid[0]));
assign sum_row7 = (((sum_valid[6]) 1’b1)) ? sum_col[7] :
{
2*DW-1+1{
1’b0}};
assign sum_row8 = (((sum_valid[7]) 1’b1)) ? sum_col[8] :
{
2DW-1+1{
1’b0}};
assign sum_row9 = (((sum_valid[8]) == 1’b1)) ? sum_col[9] :
{
2DW-1+1{
1’b0}};
assign sum_row10 = (((sum_valid[9]) 1’b1)) ? sum_col[10] :
{
2*DW-1+1{
1’b0}};
assign sum_row11 = (((sum_valid[10]) 1’b1)) ? sum_col[11] :
{
2DW-1+1{
1’b0}};
assign sum_row12 = (((sum_valid[11]) == 1’b1)) ? sum_col[12] :
{
2DW-1+1{
1’b0}};
assign sum_row13 = (((sum_valid[12]) 1’b1)) ? sum_col[13] :
{
2*DW-1+1{
1’b0}};
assign sum_row14 = (((sum_valid[13]) 1’b1)) ? sum_col[14] :
{
2*DW-1+1{
1’b0}};
assign data_tmp1 = ({ sum_col[0], sum_col[1], sum_col[2], sum_col[3], sum_col[4], sum_col[5], sum_col[6], sum_row7, sum_row8, sum_row9, sum_row10, sum_row11, sum_row12, sum_row13, sum_row14});
AddTree #(DW_ADD, KSZ) sum_total(.rst_n(rst_n), .clk(clk), .din_valid(sum_valid[7]), .din(data_tmp1), .dout(add_all), .dout_valid(sum_all_valid));
assign sum_all = add_all[DW_ADD - 1:0];
always @(posedge clk)
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>sum_all_valid <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
begin
sum_tmp1 <span class="token operator"><=</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span><span class="token number">5</span><span class="token string">'b00000, sum_all[2 * DW - 1:5]} + ({3'</span>b000<span class="token punctuation">,</span> sum_all<span class="token punctuation">[</span><span class="token number">2</span> <span class="token operator">*</span> DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">8</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
sum_tmp2 <span class="token operator"><=</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span><span class="token number">1</span><span class="token string">'b0, sum_all[2 * DW - 1:1]} + ({5'</span>b00000<span class="token punctuation">,</span> sum_all<span class="token punctuation">[</span><span class="token number">2</span> <span class="token operator">*</span> DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
sum_tmp3 <span class="token operator"><=</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>sum_all<span class="token punctuation">[</span><span class="token number">2</span> <span class="token operator">*</span> DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token string">'b00}) + ({13'</span>b0000000000000<span class="token punctuation">,</span> sum_all<span class="token punctuation">[</span><span class="token number">2</span> <span class="token operator">*</span> DW <span class="token operator">-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">11</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
end
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>dout_valid_temp_r<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
begin
sum_tmp4 <span class="token operator"><=</span> #<span class="token number">1</span> sum_tmp3 <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span><span class="token number">2</span>'b00<span class="token punctuation">,</span> sum_tmp1<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
sum_tmp6 <span class="token operator"><=</span> #<span class="token number">1</span> sum_tmp2<span class="token punctuation">;</span>
end
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>dout_valid_temp_r<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
sum_tmp5 <span class="token operator"><=</span> sum_tmp4 <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span><span class="token number">2</span>'b00<span class="token punctuation">,</span> sum_tmp6<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
end
assign dout_temp = (((sum_tmp5[6]) == 1’b1)) ? ({5’b00000, sum_tmp5[2 DW + 1:7]} + 1’b1) :
({
5’b00000, sum_tmp5[2 DW + 1:7]});
assign dout_valid_temp = dout_valid_temp_r[radius + 2];
assign data_tmp2 = (((is_boarder_tmp | (~(dout_valid_temp_r[radius + 2]))) == 1’b1)) ? {DW+1{1’b0}} :
dout_temp;
always @(posedge clk)
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>rst_all <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
begin
dout_temp_r <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token punctuation">{<!-- --></span><span class="token number">2</span><span class="token operator">*</span>DW<span class="token operator">-</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">{<!-- --></span><span class="token number">1</span>'b0<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
dout_valid_temp_r <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">11</span>'b00000000000<span class="token punctuation">;</span>
valid_r <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token number">1</span>'b0<span class="token punctuation">;</span>
is_boarder_r <span class="token operator"><=</span> <span class="token number">1</span>'b0<span class="token punctuation">;</span>
end
<span class="token keyword">else</span>
begin
dout_temp_r <span class="token operator"><=</span> #<span class="token number">1</span> data_tmp2<span class="token punctuation">;</span>
dout_valid_temp_r <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>dout_valid_temp_r<span class="token punctuation">[</span><span class="token number">9</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> sum_all_valid<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
valid_r <span class="token operator"><=</span> #<span class="token number">1</span> valid<span class="token punctuation">;</span>
is_boarder_r <span class="token operator"><=</span> is_boarder_tmp<span class="token punctuation">;</span>
end
end
assign dout = dout_temp_r;
assign dout_valid_tmp = dout_valid_temp_r[radius + 3];
assign is_boarder = is_boarder_r;
always @(posedge clk)
begin
<span class="token keyword">if</span> <span class="token punctuation">(</span>rst_all <span class="token operator">==</span> <span class="token number">1</span>'b1<span class="token punctuation">)</span>
begin
din_valid_tmp <span class="token operator"><=</span> <span class="token punctuation">{<!-- --></span>radius<span class="token operator">+</span><span class="token number">10</span><span class="token punctuation">{<!-- --></span><span class="token number">1</span>'b0<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
din_tmp <span class="token operator"><=</span> <span class="token punctuation">{<!-- --></span>radius<span class="token operator">+</span><span class="token number">10</span><span class="token operator">*</span>DW<span class="token operator">-</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">{<!-- --></span><span class="token number">1</span>'b0<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
end
<span class="token keyword">else</span>
begin
din_valid_tmp <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>din_valid_tmp<span class="token punctuation">[</span>radius <span class="token operator">-</span> <span class="token number">2</span> <span class="token operator">+</span> <span class="token number">10</span><span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> line_rden<span class="token punctuation">[</span>radius <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
din_tmp <span class="token operator"><=</span> #<span class="token number">1</span> <span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>din_tmp<span class="token punctuation">[</span><span class="token punctuation">(</span>radius <span class="token operator">+</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token operator">*</span> DW <span class="token operator">-</span> <span class="token number">1</span> <span class="token operator">-</span> DW<span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> line_dout<span class="token punctuation">[</span>radius <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
end
end
assign din_valid_delay = din_valid_tmp[radius - 1 + 10];
assign din_delay = din_tmp[(radius + 10) DW - 1:(radius + 9) DW];
assign vsync_out = line_wren[radius - 1] & (~(line_wren[radius]));
endmodule
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232