ตัวอย่าง Quartus® II Tcl: การเรียกใช้สคริปต์อัตโนมัติ

author-image

โดย

ตั้งแต่เวอร์ชัน 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 ดําเนินการด้วยตัวเลือกที่กําหนดไว้ล่วงหน้า ตัวอย่างเช่น การคอมไพล์การออกแบบเป็นโฟลว์ที่โดยทั่วไปแล้วประกอบด้วยขั้นตอนต่อไปนี้ (ดําเนินการโดยโมดูลที่ระบุ):

  1. การวิเคราะห์และการสังเคราะห์ (quartus_map)
  2. Fitter (quartus_fit)
  3. ชุดประกอบ (quartus_asm)
  4. ตัววิเคราะห์เวลา (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 ข้อกําหนดนี้มีผลกับสคริปต์ที่ทํางานโดยงานสามงานที่ระบุไว้ด้านบนของหน้านี้เท่านั้น

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