在使用并行闪存加载器英特尔® FPGA IP时,fpga_data和fpga_dclk的时序限制在并行闪存加载器 英特尔® FPGA IP 内核用户指南 中描述了限制 PFL 时序。 但是,文档版本 2019.02.19 及更早版本中的限制并不正确。
要正确约束fpga_data和fpga_dclk的计时,可根据输入时钟和 DCLK 输出之间的比使用以下时序限制之一。
[ 当输入时钟和 DCLK 输出比率 = 1 ]
# 创建时钟
create_clock -name {pfl_clk} -period -波形 { 0.000 /2 } [get_ports {pfl_clk}]
# 创建生成的时钟
create_generated_clock -name {fpga_dclk} -source [get_ports {pfl_clk}]-master_clock {pfl_clk} -invert [get_ports {fpga_dclk}]
# 设置输出延迟
set_output_delay -add_delay -max-clock [get_clocks {fpga_dclk}] [get_ports {fpga_data*}]
set_output_delay -add_delay -min -clock [get_clocks {fpga_dclk}] [get_ports {fpga_data*}]
[ 当输入时钟和 DCLK 输出比> 1 ]
# 创建时钟
create_clock -name {pfl_clk} -period -波形 { 0.000 /2 } [get_ports {pfl_clk}]
# 创建生成的时钟
create_generated_clock -name {} -source [get_ports {pfl_clk}] -divide_by -master_clock {pfl_clk} [get_registers {} ]
create_generated_clock -name {} -source [get_registers {}] - master_clock DCLK 寄存器输出} [get_ports {fpga_dclk}]
# 设置输出延迟
set_output_delay -add_delay -max-clock [get_clocks {< DCLK 名称>}] -reference_pin [get_ports {fpga_dclk}] [get_ports {fpga_data*}]
set_output_delay -add_delay -min -clock [get_clocks {< DCLK 的clock 名称>}]-reference_pin [get_ports {fpga_dclk}] [get_ports {fpga_data*}]
# 设置多周期路径
set_multicycle_path -setup -start-从 [get_clocks {pfl_clk}]-到 [get_clocks {}] /2
set_multicycle_path -hold-start-从 [get_clocks {pfl_clk}]-到 [get_clocks {}] -1
• 在此示例中,使用了 PFL 英特尔 FPGA IP core 的端口名称。
• DCLK 寄存器是一种除pfl_clk的寄存器。寄存器名称通常为"fpga_dclk_reg"。您可以使用 Technology Map Viewer 工具从fpga_dclk端口跟踪源目的地来查找寄存器。
• 英特尔建议使用时序分析器 GUI 来验证这些系列。
[示例]
• 条件
o pfl_clk周期 = 20 纳米 (50MHz)
输入时钟和 DCLK 输出之间的 o 比 = 2
• 时序限制
# 创建时钟
create_clock -name {pfl_clk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {pfl_clk}]
# 创建生成的时钟
create_generated_clock -name {fpga_dclk_gen} -source [get_ports {pfl_clk}]-divide_by 2 -master_clock {pfl_clk} [get_registers {pfl:inst|altparallel_flash_loader:altparallel_flash_loader_component|alt_pfl:\PFL_CFI:pfl_cfi_inst|alt_pfl_cfg3:\CFG3:cfg|alt_pfl_cfg_fpga:alt_pfl_cfg_fpga|fpga_dclk_reg}]
create_generated_clock -name {fpga_dclk_pin} -source [get_registers {pfl_top:pfl_top_inst|altera_parallel_flash_loader:parallel_flash_loader_0|altparallel_flash_loader:altparallel_flash_loader_component|alt_pfl:\PFL_CFI:pfl_cfi_inst|alt_pfl_cfg3:\CFG3:cfg|alt_pfl_cfg_fpga:alt_pfl_cfg_fpga|fpga_dclk_reg}] -master_clock {fpga_dclk_gen} [get_ports {fpga_dclk}]
# 设置输出延迟
set_output_delay -add_delay -max-clock [get_clocks {fpga_dclk_gen}]-reference_pin [get_ports {fpga_dclk}] 5.500 [get_ports {fpga_data*}]
set_output_delay -add_delay -min -clock [get_clocks {fpga_dclk_gen}]-reference_pin [get_ports {fpga_dclk}] -1.000 [get_ports {fpga_data*}]
# 设置多周期路径
set_multicycle_path -setup-start-从 [get_clocks {pfl_clk}] - 到 [get_clocks {fpga_dclk_pin}] 1
set_multicycle_path -hold-start-从 [get_clocks {pfl_clk}]-到 [get_clocks {fpga_dclk_pin}] 1