这是一个经典的时序分析模型,上游芯片将时钟发送给FPGA,对于内部同步元件之间的可以使用create_clock进行约束,对于外部芯片发送数据通过FPGA端口到达FPGA内部第一级接受触发器使用set_input_delay进行约束,对于FPGA的末级触发器通过端口到达下游芯片使用set_output_delay进行约束。输入端口到输出端口的组合逻辑使用set_max_delay进行约束。
图中trace_delay指的是板级延迟,输入延迟指的是上游芯片的时钟沿发出数据到FPGA接收到数据所需的时间input_delay。
Input_delay = Tco(clock output) + TD(trace delay)
最大延迟可以构建建立时间约束,最小延迟可以构建保持时间约束。
DDR的约束:在上升沿和下降沿都进行数据采样
set_input_delay 1 -min -clock clk [get_ports data_in]
set_input_delay 2 -max -clock clk [get_ports data_in]
set_input_delay 1 -min -clock clk [get_ports data_in] -clock_fall -add_delay(防止语句覆盖掉前面的语句,需要加add_delay)
set_input_delay 2 -max -clock clk [get_ports data_in] -clock_fall -add_delay
set tco_max 2,0
set td_max 3.0
set tco_min 0.0
set td_min 0.0
create_clock -name sysclk -period 10 [get_ports clkin] //创建系统时钟
set_input_delay -clock sysclk -max [expr {$tco_max+$td_max}] [get_points din]
set_input_delay -clock sysclk -min [expr {$tco_min+$td_min}] [get_points din]