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

📄 i2s_lcm_config.v

📁 开发板原理图 需要做开发板的可以参考参考
💻 V
字号:
module I2S_LCM_Config (	//	Host Side
SW_D,
SW_R,

						iCLK,
						iRST_N,
						//	I2C Side
						I2S_SCLK,
						I2S_SDAT,
						I2S_SCEN,
						I2S_BUSY_n
						);
//	Host Side
output I2S_BUSY_n;
input [7:0]SW_D;
input [5:0]SW_R;

input			iCLK;
input			iRST_N;
//	I2C Side
output		I2S_SCLK;
inout		I2S_SDAT;
output		I2S_SCEN;
//	Internal Registers/Wires
reg			mI2S_STR;
wire		mI2S_RDY;
wire		mI2S_ACK;
wire		mI2S_CLK;
reg	[15:0]	mI2S_DATA;
reg	[15:0]	LUT_DATA;
reg	[5:0]	LUT_INDEX;
reg	[3:0]	mSetup_ST;
reg  I2S_BUSY_n;
//	LUT Data Number
parameter	LUT_SIZE	=	19;

I2S_Controller	u0	(	//	Host Side
						.iCLK(iCLK),
						.iRST(iRST_N),
						.iDATA(mI2S_DATA),
						.iSTR(mI2S_STR),
						.oACK(mI2S_ACK),
						.oRDY(mI2S_RDY),
						.oCLK(mI2S_CLK),
						//	Serial Side
						.I2S_EN(I2S_SCEN),
						.I2S_DATA(I2S_SDAT),
						.I2S_CLK(I2S_SCLK)	);

//////////////////////	Config Control	////////////////////////////
always@(posedge mI2S_CLK or negedge iRST_N)
begin
	if(!iRST_N)
	begin
		LUT_INDEX	<=	0;
		mSetup_ST	<=	0;
		mI2S_STR	<=	0;
		I2S_BUSY_n  <=  0;
	end
	else
	begin
		if(LUT_INDEX<LUT_SIZE)
		begin
		I2S_BUSY_n  <=  0;
			case(mSetup_ST)
			0:	begin
					mSetup_ST	<=	1;
				end
			1:	begin
					mSetup_ST	<=	2;
				end

			2:	begin
					mI2S_DATA	<=	LUT_DATA;
					mI2S_STR	<=	1;
					mSetup_ST	<=	3;
				end
			3:	begin
					if(mI2S_RDY)
					begin
						if(mI2S_ACK)
						mSetup_ST	<=	4;
						else
						mSetup_ST	<=	0;							
						mI2S_STR	<=	0;
					end
				end
			4:	begin
					LUT_INDEX	<=	LUT_INDEX+1;
					mSetup_ST	<=	0;
				end
			endcase
		end
		else 		I2S_BUSY_n  <=  1;
	end
end
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////



/*
// r = 1.2

128 
229 
321 
408 
492 
572 
651 
728 
803 
876 
949 
1020 


*/
/*

r = 0.9
 0 
 45 
 108 
 180 
 258 
 341 
 428 
 519 
 613 
 711 
 811 
 913 
 1019 
*/
/*
natu
 99 
 195 
 284 
 366 
 440 
 510 
 580 
 654 
 735 
 823 
 919 
 1019 
*/
// 

wire [9:0]g0 =106 ;    
wire [9:0]g1 =200 ; 
wire [9:0]g2 =289 ;
wire [9:0]g3 =375 ;
wire [9:0]g4 =460 ;
wire [9:0]g5 =543 ;
wire [9:0]g6 =625 ;
wire [9:0]g7 =705 ;
wire [9:0]g8 =785 ;
wire [9:0]g9 =864 ;
wire [9:0]g10=942 ;
wire [9:0]g11=1020 ;


/////////////////////	Config Data LUT	  //////////////////////////	
always
begin
	case(LUT_INDEX)

	0		:	LUT_DATA	<=	{6'h11,2'b01,g0[9:8],g1[9:8],g2[9:8],g3[9:8]};
	1		:	LUT_DATA	<=	{6'h12,2'b01,g4[9:8],g5[9:8],g6[9:8],g7[9:8]};
	2		:	LUT_DATA	<=	{6'h13,2'b01,g8[9:8],g9[9:8],g10[9:8],g11[9:8]};
	3		:	LUT_DATA	<=	{6'h14,2'b01,g0[7:0]};
	4		:	LUT_DATA	<=	{6'h15,2'b01,g1[7:0]};
	5		:	LUT_DATA	<=	{6'h16,2'b01,g2[7:0]};
	6		:	LUT_DATA	<=	{6'h17,2'b01,g3[7:0]};
	7		:	LUT_DATA	<=	{6'h18,2'b01,g4[7:0]};
	8		:	LUT_DATA	<=	{6'h19,2'b01,g5[7:0]};
	9		:	LUT_DATA	<=	{6'h1a,2'b01,g6[7:0]};
	10		:	LUT_DATA	<=	{6'h1b,2'b01,g7[7:0]};
	11		:	LUT_DATA	<=	{6'h1c,2'b01,g8[7:0]};
	12		:	LUT_DATA	<=	{6'h1d,2'b01,g9[7:0]};
	13		:	LUT_DATA	<=	{6'h1e,2'b01,g10[7:0]};
	14		:	LUT_DATA	<=	{6'h1f,2'b01,g11[7:0]};
	15		:	LUT_DATA	<=	{6'h20,2'b01,4'hf,4'h0};
	16		:	LUT_DATA	<=	{6'h21,2'b01,4'hf,4'h0};
	
    17		:	LUT_DATA	<=	{6'h03, 2'b01, 8'hff};
	18		:	LUT_DATA	<=	{6'h02, 2'b01, 8'h07};
	
	default	:	LUT_DATA	<=	16'h0000;
	endcase
end
////////////////////////////////////////////////////////////////////
endmodule

⌨️ 快捷键说明

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