สคริปต์ตัวอย่างนี้แสดงวิธีที่คุณสามารถเข้าถึงหมายเลขเวอร์ชันของซอฟต์แวร์ควบคุมเวอร์ชันสําหรับโครงการของคุณ คุณสามารถเขียนหมายเลขเวอร์ชันในไฟล์การออกแบบที่คอมไพล์ในการออกแบบFPGAของคุณ ด้วยตรรกะการออกแบบเพิ่มเติม หมายเลขเวอร์ชันสามารถรายงานได้โดยFPGA ข้อมูลนี้จะมีประโยชน์มากในระหว่างการดีบัก โดยเฉพาะอย่างยิ่งหากคุณสลับระหว่างไฟล์การเขียนโปรแกรมหลายไฟล์ คุณสามารถค้นหาได้อย่างง่ายดายว่าการออกแบบเวอร์ชันใดที่ทํางานอยู่ในFPGAอิงตามหมายเลขเวอร์ชันในFPGA
ตัวอย่างนี้ใช้หมายเลขการปรับปรุงแก้ไข Subversion สําหรับโครงการของคุณ โดยจะใช้คําสั่ง svn info ในการรับข้อมูลเกี่ยวกับไฟล์ที่ระบุ คําสั่ง svn info จะพิมพ์ข้อมูลเกี่ยวกับรายการต่างๆ ในสําเนาการทํางานของคุณ และมาพร้อมกับบรรทัดที่มีหมายเลขการปรับปรุงในแบบฟอร์มต่อไปนี้:
การแก้ไข: หมายเลขการทบทวน<>
ตัวอย่างนี้ใช้สองขั้นตอนในการเรียกใช้คําสั่ง ข้อมูล Svn และแยกวิเคราะห์ผลลัพธ์เพื่อรับหมายเลขการปรับปรุง ขั้นตอน get_subversion_revision จะเริ่มคําสั่ง ข้อมูล Svn เรียกขั้นตอนพร้อมชื่อไฟล์เพื่อใช้กับคําสั่ง svn info ขั้นตอนจะกลับมาพร้อมกับข้อผิดพลาดหากไม่สามารถเรียกใช้คําสั่งได้ ไม่เช่นนั้นขั้นตอนจะส่งคืนสิ่งใด แต่จะตั้งค่าตัวแปรส่วนกลางบางตัว หากหมดเวลาของคําสั่ง svn info ค่าของตัวแปรส่วนกลาง ที่ทํา คือ -1 หากพบหมายเลขการปรับปรุงมูลค่าของตัวแปรส่วนกลาง ที่ทํา คือ 1 และหมายเลขการปรับปรุงอยู่ในตัวแปร ส่วนกลาง revision_number คุณสามารถแสดงหมายเลขการแก้ไขในข้อความ ดังเช่น ในตัวอย่างนี้ หรือเขียนลงในไฟล์การออกแบบ
ขั้นตอน get_version_info คือขั้นตอนผู้ช่วยที่วิเคราะห์คําสั่งทีละบรรทัด ซึ่งรวมถึงการแสดงออกปกติที่ตรงกับบรรทัดหมายเลขการปรับปรุงและแยกหมายเลขการปรับปรุง
proc get_subversion_revision { file_name } { เสร็จสิ้นทั้งหมด # จํานวนวินาทีสูงสุดที่รอให้คําสั่ง svn info # เสร็จสมบูรณ์เพื่อ ตั้งค่าtimeout_seconds 30 # คําสั่งข้อมูล svn พร้อมชื่อไฟล์ที่เรียกใช้ งาน cmd "svn info ${file_name}" # ความพยายามรับข้อมูล เวอร์ชัน # หากไม่สามารถเรียกใช้คําสั่งได้ ให้ส่งคืนข้อผิดพลาด # ตั้งค่าเหตุการณ์ไฟล์เพื่อประมวลผลเอาต์พุต คําสั่ง หาก { [put {open "|$cmd"} input] } { ข้อผิดพลาด return-code $input } อื่น { fileevent $inputอ่านได้ [list get_revision_info $input ] # ตั้งค่าการหมดเวลาเพื่อไม่ให้กระบวนการหยุดทํางานหาก คลัง # หยุด ทํางาน ตั้งค่าการหมดเวลา [หลังจาก [ expr { $timeout_seconds * 1000 } ] \ [ชุดรายการเสร็จสิ้น -1] ] # ห้ามดําเนินการต่อจนกว่าจะพบหมายเลขการแก้ไข หมายเลข หรือเวลาดําเนินการ ยกเลิกการหมดเวลาต่อไป vwait เสร็จสิ้น แล้วหลังจากยกเลิก $timeout} } proc get_revision_info { inp } เสร็จสิ้นทั่วโลกrevision_number หาก { [eof $inp] } { close $inp} ที่ตั้งไว้ {close $inp} เสร็จเรียบร้อยแล้ว { $done } { รับบรรทัด$inp } อื่น { รับ$inpบรรทัด # ใช้สายปกติเพื่อจับคู่บรรทัดด้วย หมายเลข การปรับปรุง # หาก { [regexp {^Revision:\s+(\d+)\s*$} $line match revision_number] } { ตั้งค่าเสร็จสิ้น 1 } } ตั้งค่าเสร็จ 0 ชุดrevision_number "" # ชื่อไฟล์มักจะเป็นไฟล์โครงการของคุณ ชุด qpf file_name [lindex $quartus(args) 0] หาก { {get_subversion_revision $file_name } msg] } { post_message -type critical_warning "คําสั่ง Wizard't run to get\ edition number $msg" } อื่น } หาก { -1 == $done } { post_message -type critical_warning "หมายเลขการหมดเวลา" } } อื่น ๆ { [string equal "" $revision_number] } { post_message critical_warning -type \ "ตัวตรวจสอบไม่พบหมายเลขการปรับปรุงในผลลัพธ์ของ svn info $file_name" } อื่น { post_message "การแก้ไขสําหรับ $file_name is $revision_number" } }
คุณสามารถเรียกใช้สคริปต์ที่พรอมท์คําสั่งของระบบด้วยคําสั่งต่อไปนี้ (โดยสมมติให้สคริปต์อยู่ในไฟล์ที่มีชื่อ ว่า svn_revision.tcl):
quartus_sh -t svn_revision.tcl myproject.qpf
สคริปต์สร้างข้อความเช่นนี้เพื่อแสดงการปรับปรุง:
ข้อมูล: การปรับปรุงแก้ไขสําหรับ myproject.qpf คือ 417
คุณสามารถแสดงข้อความพร้อมหมายเลขการปรับปรุงใน ตัวแปรrevision_numberส่วนกลาง ตามตัวอย่างนี้ หรือเขียนลงในไฟล์การออกแบบ