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

📄 idwt97_address_r.v

📁 這是一個二維的上提式9/7離散小波的Verilog的源碼,此為Encoder
💻 V
📖 第 1 页 / 共 2 页
字号:
//						Address_OutR = {1'b0, Reg_RH[Address_Width/2-2:0], Reg_RL[Address_Width/2 - 1:0]};
						Flag = ~Flag;
					end
					else begin
						if(LowPath)	//Low Path
							Address_OutR = {2'b01, Reg_RH[4:0], Reg_RL[4:0]};
						else
							Address_OutR = {2'b11, Reg_RH[4:0], Reg_RL[4:0]};
							
//						Address_OutR = {1'b1, Reg_RH[Address_Width/2-2:0], Reg_RL[Address_Width/2 - 1:0]};
						if(Reg_RH[4:0] == 5'h1F) //31
							R_Boundary = 1'b1;
						else begin
							Reg_RH = Reg_RH + 1;
							R_Boundary = 1'b0;
						end
						Flag = ~Flag;

					end
				end

				//Write Memory Address
				if(Address_OutW == 'hFFF) begin
					Address_OutW = 12'hFFF;
					Change_Mode = 1'b1;
					Write_En = 0;
					Clr = 1'b0;
					End_B = 1'b1;
					DWT_Reset = 1'b0;
				end
				else begin
					if(Delay == 15) begin	//20
						if(HiPath)	//save LoPath
							Address_OutW = {1'b0, Reg_WH[5:0], Reg_WL[4:0]};
						else
							Address_OutW = {1'b1, Reg_WH[5:0], Reg_WL[4:0]};

						if(Reg_WH[5:0] == 6'h3F) begin	//63
							if(!HiPath)
								Reg_WL = Reg_WL + 1;
								HiPath = ~HiPath;
								Reg_WH = Reg_WH + 1;
								Delay  = 7;	//12
								Write_En = 1;
						end
						else begin
							Delay = 15;
							Reg_WH = Reg_WH + 1;
							Write_En = 1;
						end
					end
					else begin
//						Address_OutW = {Reg_WH, Reg_WL};
						Delay = Delay + 1;
						Write_En = 0;
					end
				end
			end
		end	//End 2-D Level
		
		S3: begin
			Choose_RW = 1'b1;
			if(!Clr) begin
				Address_OutR = 0;
				Address_OutW = 0;
				Reg_RL	     = 3;
				Reg_RH	     = 0;
				Reg_WL	     = 0;
				Reg_WH	     = 0;
				Flag	     = 1;
				
				Level_Choose = S3;	//Level_Choose == Processing State
				L_Boundary   = 1'b1;
				R_Boundary   = 1'b0;
				if(End_B) begin
					End_B = 1'b0;
					Clr = 1'b0;
					DWT_Reset = 1'b0;
				end
				else begin
					DWT_Reset    = 1'b1;	//DWT_Reset == 0 ==> Reset, DWT_Reset == 1 ==> Enable
					Clr = 1'b1;
				end
				

				Write_En     = 1'b0;
				Change_Mode  = 1'b0;
				Delay_Mode   = 1'b0;
				Delay		 = 0;
			end
			else begin
				         Clr = 1'b1;
				        Done = 1'b0;
				Level_Choose = S3;	//Level_Choose == Processing State
				//Read Memory Address
				if(L_Boundary) begin
					if(Flag) begin
						Address_OutR = {3'b00_0, Reg_RH[4:0], Reg_RL[3:0]};
						if(Reg_RL[3:0] == 0) begin
						  	L_Boundary = 1'b0;
							Reg_RL = 0;
							Flag = ~Flag;
						end
						else begin
							L_Boundary = 1'b1;
							Reg_RL = Reg_RL - 1;
							Flag = ~Flag;
						end
					end
					else begin
						Address_OutR = {3'b00_1, Reg_RH[4:0], Reg_RL[3:0]};
						L_Boundary = 1'b1;
						Flag = ~Flag;
					end
				end
				else if(R_Boundary) begin
					if(Flag) begin
						Address_OutR = {3'b00_0, Reg_RH[4:0], Reg_RL[3:0]};
						Reg_RL = Reg_RL - 1;
					        Flag = ~Flag;
					end
					else begin
						Address_OutR = {3'b00_1, Reg_RH[4:0], Reg_RL[3:0]};
						if(Reg_RL == 4'hD) begin
							Reg_RL = 2;
							Reg_RH = Reg_RH + 1;
							L_Boundary = 1'b1;
							R_Boundary = 1'b0;
							Flag = ~Flag;
						end
						else
							Flag = ~Flag;
					end

				end
				else begin
					if(Flag) begin
						Address_OutR = {3'b00_0, Reg_RH[4:0], Reg_RL[3:0]};
						Flag = ~Flag;
					end
					else begin
						Address_OutR = {3'b00_1, Reg_RH[4:0], Reg_RL[3:0]};

						if(Reg_RL[3:0] == 4'hF) begin	//15
							R_Boundary = 1'b1;
						end
						else begin
							Reg_RL = Reg_RL + 1;
							R_Boundary = 1'b0;
						end
						Flag = ~Flag;
					end
					
					
				end

				//Write Memory Address
				if(Address_OutW == 12'h3FF) begin
					Address_OutW = 12'h3FF;
					Change_Mode = 1'b1;
					Write_En = 0;
					Clr = 1'b0;
					End_B = 1'b1;
				end
				else begin
					if(Delay == 15) begin	//16
						Address_OutW = {2'b00, Reg_WH[4:0], Reg_WL[4:0]};
						if(Reg_WL[4:0] == 5'h1F) begin	//63
							Reg_WH = Reg_WH + 1;
							Reg_WL = Reg_WL + 1;
							Delay  = 7;	//8
							Write_En = 1;
						end
						else begin
							Delay = 15;
							Reg_WL = Reg_WL + 1;
							Write_En = 1;
						end
					end
					else begin
						Address_OutW = {2'b00, Reg_WH[4:0], Reg_WL[4:0]};
						Delay = Delay + 1;
						Write_En = 0;
					end
				end
			end
		end

		S4: begin	//2-D 2Level
			Choose_RW = 1'b0;
			if(!Clr) begin
				Address_OutR = 0;
				Address_OutW = 0;
				Reg_RL	     = 0;
				Reg_RH	     = 3;
				Reg_WL	     = 0;
				Reg_WH	     = 0;
				Flag	     = 1;
				
				Level_Choose = S4;	//Level_Choose == Processing State
				L_Boundary   = 1'b1;
				R_Boundary   = 1'b0;
//				Clr          = 1'b1;
				if(End_B) begin
					Clr = 1'b0;
					End_B = 1'b0;
					DWT_Reset = 1'b0;
				end
				else begin
					DWT_Reset    = 1;	//DWT_Reset == 0 ==> Reset, DWT_Reset == 1 ==> Enable
					Clr = 1'b1;
				end
				Write_En     = 0;
				Change_Mode  = 1'b0;
				LowPath      = 1'b1;
				HiPath       = 1'b1;
			end
			else begin
				Clr = 1'b1;
				Done = 1'b0;
				Level_Choose = S4;	//Level_Choose == Processing State
				//Read Memory Address
				if(L_Boundary) begin
					if(Flag) begin
						if(LowPath)	//Low Path
							Address_OutR = {4'b0000, Reg_RH[3:0], Reg_RL[3:0]};
						else
							Address_OutR = {4'b0010, Reg_RH[3:0], Reg_RL[3:0]};

						if(Reg_RH == 0) begin
						  	L_Boundary = 1'b0;
							Reg_RH = 0;
							Flag = ~Flag;
						end
						else begin
							L_Boundary = 1'b1;
							Reg_RH = Reg_RH - 1;
							Flag = ~Flag;
						end
						
//						L_Boundary = 1'b1;
//						Flag = ~Flag;
					end
					else begin
						if(LowPath)
							Address_OutR = {4'b0001, Reg_RH[3:0], Reg_RL[3:0]};
						else
							Address_OutR = {4'b0011, Reg_RH[3:0], Reg_RL[3:0]};

						L_Boundary = 1'b1;
						Flag = ~Flag;
					end
				end
				else if(R_Boundary) begin
					if(Flag) begin
						if(LowPath)	//Low Path
							Address_OutR = {4'b0000, Reg_RH[3:0], Reg_RL[3:0]};
						else
							Address_OutR = {4'b0010, Reg_RH[3:0], Reg_RL[3:0]};

						Flag = ~Flag;
						Reg_RH = Reg_RH - 1;
					end
					else begin
						if(LowPath)	//Low Path
							Address_OutR = {4'b0001, Reg_RH[3:0], Reg_RL[3:0]};
						else
							Address_OutR = {4'b0011, Reg_RH[3:0], Reg_RL[3:0]};

						if(Reg_RH == 6'h0D) begin
							Reg_RH = 2;
							if(!LowPath)
								Reg_RL = Reg_RL + 1;
							LowPath = ~LowPath;
							L_Boundary = 1'b1;
							R_Boundary = 1'b0;
							Flag = ~Flag;
						end
						else
							Flag = ~Flag;

//						Reg_RH = Reg_RH + 2;

//						Flag = ~Flag;
						


						
//						if({Reg_RH[4:0], Reg_RL[4:0]} == 'h7FF)
//							LowPath = 1'b0;
//						L_Boundary = 1'b1;
//						R_Boundary = 1'b0;
					end

				end
				else begin
					if(Flag) begin
						if(LowPath)	//Low Path
							Address_OutR = {4'b0000, Reg_RH[3:0], Reg_RL[3:0]};
						else
							Address_OutR = {4'b0010, Reg_RH[3:0], Reg_RL[3:0]};

//						Address_OutR = {1'b0, Reg_RH[Address_Width/2-2:0], Reg_RL[Address_Width/2 - 1:0]};
						Flag = ~Flag;
					end
					else begin
						if(LowPath)	//Low Path
							Address_OutR = {4'b0001, Reg_RH[3:0], Reg_RL[3:0]};
						else
							Address_OutR = {4'b0011, Reg_RH[3:0], Reg_RL[3:0]};
							
//						Address_OutR = {1'b1, Reg_RH[Address_Width/2-2:0], Reg_RL[Address_Width/2 - 1:0]};
						if(Reg_RH[3:0] == 4'hF) //16
							R_Boundary = 1'b1;
						else begin
							Reg_RH = Reg_RH + 1;
							R_Boundary = 1'b0;
						end
						Flag = ~Flag;

					end
					
					
				end

				//Write Memory Address
				if(Address_OutW == 'h3FF) begin
					Address_OutW = 12'h3FF;
					Change_Mode = 1'b1;
					Write_En = 0;
					End_B = 1'b1;
					Clr = 1'b0;
					DWT_Reset = 1'b0;
				end
				else begin
					if(Delay == 15) begin	//12
						if(HiPath)	//save LoPath
							Address_OutW = {3'b000, Reg_WH[4:0], Reg_WL[3:0]};
						else
							Address_OutW = {3'b001, Reg_WH[4:0], Reg_WL[3:0]};

						if(Reg_WH[4:0] == 5'h1F) begin	//31
							if(!HiPath)
								Reg_WL = Reg_WL + 1;
								HiPath = ~HiPath;
								Reg_WH = Reg_WH + 1;
								Delay  = 7;	//4
								Write_En = 1;
						end
						else begin
							Delay = 15;
							Reg_WH = Reg_WH + 1;
							Write_En = 1;
						end
					end
					else begin
//						Address_OutW = {Reg_WH, Reg_WL};
						Delay = Delay + 1;
						Write_En = 0;
					end
				end
			end
		end	//End 2-D 2Level


		default: begin	//SEnd
			Level_Choose = SEnd;
			Change_Mode = 1'b0;
			Write_En = 0;
			Choose_RW = 1'b0;
			Done = 1'b1;
		end
	endcase
end

endmodule

⌨️ 快捷键说明

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