修改时间 04-01-2021 04:06 PM
用输入时钟50M的PLL产生三路时钟:100M,125M以及50M
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1__100.00000______0.000______50.0______162.035____164.985
// clk_out2__125.00000______0.000______50.0______154.207____164.985
// clk_out3__50.00000______0.000______50.0______192.113____164.985
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary__________50.000____________0.010
CLK_PLL instance_name
(
// Clock out ports
.clk_out1(clk_out1), // output clk_out1
.clk_out2(clk_out2), // output clk_out2
.clk_out3(clk_out3), // output clk_out3
// Status and control signals
.reset(reset), // input reset
.locked(locked), // output locked
// Clock in ports
.clk_in1(clk_in1)); // input clk_in1
请问如何解决?
修改时间 04-01-2021 04:53 PM
你要看一下哪些路径没过,是否是跨时钟的路径报了timing为例
修改时间 04-01-2021 04:58 PM
这个错误发生于clk_out1到clk_out2的跨时钟域。对于时序分析工具来说,默认是按照两个时钟沿之间的最紧要求去做分析,在你的例子里是2ns。你可以选择具体fail的路径,双击打开路径详情进行查看。
2ns还是比较高的要求,如果你的设计中有跨时钟域的处理和保障,那需要根据实际情况去做timing exception约束,比如set_max_delay等。
修改时间 04-02-2021 03:57 PM
工具会分析所有沿到沿的差值,取最小的情况。你从2ns的括号中计算也可以得到,当目的地时钟clk_out2上升沿为32ns,源时钟上升沿为30ns的时候,可得到最紧的requirement。
这是跨时钟域的逻辑路径,发送和接收时钟不是同一个,在这里是慢时钟到快时钟,那么在实际设计中,需要达到怎样的性能?按2ns分析是否符合实际,这是设计者需要评估和处理的。如果符合实际,那需要优化代码,比如这条路径有2级LUT,最好减小逻辑层次。如果不符合实际,代码做了相应的保障能放宽要求的话,需要添加额外的约束例如set_max_delay来覆盖默认的2ns,按实际的要求做分析。