发 帖  
原厂入驻New
[问答] 高速FPGA到DAC接口
244 xilinx FPGA adc
分享
你好!
我打算询问输出时序限制,但意识到我的知识可能还不够。
所以我想向社区寻求建议。
在我们的设计中,我们使用xc6slx100t-fgg676-3。
我们将它与ADC和DAC连接,均以240 MHz运行。
我们从时钟发生器的不同端口提供FPGA,ADC和DAC。
ADC接口以源同步模式运行,数据相对于DCO信号锁存,来自ADC和数据。
在FPGA内部,我们使用FIFO交叉时钟域。
到目前为止ADC部分还不错。
现在我正在考虑DAC方面。
实际上,我写作的原因是收费报告设计不符合时间安排。
我不确定约束是否正确应用,甚至不确定时序方案是否正确选择。
同样,FPGA和DAC由时钟发生器的独立端口提供时钟。
DAC具有DCO输出,可将DAC输入时钟转发至FPGA。
我在想,这与ADC情况非常相似。
但现在我意识到,对DCO信号的引用并没有给我带来任何好处。
首先,DCO信号经历从DAC到FPGA的传播延迟,然后数据输出也经历从FPGA到DAC的传播延迟。
在ADC类似路由的情况下消除了这种延迟,但是在DAC的情况下,我们得到两倍的未知延迟。
我查看了ug612,系统和源同步接口。
但是看起来和我的相似。
所以我担心依靠DAC的DCO来设计数据的设计还不够好。
请给我一个提示,我可以在这里阅读更多相关信息。
提前致谢。
0
2020-3-12 11:12:21   评论 分享淘帖 邀请回答

相关问题

12个回答
“你的意思是我必须在这个DCM上全局应用时钟相移,所以FPGA内部的所有时钟都有更早的优势吗?”
是。
“或者,我们还谈论用于从FPGA输出数据的其他时钟?”
在我看来,这些将是相同的时钟。
如果您需要一个非移位时钟来采样进入FPGA的数据,那么您可能需要有两个不同的时钟,并在内部处理时钟域交叉。
“另外,请你解释一下,你是如何得出所需的相移为-135度?”
我将负斜率作为循环时间的一部分,即1.437 / 4.1666或约0.35,然后乘以360度使其成为约125度的相位,并选择下一个更高的相移,如果
你使用了PLL。
“我发现所有最大延迟都超过了设置时间的允许值。但是,如果我正确地取消,最小延迟时间定义了DAC的保持时间。最小最小延迟为2.073。接下来,如果我将时钟的相位向前移动,
然后最大延迟会下降,但最小延迟也会下降。而且我需要1.2 ns的DAC保持时间,我不能调整时钟超过2.073-1.2 = 0.873ns。同时最大最大延迟为5.037。
因此,即使我将其移动0.873,仍然无法达到3.6要求。我是否会错过什么?“
不,那是非常正确的。
我之前所说的关于这种情况的是你将需要使用动态相移来修复它。
最小和最大输出延迟涵盖所有操作条件,并且不会同时发生。
来自FPGA的实际数据眼图将远大于使用最小和最大数字计算的数据。
问题是最小和最大延迟确定了所有可能条件下的眼图,这是相移固定时必须满足的条件。
通过动态相移,您可以重新定位时钟,以满足当前工作条件下的DAC输入要求。
现在所有这一切的问题在于FPGA并不真正知道DAC何时正确或不正确地采样数据,因此没有简单的方法来处理动态相移。
一种可能的解决方案是将数据输出反馈给FPGA,并使用非相移时钟对其进行注册。
数据表将报告此设置和保持要求,如果使用IOB寄存器捕获数据,则可能相当紧张。
DAC相对于FPGA捕获窗口的时钟最佳相位的计算有点复杂,但您应该能够解决这个问题,使选定的相位工作。
- Gabor
在原帖中查看解决方案
2020-3-12 11:24:07 评论

举报

