FPGA图像处理-线性滤波(均值,高斯,sobel算子)的实现

原理

都是线性滤波器。

均值滤波

在这里插入图片描述
该点处的像素值=滤波核范围的像素值取平均

降噪

高斯滤波

平滑
该点处的像素值=滤波核范围的像素值乘上高斯系数的和

在这里插入图片描述
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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&amp;</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">&amp;</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&amp;</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</span> #<span class="token number">1</span> data_tmp2<span class="token punctuation">;</span>
        dout_valid_temp_r <span class="token operator">&lt;=</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">&lt;=</span> #<span class="token number">1</span> valid<span class="token punctuation">;</span>
        is_boarder_r <span class="token operator">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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">&lt;=</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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值