1.6.4. I/Oピンの制約
インテル® Quartus® Prime ソフトウェアは、汎用シリアル・フラッシュ・インターフェイス Intel® FPGA IP ファイルのI/Oタイミング制約を自動的に生成しません。汎用I/Oピンを使用してSPIピン・インターフェイスを有効にするには、タイミング制約を手動で入力する必要があります。タイミングガイドラインと例に従って、TimingAnalyzerがI/Oタイミングを正しく分析するようにします。
- 汎用シリアル・フラッシュ・インターフェイス Intel® FPGA IPの入力クロックを制限します 。例:
#************************************************************** # Create Clock #************************************************************** #constrain the base clock using create_clock, this is typically a clock coming into the device on an input clock pin #here, clk_clk is a 10ns clock with a 50 percent duty cycle, where the first rising edge occurs at 0ns applied to port clk_clk create_clock -name {clk_clk} -period 10.000 -waveform { 0.000 5.00 } [get_ports {clk_clk}]
- タイミング制約を作成して dclk、汎用シリアル・フラッシュ・インターフェイス Intel® FPGA IPからのSPI出力クロックです 。最大SPIクロックは入力クロックの半分です。例:
#************************************************************** # Create Generated Clock #************************************************************** #constrain the generated clock dclk. The input clock of GSFI IP is used and created a counter logic to generate a slower DCLK that is used as SPI clock #here, we set the maximum dclk, which is half of the input clk_clk #refer to the GSFI UG, and you find that the maximum SPI clock baud-rate divisor is 2. create_generated_clock -name {dclk_int} -source [get_ports {clk_clk}] -divide_by 2 [get_pins {u0|intel_generic_serial_flash_interface_top_0|intel_generic_serial_flash_interface_top_0|qspi_inf_inst|flash_clk_reg|q}] create_generated_clock -name {dclk} -source [get_pins {u0|intel_generic_serial_flash_interface_top_0|intel_generic_serial_flash_interface_top_0|qspi_inf_inst|flash_clk_reg|q}] [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_dclk}]
- マルチサイクルパスを設定して、入力クロックとSPIクロック間のセットアップとホールドクロックの関係を変更します。例:
#************************************************************** # Set Multicycle Path #************************************************************** # For a divide by 2 DCLK # SPI lactched data on rising edge dclk and FPGA driven data output on rising edge clk_clk set_multicycle_path -setup -start -from [get_clocks {clk_clk}] -to [get_clocks {dclk}] 2 set_multicycle_path -hold -start -from [get_clocks {clk_clk}] -to [get_clocks {dclk}] 1 # SPI driven data on falling edge of dclk and FPGA latched data on second rising edge of clk_clk set_multicycle_path -setup -end -from [get_clocks {dclk}] -to [get_clocks {clk_clk}] 2 set_multicycle_path -hold -end -from [get_clocks {dclk}] -to [get_clocks {clk_clk}] 1
- クワッド・シリアル・ペリフェラル・インターフェイス (QSPI) IO ピンの入力および出力遅延を設定します。 例:
#************************************************************** # Set Input Delay #************************************************************** #$input_delay is determined by Tco values and board parameters (outside of FPGA) #$input_delay max = data_trace_max - clk_trace_min + ext_tco_max #$input_delay min = data_trace_min - clk_trace_max + ext_tco_min set_input_delay -clock { dclk } -max -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[0]}] set_input_delay -clock { dclk } -min -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[0]}] set_input_delay -clock { dclk } -max -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[1]}] set_input_delay -clock { dclk } -min -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[1]}] set_input_delay -clock { dclk } -max -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[2]}] set_input_delay -clock { dclk } -min -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[2]}] set_input_delay -clock { dclk } -max -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[3]}] set_input_delay -clock { dclk } -min -clock_fall -add_delay $input_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[3]}]
#************************************************************** # Set Output Delay #************************************************************** #$output_delay is determined by Th and Tsu values and board parameters (outside of FPGA) #$output_delay max = data_trace_max + Tsu - clk_trace_min #$output_delay min = data_trace_min - Th - clk_trace_max set_output_delay -clock { dclk } -max -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[0]}] set_output_delay -clock { dclk } -min -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[0]}] set_output_delay -clock { dclk } -max -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[1]}] set_output_delay -clock { dclk } -min -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[1]}] set_output_delay -clock { dclk } -max -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[2]}] set_output_delay -clock { dclk } -min -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[2]}] set_output_delay -clock { dclk } -max -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[3]}] set_output_delay -clock { dclk } -min -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_data[3]}] set_output_delay -clock { dclk } -max -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_ncs}] set_output_delay -clock { dclk } -min -add_delay $output_delay [get_ports {intel_generic_serial_flash_interface_top_0_qspi_pins_ncs}]