纯组合逻辑电路做后端,怎么添加约束和时钟?

纯组合逻辑电路做后端,怎么添加约束和时钟?,第1张

最基本的约束是管脚约束,让你的逻辑通过对应的io连接到电路板上面对应的外设。

然后是时钟约束,告诉ise布局布线要满足的时序要求

还有区域约束,相当于手工布局,以优化时序设计。

特权同学的《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]}]

在Altera的quartusII下,添加*.sdc文件,使用TQ时序约束器来进行时序验证,具体的语法可以参照altera网站的叙述以及例子工程,当然最简单的方法是买一本altera相关设计的书来看。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存