手把手课堂:Xilinx FPGA设计时序约束指南
作为赛灵思用户论坛的定期访客,我注意到新用户往往对时序收敛以及如何使用时序约束来达到时序收敛感到困惑。为帮助 FPGA设计新手实现时序收敛,让我们来深入了解时序约束以及如何利用时序约束实现FPGA 设计的最优结果。
何为时序约束?
为保证设计的成功,设计人员必须确保设计能在特定时限内完成指定任务。要实现这个目的,我们可将时序约束应用于连线中——从某 FPGA 元件到 FPGA 内部或 FPGA 所在 PCB 上后续元件输入的一条或多条路径。
在 FPGA 设计中主要有四种类型的时序约束:PERIOD、OFFSET IN、OFFSET OUT 以及 FROM: TO(多周期)约束。
PERIOD 约束与建组
每个同步设计要有至少一个PERIOD 约束(时钟周期规格),这是最基本的约束类型,指定了时钟周期及其占空比。若设计中有不止一个时钟,则每个时钟都有自己的 PERIOD 约束。PERIOD约束决定了我们如何进行布线,来满足设计正常工作的时序要求。
为简化时序约束应用过程,常常可将具有类似属性的连线分组为一组总线或一组控制线。这样做有助于完成正确为设计约束定义优先级这一关键步骤。
设计约束优先次序排列
若设计有多重约束,则需进行优先次序排列。一般来说,约束的一般性越强,其优先级越低。相反,约束的针对性越强,其优先级越高。举例来说,时钟网络上的某个一般性 PERIOD 约束将被特定网络的具有更高优先级的 FROM: TO 约束所覆盖。
特定 FROM: TO(或 FROM: THRU:TO)约束在时钟域内任意网络中的重要性均高于一般性约束。
为便于进行约束的优先级排列,可运行赛灵思时序分析器(ISE® Design Suite中的静态时序分析工具),并生成时序规格迭代报告,即常说的 .tsi 报告。该报告说明了各约束间是如何迭代的,以及该工具如何为各约束设置默认优先级。
采用 PRIORITY 约束关键词可手动设置任一时序约束的优先级并使其优先于默认的或预先设定的优先级。这对同一路径上的两个或多个时序约束发生冲突时尤为有用。这里的优先级指的是同一路径上有两个或多个时序约束时,该应用哪一个。其余的低优先级约束则被忽略。优先级可在 -10 ~ +10 的范围内设置。
PRIORITY 值越低,优先级越高。注意该值不会影响到哪些路径应率先布局和走线,只有当优先级相同的两个约束出现在同一路径上时,它才会影响由哪个约束控制该路径。
下面将以 PERIOD 只控制从同步元件到同步元件之间的网络,如 FFS 到FFS 为例来进一步介绍(约束以蓝色显示如下):
创建名为 tnm_clk20 的 TIMEGRP(时序分组),包含网络 clk20 驱动的所有下游同步组件。这些同步元件间的所有路径均受时序规格“TS_clk20: 20ns”(同步元件到同步元件 20 纳秒的时间要求)的约束。“HIGH 50%”指 clk20 的占空比为50/50。
在第二个例子中,我们使用 FROM:TO 约束来定义对两个分组间路径的要求,即:
该命令的作用是告知工具,确保数据从时序分组“my_from_grp”包含的元件到“my_to_grp”的元件所用时间为 40纳秒。时序分析器仍将计算从源分组到目标分组的时钟偏移,不过若时钟关联,则优先级较低。也可使用如下预定义分组:
若不选定时间单位(纳秒、皮秒等),则工具将自动默认为纳秒。例如,可这样写约束:
也可只写From 或 只写To ,以使其更具一般性:
如前所述,工具将自动默认上文所述所有 FROM: TO 约束的优先级高于PERIOD 约束,除非另有规定。
除帮助查看时序约束迭代外,.tsi 报告还就如何改进通用约束文件 (UCF) 中的约束提供方法建议。该报告还会告知是否有路径受多重时钟域的约束。下面是约束迭代报告的例子:
在本例中,高优先级的 FROM: TO约束(仅一个)将优先于 PERIOD 约束应用。
建立和保持
在实际的同步数字系统中,数据必须先于进行采样的时钟脉冲边沿到达。达到这一目标所需的最短时间称为“建立时间”。除了先于时钟脉冲边沿到达外,数据必须在时钟脉冲边沿保持一定时间,这一时间称为“保持时间”。保持时间可
以为负,此时数据在时钟脉冲边沿到达前便已结束;可以为零,此时数据保持到时钟脉冲边沿采样;也可为正,此时数据保持到时钟脉冲边沿采样完毕后一段时间。
根据设计,在 FPGA 架构中,对所有速度等级,保持时间均不为正(或零或负)。这样可简化布局和布线,因数据只
需先于时钟脉冲边沿到达,并可在时钟脉冲边沿采样发生后即刻发生变化。数据超出最小建立时间的值称为时序裕量。时序裕量应总是为正。若报告上出现时序裕量
- DSP+FPGA嵌入式多路视频监控系统硬件平台(04-10)
- FPGA最小系统之:实例2 在Xilinx的FPGA开发板上运行第一个FPGA程序(07-15)
- 利用XPS工具快速生成Virtex FPGA的板级支持包(03-18)
- 利用NI CompactRIO与NI Single-Board RIO实现从快速构造原型到低成本发布(03-19)
- 创建还是购买:什么是您嵌入式设计的最好选择?(07-06)
- Pmod规范,或Arduino伪标准(08-27)