ตัวอย่างตัววิเคราะห์เวลา: รายงานสรุปสัญญาณนาฬิกาล้มเหลว

author-image

โดย

สคริปต์ในหน้านี้จะดําเนินการตั้งค่า ระงับ การกู้คืน และการวิเคราะห์เวลาการลบบนนาฬิกาทั้งหมดในการออกแบบของคุณในทุกสภาพแวดล้อมการทํางานที่รองรับ สคริปต์สร้างตารางที่แสดงรายการข้อมูลเกี่ยวกับการวิเคราะห์ทั้งหมดที่ล้มเหลวในการกําหนดเวลา สคริปต์จะเขียนตารางไปยังไฟล์ที่เรียกว่า <revision>.failing_clock_domains หากไม่มีการวิเคราะห์ล้มเหลว สคริปต์จะเขียนข้อความไปยังไฟล์ที่ไม่มีการวิเคราะห์ล้มเหลว

คุณสามารถใช้สคริปต์เพื่อรับภาพรวมที่ง่ายและรวดเร็วของผลลัพธ์การวิเคราะห์เวลาล้มเหลวสําหรับการออกแบบ หากคุณบันทึกสคริปต์ในไฟล์ที่ชื่อ failing_clock_domains.tclให้ใช้คําสั่งต่อไปนี้เพื่อเรียกใช้งาน

quartus_sta --report_script=failing_clock_domains.tcl <project name> [-c <revision name>]

นี่เป็นตัวอย่างของตารางที่สคริปต์สร้างขึ้นหากการวิเคราะห์เวลาล้มเหลว ตารางประกอบด้วยสแล็กที่แย่ที่สุด, Total Negative Slack (TNS), ชื่อของนาฬิกา, เงื่อนไขปฏิบัติการที่เกิดความล้มเหลว และประเภทของการวิเคราะห์ที่ล้มเหลว

การกําหนดเวลาโดเมนนาฬิกาล้มเหลว

+--------+---------------+------------+-----------------------+-----------------+
; Slack  ; End Point TNS ; Clock      ; Operating conditions  ; Timing analysis ;
+--------+---------------+------------+-----------------------+-----------------+
; -0.113 ; -0.321        ; IF_RXCLK   ; Slow 1100mV 85C Model ; Setup           ;
; -0.098 ; -0.223        ; core_clk   ; Fast 1100mV 0C Model  ; Hold            ;
+--------+---------------+------------+-----------------------+-----------------+

คัดลอกและวางรหัส TCL ต่อไปนี้และบันทึกไว้ในไฟล์เพื่อใช้สคริปต์

# รายงานว่าการออกแบบมีโดเมนนาฬิกาที่มีสแล็กเชิงลบหรือไม่
# หากมีโดเมนนาฬิกาที่มีสแล็กเชิงลบ ให้ใส่ข้อมูลดังกล่าวลงใน
# ตารางและเขียนลงในไฟล์
# เปลี่ยนชื่อไฟล์ที่นี่ หาก
ชุดoutput_file_name [get_current_revision].failing_clock_domains ชุดที่เหมาะสม

จําเป็นต้องมี struct::matrix
package ต้องรายงาน #

สร้างเมทริกซ์เพื่อเก็บข้อมูลเกี่ยวกับพาธที่ล้มเหลว
ที่ตั้งค่าfailing_paths_matrix [::struct::matrix];
$failing_paths_matrix เพิ่มคอลัมน์ 5

# การวิเคราะห์ต้องดําเนินการสําหรับการตั้งค่าเงื่อนไขการทํางานทั้งหมด
all_operating_conditions_col [get_available_operating_conditions]

# ทําการวิเคราะห์ประเภทเหล่านี้สําหรับแต่ละชุดโดเมนนาฬิกา analysis_list
[list "setup" "hold" "recovery" "การถอด"] #

