www.pudn.com > DE2_TV.rar > I2C_AV_Config.v


module I2C_AV_Config (	//	Host Side 
						iCLK, 
						iRST_N, 
						//	I2C Side 
						I2C_SCLK, 
						I2C_SDAT	); 
//	Host Side 
input		iCLK; 
input		iRST_N; 
//	I2C Side 
output		I2C_SCLK; 
inout		I2C_SDAT; 
//	Internal Registers/Wires 
reg	[15:0]	mI2C_CLK_DIV; 
reg	[23:0]	mI2C_DATA; 
reg			mI2C_CTRL_CLK; 
reg			mI2C_GO; 
wire		mI2C_END; 
wire		mI2C_ACK; 
reg	[15:0]	LUT_DATA; 
reg	[5:0]	LUT_INDEX; 
reg	[3:0]	mSetup_ST; 
 
//	Clock Setting 
parameter	CLK_Freq	=	50000000;	//	50	MHz 
parameter	I2C_Freq	=	20000;		//	20	KHz 
//	LUT Data Number 
parameter	LUT_SIZE	=	50; 
//	Audio Data Index 
parameter	SET_LIN_L	=	0; 
parameter	SET_LIN_R	=	1; 
parameter	SET_HEAD_L	=	2; 
parameter	SET_HEAD_R	=	3; 
parameter	A_PATH_CTRL	=	4; 
parameter	D_PATH_CTRL	=	5; 
parameter	POWER_ON	=	6; 
parameter	SET_FORMAT	=	7; 
parameter	SAMPLE_CTRL	=	8; 
parameter	SET_ACTIVE	=	9; 
//	Video Data Index 
parameter	SET_VIDEO	=	10; 
 
/////////////////////	I2C Control Clock	//////////////////////// 
always@(posedge iCLK or negedge iRST_N) 
begin 
	if(!iRST_N) 
	begin 
		mI2C_CTRL_CLK	<=	0; 
		mI2C_CLK_DIV	<=	0; 
	end 
	else 
	begin 
		if( mI2C_CLK_DIV	< (CLK_Freq/I2C_Freq) ) 
		mI2C_CLK_DIV	<=	mI2C_CLK_DIV+1; 
		else 
		begin 
			mI2C_CLK_DIV	<=	0; 
			mI2C_CTRL_CLK	<=	~mI2C_CTRL_CLK; 
		end 
	end 
end 
//////////////////////////////////////////////////////////////////// 
I2C_Controller 	u0	(	.CLOCK(mI2C_CTRL_CLK),		//	Controller Work Clock 
						.I2C_SCLK(I2C_SCLK),		//	I2C CLOCK 
 	 	 	 	 	 	.I2C_SDAT(I2C_SDAT),		//	I2C DATA 
						.I2C_DATA(mI2C_DATA),		//	DATA:[SLAVE_ADDR,SUB_ADDR,DATA] 
						.GO(mI2C_GO),      			//	GO transfor 
						.END(mI2C_END),				//	END transfor  
						.ACK(mI2C_ACK),				//	ACK 
						.RESET(iRST_N)	); 
//////////////////////////////////////////////////////////////////// 
//////////////////////	Config Control	//////////////////////////// 
always@(posedge mI2C_CTRL_CLK or negedge iRST_N) 
begin 
	if(!iRST_N) 
	begin 
		LUT_INDEX	<=	0; 
		mSetup_ST	<=	0; 
		mI2C_GO		<=	0; 
	end 
	else 
	begin 
		if(LUT_INDEX