--作者(zhě):肖肖肖
本(běn)文(wén)为(wèi)明(míng)德揚原創及(jí)录(lù)用(yòng)文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!
1.1 總(zǒng)體(tǐ)設計(jì)
1.1.1 概述
液晶顯示器是(shì)一(yī)種(zhǒng)通(tòng)过(guò)液晶和(hé)色(sè)彩过(guò)濾器过(guò)濾光(guāng)源,在(zài)平面(miàn)面(miàn)板上(shàng)産生(shēng)图(tú)像的(de)數字(zì)顯示器。LCD 的(de)構造是(shì)在(zài)两(liǎng)片(piàn)平行的(de)玻璃基板當中(zhōng)放(fàng)置液晶盒,下(xià)基板玻璃上(shàng)設置薄膜晶體(tǐ)管(guǎn),.上(shàng)基板玻璃上(shàng)設置彩色(sè)濾光(guāng)片(piàn),通(tòng)过(guò)薄膜晶體(tǐ)管(guǎn)上(shàng)的(de)信(xìn)号(hào)與(yǔ)電(diàn)壓改變(biàn)来(lái)控制液晶分(fēn)子的(de)轉(zhuǎn)動(dòng)方(fāng)向(xiàng),從而(ér)达(dá)到(dào)控制每个(gè)像素點(diǎn)偏振光(guāng)出(chū)射與(yǔ)否而(ér)达(dá)到(dào)顯示目的(de)。與(yǔ)傳統的(de)陰极(jí)射線(xiàn)管(guǎn)相比,LCD具有(yǒu)占用(yòng)空間(jiān)小,低功耗,低輻射,无閃爍,降低視覺疲勞等优點(diǎn)。現(xiàn)在(zài)LCD已漸替代(dài)CRT成(chéng)为(wèi)主(zhǔ)流,價格也(yě)已經(jīng)下(xià)降了(le)很多(duō),并已充分(fēn)的(de)普及(jí)。
1.1.2 設計(jì)目标(biāo)
在(zài)7寸(cùn)LCD顯示屏上(shàng)实現(xiàn)图(tú)片(piàn)的(de)居中(zhōng)顯示。
1.1.3 系(xì)統結構框图(tú)
系(xì)統結構框图(tú)如(rú)下(xià)所(suǒ)示:
1.1.4 模块(kuài)功能(néng)
Ø PLL模块(kuài)实現(xiàn)功能(néng)
1. 将輸入(rù)的(de)50MHz时(shí)鐘(zhōng)分(fēn)頻輸出(chū)40MHz时(shí)鐘(zhōng)。
Ø ROM模块(kuài)实現(xiàn)功能(néng)
2. 存儲图(tú)像數據(jù)。
Ø LCD驅動(dòng)模块(kuài)实現(xiàn)功能(néng)
1、 産生(shēng)驅動(dòng)LCD屏顯示的(de)时(shí)序
2、 读(dú)取(qǔ)ROM里(lǐ)存儲的(de)數據(jù)并輸出(chū)顯示
1.1.5 頂层信(xìn)号(hào)
1.1.6 參考代(dài)碼
1. module top_mdyLcdPic( 2. clk , 3. rst_n , 4. hys , 5. vys , 6. lcd_de , 7. lcd_rgb , 8. lcd_dclk 9. ); 10. 11. parameter PICTURE_W = 24 ; 12. 13. input clk ; 14. input rst_n ; 15. output hys ; 16. output vys ; 17. output lcd_de ; 18. output [PICTURE_W-1:0] lcd_rgb ; 19. output lcd_dclk ; 20. 21. 22. wire clk_0 ; 23. 24. wire hys ; 25. wire vys ; 26. wire lcd_de ; 27. wire [PICTURE_W-1:0] lcd_rgb ; 28. wire lcd_dclk ; 29. 30. 31. //40MHz 32. pll_40m u_pll_40m( 33. .areset (~rst_n ), 34. .inclk0 (clk ), 35. .c0 (clk_0 ) 36. ); 37. 38. 39. lcd_driver u2( 40. .clk (clk_0 ),//40MHz 41. .rst_n (rst_n ), 42. 43. .hys (hys ), 44. .vys (vys ), 45. .lcd_de (lcd_de ), 46. .lcd_rgb (lcd_rgb ), 47. .lcd_dclk (lcd_dclk ) 48. ); 49. 50. endmodule
1.2 PLL模块(kuài)設計(jì)
1.2.1 接口(kǒu)信(xìn)号(hào)
下(xià)面(miàn)为(wèi)使用(yòng)矩阵(zhèn)鍵盤时(shí)的(de)接口(kǒu)信(xìn)号(hào):
1.2.2 設計(jì)思(sī)路(lù)
本(běn)模块(kuài)主(zhǔ)要(yào)用(yòng)于(yú)産生(shēng)LCD驅動(dòng)时(shí)序所(suǒ)需要(yào)的(de)时(shí)鐘(zhōng),關(guān)于(yú)PLL的(de)使用(yòng)詳细(xì)介紹請看(kàn)下(xià)方(fāng)鍊(liàn)接:
http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=322&fromuid=100105
1.3 ROM模块(kuài)設計(jì)
1.3.1 接口(kǒu)信(xìn)号(hào)
1.3.2 設計(jì)思(sī)路(lù)
本(běn)模块(kuài)主(zhǔ)要(yào)用(yòng)于(yú)存儲需要(yào)顯示的(de)图(tú)像數據(jù),關(guān)于(yú)ROM的(de)使用(yòng)詳细(xì)介紹請看(kàn)下(xià)方(fāng)數據(jù)手(shǒu)册:
1.4 LCD驅動(dòng)模块(kuài)設計(jì)
1.4.1 接口(kǒu)信(xìn)号(hào)
1.4.2 設計(jì)思(sī)路(lù)
産生(shēng)驅動(dòng)LCD顯示的(de)行场时(shí)序信(xìn)号(hào),其計(jì)數器架構如(rú)下(xià)图(tú)所(suǒ)示:
行計(jì)數器h_cnt:該計(jì)數器用(yòng)来(lái)計(jì)算行同(tóng)步信(xìn)号(hào)的(de)幀长。加一(yī)条(tiáo)件(jiàn)为(wèi)1,表(biǎo)示一(yī)直(zhí)在(zài)計(jì)數。結束(shù)条(tiáo)件(jiàn)为(wèi)數1056个(gè),也(yě)就(jiù)是(shì)一(yī)行有(yǒu)1056个(gè)像素。
场計(jì)數器v_cnt:該計(jì)數器用(yòng)来(lái)計(jì)算场同(tóng)步信(xìn)号(hào)的(de)幀长。加一(yī)条(tiáo)件(jiàn)为(wèi)end_h_cnt,即行計(jì)數器的(de)計(jì)數器的(de)結束(shù)条(tiáo)件(jiàn),表(biǎo)示每計(jì)數完一(yī)行像素就(jiù)加一(yī)。結束(shù)条(tiáo)件(jiàn)为(wèi)數525个(gè),也(yě)就(jiù)是(shì)一(yī)共(gòng)有(yǒu)525行像素。
1.4.3 參考代(dài)碼
1. module lcd_driver(
2. clk ,//40MHz
3. rst_n ,
4.
5. hys ,
6. vys ,
7. lcd_de ,
8. lcd_rgb ,
9. lcd_dclk
10. );
11.
12. input clk ;
13. input rst_n ;
14.
15. output hys ;
16. output vys ;
17. output lcd_de ;
18. output [23:0] lcd_rgb ;
19. output lcd_dclk ;
20.
21. reg hys ;
22. reg vys ;
23. reg lcd_de ;
24. reg [23:0] lcd_rgb ;
25. wire lcd_dclk ;
26.
27. //1056
28. parameter THPW = 20 ;
29. parameter THB = 46 ;
30. parameter THD = 800 ;
31. parameter THFP = 210 ;
32.
33. //525
34. parameter TVPW = 10 ;
35. parameter TVB = 23 ;
36. parameter TVD = 480 ;
37. parameter TVFP = 22 ;
38.
39. parameter HDE_CENTRE = THD/2 ;//400
40. parameter VDE_CENTRE = TVD/2 ;//240
41.
42. reg [ 10:0] h_cnt ;
43. wire add_h_cnt ;
44. wire end_h_cnt ;
45. reg [ 9:0] v_cnt ;
46. wire add_v_cnt ;
47. wire end_v_cnt ;
48.
49.
50. wire active_area ;
51. reg rom_area ;
52. reg [15:0] rom_addr ;
53. wire [7:0] rom_data ;
54.
55.
56. always @(posedge clk or negedge rst_n) begin
57. if (rst_n==0) begin
58. h_cnt <= 0;
59. end
60. else if(add_h_cnt) begin
61. if(end_h_cnt)
62. h_cnt <= 0;
63. else
64. h_cnt <= h_cnt+1 ;
65. end
66. end
67. assign add_h_cnt = 1;
68. assign end_h_cnt = add_h_cnt && h_cnt == (THB + THD + THFP)-1 ;
69.
70.
71.
72. always @(posedge clk or negedge rst_n) begin
73. if (rst_n==0) begin
74. v_cnt <= 0;
75. end
76. else if(add_v_cnt) begin
77. if(end_v_cnt)
78. v_cnt <= 0;
79. else
80. v_cnt <= v_cnt+1 ;
81. end
82. end
83. assign add_v_cnt = end_h_cnt;
84. assign end_v_cnt = add_v_cnt && v_cnt == (TVB + TVD + TVFP)-1 ;
85.
86. /*******************************************************/
87. //dclk
88. assign lcd_dclk = clk;
89.
90. //hsync
91. always @(posedge clk or negedge rst_n)begin
92. if(rst_n==1'b0)begin
93. hys <= 0;
94. end
95. else if(add_h_cnt && h_cnt==THPW-1)begin
96. hys <= 1;
97. end
98. else if(end_h_cnt)begin
99. hys <= 0;
100. end
101. end
102.
103.
104. //vsync
105. always @(posedge clk or negedge rst_n)begin
106. if(rst_n==1'b0)begin
107. vys <= 0;
108. end
109. else if(add_v_cnt && v_cnt==TVPW-1)begin
110. vys <= 1;
111. end
112. else if(end_v_cnt)begin
113. vys <= 0;
114. end
115. end
116.
117.
118. //lcd_de
119. always @(posedge clk or negedge rst_n)begin
120. if(rst_n==1'b0)begin
121. lcd_de <= 0;
122. end
123. else if(active_area)begin
124. lcd_de <= 1;
125. end
126. else begin
127. lcd_de <= 0;
128. end
129. end
130.
131.
132. /********************************************************************/
133.
134.
135.
136. assign active_area = h_cnt>=(THB-1) && h_cnt<(THB+THD-1) && v_cnt>=(TVB-1) && v_cnt<(TVB+TVD-1);
137.
138.
139. always @(*)begin
140. rom_area = h_cnt >=((HDE_CENTRE-60) + (THB-1)) && h_cnt < ((HDE_CENTRE+60) + (THB-1)) && v_cnt >= ((VDE_CENTRE-27)+(TVB-1)) && v_cnt < ((VDE_CENTRE+28) +(TVB-1));
141. end
142.
143.
144. always @(posedge clk or negedge rst_n)begin
145. if(rst_n==1'b0)begin
146. lcd_rgb <= 0;
147. end
148. else if(active_area)begin
149. if(rom_area)
150. lcd_rgb <= {rom_data[7:5],5'b11111,rom_data[4:2],5'b11111,rom_data[1:0],6'b111111};
151. else
152. lcd_rgb <= {24{1'b1}};
153. end
154. else begin
155. lcd_rgb <=0;
156. end
157. end
158.
159.
160. always @(*)begin
161. if(active_area && rom_area)begin
162. rom_addr = (h_cnt-((HDE_CENTRE-60)+(THB-1))) + 120*(v_cnt-((VDE_CENTRE-27)+(TVB-1)));
163. end
164. end
165.
166.
167.
168.
169. fpga_rom u_fpga_rom(
170. .address (rom_addr),
171. .clock (clk ),
172. .q (rom_data));
173.
174.
175. endmodule
1.5 效果(guǒ)和(hé)總(zǒng)結
以(yǐ)下(xià)为(wèi)工程上(shàng)板後(hòu)的(de)現(xiàn)象(xiàng)效果(guǒ)图(tú):
Ø mp801開(kāi)發(fà)板
Ø ms980試验(yàn)箱
感(gǎn)興趣的(de)朋友也(yě)可(kě)以(yǐ)訪問(wèn)明(míng)德揚論壇(http://www.fpgabbs.cn/)進(jìn)行FPGA相關(guān)工程設計(jì)学習,也(yě)可(kě)以(yǐ)看(kàn)一(yī)下(xià)我(wǒ)们(men)往期(qī)的(de)文(wén)章(zhāng):
源工程和(hé)設計(jì)教学視頻請到(dào)論壇下(xià)载学習:FPGA至(zhì)簡設計(jì)案(àn)例200例【分(fēn)享贴】
http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=1134&fromuid=9437
(出(chū)处: 明(míng)德揚論壇)
公司簡介
明(míng)德揚是(shì)一(yī)家(jiā)專注于(yú)FPGA領域的(de)專業性(xìng)公司,公司主(zhǔ)要(yào)業务包(bāo)括開(kāi)發(fà)板、教育培訓、項目承接、人(rén)才服(fú)务等多(duō)个(gè)方(fāng)向(xiàng)。
點(diǎn)撥開(kāi)發(fà)板——学習FPGA的(de)入(rù)門(mén)之選。
MP801開(kāi)發(fà)板——千(qiān)兆(zhào)网(wǎng)、ADDA、大容量(liàng)SDRAM等,学習和(hé)項目需求一(yī)步到(dào)位。
网(wǎng)絡培訓班——不(bù)管(guǎn)时(shí)間(jiān)和(hé)空間(jiān),明(míng)德揚随时(shí)在(zài)你身(shēn)邊(biān),助你快(kuài)速学習FPGA。
周末(mò)培訓班——明(míng)天(tiān)的(de)你会(huì)感(gǎn)激現(xiàn)在(zài)的(de)努力進(jìn)取(qǔ),升(shēng)職加薪明(míng)德揚来(lái)助你。
就(jiù)業培訓班——七(qī)大企業級項目实訓,獲得豐富的(de)項目經(jīng)验(yàn),高(gāo)薪就(jiù)業。
專題(tí)課程——高(gāo)手(shǒu)修煉課:提(tí)升(shēng)設計(jì)能(néng)力;实用(yòng)調試技巧課:提(tí)升(shēng)定(dìng)位和(hé)解(jiě)決問(wèn)題(tí)能(néng)力;FIFO架構設計(jì)課:助你快(kuài)速成(chéng)为(wèi)架構設計(jì)师(shī);时(shí)序約束(shù)、數字(zì)信(xìn)号(hào)处理、PCIE、綜合項目实踐課等你来(lái)選。
項目承接——承接企業FPGA研發(fà)項目。
人(rén)才服(fú)务——提(tí)供人(rén)才推薦、人(rén)才代(dài)培、人(rén)才派遣等服(fú)务。








