CrazyBingo

完美解决LCD_DCLK相位等问题

0
阅读(5069)

完美解决LCD_DCLK相位等问题

1. 需要注意的问题

在ADC芯片,视频采样芯片等等应用中,往往需要一个采样时钟。这涉及到建立期(setup time),保持期(hold time)。同样采样时钟也在sdram、ddr等等存储芯片中使用到。

对于低速领域,我们可以随意对待,因为保持期已经满足了建立数据的采样。但是对于高速领域,对于时钟相位的处理相当的重要,稍有不慎,就会丢失数据,导致系统不稳定,得到意想不到的结果。

wps_clip_image-2316

wps_clip_image-10825

典型的如上图所示:ADV7123视频DAC芯片(与一般的ADC转换芯片雷同),在CLOCK上升沿,对准数据的稳定期,即数据已经稳定改变,等待被读取,以保证数据不丢失。因此,这就需要我们对CLOCK做一定的手脚。否则,数据的丢失,可想而知。

2. 因忽略存在的问题

一切问题都可以归结为“没有在数据稳定期间采样”的罪魁祸首!

wps_clip_image-32662

如上图所示,图片在VGA上显示,出现了花斑(黄色的、闪闪的条纹),这是因为数据读取不稳定,而出现的抖动。相关设计方案以及效果网址如下:

http://www.cnblogs.com/crazybingo/archive/2010/12/01/1892610.html

wps_clip_image-16401

通过相关处理,解决了数据抖动问题,保证了数据输出的稳定,效果以及解决方案如上所示:

http://www.cnblogs.com/crazybingo/archive/2010/12/09/1900816.html

3. 各种解决方案

3.1. 直接将时钟取反

在频率不是很大的情况下,直接通过相反器,完成adc芯片的时钟新号180度翻转,达到数据稳定采样的目的,如下:

assign lcd_dclk = ~clk;

3.2. 通过PLL输出有相位差的时钟

这在SDRAM中应用相当广泛,一般通过计算,得到时钟滞后时间,调整相位差,完成数据稳定器的对准。如下图所示

3.3. 使用FPGA内部的LACELL延时器

这个方法一般不常用,但是我在一个项目中,由于PLL资源短缺,直接通过取反效果也不明显,因此使用了一个LACELL,恰好达到了perfect的状态。如下图所示:

wps_clip_image-15141

1) LCELL的概念

wps_clip_image-23371

2) LCELL的使用

LCELL u_LCELL(.in(clk),.out(lcd_dclk));

wps_clip_image-12776

一个lcell在fpga中的实现为穿过一个LUT,不同的fpga,其延时不同,走不同的连线,也会造成延时的不同。

要应用LCELL Buffer而不让它被综合工具或者布线工具删除,需要进行以下设置:
在QuartusII的"分析&综合"设置的more setting中,有以下2个选项,需要关闭:
(1)Removes redundant Logic Cells   (off)
(2)ignore LCELL Buffer  (off)
在fitter more setting中的这2个选项打开:
(1)Logic Cell Insertion-I/Os Fed By Carry or Cascade Chains  (on)
(2)Logic Cell Insertion-Individual Logic Cells          (on)

3) LCELL的缺陷

LCELL延时小所以如果可以应用的话,时间精度会很高,所以比较吸引人,不过就像您说的,受影响大,ALTERA的文件里也说不建议用它作延时,怕不稳定,不过这也是一种方案,

LCELL可以理解成插入的一个缓冲器。因此,具体延时大小跟LUT延时和布线延时有关。

4. DCLK个人建议

对于FPGA而言,如果PLL资源丰富,或者需要准确的延时,可以采用PLL的时钟扇出来完成时钟的输出,匹配后端的电路。

对于PLL资源不丰富的器件而言,可以直接取反,或者lcell,低成本实现需求。