RR,
为了在D / A中获得最佳保真度,最好在时钟分配器(最低抖动)之前直接为D / A提供时钟,并从另一个时钟分配器输出为来自FPGA的传输数据提供时钟,相位对齐以便所有
考虑pcb延迟,使得FPGA的边沿将数据输出到D / A,使得它在适当的时间到达D / A(以便通过那里的时钟进行采样)。
这是最简单的,因此始终使用源同步,并且时序不会引起任何延迟和复杂的时序约束。
如果需要改变发送时钟的相位对准,可以使用MMCM的相移来移位FPGA时钟,使得数据在适当的时间到达D / A.
这会增加数据输出时序的一点抖动,但由于D / A处的好时钟重新计时,这是可以的。
如果所有时钟都是相位对齐和同步的,则可以使用接收时钟本身(移位适当的量)作为FPGA中的发送源时钟(节省时钟分配器输出)。
Austin Lesea主要工程师Xilinx San Jose
2020-3-12 11:37:07 评论

举报

FPGA和DAC之间的接口是“系统同步” - 而不是“源同步”。
这就是为什么ug612中的图表看起来不像你的电路。
如果DAC指定来自时钟发生器的时钟的建立和保持,并且从时钟发生器到FPGA的时钟具有相同的到达时间,则很容易为FPGA提出正确的输出约束。
例如,如果DAC需要数据在时钟上升沿之前1 ns有效,直到时钟上升沿之后1 ns(建立和保持时间均为1 ns),那么FPGA输出的要求是:
最大延迟(满足设置时间)=时钟周期 - 设置要求 - 电路板布线延迟 - (时钟抖动+不确定性)
再说一遍,电路板上有大约200 ps的跟踪延迟,时钟基本上是干净的(称之为25 ps峰值抖动+不确定性,注意这不是RMS数)
然后最大延迟为4.1666 ns - 1 ns - 200 ps - 25 ps = 2.9416 ns
最小延迟(以满足保持时间)
=保持要求+(时钟抖动+不确定性) - 电路板布线延迟
然后最小延迟为1 ns + 25 ps - 200 ps = 825 ps
现在让我们假设容易满足保持要求,并且我们想要限制从时钟引脚到数据输出的最大延迟。
约束看起来像:
OFFSET = OUT 2.941 ns“clk_in”上升后;
具有此约束本身不会导致输出满足此时间。
很可能你需要使用MMCM,因为奥斯汀建议调整时钟相位以满足这个时间要求。
但是,约束将允许您轻松检查您的设计是否符合设置要求。
时序报告的数据表部分还将显示最小时钟输出延迟,您可以根据保持要求进行检查。
- Gabor
2020-3-12 11:54:02 评论

举报

你好!
奥斯汀和加博尔,非常感谢你的贡献。
我希望你不介意我会回复一条消息。
正如我从两个回复中所理解的那样,使用DAC的DCO并不是一个好主意。
使用DCO对ADC非常有用,其中DCO和数据在同一方向上飞行相同。
DAC并非如此。
据我所知,有两种首选的时钟方案:系统同步,FPGA和DAC接收相同或同步时钟和源同步,其中FPGA将时钟转发到DAC。
由抖动考虑,前一种方案是首选,因为DAC将从分配器接收干净的未修改时钟。
我的计划只是一个错误。
现在我想更清楚地了解系统同步接口。
我们使用的DAC是AD9747(链接到数据表)。
根据规范(图27),DAC设置和保持时序是根据DAC的输入时钟给出的。
设置要求为0.4 ns,保持为1.2 ns,最小有效要求为1.6 ns。
我的目标频率是240 MHz,因此数据周期为4.16 ns。
在最低要求方面存在良好的差距,但我必须根据DAC时钟调整数据。
这种理解是否正确?
我希望如此,继续。
FPGA和DAC的时钟源自CDCM6208(链接到数据表)。
我不确定我是否看到了正确的值,数据表显示一个输出组内的输出偏差不超过40 ps。
这就是FPGA和DAC clcoks之间的相位不确定性。
下一步是什么?
我应该估算FPGA时钟和DAC时钟跟踪的路径差异导致的时钟相位差吗?
我还没有这个数字,但可能会向PCB设计师询问。
假设差异可以忽略不计。
Gabor,我并没有完全不知道你对最大延迟的解释。
在那个解释中你是否假设数据是通过一个时钟边沿输出并在下一个时钟边沿采样,如图2-9中的ug612?
如果是这种情况,我们不希望数据延迟大约半个时钟周期,那么下一个时钟边缘是否落在数据眼中间?
你能看看我附上的图表吗?
如果我理解正确,那么你解释了max delay = period-propagation-setup。
同时,上面计算的延迟将是保持时间。
再考虑一下。
如果我选择将相移应用于输出时钟。
那么我可能需要在这些时钟域之间使用FIFO。
如果我使用FPGA系统时钟,但调整FPGA和DAC时钟之间的相位关系,那么我可以在没有FIFO的情况下从FPGA输出数据。
是对的吗?
你提到,保持时间是最小延迟时间。
我如何确保满足?
我在Spartan 6数据表中看到了表格显示6 4:全局时钟输入到输出延迟,DCM在系统同步模式下。
它说我的设备的TICKOFDCM是3.9 ns。
我想首先理解,因为OFFSET OUT 2.9 ns我的设计不符合时序。
提前致谢。
2020-3-12 12:05:00 评论

