一. 分辨率:1080P 的意思就是一个 LCD 屏幕上的像素数量是 1920*1080 个,也就是这个屏幕一列 1080 个像素点,一共 1920 列

像素格式:一个 R、G、B 这三部分分别使 用 8bit 的数据,那么一个像素点就是 8bit*3=24bit,也就是说一个像素点 3 个字节,这种像素格式称为 RGB888。

红色对应的值就是 24’hFF0000,绿色对应的值就是 24’h00FF00,蓝色对应的 值为 24’h0000FF。通过调节 R、G、B 的比例可以产生其它的颜色,比如 24’hFFFF00 就是黄色,24’h000000就是黑色,24’hFFFFFF 就是白色。
屏幕接口:

扫描原理:
HSYNC 是水平同步信号,也叫做行同步信号,当产生此信号的话就表示开始显示新的一行了,所以此信号 都是在图 17.1.6 的最左边。VSYNC 信号是垂直同步信号,也叫做帧同步信号,当产生此信号的话就表示开 始显示新的一帧图像
屏幕时序:

HSYNC:行同步信号,当此信号有效的时候就表示开始显示新的一行数据,查阅所使用的 LCD 数据手 册可以知道此信号是低电平有效还是高电平有效,图 17.1.7 为低电平有效。 HSPW:行同步信号宽度,也就是 HSYNC 信号持续时间。HSYNC 信号不是一个脉冲,而是需要持续 一段时间才是有效的,单位为 CLK。 HBP:行显示后沿(或后肩),单位是 CLK。 HOZVAL:行有效显示区域,即显示一行数据所需的时间,假如屏幕分辨率为 1024*600,那么 HOZVAL就是 1024,单位为 CLK。 HFP:行显示前沿(或前肩),单位是 CLK。当 HSYNC 信号发出以后,需要等待 HSPW+HBP 个 CLK 时间才会接收到真正有效的像素数据。当显 示完一行数据以后需要等待 HFP 个 CLK 时间才能发出下一个 HSYNC 信号,所以显示一行所需要的时间就 是:HSPW + HBP + HOZVAL + HFP。

VSYNC:帧(场)同步信号,当此信号有效的时候就表示开始显示新的一帧数据,查阅所使用的 LCD数据手册可以知道此信号是低电平有效还是高电平有效,图 17.1.8 为低电平有效。 VSPW:帧同步信号宽度,也就是 VSYNC 信号持续时间,单位为 1 行的时间。 VBP:帧显示后沿(或后肩),单位为 1 行的时间。 LINE:帧有效显示区域,即显示一帧数据所需的时间,假如屏幕分辨率为 1024*600,那么 LINE 就是600 行的时间。 VFP:帧显示前沿(或前肩),单位为 1 行的时间。显示一帧所需要的时间就是:VSPW+VBP+LINE+VFP 个行时间,最终的计算公式: T = (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP)
像素时钟:
实验任务:本节的实验任务是使用正点原子 ZYNQ 开发板上的 RGB TFT-LCD 接口,驱动 RGB LCD 液晶屏(支 持目前推出的所有 RGB LCD 屏),并显示出彩条。
二 硬件设计
约束:set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk] set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n] set_property -dict {PACKAGE_PIN W18 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[0]}] set_property -dict {PACKAGE_PIN W19 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[1]}] set_property -dict {PACKAGE_PIN R16 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[2]}] set_property -dict {PACKAGE_PIN R17 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[3]}] set_property -dict {PACKAGE_PIN W20 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[4]}] set_property -dict {PACKAGE_PIN V20 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[5]}] set_property -dict {PACKAGE_PIN P18 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[6]}] set_property -dict {PACKAGE_PIN N17 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[7]}] set_property -dict {PACKAGE_PIN V17 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[8]}] set_property -dict {PACKAGE_PIN V18 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[9]}] set_property -dict {PACKAGE_PIN T17 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[10]}] set_property -dict {PACKAGE_PIN R18 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[11]}] set_property -dict {PACKAGE_PIN Y18 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[12]}] set_property -dict {PACKAGE_PIN Y19 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[13]}] set_property -dict {PACKAGE_PIN P15 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[14]}] set_property -dict {PACKAGE_PIN P16 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[15]}] set_property -dict {PACKAGE_PIN V16 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[16]}] set_property -dict {PACKAGE_PIN W16 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[17]}] set_property -dict {PACKAGE_PIN T14 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[18]}] set_property -dict {PACKAGE_PIN T15 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[19]}] set_property -dict {PACKAGE_PIN Y17 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[20]}] set_property -dict {PACKAGE_PIN Y16 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[21]}] set_property -dict {PACKAGE_PIN T16 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[22]}] set_property -dict {PACKAGE_PIN U17 IOSTANDARD LVCMOS33} [get_ports {lcd_rgb[23]}] set_property -dict {PACKAGE_PIN N18 IOSTANDARD LVCMOS33} [get_ports lcd_hs] set_property -dict {PACKAGE_PIN T20 IOSTANDARD LVCMOS33} [get_ports lcd_vs] set_property -dict {PACKAGE_PIN U20 IOSTANDARD LVCMOS33} [get_ports lcd_de] set_property -dict {PACKAGE_PIN M20 IOSTANDARD LVCMOS33} [get_ports lcd_bl] set_property -dict {PACKAGE_PIN P19 IOSTANDARD LVCMOS33} [get_ports lcd_clk] set_property -dict {PACKAGE_PIN L17 IOSTANDARD LVCMOS33} [get_ports lcd_rst]
三 程序设计

输入时序包含三个要素:像素时钟、同步信号、以及图像数据。读取 ID 模块用于获取 LCD 屏的 ID;由于不同分辨率的屏幕需要不同的驱 动时钟,因此时钟分频模块根据 LCD ID 来输出不同频率的像素时钟;LCD 显示模块负责产生液晶屏上显 示的数据,即彩条数据;LCD 驱动模块根据 LCD 屏的 ID,输出不同参数的时序,来驱动 LCD 屏,并将输 入的彩条数据显示到 LCD 屏上。
FPGA 部分包括五个模块,顶层模块(lcd_rgb_colorbar)、读取 ID 模块(rd_id)、 时钟分频模块(clk_div)、LCD 显示模块(lcd_display)以及 LCD 驱动模块(lcd_driver)。其中在顶层模 块中完成对其余模块的例化。
读取 ID 模块(rd_id)在上电时将 RGB 双向数据总线设置为输入,来读取 LCD 屏的 ID;时钟分频模块(clk_div)根据读取的 ID 来配置 LCD 的像素时钟;LCD 驱动模块(lcd_driver)在像素时钟的驱动下输 出数据使能信号用于数据同步,同时还输出像素点的纵横坐标,供 LCD 显示模块(lcd_display)调用,以 绘制彩条图案。
rd_id.v :将flag置1后,根据rgb的第8位判断是哪一款屏幕。
clk_div.v :将50m的系统时钟2分频25m和4分频12.5m时钟。25m(取反),12_5m(cnt为1取反,0保持不变)

always @(*) begin 组合逻辑给id分配clk (不后延),时序逻辑会往后沿一个周期
问题:不理解2分频得到25m时钟的原理。
6712



被折叠的 条评论
为什么被折叠?



