zhezhe1988

1、首先介绍一下手中的资源配置

(声明:本人只是黑金开发板的用户,并非黑金技术支持

  FPGA芯片型号:Cyclone IV,EP4CE15

  液晶参数:SSD1289,320*240,RGB(565)

  开发板from:黑金淘宝官网

  TFT液晶from:黑金淘宝官网

2、向上一张贴图:

  

3、贴上自己的源码:

  1)显示部分代码:

  1 module TFT(
  2     //system
  3     CLK,
  4     RSTn,
  5     //tft signal
  6     LCD_CS,
  7     LCD_RS,
  8     LCD_RD,
  9     LCD_WR,
 10     LCD_RST,
 11     LCD_DATA
 12 );
 13     
 14     input             CLK;
 15     input             RSTn;
 16     //TIF signal wire
 17     output            LCD_CS;
 18     output            LCD_RS;
 19     output             LCD_RD;
 20     output             LCD_WR;
 21     output            LCD_RST;
 22     output [15:0]    LCD_DATA;
 23     
 24     reg                LCD_CS;
 25     reg                LCD_RS;
 26     reg                LCD_WR;
 27     reg        [15:0]    LCD_DATA;
 28     
 29     assign LCD_RD     = 1\'b1;
 30     assign LCD_RST     = 1\'b1;
 31         
 32     reg [3:0]        state_lcd_write;
 33     reg [7:0]        addr_command;
 34     reg    [16:0]        LCD_DATA_TEMP;
 35     reg [31:0]        count_dot;
 36     reg [15:0]        count_delay;
 37     always @(posedge CLK or negedge RSTn)
 38     if(!RSTn)
 39         begin
 40             state_lcd_write <= 4\'d0;
 41             LCD_CS <= 1\'b1;
 42             LCD_WR <= 1\'b1;
 43             LCD_RS <= 1\'b0;
 44             LCD_DATA <= 16\'d0;
 45             addr_command <= 8\'d0;
 46             LCD_DATA_TEMP <= 17\'d0;
 47             count_dot <= 16\'d0;
 48             count_delay <= 16\'d0;
 49         end
 50     else
 51         begin
 52         case(state_lcd_write)
 53             4\'d0:
 54                 if(count_delay == 16\'d2499)//init delay
 55                     begin
 56                         state_lcd_write <= 4\'d1;
 57                         count_delay <= 16\'d0;
 58                     end
 59                 else
 60                     begin
 61                     state_lcd_write <= 4\'d0;
 62                     count_delay <= count_delay + 1\'b1;
 63                     end
 64             4\'d1:
 65                 if(count_delay == 16\'d999)//dot delay
 66                     begin
 67                         state_lcd_write <= 4\'d2;
 68                         LCD_CS        <= 1\'b1;
 69                         LCD_WR        <= 1\'b1;
 70                         LCD_DATA_TEMP<=display_command(addr_command);
 71                         count_delay <= 16\'d0;
 72                     end
 73                 else
 74                     begin
 75                     state_lcd_write <= 4\'d1;
 76                     count_delay <= count_delay + 1\'b1;
 77                     end
 78             4\'d2:
 79                 if(LCD_DATA_TEMP[16])//data
 80                     begin
 81                         state_lcd_write <= state_lcd_write + 1\'b1;
 82                         LCD_CS    <= 1\'b0;
 83                         LCD_RS    <= 1\'b0;
 84                         LCD_WR    <= 1\'b0;
 85                         LCD_DATA<= LCD_DATA_TEMP[15:0];
 86                     end
 87                 else    //command
 88                     begin
 89                         state_lcd_write <= state_lcd_write + 1\'b1;
 90                         LCD_CS    <= 1\'b0;
 91                         LCD_RS    <= 1\'b1;
 92                         LCD_WR    <= 1\'b0;
 93                         LCD_DATA<= LCD_DATA_TEMP[15:0];
 94                     end
 95             4\'d3:
 96                 state_lcd_write <= state_lcd_write + 1\'b1;
 97             4\'d4:
 98                 begin
 99                     state_lcd_write <= state_lcd_write + 1\'b1;
100                     LCD_CS    <= 1\'b1;
101                 end
102             4\'d5:
103                 begin 
104                     state_lcd_write <= state_lcd_write + 1\'b1;
105                     LCD_WR    <= 1\'b1;
106                 end
107             4\'d6:if(addr_command == 8\'d83)            //red
108                     begin
109                         count_dot <= count_dot + 1\'b1;
110                         state_lcd_write <= 4\'d1;
111                         if(count_dot == 32\'d76800 )
112                             begin 
113                                 addr_command <= 8\'d84;
114                                 count_dot <= 32\'d1;
115                             end
116                         else state_lcd_write <= 4\'d1;
117                     end
118                 else if(addr_command == 8\'d84)        //white
119                     begin
120                         count_dot <= count_dot + 1\'b1;
121                         state_lcd_write <= 4\'d1;
122                         if(count_dot ==32\'d76800 )
123                             begin 
124                                 addr_command <= 8\'d83;
125                                 count_dot <= 32\'d0;
126                             end
127                         else state_lcd_write <= 4\'d1;
128                     end
129                 else 
130                     begin
131                         addr_command <= addr_command + 1\'b1;
132                         state_lcd_write <= 4\'d0;
133                     end
134             4\'d7:state_lcd_write <= 4\'d7;
135                         
136                     
137         endcase
138         end
139     
140     function [16:0] display_command;
141     input [7:0]addr;
142         begin
143             case (addr)
144                 8\'d0:display_command = {1\'b1,16\'h0000};
145                 8\'d1:display_command = {1\'b0,16\'h0001};
146                 
147                 8\'d2:display_command = {1\'b1,16\'h0003};
148                 8\'d3:display_command = {1\'b0,16\'h6664};
149                 
150                 8\'d4:display_command = {1\'b1,16\'h000C};
151                 8\'d5:display_command = {1\'b0,16\'h0000};
152                                       
153                 8\'d6:display_command = {1\'b1,16\'h000D};
154                 8\'d7:display_command = {1\'b0,16\'h080C};
155                 
156                 8\'d8:display_command = {1\'b1,16\'h000E};
157                 8\'d9:display_command = {1\'b0,16\'h2B00};
158                                      
159                 8\'d10:display_command = {1\'b1,16\'h001E};
160                 8\'d11:display_command = {1\'b0,16\'h00B0};
161                 
162                 8\'d12:display_command = {1\'b1,16\'h0001};                 
163                 8\'d13:display_command = {1\'b0,16\'h2B3F};
164                 
165                 8\'d14:display_command = {1\'b1,16\'h0002};
166                 8\'d15:display_command = {1\'b0,16\'h0600};
167                 
168                 8\'d16:display_command = {1\'b1,16\'h0010};
169                 8\'d17:display_command = {1\'b0,16\'h0000};
170                 
171                 8\'d18:display_command = {1\'b1,16\'h0011};//set display control mode
172                 8\'d19:display_command = {1\'b0,16\'h6070};
173                 
174                 8\'d20:display_command = {1\'b1,16\'h0005};
175                 8\'d21:display_command = {1\'b0,16\'h0000};
176                 
177                 8\'d22:display_command = {1\'b1,16\'h0006};           
178                 8\'d23:display_command = {1\'b0,16\'h0000};
179                 
180                 8\'d24:display_command = {1\'b1,16\'h0016};
181                 8\'d25:display_command = {1\'b0,16\'hEF1C};
182                 
183                 8\'d26:display_command = {1\'b1,16\'h0017};
184                 8\'d27:display_command = {1\'b0,16\'h0003};
185                 8\'d28:display_command = {1\'b1,16\'h0007};
186                 8\'d29:display_command = {1\'b0,16\'h0233};
187                 8\'d30:display_command = {1\'b1,16\'h000B};
188                 8\'d31:display_command = {1\'b0,16\'h0000};
189                 8\'d32:display_command = {1\'b1,16\'h000F};
190                 8\'d33:display_command = {1\'b0,16\'h0000};
191                 8\'d34:display_command = {1\'b1,16\'h0041};
192                 8\'d35:display_command = {1\'b0,16\'h0000};
193                 8\'d36:display_command = {1\'b1,16\'h0042};
194                 8\'d37:display_command = {1\'b0,16\'h0000};
195                                       
196                 8\'d38:display_command = {1\'b1,16\'h0048};
197                 8\'d39:display_command = {1\'b0,16\'h0000};
198                                   
199                 8\'d40:display_command = {1\'b1,16\'h0049};
200                 8\'d41:display_command = {1\'b0,16\'h013F};
201                                   
202                 8\'d42:display_command = {1\'b1,16\'h004A};
203                 8\'d43:display_command = {1\'b0,16\'h0000};
204                 
205                 8\'d44:display_command = {1\'b1,16\'h004B};
206                 8\'d45:display_command = {1\'b0,16\'h0000};
207                 
208                 8\'d46:display_command = {1\'b1,16\'h0044};//horizontal ram address
209                 8\'d47:display_command = {1\'b0,16\'hEF00};
210                 
211                 8\'d48:display_command = {1\'b1,16\'h0045};//v
212                 8\'d49:display_command = {1\'b0,16\'h0000};
213                 
214                 8\'d50:display_command = {1\'b1,16\'h0046};
215                 8\'d51:display_command = {1\'b0,16\'h013f};
216                 
217                 8\'d52:display_command = {1\'b1,16\'h0030};
218                 8\'d53:display_command = {1\'b0,16\'h0707};
219                 
220                 8\'d54:display_command = {1\'b1,16\'h0031};
221                 8\'d55:display_command = {1\'b0,16\'h0204};
222                 
223                 8\'d56:display_command = {1\'b1,16\'h0032};
224                 8\'d57:display_command = {1\'b0,16\'h0204};
225                 
226                 8\'d58:display_command = {1\'b1,16\'h0033};
227                 8\'d59:display_command = {1\'b0,16\'h0502};
228                 
229                 8\'d60:display_command = {1\'b1,16\'h0034};
230                 8\'d61:display_command = {1\'b0,16\'h0507};
231                 
232                 8\'d62:display_command = {1\'b1,16\'h0035};
233                 8\'d63:display_command = {1\'b0,16\'h0204};
234                 
235                 8\'d64:display_command = {1\'b1,16\'h0036};
236                 8\'d65:display_command = {1\'b0,16\'h0204};
237                 
238                 8\'d66:display_command = {1\'b1,16\'h0037};
239                 8\'d67:display_command = {1\'b0,16\'h0502};  
240                 
241                 8\'d68:display_command = {1\'b1,16\'h003A};
242                 8\'d69:display_command = {1\'b0,16\'h0302};
243                 
244                 8\'d70:display_command = {1\'b1,16\'h003B};
245                 8\'d71:display_command = {1\'b0,16\'h0302};
246                 
247                 8\'d72:display_command = {1\'b1,16\'h0023};
248                 8\'d73:display_command = {1\'b0,16\'h0000}; 
249                 
250                 8\'d74:display_command = {1\'b1,16\'h0024};
251                 8\'d75:display_command = {1\'b0,16\'h0000}; 
252                 
253                 8\'d76:display_command = {1\'b1,16\'h0025};
254                 8\'d77:display_command = {1\'b0,16\'h8000};
255                 
256                 8\'d78:display_command = {1\'b1,16\'h004E};//光标位置X
257                 8\'d79:display_command = {1\'b0,16\'h00ef};
258                 
259                 8\'d80:display_command = {1\'b1,16\'h004F};//光标位置Y
260                 8\'d81:display_command = {1\'b0,16\'h013f};
261                 
262                 8\'d82:display_command = {1\'b1,16\'h0022};//开始RAM显示
263                 8\'d83:display_command = {1\'b0,16\'hf800};
264                 8\'d84:display_command = {1\'b0,16\'hffff};
265             
266                 default:display_command = {1\'b0,16\'h0000};
267             endcase
268         end
269     endfunction
270     
271     
272 endmodule 

  2)引脚配置TCL文件:

 1 set_location_assignment PIN_K15 -to LCD_CS
 2 set_location_assignment PIN_J16 -to LCD_RS
 3 set_location_assignment PIN_L16 -to LCD_RST
 4 set_location_assignment PIN_L14 -to LCD_RD
 5 set_location_assignment PIN_K16 -to LCD_WR
 6 
 7 set_location_assignment PIN_T14 -to LCD_DATA[15]
 8 set_location_assignment PIN_R13 -to LCD_DATA[14]
 9 set_location_assignment PIN_T15 -to LCD_DATA[13]
10 set_location_assignment PIN_R14 -to LCD_DATA[12]
11 set_location_assignment PIN_P14 -to LCD_DATA[11]
12 set_location_assignment PIN_L9    -to LCD_DATA[10]
13 set_location_assignment PIN_N14 -to LCD_DATA[9]
14 set_location_assignment PIN_N12 -to LCD_DATA[8]
15 set_location_assignment PIN_L13 -to LCD_DATA[7]
16 set_location_assignment PIN_M11 -to LCD_DATA[6]
17 set_location_assignment PIN_R16 -to    LCD_DATA[5]
18 set_location_assignment PIN_K12 -to    LCD_DATA[4]
19 set_location_assignment PIN_P16 -to    LCD_DATA[3]
20 set_location_assignment PIN_P15 -to    LCD_DATA[2]
21 set_location_assignment PIN_N16 -to    LCD_DATA[1]
22 set_location_assignment PIN_N15 -to    LCD_DATA[0]
23 #
24 
25 set_location_assignment PIN_A9 -to CLK
26 set_location_assignment PIN_M1 -to RSTn

谢谢指正!如需要交流,请留言!

分类:

技术点:

相关文章:

  • 2022-02-15
  • 2021-06-03
  • 2021-04-05
  • 2022-02-04
  • 2021-08-30
  • 2021-12-27
  • 2021-12-10
  • 2021-05-08
猜你喜欢
  • 2021-04-16
  • 2021-10-29
  • 2021-09-17
  • 2021-08-30
  • 2021-07-14
相关资源
相似解决方案