02-24-2020 07:51 PM - 编辑日期 03-10-2020 03:44 PM
测试一个简单的256点FFT ip,顶层设计就只有一个ip的调用,没加任何其他的逻辑。
实现完成了,时序检查都MET了,后仿功能仿真输出结果没有任何问题。但是timing仿真就各种 DSP48E1 和 RAMB18E1 timing violation,并且FFT的data输出端口m_axis_tdata都是未知态,m_axis_tuser却能正确输出FFT后的index。
类似"WARNING: "/tools/Xilinx/Vivado/2019.1/data/verilog/src/unisims/DSP48E1.v" Line 2119: Timing violation in scope /TESTBED/u_fft256/u_fft/U0/i_synth/xfft_inst/non_floating_point.arch_d.xfft_inst/pe_gen[0].natural_order_input.PE/has_TW_mult.MULT/i_cmpy/three_mult_structure.use_dsp.i_dsp48/mult2_preadder_d_plus_a.mult2/mult/use_prim.appDSP48[0].bppDSP48[0].use_dsp.use_dsp48e1.iDSP48E1/TChk2119_48822 at time 1575546 ps $setuphold (posedge CLK,posedge D,(0:0:0),(0:0:0),notifier,d_en_p,d_en_p,clk_dly,d_dly)".
附件为RTL代码,TESTBED,约束文件,DRC报告, TIMING报告,以及仿真日志。
另外附上整个工程的网盘连接,有40 MB:
链接: https://pan.baidu.com/s/1Gx-udje2NA7cAh3NCmqwtw 提取码: i8h1
修改时间 02-26-2020 11:56 AM
时序报告贴上来看看吧
-vivian
修改时间 03-04-2020 10:11 AM
如果想手动检查DSP为终点的路径,可以Open Implemented Design后运行report_timing:
e.g. report_timing -to [get_pins <DSP48 full hierarchical name>/D] -max_paths 50 -delay_type min_max
仿真的时序检查基于SDF文件,跑一次仿真默认用最大值用于setup检查,也可以设选项用最小值做hold检查。静态时序分析工具会对setup和hold检查做min/max组合,取slow和fast corner两相比较的较差结果。以下文章对这部分内容有所讨论:
两者可能存在差异,以静态时序为最终结果。
回到你这个仿真的问题,如果一直保持X输出,并且已经在运行了一段仿真时间,并不像是时序问题导致。你可能需要逐级查看信号源看是否能做进一步分析。如果可以附上整个工程(File > Project > Archive),也可以本地帮你看一看。
修改时间 03-10-2020 03:48 PM
非常感谢您的回复!我已经把工程文件附在了下面,文件40 MB,超过附件限制,所以放在了网盘上,请谅解。请您帮我看一下是哪里出的问题,谢谢!
链接: https://pan.baidu.com/s/1Gx-udje2NA7cAh3NCmqwtw 提取码: i8h1