FPGA内部dcm输出的100MHZ时钟输出到dsp368的一个时钟引脚上,为什么会出错呢?怎眼才能解决?

FPGA内部dcm输出的100MHZ时钟输出到dsp368的一个时钟引脚上,为什么会出错呢?怎眼才能解决?,第1张

加了这个约束只是不报这个问题,但并没有解决。你将时钟输出的pin映射到clk管脚输出吧,FPGA中有专门的时钟输出输入管脚,这些和内部时钟网络相连接,具有较小的skew和delay。

首先经过DCM的倍频时钟是与原时钟同相的(如果你不设置偏移的话)。

那你想,对一个输出时钟进行时钟偏移设置,总不能相对它自己做偏移吧?

肯定是相对输入时钟做偏移,至于偏移量,你确定RX_CLK_IBUFG是140MHZ的时钟?

好像倍频后的时钟输出不是这个名字。

特权同学的《SDRAM时钟相移估算》针对SDRAM的相移设置做了一些介绍,也列举了一个活生生的例子进行讲解。很多朋友在实际应用中即便对SDRAM的时序模型熟悉了,当可能仍然不知道在TimeQuest这个工具上如何进行时序约束和分析,尤其对于这个SDRAM专用时钟的约束分析。本文就是要和大家来探讨实际应用中如果使用TimeQuest进行SDRAM时钟约束。

这个实例中,PLL的输出时钟clk1为100MHz,相移为0ns。PLL的输出时钟clk2为100MHz,相移为1.5ns(具体为什么不是本文讨论的重点,可以参考《SDRAM时钟相移估算》)。同时,这个clk1作为FPGA内部SDRAM控制器的时钟,而clk2输出到外部连接到SDRAM的时钟管脚。为了说明问题,我们首先会给这个作为SDRAM时钟的sdram_clk信号使用Set Maximum Delay与Set Minimum Delay添加时序约束:

set_max_delay -from [get_clocks {sys_ctrl:uut_sys_ctrl|PLL_ctrl:uut_PLL_ctrl|altpll:altpll_component|_clk2}] -to [get_ports {sdram_clk}] 5.000

set_min_delay -from [get_clocks {sys_ctrl:uut_sys_ctrl|PLL_ctrl:uut_PLL_ctrl|altpll:altpll_component|_clk2}] -to [get_ports {sdram_clk}] 1.000

该约束的意义就是希望PLL的输入时钟_clk2到sdram_clk管脚上的延时在1ns~5ns。然后我们得到的Setup slack分析结果如图1所示。

图1

_clk2到sdram_clk路径延时为1.567ns。

下一步我们要产生一个名为SDRAMCLK的生成时钟,用于SDRAM数据、地址等信号的时序约束。这个生成时钟的约束有讲究,却并不难。如图2所示,命名为SDRAMCLK,时钟源(Source)选择PLL的输出时钟clk2,目的时钟(Targets)选择连接到SDRAM上的sdram_clk。

图2

约束完成后产生约束脚本如下:

create_generated_clock -name {SDRAMCLK} -source [get_nets {uut_sys_ctrl|uut_PLL_ctrl|altpll_component|_clk2}] -master_clock {sys_ctrl:uut_sys_ctrl|PLL_ctrl:uut_PLL_ctrl|altpll:altpll_component|_clk2} [get_ports {sdram_clk}]

然后就可以使用生成时钟SDRAMCLK约束相关的数据总线或地址总线。例如可以对数据信号进行约束:

set_input_delay -add_delay -max -clock [get_clocks {SDRAMCLK}] 4.500 [get_ports {sdram_data[0]}]

set_input_delay -add_delay -min -clock [get_clocks {SDRAMCLK}] -2.000 [get_ports {sdram_data[0]}]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11721504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存