01signal.com

Vivado: synthesis이후 "최대 주파수" 찾기

동기 부여

ISE의 synthesizer (xst)에 의해 생성된 보고서 하단 어딘가에 가장 느린 path의 윤곽과 함께 최대 주파수가 무엇인지 나와 있습니다. 이것은 특히 특정 module을 최적화하려고 할 때 상당히 좋은 기능입니다. Vivado가 있는 synthesis 이후에는 그러한 수치가 주어지지 않습니다. 아마도 Xilinx 의 사람들이 이 "최대 주파수"가 오해의 소지가 있다고 생각했기 때문일 것입니다. 그렇다면 두 가지 타당한 이유가 있습니다.

그리고 여전히 완전한 implementation의 Via Dolorosa 이전에 상황이 어디에 있는지에 대한 아이디어를 얻는 것이 유용할 때가 있습니다.

Vivado에서 수행하는 방법

맨 먼저: 기대에 따라 timing constraints를 설정하십시오. 또는 적어도 어떤 clock이 중요하고 어떤 것이 느릴 수 있는지 명확히 하는 방식으로. 그런 다음 design에서 synthesis를 수행합니다.

synthesis가 성공적으로 완료된 후 synthesized design을 엽니다(왼쪽 bar 에서 "Open Synthesized Design" 클릭 또는 Tcl 명령 "open_run synth_1" 사용).

Tcl window에서 명령을 작성하십시오.

report_timing_summary -file mytiming.rpt

전체 post-synthesis timing report를 mytiming.rpt에 씁니다. "report_timing_summary"는 console로 출력합니다.

왼쪽 bar의 "Synthesized Design" 아래에 "Report Timing Summary" 옵션도 있지만 GUI 인터페이스를 사용하여 보고서에서 정보를 얻기가 어렵습니다.

보고서 읽기

규칙 #1 : synthesis report는 대략적인 추정치에 불과합니다. routing delays는 추측입니다. implementation이 상관없이 성공할 timing failures를 보고할 수 있으며, implementation이 엄청나게 실패할 경우(특히 FPGA의 logic usage가 100%에 근접할 때) 모든 것이 정상이라고 말할 수 있습니다.

이제 실행: 가장 먼저 살펴볼 것은 clock summary 와 Intra Clock Table이 며, Vivado가 어떤 clock에 이름을 붙였는지 알아보세요. 예를 들어,

------------------------------------------------------------------------------------------------
| Clock Summary
| -------------
------------------------------------------------------------------------------------------------

Clock                  Waveform(ns)         Period(ns)      Frequency(MHz)
-----                  ------------         ----------      --------------
clk_fpga_1             {0.000 5.000}        10.000          100.000
gclk                   {0.000 4.000}        8.000           125.000
  audio_mclk_OBUF      {0.000 41.667}       83.333          12.000
  clk_fb               {0.000 20.000}       40.000          25.000
  vga_clk_ins/clk_fb   {0.000 20.000}       40.000          25.000
  vga_clk_ins/clkout0  {0.000 1.538}        3.077           325.000
  vga_clk_ins/clkout1  {0.000 7.692}        15.385          65.000
  vga_clk_ins/clkout2  {0.000 7.692}        15.385          65.000

------------------------------------------------------------------------------------------------
| Intra Clock Table
| -----------------
------------------------------------------------------------------------------------------------

Clock                      WNS(ns)      TNS(ns)  TNS Failing Endpoints  TNS Total Endpoints      WHS(ns)      THS(ns)  THS Failing Endpoints  THS Total Endpoints     WPWS(ns)     TPWS(ns)  TPWS Failing Endpoints  TPWS Total Endpoints
-----                      -------      -------  ---------------------  -------------------      -------      -------  ---------------------  -------------------     --------     --------  ----------------------  --------------------
clk_fpga_1                   3.791        0.000                      0                12474        0.135        0.000                      0                12474        3.750        0.000                       0                  5021
gclk                                                                                                                                                                     6.751        0.000                       0                     2
  audio_mclk_OBUF                                                                                                                                                       76.667        0.000                       0                     1
  clk_fb                                                                                                                                                                12.633        0.000                       0                     2
  vga_clk_ins/clk_fb                                                                                                                                                    38.751        0.000                       0                     2
  vga_clk_ins/clkout0                                                                                                                                                    1.410        0.000                       0                    10
  vga_clk_ins/clkout1       10.747        0.000                      0                  215       -0.029       -0.229                      8                  215        6.712        0.000                       0                   195
  vga_clk_ins/clkout2        3.990        0.000                      0                  415        0.135        0.000                      0                  415        7.192        0.000                       0                   211

