📄 de2_lcm_test.v
字号:
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 + -