您的位置 首页 电子技术

VIVADO时序约束及STA基础

时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序约束。Vivado使用SDC基础上的XDC脚本以文本形式约束。以下讨论如何进行最基本时序约束相关脚本。\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

一、前言

无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计环节。在FPGA设计中,可以在综合后和实现后进行STA来查看设计是否能满足时序上的要求。本文阐述基本的时序约束和STA操作流程。内容主要来源于《Vivado从此开始》这本书,我只是知识的搬运工。

二、时序约束与XDC脚本

时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序约束。Vivado使用SDC基础上的XDC脚本以文本形式约束。以下讨论如何进行最基本时序约束相关脚本。

1 时序约束首要任务是创建主时钟,主时钟即为时钟引脚进入时钟信号或高速收发器生成时钟。[create_clock]

create_clock -name clk_name -period N-waveform {pos_time neg_time}[get_ports port_name](划线部分可选)

创建两个异步的主时钟:

create_clock -name clk_a -period 10 [get_ports clk_a]

create_clock -name clk_b -period 15 [get_ports clk_b]

set_clock_groups -asynchronous -group clk_a -group clk_b

当两个主时钟是异步关系,它们生成时钟同样是异步关系:

set_clock_groups -asynchronous -group [get_clocks clk_a -include_generated_clocks]

-group [get_clocks clk_b -include_generated_clocks]

差分时钟仅约束P端口:

create_clock -name clk -period 10 [get_ports clk_p]

高速收发器生成时钟作为主时钟:

create_clock -name gt0_txclk -period 8 [get_pins GT0/…/TXOUTCLK]

有一种特殊情况无需与具体引脚绑定,即创建虚拟时钟。该约束用于设定输入/输出延迟。需要创建虚拟时钟的场景是输入FPGA的数据由FPGA内部产生时钟采样,如串口通信。

create_clock -name clk_v -period 5

2 创建主时钟后,需要约束生成时钟:[create_generated_clock]

生成时钟分为两种。由PLL MMCM等专用时钟单元生成产生的时钟信号,Vivado会自动产生相关约束。还有一种是自定义生成时钟,一般为逻辑分频得到。

时钟源是时钟端口:

create_generated_clock -name clk_div -source [get_ports clk] -divide_by 2 [get_pins rega/Q] 意思是在rega单元的Q引脚上的时钟信号clk_div是由clk经过2分频得到的生成时钟。

时钟源是引脚:

create_generated_clock -name clk_div -source [get_pins rega/C] -divide_by 2 [get_pins rega/Q]

除了使用-divide_by -multiply_by表示主时钟和生成时钟的频率关系,也可以用 -edges实现更精确的表达:

create_generated_clock -name clk_div -source [get_pins rega/C] -edges {1 3 5} [get_pins rega/Q]

相移关系使用-edge_shift命令描述。

该约束命令还常用于重命名时钟信号:

create_generated_clock -name clk_rename [get_pins clk_gen/…/CLKOUT0]

3 创建时钟组:[set_clock_groups]

a. 异步时钟情况:

set_clock_groups -asynchronous -group clk_a -group clk_b clk_a和clk_b是异步时钟。

b. 物理互斥情况:

create_clock -name clk_a -period 10 [get_ports clk]

create_clock -name clk_b -period 8 [get_ports clk] -add

create_clock -name clk_c -period 5 [get_ports clk] -add

set_clock_groups -physically_exclusive -group clk_a -group clk_b -group clk_c

该种情况仅是为了观察clk引脚时钟信号周期依次为10ns 8ns和5ns时,时序是否收敛。因此这三个时钟物理上不同时存在。

c. 逻辑互斥情况:

set_clock_groups -logically_exclusive

-group [get_clocks -of [get_pins clk_core/…/CLKOUT0]] -group [get_clocks -of [get_pins clk_core/…/CLKOUT1]]

clkout0和clkout1送入到BUFGMUX中,后续根据sel信号确定选择哪一个作为工作时钟。此时clkout0和clkout1同时存在电路中,但仅有一个会作为后续电路工作时钟,因此逻辑上互斥。

特殊用法:当asynchronous 的group只有一个,说明改组内时钟是同步的,但与其他所以时钟异步。

4 设置伪路径:[set_false_path]

设置伪路径后,不再对特殊路径进行时序分析。特殊路径如测试逻辑、添加同步电路后的跨时钟域路径等。在两个时钟域之间应该相互设置为set_false:

set_false_path -from [get_clocks clk_a] -to [get_clocks clk_b]

set_false_path -from [get_clocks clk_b] -to [get_clocks clk_a]

5 常用时钟相关命令:

report_clocks:查看创建的所有时钟

report_property [get_clocks ]:查看时钟clk_name的属性

report_clock_network:查看时钟的生成关系网络

report_clock_interaction:查看时钟交互关系

其中最后一项非常重要,经常被用于查看异步时钟域之间的路径是否安全。若存在不安全路径,需要添加同步、握手或FIFO后,设置为异步时钟组或false_path。

http://news.vvfanli.com/wp-content/uploads/2022/03/20220312063957-622c403d3d523.png

键入该命令后,会生成时钟交互矩阵。对角线是每个时钟内部路径,其他非黑色部分即为存在对应两个时钟的跨时钟域路径。红色部分是非安全路径,若不处理会产生亚稳态。

三、查看时序报告(STA)

本节以一个有很多时序问题的工程为例进行讲解。在综合后即可打开时序概要查看时序报告。

http://news.vvfanli.com/wp-content/uploads/2022/03/20220312063958-622c403e29ec0.png

打开后有如下界面:

http://news.vvfanli.com/wp-content/uploads/2022/03/20220312063959-622c403f7a2a3.png

其中Design Timing Summary是时序概况,包括最大延迟分析、最小延迟分析以及脉冲宽度三个部分。其中WNS或WHS为负数,说明当前设计无法满足建立时间或保持时间要求,也就是说数据无法被稳定采样。

Clock Summary内的信息与使用report_clocks TCL脚本调出来的信息相似,包含了全部已创建的时钟信号。Check Timing部分则包含了未被约束的部分,我们可以根据该部分信息进一步添加必要的约束。Intra-Clock Paths和Inter-Clock Paths则分别描述了同步和异步电路时序路径的裕量参数。

点击WNS或WHS后的数值可以直接找到时序裕量最差的路径:

http://news.vvfanli.com/wp-content/uploads/2022/03/20220312064000-622c404093bee.png

双击路径信息所在行任意位置,界面会跳转到该路径的详细信息界面:

http://news.vvfanli.com/wp-content/uploads/2022/03/20220312064001-622c40418c47d.png

四类时序路径中,除了FPGA输入端口到输出端口这一特殊情况外,其他时序路径均由源时钟路径、数据路径和目的时钟路径三部分构成。上表中各项的具体解释见官方文档UG908.

审核编辑 :李倩

<!–

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: admin

为您推荐

智慧路灯照明系统的应用为智慧城市的发展建设添砖加瓦

智慧路灯照明系统的应用为智慧城市的发展建设添砖加瓦

智慧路灯照明系统的应用为智慧城市的发展建设添砖加瓦-夜间的路灯不仅照亮了黑暗的街道,而且照亮了回家的道路。从街上望去,闪烁的路灯发出暖光,指引着我们家的方向。城市里的路灯就像“守护者”,给长途旅行回来的游客带来了极大的安全感。 当今,路灯智能控制时代的到来,极大地促进了传统路灯的人工机械化运行。虽然对此感到兴奋,但我们不禁要问:随着路灯智能控制的早期到来,除了改善路灯的运行模式,还能带来什么? 为城市交通提供安全保障 城市公共照明系统中的智能路灯在每个路

晶振在五种不同行业中的应用说明

晶振在五种不同行业中的应用说明-晶振在五种不同行业的应用-由TST嘉硕代理KOYU光与电子

几种不同的物联网控制APP模式

本文就简单介绍当前几种物联网控制APP模式,让大家了解几种不同的技术路线。\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

苹果稳坐全球可穿戴设备数量首位,占据日本市场超7成份额

苹果稳坐全球可穿戴设备数量首位,占据日本市场超7成份额

苹果公司占据2021年日本第四季度可穿戴设备71.5%份额,占据全球可穿戴设备市场34.9%份额。\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

如何用GPUDirect存储器如何缓解CPU I / O瓶颈

除了使用 GPUs 而不是 CPU 加快计算的好处外,一旦整个数据处理管道转移到 GPU 执行,直接存储就起到了一个力倍增器的作用。这一点变得尤为重要,因为数据集大小不再适合系统内存,而且 GPUs 的数据 I / O 增长成为处理时间的瓶颈。当人工智能和数据科学继续重新定义可能的艺术时,启用直接路径可以减少甚至完全缓解这个瓶颈。\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部