详解时序约束的基本方法

1. 基本的约束方法
为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取。最普遍的三种路径为:
输入路径(input path),使用输入约束
寄存器到寄存器路径(register-to-register path),使用周期约束
输出路径(output path),使用输出约束
具体的异常路径(path specific exceptions),使用虚假路径、多周期路径约束
1.1. 输入约束input constraint
offset in约束限定了输入数据和输入时钟边沿的关系。
1.1.1. 系统同步输入约束system synchronous input
在系统同步接口中,同一个系统时钟既传输数据也获取数据。考虑到板子路径延时和时钟抖动,接口的操作频率不能太高。
1‑1简化的系统同步输入sdr接口电路图
1‑2sdr系统同步输入时序
上述时序的约束可写为:
net sysclk tnm_net = sysclk;
timespec ts_sysclk = period sysclk 5 ns high 50%;
offset = in 5 ns valid 5 ns before sysclk;
1.1.2. 源同步输入约束source synchronous input
在源同步接口中,时钟是在源设备中和数据一起产生并传输。
1‑3简化的源同步输入ddr接口电路
1‑4ddr源同步输入时序
上图的时序约束可写为:
net sysclk tnm_net = sysclk;
timespec ts_sysclk = period sysclk 5 ns high 50%;
offset = in 1.25 ns valid 2.5 ns before sysclk rising;
offset = in 1.25 ns valid 2.5 ns before sysclk falling;
1.2. 寄存器到寄存器约束register-to-register constraint
寄存器到寄存器约束往往指的是周期约束,周期约束的覆盖范围包括:
覆盖了时钟域的时序要求
覆盖了同步数据在内部寄存器之间的传输
分析一个单独的时钟域内的路径
分析相关时钟域间的所有路径
考虑不同时钟域间的所有频率、相位、不确定性差异
1.2.1. 使用dll, dcm, pll, and mmcm等时钟器件自动确定同步关系
使用这一类时钟ip core,只需指定它们的输入时钟约束,器件将自动的根据用户生成ip core时指定的参数约束相关输出,不需用户手动干预。
1‑5输入到dcm的时钟约束
上图的时序约束可写为:
net “clkin” tnm_net = “clkin”;
timespec “ts_clkin” = period “clkin” 5 ns high 50%;
1.2.2. 手动约束相关联的时钟域
在某些情况下,工具并不能自动确定同步的时钟域之间的时钟时序关系,这个时候需要手动约束。例如:有两个有相位关系的时钟从不同的引脚进入fpga器件,这个时候需要手动约束这两个时钟。
1‑6通过两个不同的外部引脚进入fpga的相关时钟
上图的时序约束可写为:
net“clk1xtnm_net=“clk1x;
net“clk2x180tnm_net=“clk2x180;
timespects_clk1x=periodclk1x 7 5ns;
timespects_clk2x180=periodclk2x180“ts_clk1x/2phas2 +1.25ns;
1.2.3. 异步时钟域
异步时钟域的发送和接收时钟不依赖于频率或相位关系。因为时钟是不相关的,所以不可能确定出建立时间、保持时间和时钟的最终关系。因为这个原因,xilinx推荐使用适当的异步设计技术来保证对数据的成功获取。xilinx约束系统允许设计者在不需考虑源和目的时钟频率、相位的情况下约束数据路径的最大延时。
异步时钟域使用的约束方法的流程为:
为源寄存器定义时序组
为目的寄存器定义时序组
使用from-to和datapathdelay关键字定义寄存器组之间的最大延时
1.3. 输出约束output constraint
输出时序约束约束的是从内部同步元件或寄存器到器件管脚的数据。
1.3.1. 系统同步输出约束system synchronous output constraint
系统同步输出的简化模型如图所示,在系统同步输出接口中,传输和获取数据是基于同一个时钟的。
1‑7系统同步输出
其时序约束可写为:
net clkin tnm_net = clkin;
offset = out 5 ns after clkin;
1.3.2. 源同步输出约束source synchronous output constraint
在源同步输出接口中,时钟是重新产生的并且在某一fpga时钟的驱动下和数据一起传输至下游器件。
1‑8源同步输出简化电路时序图
1‑9源同步小例子时序图
小例子的时序约束可写为:
net “clkin” tnm_net = “clkin”;
offset = out after “clkin” reference_pin “clkout” rising;
offset = out after “clkin” reference_pin “clkout” falling;
1.3.3. 虚假路径约束false path constraint
令src_grp为一组源寄存器,dst_grp为一组目的寄存器,如果你确定src_grp到dst_grp之间的路径不会影响时序性能,那么可以将这一组路径约束为虚假路径,工具在进行时序分析的时候将会跳过对这组路径的时序分析。这种路径最常见于不同时钟域的寄存器数据传输,如下图:
1‑10虚假路径
其约束可写为:
net clk1 tnm_net = ffs grp_1;
net clk2 tnm_net = ffs grp_2;
timespec ts_example = from grp_1 to grp_2 tig;
1.3.4. 多周期路径约束multi-cycle path constraint
在多周期路径里,令驱动时钟的周期为period,数据可以最大n*period的时间的从源同步元件传输到目的同步元件,这一约束降低工具的布线难度而又不会影响时序性能。这种约束通常用在有时钟使能控制的同步元件路径中。
图 1-11时钟使能控制的寄存器路径
必须说明的是上图enable信号的产生周期必须大于等于n*period,且每个enable传输一个数据。假设上图的n=2,mc_grp为时钟使能enable控制的多周期同步元件组,则约束可写为:
net clk1 tnm_net = clk1;
timespec ts_clk1 = period clk1 5 ns high 50%;
net enable tnm_net = ffs mc_grp;
timespec ts_example = from mc_grp to mc_grp ts_clk1*2;
随笔记录自己从一个项目立项到最后调试完成所做的工作,包括调研选型、关键技术突破、知识短板补缺等,随着时间的推移,会不断地根据实践经验反馈完善以前的博文,力求每一个要论述的问题精准完备,具有高度可信的参考价值,也希望看我博文的读者能够多提意见建议,帮助我成为一个更优秀的项目负责人,让我们一起共同进步,谢谢大家!
原文标题:1. 基本的约束方法
文章出处:【微信公众号:fpga之家】欢迎添加关注!文章转载请注明出处。


高级别自动驾驶应用白皮书
iPhone8什么时候上市最新消息:iPhone8真机应该就是这样子,竖着摄像头,真的是横七竖八!
智能高温熔体压力变送器系统的组成部分
最高44亿,阳光、三雄、星宇等5份“成绩单”藏着哪些秘密?
网络(服务器)线路的简单介绍
详解时序约束的基本方法
磷铜阳极介绍
浅谈模拟IC设计师眼中的BJT
如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?
LIN总线工作原理介绍
启明信息与东北亚数字科技基于Chat GLM智能客服算力服务签订合作协议
GIC-600的组件是如何连接的
谁说夏日只有彩 黑白即影超有Feel
谷歌为Chrome OS 87添加蓝牙电量显示等实用功能
设备远程监控物联网,助力打造无人值守海上升压站
您应该了解的柔性板制造工艺知识
荣耀V20全方位评测 到底怎么样
科技让视力残障人士的生活变得更加容易的例子
日企市场份额占比超9成,国内第四代半导体材料加速突破
电力变压器的状态维修-博众达科技