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

📄 de2_lcm_test.v

📁 基於DE2系統的LCM verilog code,在LCM右下方顯示數字,每按一次按鍵數字會加1,顏色也會改變
💻 V
📖 第 1 页 / 共 2 页
字号:
assign	GPIO_0[28]	=	LCM_SCLK;
assign	GPIO_0[29]	=	LCM_DCLK;
assign	GPIO_0[30]	=	LCM_GRST;
assign	GPIO_0[31]	=	LCM_SHDB;
assign	GPIO_0[33]	=	LCM_SCEN;
assign	GPIO_0[34]	=	LCM_SDAT;
assign	GPIO_0[35]	=	LCM_HSYNC;

assign	LCM_GRST	=	KEY[0];
assign	TD_RESET	=	KEY[0];
assign	LCM_DCLK	=	~CLK_25;
assign	LCM_SHDB	=	1'b1;

wire			iCLK;
wire			iRST_N;
reg		[10:0]	H_Cont;
reg		[10:0]	V_Cont;
reg		[7:0]	Tmp_DATA;
reg				oVGA_H_SYNC;
reg				oVGA_V_SYNC;
reg				CLK_25;

reg  [15:0]number[15:0][15:0];
reg  [3:0] color = 0;

always
begin
	number[0][0]	=16'b0111111111111110;
	number[0][1]	=16'b0111111111111110;
	number[0][2]	=16'b0110000000000110;
	number[0][3]	=16'b0110000000000110;
	number[0][4]	=16'b0110000000000110;
	number[0][5]	=16'b0110000000000110;
	number[0][6]	=16'b0110000000000110;
	number[0][7]	=16'b0110000000000110;
	number[0][8]	=16'b0110000000000110;
	number[0][9]	=16'b0110000000000110;
	number[0][10]	=16'b0110000000000110;
	number[0][11]	=16'b0110000000000110;
	number[0][12]	=16'b0110000000000110;
	number[0][13]	=16'b0110000000000110;
	number[0][14]	=16'b0111111111111110;
	number[0][15]	=16'b0111111111111110;
	
	number[1][0]	=16'b0000000000000110;
	number[1][1]	=16'b0000000000000110;
	number[1][2]	=16'b0000000000000110;
	number[1][3]	=16'b0000000000000110;
	number[1][4]	=16'b0000000000000110;
	number[1][5]	=16'b0000000000000110;
	number[1][6]	=16'b0000000000000110;
	number[1][7]	=16'b0000000000000110;
	number[1][8]	=16'b0000000000000110;
	number[1][9]	=16'b0000000000000110;
	number[1][10]	=16'b0000000000000110;
	number[1][11]	=16'b0000000000000110;
	number[1][12]	=16'b0000000000000110;
	number[1][13]	=16'b0000000000000110;
	number[1][14]	=16'b0000000000000110;
	number[1][15]	=16'b0000000000000110;
	
	number[2][0]	=16'b0111111111111110;
	number[2][1]	=16'b0111111111111110;
	number[2][2]	=16'b0000000000000110;
	number[2][3]	=16'b0000000000000110;
	number[2][4]	=16'b0000000000000110;
	number[2][5]	=16'b0000000000000110;
	number[2][6]	=16'b0000000000000110;
	number[2][7]	=16'b0111111111111110;
	number[2][8]	=16'b0111111111111110;
	number[2][9]	=16'b0110000000000000;
	number[2][10]	=16'b0110000000000000;
	number[2][11]	=16'b0110000000000000;
	number[2][12]	=16'b0110000000000000;
	number[2][13]	=16'b0110000000000000;
	number[2][14]	=16'b0111111111111110;
	number[2][15]	=16'b0111111111111110;
	
	number[3][0]	=16'b0111111111111110;
	number[3][1]	=16'b0111111111111110;
	number[3][2]	=16'b0000000000000110;
	number[3][3]	=16'b0000000000000110;
	number[3][4]	=16'b0000000000000110;
	number[3][5]	=16'b0000000000000110;
	number[3][6]	=16'b0000000000000110;
	number[3][7]	=16'b0111111111111110;
	number[3][8]	=16'b0111111111111110;
	number[3][9]	=16'b0000000000000110;
	number[3][10]	=16'b0000000000000110;
	number[3][11]	=16'b0000000000000110;
	number[3][12]	=16'b0000000000000110;
	number[3][13]	=16'b0000000000000110;
	number[3][14]	=16'b0111111111111110;
	number[3][15]	=16'b0111111111111110;
	
	number[4][0]	=16'b0110000000000110;
	number[4][1]	=16'b0110000000000110;
	number[4][2]	=16'b0110000000000110;
	number[4][3]	=16'b0110000000000110;
	number[4][4]	=16'b0110000000000110;
	number[4][5]	=16'b0110000000000110;
	number[4][6]	=16'b0110000000000110;
	number[4][7]	=16'b0111111111111110;
	number[4][8]	=16'b0111111111111110;
	number[4][9]	=16'b0000000000000110;
	number[4][10]	=16'b0000000000000110;
	number[4][11]	=16'b0000000000000110;
	number[4][12]	=16'b0000000000000110;
	number[4][13]	=16'b0000000000000110;
	number[4][14]	=16'b0000000000000110;
	number[4][15]	=16'b0000000000000110;
	
	number[5][0]	=16'b0111111111111110;
	number[5][1]	=16'b0111111111111110;
	number[5][2]	=16'b0110000000000000;
	number[5][3]	=16'b0110000000000000;
	number[5][4]	=16'b0110000000000000;
	number[5][5]	=16'b0110000000000000;
	number[5][6]	=16'b0110000000000000;
	number[5][7]	=16'b0111111111111110;
	number[5][8]	=16'b0111111111111110;
	number[5][9]	=16'b0000000000000110;
	number[5][10]	=16'b0000000000000110;
	number[5][11]	=16'b0000000000000110;
	number[5][12]	=16'b0000000000000110;
	number[5][13]	=16'b0000000000000110;
	number[5][14]	=16'b0111111111111110;
	number[5][15]	=16'b0111111111111110;
	
	number[6][0]	=16'b0111111111111110;
	number[6][1]	=16'b0111111111111110;
	number[6][2]	=16'b0110000000000000;
	number[6][3]	=16'b0110000000000000;
	number[6][4]	=16'b0110000000000000;
	number[6][5]	=16'b0110000000000000;
	number[6][6]	=16'b0110000000000000;
	number[6][7]	=16'b0111111111111110;
	number[6][8]	=16'b0111111111111110;
	number[6][9]	=16'b0110000000000110;
	number[6][10]	=16'b0110000000000110;
	number[6][11]	=16'b0110000000000110;
	number[6][12]	=16'b0110000000000110;
	number[6][13]	=16'b0110000000000110;
	number[6][14]	=16'b0111111111111110;
	number[6][15]	=16'b0111111111111110;
	
	number[7][0]	=16'b0111111111111110;
	number[7][1]	=16'b0111111111111110;
	number[7][2]	=16'b0110000000000110;
	number[7][3]	=16'b0110000000000110;
	number[7][4]	=16'b0000000000000110;
	number[7][5]	=16'b0000000000000110;
	number[7][6]	=16'b0000000000000110;
	number[7][7]	=16'b0000000000000110;
	number[7][8]	=16'b0000000000000110;
	number[7][9]	=16'b0000000000000110;
	number[7][10]	=16'b0000000000000110;
	number[7][11]	=16'b0000000000000110;
	number[7][12]	=16'b0000000000000110;
	number[7][13]	=16'b0000000000000110;
	number[7][14]	=16'b0000000000000110;
	number[7][15]	=16'b0000000000000110;
	
	number[8][0]	=16'b0111111111111110;
	number[8][1]	=16'b0111111111111110;
	number[8][2]	=16'b0110000000000110;
	number[8][3]	=16'b0110000000000110;
	number[8][4]	=16'b0110000000000110;
	number[8][5]	=16'b0110000000000110;
	number[8][6]	=16'b0110000000000110;
	number[8][7]	=16'b0111111111111110;
	number[8][8]	=16'b0111111111111110;
	number[8][9]	=16'b0110000000000110;
	number[8][10]	=16'b0110000000000110;
	number[8][11]	=16'b0110000000000110;
	number[8][12]	=16'b0110000000000110;
	number[8][13]	=16'b0110000000000110;
	number[8][14]	=16'b0111111111111110;
	number[8][15]	=16'b0111111111111110;
	
	number[9][0]	=16'b0111111111111110;
	number[9][1]	=16'b0111111111111110;
	number[9][2]	=16'b0110000000000110;
	number[9][3]	=16'b0110000000000110;
	number[9][4]	=16'b0110000000000110;
	number[9][5]	=16'b0110000000000110;
	number[9][6]	=16'b0110000000000110;
	number[9][7]	=16'b0111111111111110;
	number[9][8]	=16'b0111111111111110;
	number[9][9]	=16'b0000000000000110;
	number[9][10]	=16'b0000000000000110;
	number[9][11]	=16'b0000000000000110;
	number[9][12]	=16'b0000000000000110;
	number[9][13]	=16'b0000000000000110;
	number[9][14]	=16'b0000000000000110;
	number[9][15]	=16'b0000000000000110;
	