แนะนําสภาวะการทํางานทั้งหมด
foreach_in_collection operating_conditions_obj $all_operating_conditions_col {

   #ตั้งค่าสภาพการทํางาน  อัปเดต netlist จับเวลา
   set_operating_conditions $operating_conditions_obj
   update_timing_netlist #

   รับชื่อข้อความภาษาอังกฤษของเงื่อนไขการปฏิบัติการ
   ที่ตั้งค่าoperating_conditions_display_name   [get_operating_conditions_info -display_name $operating_conditions_obj]

   # ทําการวิเคราะห์ทุกประเภท   
   foreach analysis_type $analysis_list {

      # รับชื่อของประเภทการวิเคราะห์หากเราต้องพิมพ์
      analysis_display_name [string totitle $analysis_ type]

      # รับข้อมูลเกี่ยวกับโดเมนนาฬิกาทั้งหมดที่
      ตั้งค่าclock_domain_info_list [get_clock_domain_info -${analysis_type}] #

      ดูผ่านโดเมนนาฬิกาทั้งหมดและดึงออกที่มี # Negative
      Slack
      foreach domain_info $clock_domain_info_list {

         # domain_infoมีชื่อนาฬิกา สแล็ก และ TNS
         ของนาฬิกา # สกัดสิ่งเหล่านั้น      
         foreach { clock_name slack endpoint_tns edge_tns } $domain_info { break }

         # หาก slack เป็นลบ รวบรวมแถวข้อมูลไว้ที่
         # รายงานในตาราง
         หาก { 0 > $slack } {
            $failing_paths_matrix เพิ่มแถว [list $slack $endpoint_tns $clock_name \
               $operating_conditions_display_name $analysis_display_name]
         }
      } #
      เสร็จสิ้นการผ่านโดเมนนาฬิกาทั้งหมดสําหรับ
      การวิเคราะห์การจับเวลาเฉพาะ (การตั้งค่า,  ถือ ฯลฯ)  
   }
   # เสร็จสิ้นการผ่านประเภทการวิเคราะห์ทั้งหมดสําหรับสภาพเฉพาะ # การดําเนินงาน
} #
เสร็จสิ้นผ่านเงื่อนไขการดําเนินงานทั้งหมด
# เตรียมการเขียนไฟล์พร้อมข้อมูลสรุปผลลัพธ์

# หากมีแถวในเมทริกซ์ มีพาธที่ทําให้เวลา
ล้มเหลว # เราต้องพิมพ์ตารางพร้อมข้อมูลนั้น หากไม่มี
# แถวในตาราง ไม่มีพาธล้มเหลวในการกําหนดเวลา ดังนั้นให้เขียนข้อความความสําเร็จหาก {
0 == [$failing_paths_matrixแถว] } {

   # พิมพ์ข้อความด่วน
   post_message "ไม่มีโดเมนนาฬิกาล้มเหลวในการกําหนดเวลา"

   # หากมีข้อผิดพลาดในการเปิดไฟล์ ให้พิมพ์ข้อความบอก #
   ว่า มิเช่นนั้น บอกว่าไม่มีโดเมนที่ล้มเหลวในการกําหนดเวลา
   หาก { {$fh { open $output_file_name w } fh] } {
      post_message -type error "ต่อการเปิดไฟล์: $fh"
   } อื่นๆ {   
      ใส่$fh "ไม่มีโดเมนนาฬิกาล้มเหลวในการจับเวลา"
      { close $fh } } อื่น { #
   เรียงลําดับแถวเมทริกซ์เพื่อให้สแล็กที่แย่ที่สุดคือ
   $failing_paths_matrix sort row -เพิ่ม 0

   # ใส่แถวส่วนหัว
   $failing_paths_matrix insert row 0[list "Slack" "End Point TNS" "นาฬิกา" \
      "เงื่อนไขการทํางาน" "การวิเคราะห์เวลา" ]   

   # เราต้องมีการกําหนดลักษณะเพื่อพิมพ์ตารางผลลัพธ์ {
   ::report::rmstyle basicrpt }
   ::report::d efstyle basicrpt {{cap_rows 1}} {
      ชุดข้อมูล [แยก "[string repeat " " [columns]]"]
      ชุดด้านบน [split "[string repeat "+ - " [columns]+"]
      ชุดด้านล่าง [top get]
      ชุด topcapsep [top get]
      topdata [data get]
      topcapsep เปิดใช้งาน topcapsep เปิดใช้งาน
      tcaption $cap_rows 
   } #

   สร้างรายงาน ตั้งค่าคอลัมน์ให้มีช่องว่าง 1 ช่องและ
   พิมพ์เมทริกซ์ด้วยรูปแบบที่ระบุ
   { r destroy }
   ::report:report:report r 5 basicrpt ลักษณะ
   พื้นฐานสําหรับ { set col 0 } { $col < [r columns]} { incr col } {
      r pad $colทั้งสองอย่าง " "
   }
   post_message "โดเมนนาฬิกาล้มเหลวในการกําหนดเวลา\n[r printmatrix $failing_paths_matrix]"

   # บันทึกรายงานไปยังไฟล์
   หาก { {$output_file_name w }
      post_message -type error "Fabric't open file: $fh" } อื่นๆ {
      ใส่$fh "โดเมนนาฬิกาล้มเหลวการกําหนดเวลา" r
      printmatrix2channel $failing_paths_matrix $fh
      รายละเอียด { close $fh }
}

เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้