时序

如何利用Vivado的时钟不确定性来改善时序

Plunify的InTime策略将在下一个版本里利用和融入set_clock_uncertainty设置来改善时序优化。但是,如果读者等不及的话,可手动尝试使用Vivado自身的时钟不确定性来改善设计的时序。

在不需要修改实际时钟沿和相位关系情况下来过度约束设计最安全和最有效的方式,使Vivado寻求更多的解决途径,提供可能更好的时序结果。

set_clock_uncertainty:指令实现时钟的定时路径或者两个时钟之间添加额外的余量。

概述:设置时钟不确定性并且在不同阶段消除它的影响。
• 例如: 将200ps时钟不确定性添加到布局的最关键路径
• 消除布线阶段的时钟不确定性

方法依赖于:
• 约束那个具体时钟?
• 需要添加时钟不确定性的具体量?
• 应用和消除时钟不确定性的阶段?

参考文献:
• https://www.xilinx.com/support/documentation/sw_manuals/xilinx2016_4/ug949-vivado-design-methodology.pdf(page144)

简化和传统FPGA设计流程步骤主要由以下图为代表:

简化和传统FPGA设计流程步骤

FPGA设计所需优化时序的主要三大步骤为:

主要方式:改代码/约束
• 需要资深的工程师,要懂得改。
• 接近项目过点或是已验证过,不好改代码,避免造成新的问题

提升至更高器件等级、型号
• 提升速度等级或型号
• 成本高

FPGA工具的综合与布局布线选项
• 尝试种子(placement seeds)
• 时盲目尝试,但是时序相差太大就会无效

现今技术的飞跃和进步,运算资源价格的逐步下降,机器学习的崛起,但在大数据没有很好被有效利用的情况下,Plunify通过这些技术优势的结合,继续创新与推出新的InTime版本,以其促使颠覆旧有的FPGA设计步骤与流程。Plunify倡导新的FPGA设计流程如下图:

建立时间和保持时间(setup time 和 hold time)

建立时间和保持时间贯穿了整个时序分析过程。只要涉及到同步时序电路,那么必然有上升沿、下降沿采样,那么无法避免setup-time 和 hold-time这两个概念。

1. 什么是setup-time 和 hold-time
不论是在输入,输出或是寄存器-寄存器之间,只要设计到时钟上升沿/下降沿的采样,就会提到setup time 和 hold time。这两个指标说明器件本身不是理想的(时延等),正是这个不理想的特性,限制了工作时钟等。

Setup time is the minimum amount of time the data signal should be held steady before the clock event so that the data is reliably sampled by the clock. This applies to synchronous input signals to the flip-flop.

时序收敛基本概念

对于FPGA而言,时序收敛是一个很重要的概念。在我看来,时序约束是必要的,但不是在最重要的,我们应该在设计初始就考虑到时序问题,而不是完全的靠约束来获得一个好的结果。但我认为,对FPGA时序的分析能力是理解其运行机制的必要条件。之前也简单看过这方面的内容,却没有很正确的认识。这两天看了看UG612和相关内容,记录在此,这应该有一系列文章,希望不要烂尾。

1. FPGA时序的基本概念
FPGA器件的需求取决于系统和上下游(upstream and downstrem)设备。我们的设计需要和其他的devices进行数据的交互,其他的devices可能是FPGA外部的芯片,可能是FPGA内部的硬核(是否还能是其他的FPGA design?我的理解是,如果两个FPGA design和成了一个,那么ucf内的时序约束是要修改的)。

UltraFAST设计方法培训将帮助您时序收敛阶段实现“Sign-off” 质量XDC约束。另外,还帮助您显著提高时序收敛实现效率,无论该设计有多么复杂。

时序收敛-基本方法论

本部分内容参考ug612 《Timing Closure User Guide 》,主要是对第二章内容的整理和翻译。

在一个有效的设计中,生成工具必须要了解每一条路径上的时序约束。时序需求可以被分为几个大类,最通用的类型包括:

. Input paths

. Register-to-register paths

. Output paths

. Path specific exceptions

指定约束应该从全局约束开始,然后添加局部路径的例外。也就是说,全局的约束优先级是最低的。

在FPGA设计中,时序就是全部

作者:Synopsys FPGA产品营销经理Angela Sutton,Synopsys FPGA应用工程师Paul Owens

当你的FPGA设计不能满足时序要求时,原因也许并不明显。解决方案不仅仅依赖于使用FPGA的实现工具来优化设计从而满足时序要求,也需要设计者具有明确目标和诊断/隔离时序问题的能力。设计者现在有一些小技巧和帮助来设置时钟;使用像Synopsys Synplify Premier一样的工具正确地设置时序约束;然后调整参数使之满足赛灵思FPGA设计性能的目标。

时序分析/约束(二)——静态时序分析(STA)

1. 时序分析的作用
工作频率对数字电路而言至关重要。提高工作频率意味着更强大的处理能力,但是也带来了时序瓶颈:时序冲突的概率变大,电路的稳定性降低。所以为了使电路的性能达到设计的预期目标,并满足电路工作环境的要求,必须对一个电路设计进行时序、面积、负载等多方面的约束,并自始至终使用这些约束来驱动EDA软件工作。

ISE 具有一定的自动优化能力,对于一般的低速设计(处理时钟不超过100MHz),基本上不需要时序方面的任何手动分析和处理;但是对于高速和大规模设计,需要设计人员自行添加时序方面的控制和处理,通过多次反复操作,根据反馈结果逐步调整设定,直到满足要求为止。

Verilog三段式状态机描述(转载)

时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。

状态机采用VerilogHDL语言编码,建议分为三个always段完成。

三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。

三段式描述方法虽然代码结构复杂了一些,但是换来的优势是:使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

示列如下:

//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器,时序部分,用于切换状态机
always @ (posedge clk or negedge rst_n) //异步复位
if(!rst_n)
current_state <= IDLE; //第一个进程只有current_state 被赋值,next_state在第二个进程被赋值
else
current_state <= next_state; //注意,使用的是非阻塞赋值

FPGA时序问题的解决办法 (已解答)

问题1:快时钟域到慢时钟域出的错,
Requirement: 0.250ns
Data Path Delay: 1.215ns (Levels of Logic = 1)(Component delays alone exceeds constraint)
Clock Path Skew: -0.214ns (3.878 - 4.092)
Source Clock: clk_160MHzPLL1 rising at 143.750ns
Destination Clock: clk_125_0000MHzPLL0 rising at 144.000ns
Clock Uncertainty: 0.300ns
Slack (setup path): -1.479ns (requirement - (data path - clock path skew + uncertainty))
可以对clk_125_0000MHzPLL0 rising at 144.000ns 时钟延迟1.38ns编译一次看看
Clock Path Skew: -0.214ns (3.878 - 4.092)

同步内容