end

wire	[1:0]	mSEL;

assign	iCLK		=	CLK_25;
assign	iRST_N		=	KEY[0];
assign	LCM_VSYNC	=	oVGA_V_SYNC;
assign	LCM_HSYNC	=	oVGA_H_SYNC;
//assign	LCM_DATA	=	(MOD_3==mSEL)	?	Tmp_DATA	:	8'h00	;
/*assign	LCM_DATA	=		(SW[1:0]==2'b00)	?	Tmp_DATA	:
							(SW[1:0]==2'b01)	?	((MOD_3==mSEL)	?	Tmp_DATA	:	8'h00)	:
							(SW[1:0]==2'b10)	?	8'h7F		:
													8'hFF		;
*/																		
always@(posedge KEY[1])
begin
	color=(color>=9)? 4'b0 : color+1'b1;
end
assign	LCM_DATA	=	(((H_Cont>1000)&&(H_Cont<1048))&&((V_Cont>200)&&(V_Cont<216)))
                          ?(
                             (number[color][V_Cont-200][15-((H_Cont-1000)/3)] == 1'b1)
                             ?(
                                ((H_Cont%3)==(color%3)) ? Tmp_DATA : 8'h00
                               ) 
                              : 8'h00	
                             )
                           :8'h00;



//80X60								
/*assign	mSEL		=	(H_Cont%3==0)					?	2'b00	:
						(H_Cont%2==0)					?	2'b01	:
														2'b10	;	*/													
														/*
														by hannibal														
														mSEL = 2'b00 => blue
															 = 2'b01 => red
															 = 2'b10 => green															 														
														*/



 

														

//	Horizontal Parameter	( Pixel )
parameter	H_SYNC_CYC	=	1;
parameter	H_SYNC_BACK	=	151;
parameter	H_SYNC_ACT	=	960;
parameter	H_SYNC_FRONT=	59;
parameter	H_SYNC_TOTAL=	1171;
//	Virtical Parameter		( Line )
parameter	V_SYNC_CYC	=	1;
parameter	V_SYNC_BACK	=	13;
parameter	V_SYNC_ACT	=	240;
parameter	V_SYNC_FRONT=	8;
parameter	V_SYNC_TOTAL=	262;

LCM_PLL 	u0	(	.inclk0(CLOCK_50),.c0(CLK_25));

reg		[1:0]	MOD_3;

always@(posedge iCLK or negedge iRST_N)
begin
	if(!iRST_N)
	begin
		Tmp_DATA	<=	8'h00;
		MOD_3		<=	2'b00;	
	end
	else
	begin
		if(	H_Cont>H_SYNC_BACK && H_Cont<(H_SYNC_TOTAL-H_SYNC_FRONT) )
		begin
			if(MOD_3<2'b10)
			MOD_3	<=	MOD_3+1'b1;
			else
			MOD_3	<=	2'b00;
			Tmp_DATA<=	8'hff;//Tmp_DATA+1'b1;
		end
		else
		begin
			MOD_3	<=	2'b00;
			Tmp_DATA<=	8'h00;	
		end
	end
end

//	H_Sync Generator, Ref. 25.175 MHz Clock
always@(posedge iCLK or negedge iRST_N)
begin
	if(!iRST_N)
	begin
		H_Cont		<=	0;
		oVGA_H_SYNC	<=	0;
	end
	else
	begin
		//	H_Sync Counter
		if( H_Cont < H_SYNC_TOTAL )
		H_Cont	<=	H_Cont+1;
		else
		H_Cont	<=	0;
		//	H_Sync Generator
		if( H_Cont < H_SYNC_CYC )
		oVGA_H_SYNC	<=	0;
		else
		oVGA_H_SYNC	<=	1;
	end
end

//	V_Sync Generator, Ref. H_Sync
always@(posedge iCLK or negedge iRST_N)
begin
	if(!iRST_N)
	begin
		V_Cont		<=	0;
		oVGA_V_SYNC	<=	0;
	end
	else
	begin
		//	When H_Sync Re-start
		if(H_Cont==0)
		begin
			//	V_Sync Counter
			if( V_Cont < V_SYNC_TOTAL )
			V_Cont	<=	V_Cont+1;
			else
			V_Cont	<=	0;
			//	V_Sync Generator
			if(	V_Cont < V_SYNC_CYC )
			oVGA_V_SYNC	<=	0;
			else
			oVGA_V_SYNC	<=	1;
		end
	end
end

I2S_LCM_Config 	u4	(	//	Host Side
						.iCLK(CLOCK_50),
						.iRST_N(KEY[0]),
						//	I2C Side
						.I2S_SCLK(LCM_SCLK),
						.I2S_SDAT(LCM_SDAT),
						.I2S_SCEN(LCM_SCEN)	);
endmodule

⌨️ 快捷键说明

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