遇到个问题,百思不解,还请版上各位朋友不吝赐教了
并口nand Flash在 Data output cycle 会输出DDR双沿的DQS时钟和DQ数据,
比方说,我只读8个字节数据,波形如下:
___ ___ ___ ___
DQS _________| |___| |___| |___| |__________
_________ ___ ___ ___ ___ ___ ___ ___ ___ ______
DQ[7:0] _________X___X___X___X___X___X___X___X___X______
xx A B C D E F G H xx
频率比较低,DQS在10-20MHz左右。
DQS的跳变沿,大致对齐DQ[7:0]的跳变沿,
两者有大约0.85ns-5ns的tDQSQ延时(DQS-DQ skew, DQS to last DQ valid, per access)。
在fpga内,用IDDR来采样,DQ和DQS分别连到IDDR的数据、时钟,
为了稳定采样,希望在iddr的入口做成center-aligned波形,如下:
___ ___ ___ ___
DQS ___________| |___| |___| |___| |________
_________ ___ ___ ___ ___ ___ ___ ___ ___ ______
DQ[7:0] _________X___X___X___X___X___X___X___X___X______
xx A B C D E F G H xx
这就希望,把dqs时钟延迟一段时间,做90度移相。
【疑问1】
如何给实现90度移相?
1,若用IDELAY,max只有几个ns的延时,对于10-20M时钟,无法移相90度,
不知道IDELAYE2能级联吗?
在官方文档里,没找到明确说法。
2,如果用MMCM,它是否只能对持续不断的时钟做移相?
若是只有上图所示的4拍时钟,MMCM能移相吗?
3,有其他办法吗?
【疑问2】
用fpga吃入的dqs时钟,对iddr输出的Q1、Q2做采样,
只能采到 AB CD EF 六个字节,抓不到GH(因为此时DQS已经停了),如何解决?
我想到的方法是:
让nand Flash多吐1拍dqs时钟,其对应的dq数据为don't care,
但是用这多出的1拍dqs时钟,可以实现最后一个字节 GH 的采样。
不知此方法是否妥当?
--
修改:katyusza FROM 159.226.52.*
FROM 159.226.52.*