Clock Summary 에 나열된 clock frequencies ( timing constraints에서 파생됨)가 clock 와 이름을 일치시키는 데 도움이 되지 않으면 Intra Clock Table 에 있는 각 clock 의 TNS Total Endpoints가 어떤 clock이 어떤 것인지 알려주는 데 도움이 됩니다. 따라서 관심 있는 clock 의 이름을 찾으면 파일에서 이 이름을 검색하고 다음과 같이 찾습니다.

Max Delay Paths
--------------------------------------------------------------------------------------
Slack (MET) :             3.791ns  (required time - arrival time)
  Source:                 xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_offset_limit_1/C
                            (rising edge-triggered cell FDRE clocked by clk_fpga_1  {rise@0.000ns fall@5.000ns period=10.000ns})
  Destination:            xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_end_offset_0/D
                            (rising edge-triggered cell FDRE clocked by clk_fpga_1  {rise@0.000ns fall@5.000ns period=10.000ns})
  Path Group:             clk_fpga_1
  Path Type:              Setup (Max at Slow Process Corner)
  Requirement:            10.000ns  (clk_fpga_1 rise@10.000ns - clk_fpga_1 rise@0.000ns)
  Data Path Delay:        6.077ns  (logic 2.346ns (38.605%)  route 3.731ns (61.395%))
  Logic Levels:           8  (CARRY4=3 LUT3=1 LUT4=1 LUT6=3)
  Clock Path Skew:        -0.040ns (DCD - SCD + CPR)
    Destination Clock Delay (DCD):    0.851ns = ( 10.851 - 10.000 )
    Source Clock Delay      (SCD):    0.901ns
    Clock Pessimism Removal (CPR):    0.010ns
  Clock Uncertainty:      0.154ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
    Total System Jitter     (TSJ):    0.071ns
    Total Input Jitter      (TIJ):    0.300ns
    Discrete Jitter          (DJ):    0.000ns
    Phase Error              (PE):    0.000ns

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
                         (clock clk_fpga_1 rise edge)
                                                      0.000     0.000 r
                         PS7                          0.000     0.000 r  xillybus_ins/system_i/vivado_system_i/processing_system7_0/inst/PS7_i/FCLKCLK[1]
                         net (fo=1, unplaced)         0.000     0.000    xillybus_ins/system_i/vivado_system_i/processing_system7_0/inst/n_707_PS7_i
                         BUFG (Prop_bufg_I_O)         0.101     0.101 r  xillybus_ins/system_i/vivado_system_i/processing_system7_0/inst/buffer_fclk_clk_1.FCLK_CLK_1_BUFG/O
                         net (fo=5023, unplaced)      0.800     0.901    xillybus_ins/xillybus_core_ins/bus_clk_w
                                                                      r  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_offset_limit_1/C
  -------------------------------------------------------------------    -------------------
                         FDRE (Prop_fdre_C_Q)         0.496     1.397 f  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_offset_limit_1/Q
                         net (fo=5, unplaced)         0.834     2.231    xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_offset_limit[1]
                         LUT4 (Prop_lut4_I0_O)        0.289     2.520 r  xillybus_ins/xillybus_core_ins/unitw_1_ins/Mcompar_n0037_lutdi/O
                         net (fo=1, unplaced)         0.000     2.520    xillybus_ins/xillybus_core_ins/unitw_1_ins/Mcompar_n0037_lutdi
                         CARRY4 (Prop_carry4_DI[0]_CO[3])
                                                      0.553     3.073 r  xillybus_ins/xillybus_core_ins/unitw_1_ins/Mcompar_n0037_cy[0]_CARRY4/CO[3]
                         net (fo=1, unplaced)         0.000     3.073    xillybus_ins/xillybus_core_ins/unitw_1_ins/Mcompar_n0037_cy[3]
                         CARRY4 (Prop_carry4_CI_CO[3])
                                                      0.114     3.187 r  xillybus_ins/xillybus_core_ins/unitw_1_ins/Mcompar_n0037_cy[4]_CARRY4/CO[3]
                         net (fo=3, unplaced)         0.936     4.123    xillybus_ins/xillybus_core_ins/unitw_1_ins/Mcompar_n0037_cy[7]
                         LUT6 (Prop_lut6_I4_O)        0.124     4.247 f  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_wr_request_condition/O
                         net (fo=7, unplaced)         0.480     4.727    xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_wr_request_condition
                         LUT3 (Prop_lut3_I2_O)        0.124     4.851 r  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_flush_condition_unitw_1_wr_request_condition_AND_179_o3_lut/O
                         net (fo=1, unplaced)         0.000     4.851    xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_flush_condition_unitw_1_wr_request_condition_AND_179_o3_lut
                         CARRY4 (Prop_carry4_S[2]_CO[3])
                                                      0.398     5.249 f  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_flush_condition_unitw_1_wr_request_condition_AND_179_o2_cy_CARRY4/CO[3]
                         net (fo=21, unplaced)        0.979     6.228    xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_flush_condition_unitw_1_wr_request_condition_AND_179_o
                         LUT6 (Prop_lut6_I5_O)        0.124     6.352 r  xillybus_ins/xillybus_core_ins/unitw_1_ins/_n03401/O
                         net (fo=15, unplaced)        0.502     6.854    xillybus_ins/xillybus_core_ins/unitw_1_ins/_n0340
                         LUT6 (Prop_lut6_I5_O)        0.124     6.978 r  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_end_offset_0_rstpot/O
                         net (fo=1, unplaced)         0.000     6.978    xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_end_offset_0_rstpot
                         FDRE                                         r  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_end_offset_0/D
  -------------------------------------------------------------------    -------------------

                         (clock clk_fpga_1 rise edge)
                                                     10.000    10.000 r
                         PS7                          0.000    10.000 r  xillybus_ins/system_i/vivado_system_i/processing_system7_0/inst/PS7_i/FCLKCLK[1]
                         net (fo=1, unplaced)         0.000    10.000    xillybus_ins/system_i/vivado_system_i/processing_system7_0/inst/n_707_PS7_i
                         BUFG (Prop_bufg_I_O)         0.091    10.091 r  xillybus_ins/system_i/vivado_system_i/processing_system7_0/inst/buffer_fclk_clk_1.FCLK_CLK_1_BUFG/O
                         net (fo=5023, unplaced)      0.760    10.851    xillybus_ins/xillybus_core_ins/bus_clk_w
                                                                      r  xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_end_offset_0/C
                         clock pessimism              0.010    10.861
                         clock uncertainty           -0.154    10.707
                         FDRE (Setup_fdre_C_D)        0.062    10.769    xillybus_ins/xillybus_core_ins/unitw_1_ins/unitw_1_end_offset_0
  -------------------------------------------------------------------
                         required time                         10.769
                         arrival time                          -6.978
  -------------------------------------------------------------------
                         slack                                  3.791

