อินสแตนซ์และอินสแตนซ์ตัววิเคราะห์เวลาในสคริปต์

author-image

โดย

เมื่อคุณเขียนสคริปต์แบบกําหนดเองสําหรับตัววิเคราะห์เวลา คุณควรทราบถึงวิธีการที่ฟังก์ชัน Tcl API ต่างจัดการกับและส่งคืนชื่อหน่วยงานและอินสแตนซ์ในชื่อโหนด มีการตั้งค่าในซอฟต์แวร์ Quartus® II ที่ชื่อ Display Entity ชื่อโหนด ที่จะควบคุมว่าจะแสดงชื่อโหนดโดยมีหรือไม่มีชื่อหน่วยงาน
get_registersฟังก์ชัน Tcl API สามารถยอมรับชื่อที่มีองค์กรต่างๆ สําหรับตัวกรองได้เสมอ โดยไม่คํานึงการตั้งค่าชื่อหน่วยงานที่ใช้แสดงสําหรับชื่อโหนด ฟังก์ชันget_registersจะส่งคืนชื่อเสมอตามการตั้งค่าชื่อ Display Entity สําหรับชื่อโหนด
ตารางที่ 1 แสดงตัวอย่างชื่อโหนดที่ส่งคืนโดยคําสั่งget_registers <filter>โดยที่การออกแบบมีชื่อลงทะเบียนว่า ram:my_ram|ctrl:ctrl_1|addr[0]

ฟังก์ชัน Tcl API get_pinsและget_cellsทํางานที่แตกต่างจากget_registers ฟังก์ชันget_pinsและget_cellsยอมรับและส่งคืนเฉพาะชื่อที่มีชื่ออินสแตนซ์ โดยจะไม่ยอมรับหรือส่งคืนชื่อกับหน่วยงาน โดยไม่คํานึงถึงมูลค่าของชื่อหน่วยงานที่ใช้แสดงสําหรับชื่อโหนด
ตารางที่ 2 แสดงตัวอย่างชื่อโหนดที่ส่งคืนโดย get_pins <filter>โดยที่การออกแบบมีชื่อลงทะเบียน ว่า ram:my_ram|ctrl:ctrl_1|addr[0] พร้อมพินนาฬิกาชื่อ CLK ฟังก์ชัน get_cells ทํางานในลักษณะเดียวกัน แม้ว่าจะยอมรับและส่งคืนชื่อเซลล์ก็ตาม

หมาย เหตุ:

  1. ฟังก์ชัน get_pins สร้างคําเตือนเพื่อระบุว่าไม่สามารถจับคู่ตัวกรองที่ระบุกับพินได้

เมื่อคุณทราบถึงความแตกต่างในวิธีการ get_registers get_pinsและget_cellsจัดการกับชื่อโหนดการส่งคืนที่มีหน่วยงานรวมอยู่ด้วย คุณสามารถหลีกเลี่ยงปัญหาที่ละเอียดอ่อนที่อาจเกิดขึ้นเมื่อคุณรวมฟังก์ชันเข้าด้วยกัน ตัวอย่างต่อไปนี้แสดงรหัสที่ทํางานเมื่อ แสดงชื่อเอ็นทิตีสําหรับชื่อโหนด ปิดอยู่ แต่ล้มเหลวเมื่อเปิดอยู่

foreach_in_collection reg_id [get_registers foo*] {
    ตั้งค่าreg_name [get_node_info -name $reg_id]
    # ...
    ตั้งค่าpin_id [get_pins ${reg_name}|clk]
    # หากreg_nameมีหน่วยงาน โทรget_pinsจะล้มเหลวเสมอ
}

เมื่อ ชื่อ Display Entity สําหรับชื่อโหนด ปิดอยู่ reg_nameตัวแปรจะไม่รวมชื่อหน่วยงาน เพื่อให้ การเรียกget_pins สําเร็จ เมื่อ ชื่อโหนดของ Display สําหรับชื่อโหนด เปิดอยู่ reg_nameตัวแปรจะมีชื่อหน่วยงาน ดังนั้นการเรียก get_pins จึงล้มเหลว

โซ ลู ชั่น

วิธีที่ง่ายที่สุดในการหลีกเลี่ยงปัญหาที่อาจเกิดขึ้นคือการปิดชื่อ Display Entity สําหรับชื่อโหนดและใช้เฉพาะชื่ออินสแตนซ์เพื่ออ้างถึงโหนด โซลูชันนี้ช่วยให้มั่นใจได้ว่าชื่อที่ส่งคืนโดยget_registersเป็นชื่ออินสแตนซ์เท่านั้น และทํางานกับget_pinsและget_cells

หากคุณไม่ได้ปิด ชื่อ Display Entity สําหรับชื่อโหนดและคุณส่งผ่านชื่อที่ถูกส่งคืนโดย get_registers ไปยัง get_pins หรือ get_cellsคุณต้องตรวจสอบให้แน่ใจว่าคุณลบชื่อหน่วยงานทั้งหมดออก คุณสามารถใช้การแสดงออกอย่างง่ายเพื่อลบชื่อหน่วยงานส่วนใหญ่ คําสั่ง Tcl ต่อไปนี้จะลบชื่อหน่วยงานทั้งหมดออกจากชื่อโหนด ตราบเท่าที่ชื่อหน่วยงานมีตัวอักษร ตัวเลข และขีดล่างเท่านั้น (อักขระในระดับ \w อักขระ)

regsub -all {\w*:} $reg_name {} {} reg_name

รูปแบบการแสดงออกปกติที่แสดงไม่ได้จัดการกับอักขระทุกตัวที่ถูกต้องในตัวระบุ HDL โดยไม่ได้จัดการชื่อนิติบุคคลที่สร้างขึ้นซึ่งรวมถึง backslashes (\) อักขระเครื่องหมายดอลลาร์ ($) ในตัวระบุ Verilog HDL แบบง่าย, ตัวระบุ Verilog HDL ที่หลบหนี หรือตัวระบุเพิ่มเติมใน VHDL คุณสามารถสร้างสํานวนทั่วไปที่ล้ําสมัยยิ่งขึ้นเพื่อจัดการกับชื่อหน่วยงานด้วยอักขระเหล่านั้น แต่การปิด ชื่อ Display Entity สําหรับชื่อโหนดจะง่ายกว่า
ตัวอย่างต่อไปนี้แสดงวิธีผนวกรวมสํานวน Regsub เข้ากับตัวอย่างที่ไม่ทํางานด้านบน ในตัวอย่างต่อไปนี้ สํานวน regsub จะลบชื่อหน่วยงานออกจากชื่อรีจิสเตอร์ (ภายใต้ข้อยกเว้นอักขระที่อธิบาย) ดังนั้นการเรียกget_pinsจึงไม่ล้มเหลว ตัวอย่างจะทํางานโดยไม่คํานึงค่าของชื่อ Display Entity สําหรับชื่อโหนด

foreach_in_collection reg_id [get_registers foo*] {
    ตั้งค่าreg_name [get_node_info -name $reg_id]
    regsub -all {\w*:} $reg_name {} reg_name
    # reg_nameไม่มี
    นิติบุคคล # ...
    ตั้งค่าpin_id [get_pins ${reg_name}|clk]
    # reg_nameไม่มีหน่วยงานอีกต่อไป เพื่อให้get_pinsประสบความสําเร็จ
}

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