ตั้งแต่เวอร์ชัน 4.0 ของซอฟต์แวร์ Quartus® II คุณสามารถกําหนดค่าสคริปต์ให้ทํางานโดยอัตโนมัติที่จุดต่างๆ ในระหว่างการคอมไพล์ คุณสามารถใช้ความสามารถนี้ในการเรียกใช้สคริปต์ที่ทํางานการรายงานแบบกําหนดเอง ทําการบ้านที่เฉพาะเจาะจง และทํางานอื่นๆ อีกมากมายได้โดยอัตโนมัติ
มีงานที่ได้รับมอบหมายทั่วโลกสามงานที่ควบคุมการดําเนินการสคริปต์โดยอัตโนมัติ รายการเหล่านี้จะปรากฏที่นี่ พร้อมกับเวลาที่ทําให้สคริปต์ทํางาน
• PRE_FLOW_SCRIPT_FILE - before a flow starts
• POST_MODULE_SCRIPT_FILE - after a module finishes
• POST_FLOW_SCRIPT_FILE - after a flow finishes
การมอบหมายPOST_FLOW_SCRIPT_FILEและPOST_MODULE_SCRIPT_FILEได้รับการสนับสนุนตั้งแต่เวอร์ชัน 4.0 และรองรับการบ้านPRE_FLOW_SCRIPT_FILEตั้งแต่เวอร์ชัน 4.1
โมดูลคือไฟล์ปฏิบัติการ Quartus® II ที่ทํางานได้เพียงขั้นตอนเดียว ตัวอย่างเช่น สองโมดูลคือการวิเคราะห์และการสังเคราะห์ (quartus_map) และการวิเคราะห์เวลา (quartus_tan)
โฟลว์คือชุดโมดูลที่ซอฟต์แวร์ Quartus® II ดําเนินการด้วยตัวเลือกที่กําหนดไว้ล่วงหน้า ตัวอย่างเช่น การคอมไพล์การออกแบบเป็นโฟลว์ที่โดยทั่วไปแล้วประกอบด้วยขั้นตอนต่อไปนี้ (ดําเนินการโดยโมดูลที่ระบุ):
- การวิเคราะห์และการสังเคราะห์ (quartus_map)
- Fitter (quartus_fit)
- ชุดประกอบ (quartus_asm)
- ตัววิเคราะห์เวลา (quartus_tan)
โฟลว์อื่นๆ จะอธิบายไว้ในความช่วยเหลือสําหรับคําสั่ง execute_flow Tcl นอกจากนี้ คําสั่งส่วนใหญ่ใน เมนูเริ่ม (เมนูการประมวลผล) ใน Quartus® II GUI จะสอดคล้องกับโฟลว์
การมอบหมาย
หากต้องการทําการบ้านให้เรียกใช้สคริปต์โดยอัตโนมัติ ให้ทําการบ้านด้วยแบบฟอร์มต่อไปนี้:
set_global_assignment -name <assignment name> <executable>:<script name>
ชื่อการมอบหมายคือหนึ่งในรายการต่อไปนี้:
• PRE_FLOW_SCRIPT_FILE
• POST_MODULE_SCRIPT_FILE
• POST_FLOW_SCRIPT_FILE
ไฟล์ปฏิบัติการคือชื่อของไฟล์ปฏิบัติการบรรทัดคําสั่ง Quartus® II ที่มีตัวแปล Tcl
• quartus_cdb
• quartus_sh
• quartus_sim
• quartus_stp
• quartus_tan
ชื่อสคริปต์คือชื่อของสคริปต์ Tcl ของคุณ
การเรียกใช้สคริปต์
ซอฟต์แวร์ Quartus® II จะดําเนินการสคริปต์ตามที่แสดงไว้ที่นี่:
<executable> -t <script name> <flow or module name> <project name> <revision name>
ตัวอย่างแรกที่ส่งผ่านในตัวแปร quartus(args) คือชื่อของโฟลว์หรือโมดูลที่กําลังดําเนินการ โดยขึ้นอยู่กับการบ้านที่คุณใช้ ข้อสรุปที่สองคือชื่อของโครงการและข้อโต้แยงที่สามคือชื่อของการปรับปรุง
เมื่อคุณใช้การมอบหมายPOST_MODULE_SCRIPT_FILE สคริปต์ที่ระบุจะทํางานโดยอัตโนมัติหลังจากการปฏิบัติการทุกครั้งในโฟลว์ คุณสามารถใช้การเปรียบเทียบสตริงกับชื่อโมดูล (ข้อความแรกที่ถูกส่งผ่านไปยังสคริปต์) เพื่อแยกการประมวลผลสคริปต์ไปยังโมดูลบางโมดูลได้
ตัวอย่างการดําเนินการ
ตัวอย่างนี้แสดงวิธีการทํางานของสคริปต์อัตโนมัติในขั้นตอนทั้งหมด โดยสมมติฐานว่าคุณมีโครงการที่เรียกว่าการแก้ไขปัจจุบันที่เรียกว่า rev_1 และคุณมีงานที่ได้รับมอบหมายต่อไปนี้ใน Quartus® II Settings File (QSF) สําหรับโครงการของคุณ:
set_global_assignment -name PRE_FLOW_SCRIPT_FILE quartus_sh:first.tcl
set_global_assignment -name POST_MODULE_SCRIPT_FILE quartus_sh:next.tcl
set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:last.tcl
เมื่อคุณคอมไพล์โครงการของคุณ การมอบหมายPRE_FLOW_SCRIPT_FILEจะเป็นเหตุให้คําสั่งต่อไปนี้ต้องดําเนินการก่อนที่การคอมไพล์จะเริ่มขึ้น:
quartus_sh -t first.tcl compile top rev_1
ถัดไป ซอฟต์แวร์ Quartus® II จะเริ่มรวบรวมข้อมูลด้วยการวิเคราะห์และการสังเคราะห์ ซึ่งดําเนินการโดยquartus_mapปฏิบัติการ หลังจากการวิเคราะห์และการสังเคราะห์เสร็จสิ้นการมอบหมายPOST_MODULE_SCRIPT_FILEทําให้คําสั่งต่อไปนี้ต้องดําเนินการ:
quartus_sh -t next.tcl quartus_map top rev_1
จากนั้น ซอฟต์แวร์ Quartus® II จะคอมไพล์กับ fitter ซึ่งดําเนินการโดยquartus_fitปฏิบัติการ หลังจากฟิตเตอร์เสร็จสิ้นการมอบหมายPOST_MODULE_SCRIPT_FILEจะทําให้คําสั่งต่อไปนี้ดําเนินการ:
quartus_sh -t next.tcl quartus_fit top rev_1
คําสั่งที่เกี่ยวข้องจะถูกดําเนินการหลังจากขั้นตอนอื่นๆ ของการคอมไพล์ ท้ายที่สุด หลังจากการคอมไพล์สิ้นสุดลง การมอบหมายPOST_FLOW_SCRIPT_FILEทําให้คําสั่งต่อไปนี้ถูกดําเนินการ:
quartus_sh -t last.tcl compile top rev_1
การควบคุมการประมวลผล
การกําหนดPOST_MODULE_SCRIPT_FILEทําให้สคริปต์ถูกดําเนินการหลังจากทุกโมดูล เนื่องจากเป็นสคริปต์เดียวกันที่ดําเนินการหลังจากทุกโมดูล คุณอาจต้องรวมคําสั่งแบบมีเงื่อนไขบางรายการที่จํากัดการประมวลผลในสคริปต์ของคุณในบางโมดูล
ตัวอย่างเช่น หากคุณมีสคริปต์ที่คุณต้องการเรียกใช้หลังจากทําการวิเคราะห์เวลาแล้ว คุณควรรวมการทดสอบแบบมีเงื่อนไขเหมือนกับสคริปต์ในตัวอย่างต่อไปนี้ โดยจะตรวจสอบโฟลว์หรือชื่อโมดูลที่ส่งผ่านเป็นส่วนแรกไปยังสคริปต์และดําเนินการโค้ดเมื่อมีการquartus_tanโมดูล
set module [lindex $quartus(args) 0]
if [string match "quartus_tan" $module] {
# Include commands here that are run
# after timing analysis
post_message "Running after timing analysis"
}
การแสดงข้อความ
เนื่องจากวิธีการที่ซอฟต์แวร์ Quartus II เรียกใช้สคริปต์โดยอัตโนมัติ คุณจําเป็นต้องใช้คําสั่ง post_message เพื่อแสดงข้อความ แทนที่จะเป็นคําสั่ง puts ข้อกําหนดนี้มีผลกับสคริปต์ที่ทํางานโดยงานสามงานที่ระบุไว้ด้านบนของหน้านี้เท่านั้น