实验目的:先简单熟悉LCD灯的驱动和时序图的代码实现。设计功能是让LCD显示红绿蓝三种颜色,即三个彩带。本次实验比较容易实现,主要是对LCD驱动时序图的理解和时序参数的配置。
实验条件:1.LCD原理图2020-12-17-HXH_ESP32_E1。
2.所用开发板用户手册:GW1NSR-LV4CQN48PC7I6_V1.1开发板用户手册
3.LCD的数据手册:SC7283(确定LCD驱动设计的引脚和时序控制)
注释:第一项和第二项结合是为了,分配LCD和FPGA的引脚。一般用PDF软件Adobe Acrobat DC进行查找引脚编号,再粘贴复制找到引脚的位置,在用一个EXCEL表格记下引脚名字,引脚的位置或编号,引脚的电压类型(LVCMOS33或LVCMOS18等)
实验原理:
LCD的分辨率为480RGB * 272 ,理解为有480列和272行,分别对应行同步计数器h_cnt 和场同步计数器v_cnt ,LCD有三种模式,SYNC, SYNC-DE and DE mode,本次选用的是第二种,和VGA的驱动很相似,先是行同步信号HSYNC,然后是场同步信号VSYNC(行同步信号(一个像素点)可以理解为把一行的所有列扫描完则就是场同步信号,即场同步信号比行同步信号大。)再是有效区域DE。由于对于行同步信号或者场同步信号的时许控制来讲,都是由行同步信号或场同步信号周期,前沿,有效区域,后沿等四个部分参数组成
时许图如下:
下图红框的是LCD分辨率为480RGB * 272时,对应时序图中的配置参数。
三 代码设计:
本设计代码分成两部分,一是顶层模块,二是LCD驱动控制模块。
1.LCD顶层模块:
module lcd_top# ,parameter CMD_SPACE = 43 //每次使能信号间隔 //////// RGB /////////////////// ////////////// 延时复位 /////////// wireFPGA_RST_N; LCD_CTRL # ,.H_FRONT_PORCH(8) ,.V_FRONT_PORCH(8) //V_TOTAL = VFP +VBP +V_SYNC + V_ACTIVE,V_TOTAL = 929 ,.H_ACTIVE (COL_NUM) ,.lcd_A_vs(fv) ,.lcd_A_clk(pixclk) endmodule |
2.LCD驱动模块
module LCD_CTRL # ,parameter H_FRONT_PORCH = 8 ,parameter H_ACTIVE = 480 ,output lcd_A_vs always @ (posedge clk_9m or negedge rst_n) begin //————————VSYNC的时间计数 begin always @ (posedge clk_9m or negedge rst_n) begin //————————生成VSYNC信号 begin //————————生成HSYNC信号 begin //————————生成DE信号 begin //————————把控制信号和FIFO读取的数据进行同步 begin always @ (posedge clk_9m or negedge rst_n) begin //————————将同步后的RGB数据按照协议进行映射输出 begin always @ (posedge clk_9m or negedge rst_n) begin //显示彩条红绿蓝 assign lcd_A_rgb = lcd_rgb1_d;//16’hf0;// assign lcd_A_vs= vsync_r; endmodule |
四实验中的问题:
注意1:今天出现了FPGA设计软件布局布线时提示引脚错误,说这几个引脚已经有专用引脚了。其实,是同一个引脚复用,即LCD_PIXCLK,PIXDATA[16], PIXDATA[23],DE,LV引脚提示和MSPI引脚冲突,最后通过钩选引脚复用解决,如下所示:
注意2:实验现象即开发板只亮了一半,开发板分辨率:480*272,马上想到是行或列的参数错误。
parameter ROW_NUM = 480
,parameter COL_NUM = 272(H_ACTIVE),即列对应行同步信号。列应该是480=COL_NUM ,行是对应着场同步信号,即行是272=ROW_NUM
五下板实验效果