⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 awgn.v

📁 为基带系统测试误码率而写的数字噪声程序
💻 V
字号:
module AWGN(clk,reset,asset,state,noise);
	input			clk;
	input			reset;
	input			asset;
	input	[1:0]	state;
	output	[7:0]	noise;
	reg		[7:0]	noise;
	
	reg				clk_out;
	wire	[126:0] Transmatrix1;
	wire	[126:0] Transmatrix2;
	wire	[126:0]	left1;
	wire	[126:0]	left2;
	wire	[126:0]	right1;
	wire	[126:0]	right2;
	wire	[126:0]	up1;
	wire	[126:0]	up2;
	wire	[126:0]	down1;
	wire	[126:0]	down2;
	reg		[126:0]	state1;
	reg		[126:0]	state2;
	
	wire	[2:0]	sum00,sum01,sum02,sum03,sum04,sum05,sum06,sum07,sum08,sum09;
	wire	[2:0]	sum0A,sum0B,sum0C,sum0D,sum0E,sum0F,sum0G,sum0H,sum0I;
	wire	[2:0]	sum10,sum11,sum12,sum13,sum14,sum15,sum16,sum17,sum18,sum19;
	wire	[2:0]	sum1A,sum1B,sum1C,sum1D,sum1E,sum1F,sum1G,sum1H,sum1I;
	
	reg		[4:0]	sum0J,sum0K,sum0L,sum0M,sum0N;
	reg		[4:0]	sum1J,sum1K,sum1L,sum1M,sum1N;
	
	wire	[5:0]	sumA,sumB,sumC,sumD,sumE;
	
	wire	[7:0]	sum;
	
	always@(posedge clk or posedge reset)
		begin
			if (reset == 1'b1)
				clk_out	<= 1'b1;
			else
				clk_out	<= !clk_out;
		end
	
	assign	Transmatrix1 = 127'h2000_0000_0000_0000_0000_0000_0400_0000;		//characteristic polynomial
	assign	Transmatrix2 = 127'h0000_0000_0000_0000_0000_0000_0000_0000;
	assign	left1[126]	 = 1'b0;
	assign	left1[125:0] = state1[126:1];
	assign	left2[126]	 = 1'b0;
	assign	left2[125:0] = state2[126:1];
	assign	right1[0]	 = 1'b0;
	assign	right1[126:1]= state1[125:0];
	assign	right2[0]	 = 1'b0;
	assign	right2[126:1]= state2[125:0];
	assign	up1	  = 127'h0000_0000_0000_0000_0000_0000_0000_0000;
	assign	up2   = state1;
	assign	down1 = state2;
	assign	down2 = 127'h0000_0000_0000_0000_0000_0000_0000_0000;
	
	always@(posedge clk or posedge reset)	
		begin
			if (reset == 1'b1)
	 			begin
	 				state1	<= 127'haaaa_aaaa_aaaa_aaaa_aaaa_aaaa_aaaa_aaaa;
	 				state2	<= 127'h5555_5555_5555_5555_5555_5555_5555_5555;
	 			end
			else 					
				begin
					if (asset == 1'b1)
	 					begin
	 						if (state == 2'b00)
	 							begin
	 								state1	<= 127'h4b4b_4b4b_4b4b_4b4b_4b4b_4b4b_4b4b_4b4b;
	 								state2	<= 127'hb4b4_b4b4_b4b4_b4b4_b4b4_b4b4_b4b4_b4b4;
	 							end
	 						else if (state == 2'b01)
	 							begin
	 								state1	<= 127'h6666_6666_6666_6666_6666_6666_6666_6666;
	 								state2	<= 127'h9999_9999_9999_9999_9999_9999_9999_9999;
	 							end
	 						else if (state == 2'b10)
	 							begin
	 								state1	<= 127'h1818_1818_1818_1818_1818_1818_1818_1818;
	 								state2	<= 127'he7e7_e7e7_e7e7_e7e7_e7e7_e7e7_e7e7_e7e7;
	 							end
	 						else
	 							begin
	 								state1	<= 127'hffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff;
	 								state2	<= 127'hffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff;
	 							end
	 					end
	 				else
	 					begin
	 						state1	<= (Transmatrix1 & state1) ^ left1 ^ right1 ^ up1 ^ down1;
	 						state2	<= (Transmatrix2 & state2) ^ left2 ^ right2 ^ up2 ^ down2;
	 					end
	 			end
		end
	 	
	assign	sum00 = add3(state1[126],state1[125],state1[124],state1[123],state1[122],state1[121],state1[120]);	
	assign	sum01 = add3(state1[119],state1[118],state1[117],state1[116],state1[115],state1[114],state1[113]);
	assign	sum02 = add3(state1[112],state1[111],state1[110],state1[109],state1[108],state1[107],state1[106]);
	assign	sum03 = add3(state1[105],state1[104],state1[103],state1[102],state1[101],state1[100],state1[99]);
	assign	sum04 = add3(state1[98],state1[97],state1[96],state1[95],state1[94],state1[93],state1[92]);
	assign	sum05 = add3(state1[91],state1[90],state1[89],state1[88],state1[87],state1[86],state1[85]);
	assign	sum06 = add3(state1[84],state1[83],state1[82],state1[81],state1[80],state1[79],state1[78]);
	assign	sum07 = add3(state1[77],state1[76],state1[75],state1[74],state1[73],state1[72],state1[71]);
	assign	sum08 = add3(state1[70],state1[69],state1[68],state1[67],state1[66],state1[65],state1[64]);
	assign	sum09 = add3(state1[63],state1[62],state1[61],state1[60],state1[59],state1[58],state1[57]);
	assign	sum0A = add3(state1[56],state1[55],state1[54],state1[53],state1[52],state1[51],state1[50]);
	assign	sum0B = add3(state1[49],state1[48],state1[47],state1[46],state1[45],state1[44],state1[43]);
	assign	sum0C = add3(state1[42],state1[41],state1[40],state1[39],state1[38],state1[37],state1[36]);
	assign	sum0D = add3(state1[35],state1[34],state1[33],state1[32],state1[31],state1[30],state1[29]);
	assign	sum0E = add3(state1[28],state1[27],state1[26],state1[25],state1[24],state1[23],state1[22]);
	assign	sum0F = add3(state1[21],state1[20],state1[19],state1[18],state1[17],state1[16],state1[15]);
	assign	sum0G = add3(state1[14],state1[13],state1[12],state1[11],state1[10],state1[9],state1[8]);
	assign	sum0H = add3(state1[7],state1[6],state1[5],state1[4],state1[3],state1[2],state1[1]);
	assign	sum0I = add3(state1[0],0,0,0,0,0,0);
	
	assign	sum10 = add3(state2[126],state2[125],state2[124],state2[123],state2[122],state2[121],state2[120]);	
	assign	sum11 = add3(state2[119],state2[118],state2[117],state2[116],state2[115],state2[114],state2[113]);
	assign	sum12 = add3(state2[112],state2[111],state2[110],state2[109],state2[108],state2[107],state2[106]);
	assign	sum13 = add3(state2[105],state2[104],state2[103],state2[102],state2[101],state2[100],state2[99]);
	assign	sum14 = add3(state2[98],state2[97],state2[96],state2[95],state2[94],state2[93],state2[92]);
	assign	sum15 = add3(state2[91],state2[90],state2[89],state2[88],state2[87],state2[86],state2[85]);
	assign	sum16 = add3(state2[84],state2[83],state2[82],state2[81],state2[80],state2[79],state2[78]);
	assign	sum17 = add3(state2[77],state2[76],state2[75],state2[74],state2[73],state2[72],state2[71]);
	assign	sum18 = add3(state2[70],state2[69],state2[68],state2[67],state2[66],state2[65],state2[64]);
	assign	sum19 = add3(state2[63],state2[62],state2[61],state2[60],state2[59],state2[58],state2[57]);
	assign	sum1A = add3(state2[56],state2[55],state2[54],state2[53],state2[52],state2[51],state2[50]);
	assign	sum1B = add3(state2[49],state2[48],state2[47],state2[46],state2[45],state2[44],state2[43]);
	assign	sum1C = add3(state2[42],state2[41],state2[40],state2[39],state2[38],state2[37],state2[36]);
	assign	sum1D = add3(state2[35],state2[34],state2[33],state2[32],state2[31],state2[30],state2[29]);
	assign	sum1E = add3(state2[28],state2[27],state2[26],state2[25],state2[24],state2[23],state2[22]);
	assign	sum1F = add3(state2[21],state2[20],state2[19],state2[18],state2[17],state2[16],state2[15]);
	assign	sum1G = add3(state2[14],state2[13],state2[12],state2[11],state2[10],state2[9],state2[8]);
	assign	sum1H = add3(state2[7],state2[6],state2[5],state2[4],state2[3],state2[2],state2[1]);
	assign	sum1I = add3(state2[0],1,0,0,0,0,0);
	
	always@(posedge clk)
		begin
			sum0J <= add5(sum00,sum01,sum02,sum03);
			sum0K <= add5(sum04,sum05,sum06,sum07);
			sum0L <= add5(sum08,sum09,sum0A,sum0B);
			sum0M <= add5(sum0C,sum0D,sum0E,sum0F);
			sum0N <= add5(sum0G,sum0H,sum0I,0);
	
			sum1J <= add5(sum10,sum11,sum12,sum13);
			sum1K <= add5(sum14,sum15,sum16,sum17);
			sum1L <= add5(sum18,sum19,sum1A,sum1B);
			sum1M <= add5(sum1C,sum1D,sum1E,sum1F);
			sum1N <= add5(sum1G,sum1H,sum1I,0);
		end
		
	assign	sumA  = add6(sum0J,sum1J);
	assign	sumB  = add6(sum0K,sum1K);
	assign	sumC  = add6(sum0L,sum1L);
	assign	sumD  = add6(sum0M,sum1M);
	assign	sumE  = add6(sum0N,sum1N);
	
	assign	sum   = add8(sumA,sumB,sumC,sumD,sumE);
		
	always@(posedge clk_out)
		begin
			noise	<= {!sum[7],sum[6:0]};
		end
		
	function [2:0]	add3;
		input	A,B,C,D,E,F,G;
		
		begin
			add3 = A + B + C + D + E + F + G;
		end
		
	endfunction
	
	function [4:0]	add5;
		input	[2:0]	A,B,C,D;
		
		begin
			add5 = A + B + C + D;
		end
	
	endfunction
	
	function [5:0]	add6;
		input	[4:0]	A,B;
		
		begin
			add6 = A + B;
		end
		
	endfunction
	
	function [7:0]	add8;
		input	[5:0]	A,B,C,D,E;
		
		begin
			add8 = A + B + C + D + E;
		end
	endfunction
		
endmodule
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -