FPGA学习_时序约束以及VIVADO时序报告

本文详细介绍了VIVADO中的时序约束,包括主时钟、衍生时钟等不同类型的约束,以及如何查看和解读时序报告,探讨了寄存器赋值慢一拍的原因。作者还强调了在电路设计中考虑时序的重要性。
摘要由CSDN通过智能技术生成

前言

一边学习一边补充当中

时序约束的目的

  1. 告知EDA软件需要达到什么样的设计指标,然后EDA软件尽可能的优化布局布线以达到该约束指标
  2. 协助EDA软件进行分析设计当中的时序路径,以产生相应的时序报告,例如约束主时钟,EDA软件才可以根据此约束进行分析电路设计

一、时序约束种类

1、约束主时钟

SYSCLK_div SYSCLK_div_5mhz
   (
    .clk_out1               (w_clk_5mhz     ),   
    .locked                 (w_clk_5mhz_lock),       
    .clk_in1                (i_clk          )      
);

对于这种直接使用Clocking Wizard IP核的时钟信号,输入输出我们都不需要进行约束,IP核会自动进行约束。

CLK_DIV_module#(
    .P_CLK_DIV_CNT          (40) //MAX = 65535
)CLK_DIV_module_U(
    .i_clk                  (w_clk_5mhz      ),
    .i_rst                  (~w_clk_5mhz_lock),
    .o_clk_div              (w_clk_125khz    )
    );

对于这种我们自己设计的时钟分频模块,如果我们不对其进行约束的话,VIVADO就不知道w_clk_125khz的频率是多少,涉及到w_clk_125khz的时序逻辑,VIVADO就不会正确分析,所以我们需要对其进行约束。

2、约束衍生时钟

w_clk_5mhz是由i_clk分频出来的时钟,称为衍生时钟。
首先给衍生时钟命名;
选择主时钟pin
选择主时钟
设置分频或者倍频值
添加Source object,即我们需要约束的时钟w_clk_5mhz
注:这里需要勾选-add属性,这是因为时钟i_clk在主时钟约束那里已经被约束过了,加上add属性则可以避免冲突,在已有约束基础上再增加约束
在这里插入图片描述
w_clk_125khz同理,设置分频值为40即可,主时钟选择5mhz时钟,具体的工程代码设计可以先看之前介绍IIC的文章https://blog.csdn.net/m0_56222647/article/details/136815041
在这里插入图片描述

3、约束虚拟时钟

暂时没用到,后续补充

4、input delay

5、output delay

6、约束异步时钟组

静态时序分析是穷尽式的,所有寄存器之间路径都会被分析,但异步时钟寄存器之间是不用进行分析的,该约束就是告知VIVADO不要分析异步时钟路径

7、约束互斥时钟

物理互斥:即CLK1有信号时,CLK2则无信号,物理芯片上进行控制的
逻辑互斥:俩个时钟结果选择器,一次只能选择一个时钟

8、假路径约束

异步时钟路径也可以通过假路径约束

9、多周期约束

大概就让触发沿和锁存沿之间不再是只隔一个时钟周期,可以隔多个

二、VIVADO时序报告

在这里插入图片描述
打开布局布线后可以看到建立时间余量和保持时间,都是大于0的,时序正常。
估计是时序逻辑主要是使用主时钟i_clk分频出来的的5mhz(200ns),所以这里的建立时间余量这么大。
点击WNS可以看到最差建立时间余量这几条路径:如下图
在这里插入图片描述
点击第一条路径,可以在原理图里看到它的路径,原理图里面的路径,绿色为起点,红色为终点
在这里插入图片描述
双击第一条路径可以打开时序报告:
源时钟路径,Incr是指增加的时延,Path是指当前时延总和
在这里插入图片描述
这里多提一嘴,经过MMCM后这里增加的时延是负的,这是由于相位调整的缘故,目的寄存器时钟也会引入负的延时,所以相对来说这个负的时延是无所谓的。
数据路径
在这里插入图片描述
这里是数据经过各个LUT,寄存器、进位链以及走线net的延时。
同时可以计算出数据到达时间:Tarrive = Tco + Tdatadelay = 1.964
目的时钟路径
在这里插入图片描述
个别名词解释:
clock pessimism : 时钟悲观度,由于温度影响,时钟最坏情况下会引入的偏移
clock uncertainly:时钟不确定度
FDCE(Setup):这里是指建立时间,按道理来说这里应该是负的,但是图中是正的,不知道啥情况,估计还是和时钟相位调整有关系吧
根据此可以计算出数据要求到达时间:
Trequired = Tcycle + Tskew - Tsu = 198.495
最终的建立时间裕量为:Trequired - Tarrive = 198.495 - 1.964 = 196.531
该数值和时序报告summary当中数值一致。

三、从时序的角度看为什么寄存器赋值慢一拍

  • 时序逻辑电路并没有真正意义上的落后一拍,落后一拍的原因是因为Tco的存在,导致在当前时钟上升沿无法采集到最新的值,而只能采集到未变化的值
  • 在仿真时,输入信号尽量用非阻塞赋值“<=”来模拟其来自寄存器的输出,这样的仿真结果更接近实际电路
  • 可以采用“#1”这种赋值方式来模拟Tco的存在,这可以在仿真时带来很大的便利
  • 34
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
您好!对于Vivado中的锁相环(PLL)IP核,您可以使用时序约束来确保其时序正确性。时序约束是指定设计中各个信号的时序关系和限制的方法。 要在Vivado中为锁相环IP核添加时序约束,您可以按照以下步骤进行操作: 1. 打开Vivado项目并选择“约束”视图。 2. 确定锁相环的输入和输出信号名称。这些信号通常包括时钟输入、时钟输出以及其他相关的控制信号。 3. 使用Vivado提供的约束语言(XDC)编写约束文件。您可以通过创建一个新的XDC文件或在现有的XDC文件中添加约束来完成此操作。 4. 在约束文件中,使用set_input_delay和set_output_delay等命令来指定输入和输出信号的延迟要求。您可以根据设计需求和锁相环的工作频率来设置适当的延迟。 5. 如果需要,您还可以使用其他约束命令来指定时钟要求、时钟分频比、锁相环的工作模式等。 6. 在完成约束文件编写后,保存并关闭该文件。 7. 返回Vivado界面,运行综合、实现和比特流生成等操作,以生成锁相环的配置比特流。 通过以上步骤,您可以为Vivado中的锁相环IP核添加时序约束,确保信号的时序满足设计要求。请注意,具体的约束语法和命令可能因Vivado版本和锁相环IP核的类型而有所不同,您可以参考相关的Vivado文档和IP核用户指南以获取更详细的信息。 希望这些信息对您有所帮助!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺子学不会FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值