다소 지저분한 텍스트이지만 핵심 요소는 빨간색으로 표시되어 있습니다.

결론을 내리기 전에 보고 있는 부분이 올바른지 확인하세요.

완료되면 다음을 살펴보겠습니다. 요구 사항은 10 ns가 고 slack은 3.791 ns 입니다(양수입니다). 이것은 우리가 3.791 ns보다 짧은 clock period를 요청할 수 있었고 여전히 괜찮을 것임을 의미합니다. 따라서 요청된 clock period는 10 – 3.791 = 6.2090 ns일 수 있으며 이는 약 161 MHz입니다.

따라서 clk_fpga_1 에 대한 "maximal clock" 질문에 대한 짧은 대답은 161 MHz입니다. 그러나 constraints가 변경되면 이 수치가 변경될 수 있음을 기억하십시오.

그리고 마지막 메모: Data Path Delay은 무엇이 이 최악의 path를 느리거나 빠르게 만들었는지 알려줍니다. delay이 logic에 얼마나 들어갔는지, 그리고 (추정) route delays에 얼마나 들어갔는지. 이어지는 상세한 delay report 도 마찬가지입니다. 더 자세한 보고서를 보려면 timing report를 요청할 때 "-noworst" 플래그를 사용하는 것을 고려하십시오. 그러면 몇 가지 최악의 paths가 나열됩니다. 이것은 timing의 문제를 해결하는 데 도움이 될 수 있습니다.

이 페이지는 영어에서 자동으로 번역됩니다. 불분명한 사항이 있으면 원본 페이지를 참조하십시오.
Copyright © 2021-2024. All rights reserved. (6f913017)