我正在为TFT LCD 7" screen by terasic编写VHDL代码,而我很难理解datasheet
中提供的时序规范我在办公室的电脑上找到了同一液晶显示屏的VHDL代码,编写它的人也无法使用。最有趣的部分,但尚不完全清楚他写的代码:
process(Reset,clk_33)
begin
if Reset = '0' then
H_count <= 0;
V_count <= 0;
DE <= '0';
LCD_fin <= '0';
R<=(others=>'0');
G<=(others=>'0');
B<=(others=>'0');
elsif rising_edge(clk_33) then
H_count <= H_count + 1; -- Horizantal pixels count
case V_count is -- Vertical row
when 0 to 12 => V_sync <= '0'; LCD_fin <= '0'; -- Vertical pulse width
when 13 to 22 => V_sync <= '1'; -- Vertical back porch
when 23 to 502 => V_sync <= '1'; -- Vertical valid
when 503 to 523 => V_sync <= '1'; LCD_fin <= '1'; -- Vertical front porch
when 524 => V_count <= 0;
end case;
case H_count is -- Horizontal column
when 0 to 29 => H_sync <= '0'; -- Horizontal pulse width
when 30 to 45 => H_sync <= '1'; -- Horizontal back porch
when 46 to 845 => H_sync <= '1'; DE<='1'; -- Horizontal valid
when 846 to 1054 => H_sync <= '1'; DE<='0';-- Horizontal front porch
when 1055 => H_count <= 0; V_count <= V_count + 1;
end case;
我知道VHDL非常好,但我似乎无法为这些项目找到一个好的表达方式:
HSYNC / VSYNC建立/保持时间[ns]
水平/垂直脉冲宽度
另外,你知道为什么会有2种操作模式(DE / SYNC)吗?我什么时候应该使用每一个?用于其他类型屏幕的模块(如VGA)要简单得多。
我的老板正在努力推动我完成这项任务,因为我现在正在为此工作一个月。如果这里的某个人对这些时间参数有一个很好的定义,我会非常高兴:)
答案 0 :(得分:0)
HSYNC或水平同步信号是一个短脉冲,表示每一行的开始。 类似地,VSYNC或垂直同步信号是一个短脉冲,表示每帧的开始。
脉冲宽度是每个信号处于逻辑高状态的时间。在您的示例中,HSYNC的逻辑高电平为13ns至523ns。这意味着510ns是HSYNC的脉冲宽度
答案 1 :(得分:0)
HSYNC / VSYNC建立/保持时间[ns]
这是33 [mhz] DCLK从&#39; 1&#39;上升所需的最短时间。到&#39; 0&#39;反之亦然。
水平/垂直脉冲宽度
对于LCD_HSD,例如,LCD_HSD为高电平的DCLK脉冲量为&#39; tollin&#39;提及。 LCD_HSD的LCD_VSD与DCLK相同。
我已经将一个存储库上传到github,其中包含一个LCD驱动程序quartus项目,该项目创建了一个舒适的通用模块供所有人使用:
https://github.com/Doron-Behar/VEEK-MT_LCD-driver