在学习FPGA的路上跌跌撞撞,希望能和读者一起进步,如果文章能帮到读者那笔者很高兴,同时把博客做笔记用。

写之前先安利一下杨超越,不喜欢看的可以直接去看正文。
笔者真的是深陷在她的优秀的灵魂中无法自拔了,看完她录的“送一百位女孩回家第二季”,深有感触,她真的是一个拥有坚强、自爱、乐观、不卑不亢、独立等等很多品质的女孩。我不清楚王菊和那些粉丝们或者那些女权主义所拥护的新时代的女权主义包含哪些东西,但我感觉像杨超越这样的人,更应该成为新时代女性的代表。一个二十岁的女孩在社会上奔波了几年能活得这么明白、这么通透,她的悟性真的很高。并且还能不被社会击垮,坚持做自己,真的很优秀。很感谢B站的UP主,让我认识了一个这么优秀的灵魂。

正文

参考《Verilog HDL那些事儿建模篇》而作。
VGA分为VGA硬件接口和VGA协议。VGA硬件接口没什么。下面先介绍VGA协议。
VGA 协议主要由 5 个输入信号组成:HSYNC Signal, VSYNC Signal, RGB Signal。 说简单一点,HSYNC Signal 是“列同步信号”, VSYNC Signal 是“行同步信号”, RGB Signal 是“红色、绿色、蓝色、颜色信号”。

FPGA学习笔记——VGA
VGA扫描一帧屏幕是由“m行扫描”和“n列填充”组成。以800 x 600 x 60HZ(一下涉及到的所有与分辨率有关的都以他为例)为例:
扫描次序如下:
扫描第 0 行 - 在第 0 行,列填充 0~799。
扫描第 1 行 - 在第 1 行,列填充 0 ~ 799。
扫描第 2 行 - 在第 2 行,列填充 0 ~ 799。
扫描第 m 行 - 在第 m 行,列填充 0 ~ 799。
扫描第 598 行 - 在第 598 行,列填充 0 ~ 799。
直到描第 599 行- 在第 599 行,列填充 0 ~ 799

宏观上,一帧屏幕的显示是由 600 行从上至下扫描,800 列从左至右填充,然而微观上,一行的行 扫描是由超过 800 个列填充完成。

FPGA学习笔记——VGA

FPGA学习笔记——VGA

HSYNC Signal用来控制“列填充”。
a(同步段):拉低128个列像素(这里的像素和图像的像素不太一样,下面会介绍)。
b(后廊段):拉高88个列像素。
c(**段):拉高800个列像素。
d(前廊段):拉高40个列像素。
所以一列总共有1056个列像素。

VSYNC Signal 是用来控制“行扫描”。
o(同步段):拉低4个行像素。
p(后廊段):拉高23个行像素。
q(**段):拉高600个行像素。
r(前廊段):拉高一个行像素。
所以一行总共有628个行像素。

一个行像素是以列像素为单位:一个行像素 = 1056个列像素。
一个列像素以时间为单位:一个列像素 = 25ns;一个行像素 = 1056 x 25ns = 2.64us。
FPGA学习笔记——VGA
上图表示 HSYNC Signal 只有在的 C 段 (红色部分)和 VSYNC Signal 的 q 段 (黄色部分)的**段,数据的输入才有效。
交叉部分的表达式可以描述为:列像素 > 216 && 列像素 < 1017 && 行像素 > 27 && 行像素 < 627。
先实现VGA驱动模块:
FPGA学习笔记——VGA
PLL模块用于输出40MHZ的时钟频率,同步模块对 HSYNC Signal 和 VSYNC Signal 进行控制,用于控制VGA的时序。VGA控制模块用于图像的显示控制。
下面先实现同步模块:

要去上课了,先写到这。

相关文章: