取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
Highlighted
Visitor
Visitor
642 次查看
注册日期: ‎07-04-2020

时序约束不满足,相同代码每次implementation后上板测试结果都不同,也不是仿真的结果。

新手求教!请问怎么处理?从哪些地方下手?
0 项奖励
8 回复数
Highlighted
Moderator
Moderator
630 次查看
注册日期: ‎11-05-2010

1. 先确认时序约束本身正确.

2. 保证时序约束满足

时序约束不能满足时,逻辑功能不能保障(预测)

-------------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
611 次查看
注册日期: ‎07-04-2020

您好。我设置了两个时钟的约束。QQ截图20200708005915.png

然后这是报告QQ截图20200708010015.png

能麻烦您看下怎么哪里出了问题吗?

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
562 次查看
注册日期: ‎07-17-2008

从时序报告来看,WNS对应的是跨时钟域路径:

Slack (VIOLATED) : -8.108ns (required time - arrival time)
Source: reset_of_clk98M_reg/C
(rising edge-triggered cell FDPE clocked by clk_out1_pll_example {rise@0.000ns fall@5.084ns period=10.167ns})
Destination: top/pc/inst_address_reg[11]/D
(rising edge-triggered cell FDCE clocked by clk_out3_pll_example {rise@0.000ns fall@10.042ns period=20.084ns})
Path Group: clk_out3_pll_example
Path Type: Setup (Max at Slow Process Corner)
Requirement: 0.126ns (clk_out3_pll_example rise@803.347ns - clk_out1_pll_example rise@803.222ns)
Data Path Delay: 7.847ns (logic 2.538ns (32.345%) route 5.309ns (67.655%))
Logic Levels: 14 (CARRY4=3 LUT3=1 LUT4=1 LUT5=3 LUT6=6)
Clock Path Skew: -0.184ns (DCD - SCD + CPR)
Destination Clock Delay (DCD): -1.261ns = ( 802.086 - 803.347 )
Source Clock Delay (SCD): -0.822ns = ( 802.399 - 803.222 )
Clock Pessimism Removal (CPR): 0.255ns
Clock Uncertainty: 0.275ns ((TSJ^2 + DJ^2)^1/2) / 2 + PE
Total System Jitter (TSJ): 0.071ns
Discrete Jitter (DJ): 0.301ns
Phase Error (PE): 0.120ns

看起来是同一个MMCM/PLL输出的两个时钟,由于频率的差异,最差情况的requirement被识别为126 ps,显然是不可能满足的。

Vivado里面,任何两个时钟,只要存在逻辑上的交互路径,默认都是按照最差要求做分析。你需要整体评估一下时序约束,特别是跨时钟域,根据设计的实际要求,是否需要做额外的exception约束去放松。

-------------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
Highlighted
Visitor
Visitor
535 次查看
注册日期: ‎07-04-2020

您好,的确是这样,50Mhz的时钟通过MMCM生成了三个不同频率的时钟,然后接到不同的模块,不同模块之间有数据交互。我在网上查了一下,是要设置他们为异步时钟吗?使用set_clock_group 命令。

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
520 次查看
注册日期: ‎07-17-2008

从时钟结构上来说,这两个时钟的相互关系工具是知道的,并不是典型的异步时钟。是否设置成异步时钟(即忽略路径分析)是依据你的具体设计而定,对于异步跨时钟域路径,一般设计上是有相应的处理来做保障。

-------------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
506 次查看
注册日期: ‎07-04-2020

您好,麻烦您了。新手感觉无从下手。通过MMCM生成的三个时钟,一个频率为98Mhz的时钟经过分频到9600hz连接到串口,一个频率为500Mhz的时钟连接到sram内存读写模块,最后一个50Mhz的时钟连接到cpu作为主频。您说的:“一般设计上是有相应的处理来做保障”,能具体讲一讲怎么处理吗?设计一直被卡在这里,不知道怎么办,快疯掉了。
0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
501 次查看
注册日期: ‎07-17-2008

如果是把同一个MMCM的输出时钟完全作为异步时钟来用,而时钟之间又逻辑上存在跨时钟域路径,那设计上肯定得做一定的处理。最常用的单bit做至少两步目标时钟域打拍,多bit用异步FIFO电路等等,否则即使时序上忽略分析不报错,你怎么确保比如从98MHz到50MHz的数据传输不受亚稳态干扰呢?除非你的应用里面即使出错了也是不care的。

-------------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
0 项奖励
Highlighted
Visitor
Visitor
497 次查看
注册日期: ‎07-04-2020

好的谢谢您,我去查查相关内容。

0 项奖励