举报

RR,
可以使用航班ime(从IOB上的延迟到封装引脚)。
我不确切知道在哪里,但如果您在xilinx.com网站上搜索包裹航班时间,我想您将能够找到它们。
设计具有所有迹线和封装飞行模型的pcb并不罕见,因为不这样做可能无法工作(由于各种偏斜)。
您只需要一个FIFO就是将采样时钟放置在FPGA中违反时序的边缘附近。
通常,您应该能够使用时钟输入,输出相移时钟输出或反相时钟(输入或输出)...这是四个可能阶段的选择 - 一个必然是好的;
无需使用FIFO即可同步所有内容。
FIFO确实很容易,因为您根本不必担心时钟的相位对齐。
Austin Lesea主要工程师Xilinx San Jose
2020-3-12 12:16:21 评论

举报

“Gabor,我并没有完全不知道你对最大延迟的解释。在那个解释中你是否假设数据是通过一个时钟边沿输出并在下一个时钟边沿采样,如图2-9中的ug612?如果是这样,
我们不希望数据延迟大约半个时钟周期,所以下一个时钟边缘落在数据眼中间吗?你能看看我附上的图表吗?如果我理解正确,那么就像你解释的那样
延迟=周期 - 传播 - 设置。同时,上面计算的延迟将是保持时间。“
是。
我假设你想在下一个时钟边缘进行采样。
这就是时钟周期是计算的一部分的原因。
如果建立和保持时间是对称的,那么如果将时钟边沿置于数据窗口中心,则可以获得最大的时序余量。
但是,如图所示,设备需要比保持时间更多的设置是很常见的。
理想情况下,您希望采样窗口(从设置要求开始到保持要求结束)在数据窗口中居中。
现在我计算从时钟到输出的最大延迟的数字将数据窗口的开始放在设置要求的开始处。
由于这是一个最大时间,这就像保证眼睛张开的开始。
实际数据可能会更快地生效,但不会更晚。
如果计算中使用的数字与系统条件准确匹配,则满足此要求应足以保证DAC的设置要求。
满足保持要求通常更容易,但您应该检查静态时序报告中的数据表报告,以确保满足它。
注意使用FPGA器件数据表中的时序。
这些数字在内部全球时钟网络上进行。
一旦您使用PLL或DCM来移动该网络的相位,那么从输入引脚(CDCM6208的时钟)到输出引脚的时序与FPGA数据表编号没有任何关系。
实际上,只有通过提升内部时钟的相位才能满足系统所需的设置时间。
顺便说一句,在您发布的图表中,“FPGA输出边缘”实际上是从CDCM6208到达时钟的FPGA引脚,而不是任何内部时钟网络。
如您所述,通过调整DAC的时钟相位而不是调整FPGA的时钟相位,也可以修复DAC采样窗口。
但是我不认为这是CDCM6208的一个选项,因此即使你需要使用FIFO进行时钟域交叉,它也可能更容易在FPGA中完成。
- Gabor
2020-3-12 12:25:13 评论

举报

