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