สคริปต์นี้สร้างไฟล์ SDO ที่มีพารามิเตอร์การกําหนดเวลารวมจากไฟล์ SDO สองไฟล์ที่สร้างขึ้นโดยซอฟต์แวร์ Quartus® II ในระหว่างการวิเคราะห์เวลาสูงสุดและต่ําสุด
ซอฟต์แวร์ Quartus II สร้างไฟล์ SDO แยกต่างหากที่ใช้ค่าหน่วงต่ําสุดหรือสูงสุดสําหรับค่าหน่วงเวลาสามค่าในแต่ละทริปเล็ต Triplets ในไฟล์ SDO รองรับค่าต่ําสุด ทั่วไป และค่าหน่วงสูงสุดดังนี้: (min:typ:max) ไฟล์ SDO ที่สร้างขึ้นโดยซอฟต์แวร์ Quartus II เพื่อการวิเคราะห์เวลาสูงสุดจะมี triplets ล่าช้าซึ่งมีค่าหน่วงเวลาสูงสุดเท่านั้น เช่นนี้( max:max:max:max:max) ไฟล์ SDO ที่เกิดขึ้นระหว่างการวิเคราะห์เวลาขั้นต่ําจะมี Triplet ที่หน่วงเวลาซึ่งมีค่าหน่วงเวลาขั้นต่ําเท่านั้น เช่นนี้ (นาที:นาที:นาที)
สคริปต์นี้รวมไฟล์ SDO เข้ากับค่าต่ําสุดและค่าสูงสุดเพื่อสร้างหนึ่งไฟล์พร้อมด้วยสามเท่าที่มีทั้งตัวเลขต่ําสุดและสูงสุด เช่นนี้ (min:max:max)) โปรดทราบว่าค่าหน่วงสูงสุดซ้ํากันสําหรับค่าความล่าช้าทั่วไปด้วย ไฟล์ที่สร้างขึ้นโดยสคริปต์นี้ไม่รับประกันโดยAlteraทํางานสําหรับการวิเคราะห์ขั้นต่ํา/สูงสุดผสม
เรียกใช้สคริปต์ดังนี้: quartus_sh -t combine_sdo.tcl -min_sdo <min ไฟล์ sdo> -max_sdo <max ไฟล์ sdo > -new_sdo <ไฟล์ sdonew>
แพคเกจจําเป็นต้องมีตัวแปร cmdline ::argv0 $::quartus(args) ตัวเลือกชุด { { { { "min_sdo.arg" "" "ชื่อไฟล์ของ SDO ที่มีเวลา min" } \ { "max_sdo.arg" "" "ชื่อไฟล์ของ SDO ที่มีเวลาสูงสุด" } \ { "new_sdo.arg" "" "" ชื่อไฟล์ของ SDO ที่มีเวลาขั้นต่ํา/สูงสุด" } \ } ชุดอาร์เรย์เลือก [::cmdline::getoptions ::argv0 $options "ตัวเลือกไม่ถูกต้อง"] ตั้งค่าขั้นต่ํา [open $opts(min_sdo)] ตั้งค่าสูงสุด [open $opts(max_sdo)] ตั้งค่าใหม่ [open $opts(new_sdo) w] # คอยติดตามหมายเลขบรรทัดใน ชุดไฟล์line_num 1 ในขณะที่ { 1 } { # อ่านบรรทัดถัดไปจากไฟล์ sdo ขั้นต่ําและสูงสุด ตั้งค่าmore_min [gets $min min_line] ตั้งค่าmore_max [รับ $max max_line # Finish เมื่อไม่มีข้อมูลในไฟล์มากนักหาก { $more_min < 0 || $more_max < 0 } { เป็นไปได้ว่าไฟล์หนึ่งอาจมีบรรทัด มากกว่าไฟล์อื่น เตือนเกี่ยวกับเรื่องนี้ที่นี่ หาก { $more_min >= 0 } { post_message -type warning \ "ข้ามบรรทัดที่เริ่มต้นด้วยบรรทัด $line_num in $opts(min_sdo)" } } ถ้า { $more_max >= 0 } { post_message -type warning \ "ข้ามบรรทัดที่เริ่มต้นด้วยบรรทัด $line_num in $opts(max_sdo)" } # เนื่องจากอย่างน้อยหนึ่งไฟล์ไม่มีข้อมูลมากนัก จึงต้องหยุด ลูป break } หาก { [regexp {\(\d+:\d+:\d+\)} $min_line] } { # หากบรรทัดมี Triplet ล่าช้าอยู่ จะต้องรวมค่า # new_lineสะสมข้อความที่จะพิมพ์ออกมา # line_differences ถูกตั้งค่าหากมีความแตกต่าง ในรายการ # นอกเหนือจาก Triplet ความ ล่าช้า ตั้งค่าnew_line "" line_differences 0 # ในขณะที่มี Triplets ล่าช้าอยู่ในสาย... ในขณะที่ { [regexp {\(\d+:\d+:\d+\)} $min_line] } { # แตกทุกอย่างไปยัง Triplet ล่าช้า, #delay value ตัวเอง, และทุกอย่างหลังจาก # Delay triplet regexp {^(.*?\()(\d+):\d+:\d+(\)*$)} $min_line \ match min_start min_value min_line regexp {^(. *?\()\d+:\d+:(\d+)(\)(\).*$)} $max_line \ match max_start max_value max_line # ตั้งค่าสถานะหากมีความแตกต่างกันในรายการ # นอกเหนือจาก Triplet หน่วงเวลา ถ้า { ! [string equal $min_start $max_start] } { ตั้งค่า line_differences 1 } # ใส่ triplet การหน่วงเวลารวมเข้าด้วยกันในภาคผนวกบรรทัดใหม่ new_line $min_start \ $min_value : $max_value : $max_value } # ตรวจสอบข้อความใดก็ตามที่อยู่ในบรรทัดค้างไว้สําหรับ ความแตกต่าง # ถ้า { ! [string equal $min_line $max_line] } { ตั้งค่า line_differences 1 } หาก { $line_differences } { post_message -type warning \ [join \list \ "ส่วนเหล่านี้ของบรรทัด $line_num มีความแตกต่างกัน" \ " $opts(min_sdo): $min_line" \ " $opts(max_sdo): $max_line"] \ "\n"} } หลังจาก Triplet ล่าช้าครั้งสุดท้าย แล้ว # ทํางานร่วมกันในภาค ผนวกnew_line $min_line } อื่นๆ { # หากบรรทัดไม่มี Triplet ล่าช้าในเครื่อง # บรรทัดจากไฟล์นาทีและสูงสุดควรเหมือนกัน (ยกเว้นเช่น หากมีเครื่องหมายวันที่ใน ไฟล์) ทําการตรวจสอบอย่างรวดเร็วเพื่อให้แน่ใจว่าเส้น # เหมือนกันและพิมพ์คําเตือนหากมีความแตกต่างกัน ถ้า { ! [string equal $min_line $max_line] } { post_message -type warning \ [join [list \ "Line $line_num มีความแตกต่างกัน" \ " ไฟล์ใหม่มีบรรทัดแรกด้านล่าง" \ " $opts(min_sdo): $min_line" \ " $opts $opts max_sdo(max_sdo): $max_line"] \ "\n"] } ตั้งค่า new_line $min_line } # เขียนบรรทัดลงในไฟล์รวม ทําให้ $new $new_line incr line_num } # เสร็จสิ้นการวนรอบไฟล์ ปิดทุกสิ่ง $min ปิด$max ปิด $new post_message "เสร็จสิ้นการรวมไฟล์เข้าไว้ใน$opts(new_sdo)"