奥斯汀,
感谢您对FIFO目的的评论。
事情开始在我脑海中排成一列。
我在ds162中看到了FF开关要求,它们要短得多。
如果我读取正确的值,片的FF的有效窗口是0.42 + 0.28 = 0.7ns,这几乎是时钟周期的6倍。
虽然FIFO保证可以工作,但它可能是一种过度杀伤,并且使用不同的pahses编写和读取寄存器可能会起作用。
我有PCB设计人员的跟踪延迟,下次尝试指定接口。
再次感谢宝贵的意见。
2020-3-12 12:37:29 评论

举报

你好Gabor,
非常感谢你的评论。
我可以再请你一次指导我吗?
我问过PCB设计师的走线延迟问题。
它们如下:
从时钟发生器到FPGA的时钟跟踪:0.4 ns
从时钟发生器到DAC的时钟走线:0.55 ns
从FPGA到DAC的数据总线延迟:0.23 ns
因此,DAC的时钟感比FPGA时钟落后0.15 ns,这与加到最大延迟有关。
数据总线延迟从负到最大延迟。
DAC设置时间为0.4ns,保持 - 1.2ns。
所以使用我之前发布的公式得出
最大延迟=(时钟周期) - (设置规格) - (电路板延迟)+(DAC时钟延迟)= 4.166 - 0.4 - 0.23 + 0.15 = 3.686 ns
让我们允许一些抖动,所以我指定输出约束为
NET“IQOUT_I
  • ”TNM =“tnm_TX_IQ_OUT”;
    NET“IQOUT_Q
  • ”TNM =“tnm_TX_IQ_OUT”;
    在“CLK_FPGA_P”上升后TIMEGRP“tnm_TX_IQ_OUT”OFFSET = OUT 3.6 ns;
    CLK_FPGA_P是FPGA系统时钟输入差分的正端。
    在此尝试中,我删除了输出FIFO并从寄存器输出。
    不满足以上要求。
    这是时间报告的片段: 
    ==================================================
    ============================== 
    时序约束:TIMEGRP“tnm_TX_IQ_OUT”OFFSET = OUT 3.6 ns后COMP“CLK_FPGA_P”“上升”; 
    分析了32条路径,分析了32个端点,32个端点失败 
    检测到32个定时错误。 
    最小允许偏移量为5.037ns。 
    --------------------------------------------------
    ------------------------------  
    终点IQOUT_I(C24.PAD)的路径,1路径 
    --------------------------------------------------
    ------------------------------ 
    松弛(最慢路径):-1.437ns(要求 - (时钟到达+时钟路径+数据路径+不确定性)) 
    资料来源:iWIFI_TX / i_out_7(FF) 
    目的地:IQOUT_I(PAD) 
    源时钟:clk_tx_240m在0.000ns上升 
    要求:3.600ns 
    数据路径延迟:4.162ns(逻辑电平= 1) 
    时钟路径延迟:0.593ns(逻辑电平= 4) 
    时钟不确定度:0.282ns
    令我难过的是“最小允许偏移量为5.037ns”。
    这不仅仅是时钟周期。
    我如何解释上述报告?
    提前致谢。
  • 2020-3-12 12:48:36 评论

    举报

    它没有它看起来那么糟糕。
    您可以使用DCM或PLL调整时钟延迟。
    此时,时钟路径延迟显示为0.593 ns,表示您已使用DCM或PLL。
    否则,时钟路径延迟会更多。
    如果你可以有-135度的固定相位(与+225度相同),那么你应该满足设置的时间。
    这是否也符合保持时序取决于最小输出延迟,您可以从时序报告的数据表部分获得。
    如果您发现无法同时满足设置和保持时间,则需要使用动态相位调整。
    不幸的是,当调整仅用于输出数据路径时,这并不容易。
    当数据眼位于DAC输入的正确位置时,您没有任何好的反馈来告诉您。
    - Gabor
    2020-3-12 12:54:32 评论

    举报

    的Gabor,
    再次感谢您的反馈。
    我没有明白你使用DCM和时钟相移的观点。
    如果我们谈论FPGA系统时钟,那么我会在CLK_FPGA_P / _N diffpair上接收它,并使用时钟向导(可能是DCM)在设计中产生所需的时钟。
    您的意思是我必须在此DCM上全局应用时钟相移,因此FPGA内的所有时钟都具有更早的优势吗?
    或者我们是否支持用于从FPGA输出数据的其他时钟?
    另外,请你解释一下,你是如何得出所需的相移为-135度?
    我在定时报告的数据表部分找到了与输出相关的部分。 
    在COMP“CLK_FPGA_P”“上升”之后TIMEGRP“tnm_TX_IQ_OUT”OFFSET = OUT 3.6 ns; 
    总线偏移:0.711 ns; 
    ----------------------------------------------- + -
    ----------- ------------ + ------------- + + -----------
    - + -------------- + 
    |最大(最慢)|
    处理|最小(最快)|
    过程|

    PAD |
    延迟(ns)|
    角落|
    延迟(ns)|
    角|边偏(ns)| 
    ----------------------------------------------- + -
    ----------- ------------ + ------------- + + -----------
    - + -------------- + 
    IQOUT_I |
    4.877 |
    慢|
    2.395 |
    快点|
    0.551 | 
    IQOUT_I |
    4.863 |
    慢|
    2.421 |
    快点|
    0.537 | 
    IQOUT_I |
    4.711 |
    慢|
    2.302 |
    快点|
    0.385 | 
    IQOUT_I |
    4.749 |
    慢|
    2.324 |
    快点|
    0.423 | 
    IQOUT_I |
    4.560 |
    慢|
    2.215 |
    快点|
    0.234 | 
    IQOUT_I |
    4.586 |
    慢|
    2.215 |
    快点|
    0.260 | 
    IQOUT_I |
    4.734 |
    慢|
    2.356 |
    快点|
    0.408 | 
    IQOUT_I |
    5.037 |
    慢|
    2.539 |
    快点|
    0.711 | 
    IQOUT_I |
    4.710 |
    慢|
    2.332 |
    快点|
    0.384 | 
    IQOUT_I |
    4.540 |
    慢|
    2.200 |
    快点|
    0.214 | 
    IQOUT_I |
    4.502 |
    慢|
    2.188 |
    快点|
    0.176 | 
    IQOUT_I |
    4.673 |
    慢|
    2.280 |
    快点|
    0.347 | 
    IQOUT_I |
    4.739 |
    慢|
    2.333 |
    快点|
    0.413 | 
    IQOUT_I |
    4.507 |
    慢|
    2.193 |
    快点|
    0.181 | 
    IQOUT_I |
    4.552 |
    慢|
    2.217 |
    快点|
    0.226 | 
    IQOUT_I |
    4.571 |
    慢|
    2.192 |
    快点|
    0.245 | 
    IQOUT_Q |
    4.326 |
    慢|
    2.073 |
    快点|
    0.000 | 
    IQOUT_Q |
    4.366 |
    慢|
    2.107 |
    快点|
    0.040 | 
    IQOUT_Q |
    4.349 |
    慢|
    2.099 |
    快点|
    0.023 | 
    IQOUT_Q |
    4.492 |
    慢|
    2.201 |
    快点|
    0.166 | 
    IQOUT_Q |
    4.348 |
    慢|
    2.098 |
    快点|
    0.022 | 
    IQOUT_Q |
    4.482 |
    慢|
    2.165 |
    快点|
    0.156 | 
    IQOUT_Q |
    4.334 |
    慢|
    2.066 |
    快点|
    0.008 | 
    IQOUT_Q |
    4.354 |
    慢|
    2.095 |
    快点|
    0.028 | 
    IQOUT_Q |
    4.357 |
    慢|
    2.107 |
    快点|
    0.031 | 
    IQOUT_Q |
    4.352 |
    慢|
    2.093 |
    快点|
    0.026 | 
    IQOUT_Q |
    4.341 |
    慢|
    2.091 |
    快点|
    0.015 | 
    IQOUT_Q |
    4.359 |
    慢|
    2.100 |
    快点|
    0.033 | 
    IQOUT_Q |
    4.341 |
    慢|
    2.073 |
    快点|
    0.015 | 
    IQOUT_Q |
    4.484 |
    慢|
    2.167 |
    快点|
    0.158 | 
    IQOUT_Q |
    4.347 |
    慢|
    2.097 |
    快点|
    0.021 | 
    IQOUT_Q |
    4.362 |
    慢|
    2.103 |
    快点|
    0.036 | 
    ----------------------------------------------- + -
    ----------- ------------ + ------------- + + -----------
    - + -------------- +  
    我发现所有最大延迟都超过了设置时间的允许值。
    但是,如果我正确地取消,最小延迟时间定义了DAC的保持时间。
    最小最小延迟为2.073。
    接下来,如果我向前移动一个时钟相位,那么最大延迟将会下降,但最小延迟也会下降。
    而且我需要1.2 ns的DAC保持时间,我无法调整时钟超过2.073-1.2 = 0.873ns。
    同时最大最大延迟为5.037。
    因此,即使我将其移动0.873,仍然无法满足3.6的要求。
    我错过了什么吗?
    提前致谢。
    2020-3-12 13:04:06 评论

    举报

    “你的意思是我必须在这个DCM上全局应用时钟相移,所以FPGA内部的所有时钟都有更早的优势吗?”
    是。
    “或者,我们还谈论用于从FPGA输出数据的其他时钟?”
    在我看来,这些将是相同的时钟。
    如果您需要一个非移位时钟来采样进入FPGA的数据,那么您可能需要有两个不同的时钟,并在内部处理时钟域交叉。
    “另外,请你解释一下,你是如何得出所需的相移为-135度?”
    我将负斜率作为循环时间的一部分,即1.437 / 4.1666或约0.35,然后乘以360度使其成为约125度的相位,并选择下一个更高的相移,如果
    你使用了PLL。
    “我发现所有最大延迟都超过了设置时间的允许值。但是,如果我正确地取消,最小延迟时间定义了DAC的保持时间。最小最小延迟为2.073。接下来,如果我将时钟的相位向前移动,
    然后最大延迟会下降,但最小延迟也会下降。而且我需要1.2 ns的DAC保持时间,我不能调整时钟超过2.073-1.2 = 0.873ns。同时最大最大延迟为5.037。
    因此,即使我将其移动0.873,仍然无法达到3.6要求。我是否会错过什么?“
    不,那是非常正确的。
    我之前所说的关于这种情况的是你将需要使用动态相移来修复它。
    最小和最大输出延迟涵盖所有操作条件,并且不会同时发生。
    来自FPGA的实际数据眼图将远大于使用最小和最大数字计算的数据。
    问题是最小和最大延迟确定了所有可能条件下的眼图,这是相移固定时必须满足的条件。
    通过动态相移,您可以重新定位时钟,以满足当前工作条件下的DAC输入要求。
    现在所有这一切的问题在于FPGA并不真正知道DAC何时正确或不正确地采样数据,因此没有简单的方法来处理动态相移。
    一种可能的解决方案是将数据输出反馈给FPGA,并使用非相移时钟对其进行注册。
    数据表将报告此设置和保持要求,如果使用IOB寄存器捕获数据,则可能相当紧张。
    DAC相对于FPGA捕获窗口的时钟最佳相位的计算有点复杂,但您应该能够解决这个问题,使选定的相位工作。
    - Gabor
    2020-3-12 13:12:31 评论

    举报

    你好!
    这个帖子很长时间没有了。
    今天我要再次感谢贡献者,他们的宝贵意见很有用。
    到目前为止,我有示波器捕获功能,它可以使DAC的采样时钟位于数据眼内,并允许DAC的所需设置和保持时间。
    此时,它是额外的时钟,相对于系统时钟以负相位运行,FIFO用于输出数据。
    接下来我想使用单个时钟并删除FIFO。
    希望这很简单。
    再次感谢。
    2020-3-12 13:22:11 评论

    举报

    只有小组成员才能发言,加入小组>>

    83个成员聚集在这个小组

    加入小组

    创建小组步骤

    关闭

    站长推荐 上一条 /7 下一条

    快速回复 返回顶部 返回列表