我们在使用一些以太网PHY和FPGA接口是RGMII接口是DDR双沿结构,还有ADC芯片也也是DDR双沿采样接口,以及CMOS视频传感器也有很多DDR双沿源同步接口。
我们这里以IMX222视频传感器的的DDR为例约束input ddr 接口如何进行约束和时序分析以及收敛
源同步边缘对齐fpga输入直接模式(输入端不加PLL)
这是IMX222手册中DDR接口的时钟和数据的边缘对齐的源同步时序参数,此参数供我们后边时序约束使用。
这是基本的input delay 的时序基本模型,其实也是两级寄存器之间的时序
这是我们input delay 边缘对齐 DDR模式约束时序模型,采样上升沿发送 下降沿采样做建立时间分析和下降沿发送到上升沿采样做建立时间分析。
假如我们同步时钟是54Mhz,按照IMX222的时序参数rise max= 18.518/2 + 2ns; rise min = 18.518/2 -2ns;同理下降沿也是
我们将此参数输入到xdc约束中综合工程并查看时序报告,我们使用2018.2vivado 综合例子工程得到input 路径中有一些时序违例。
create_clock -period 18.518 -name rx_clk -waveform {0.000 9.259} [get_ports rx_clk]
set_input_delay -clock [get_clocks rx_clk] -rise -max 11.259 [get_ports {rx_ctrl {rx_dat[0]} {rx_dat[1]} {rx_dat[2]} {rx_dat[3]}}]
set_input_delay -clock [get_clocks rx_clk] -rise -min 7.259 [get_ports {rx_ctrl {rx_dat[0]} {rx_dat[1]} {rx_dat[2]} {rx_dat[3]}}]
set_input_delay -clock [get_clocks rx_clk] -clock_fall -fall -max -add_delay 11.259 [get_ports {rx_ctrl {rx_dat[0]} {rx_dat[1]} {rx_dat[2]} {rx_dat[3]}}]
set_input_delay -clock [get_clocks rx_clk] -clock_fall -fall -min -add_delay 71.259 [get_ports {rx_ctrl {rx_dat[0]} {rx_dat[1]} {rx_dat[2]} {rx_dat[3]}}]
通过时序报告查看发现,要求到达的时间过小,也就是时钟的延迟比数据的延迟小,这样无法保证建立时间的余量,通过时序报告查看到问题所在我们就在代码中的时钟端加入idelay2原语进行延迟时钟。
增加IDELAYE2之后综合生成时序报告已经没有时序违例
如果希望看完整视频可以 B站 搜FPGA尤老师或者V3学院 码课网 去找FPGA时序分析公开课,有完整视频和代码工程。或者加尤老师微信获取课程介绍 15921999232
转载:https://blog.csdn.net/weixin_38828382/article/details/114149959