병렬 플래시 로더 인텔® FPGA IP 사용할 때 fpga_data 및 fpga_dclk의 타이밍 제약은 병렬 플래시 로더의 PFL 타이밍 제한 인텔® FPGA IP 코어 사용 설명서에 설명되어 있습니다. 그러나 문서 버전 2019.02.19 및 이전 버전의 제약 조건은 올바르지 않습니다.
fpga_data 및 fpga_dclk의 타이밍을 적절하게 제한하려면 입력 클록과 DCLK 출력 간의 비율에 따라 다음 타이밍 제약 조건 중 하나를 사용합니다.
[ 입력 클럭과 DCLK 출력의 비율 = 1일 때 ]
# 시계 생성
create_clock -name {pfl_clk} -period <pfl_clk period> -waveform { 0.000 <pfl_clk period>/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 <pfl_clk period> -waveform { 0.000 <pfl_clk period>/2 } [get_ports {pfl_clk}]
# 생성된 클럭 생성
create_generated_clock -name {<DCLK 레지스터 출력의 클럭 이름>} -source [get_ports {pfl_clk}] -divide_by <입력 클록과 DCLK 출력의 비율> -master_clock {pfl_clk} [get_registers {<DCLK 레지스터>} ]
create_generated_clock -name {<핀fpga_dclk DCLK의 클럭 이름>} -source [get_registers {<DCLK 레지스터>}] -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의 클럭 이름>}] -reference_pin [get_ports {fpga_dclk}] <유지 시간 제약> [get_ports {fpga_data*}]
# 멀티사이클 경로 설정
set_multicycle_path -setup -start -from [get_clocks {pfl_clk}] -to [get_clocks {<핀에서 DCLK의 클록 이름>}] < 입력 클록과 DCLK 출력 간의 비율>/2
set_multicycle_path -hold -start -from [get_clocks {pfl_clk}] -to [get_clocks {<핀에서 DCLK의 클록 이름>}] <입력 클록과 DCLK 출력 간의 비율> -1
• 이 예에서는 PFL 인텔 FPGA IP 코어의 포트 이름이 사용됩니다.
• DCLK 레지스터는 pfl_clk 나누는 레지스터입니다. 레지스터 이름은 일반적으로 "fpga_dclk_reg"입니다. Technology Map Viewer 도구를 사용하여 포트에서 소스 대상을 추적하여 레지스터fpga_dclk 찾을 수 있습니다.
• 인텔은 타이밍 분석기 GUI를 사용하여 주파수를 검증할 것을 권장합니다.
[예]
•조건
o pfl_clk주기 = 20ns(50MHz)
o 입력 클록과 DCLK 출력 간의 비율 = 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 -from [get_clocks {pfl_clk}] -to [get_clocks {fpga_dclk_pin}] 1
set_multicycle_path -hold -start -from [get_clocks {pfl_clk}] -to [get_clocks {fpga_dclk_pin}] 1