ตัวอย่าง Quartus® II Tcl: โหนดที่ซับซ้อนในกลุ่มเวลา

author-image

โดย

การจัดกลุ่มเวลาเป็นวิธีที่มีประสิทธิภาพในการกําหนดเวลา คุณสามารถระบุอักขระตัวแทนที่มีโหนดที่ตรงกับรูปแบบในกลุ่ม และระบุอักขระตัวแทนที่ไม่รวมโหนดที่ตรงกับรูปแบบจากกลุ่ม คุณอาจต้องดูรายการโหนดทั้งหมดใน Timegroup เพื่อยืนยันว่าคุณได้ระบุรูปแบบอักขระตัวแทนที่ถูกต้อง

สคริปต์เหล่านี้อธิบายเกี่ยวกับโหนดในกลุ่มเวลาในการออกแบบของคุณ สคริปต์จะซ้ํากันในทุกโหนดเวลาในการออกแบบของคุณ โดยเปรียบเทียบชื่อของโหนดเวลากับรูปแบบการแบ่งกลุ่มเวลาแต่ละรูปแบบ ตามด้วยรูปแบบการแยกกลุ่มเวลาแต่ละรูปแบบ

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

หากต้องการรวมบัสทั้งหมดไว้ในกลุ่มเวลา ให้ใช้เครื่องหมายดอกจันหลังชื่อบัสในเวอร์ชั่น 4.2 และด้านล่างของซอฟต์แวร์ Quartus II เริ่มต้นด้วยเวอร์ชัน 5.0 คุณสามารถระบุชื่อบัสที่ไม่มีเครื่องหมายดอกจัน สคริปต์ประกอบด้วยการตรวจสอบลักษณะการทํางานนี้โดยอิงตามหมายเลขเวอร์ชั่นของซอฟต์แวร์

โครงการ load_package global quartus
load_package advanced_timing #

ตรวจสอบว่าสคริปต์ทํางานใน 4.2 และก่อนหน้า,
# หรือ 5.0 และใหม่กว่า 5.0 และใหม่กว่าจะจดจําชื่อ <bus>เป็น 
# รายการกลุ่มเวลาที่ถูกต้อง ในขณะที่ 4.2 และก่อนที่จะต้องมี
ชื่อ # <bus>* เป็นรายการ
กลุ่มเวลา qver การจับคู่$quartus(เวอร์ชั่น) regexp {^Version (\d)}
หาก { $qver < 5 } {
    ตั้งค่าneed_asterisk 1
} อื่น {
    ตั้งค่าneed_asterisk 0
} project_open

[lindex $quartus(args) 0]

ตั้งค่า

tg_name create_timing_netlist [li li $quartus(args) 1]

post_message "โหนดต่อไปนี้เป็นสมาชิกของ timegroup $tg_name:"

ตั้งค่าtg_name [escape_brackets $tg_name]
ตั้งค่าtg_members [timegroup -get_members $tg_name]
ตั้งค่าtg_exceptions [timegroup -get_exceptions $tg_ name]

# ลูปนี้จะอธิบายเกี่ยวกับโหนดเวลาทุกโหนดในforeach_in_collection node_idการออกแบบ 
[get_timing_nodes -type all] {

    ตั้งค่าnode_name [get_timing_node_info -ชื่อข้อมูล $node_id] #

    หากชื่อโหนดไม่ได้อยู่ในบัส ให้ล้างbus_name
    # ตั้งค่าไว้
    เป็นอย่างอื่น ถ้า { ! [regexp {(.*?) \[\d+\]} $node_name match bus_name] } } {
        set bus_name ""
    } #
    
    ตอนนี้เรามีชื่อโหนดแล้ว ตรวจสอบว่าตรงกับ  
    รูปแบบใดๆ ในชุดกลุ่มเวลาที่ระบุตรงกับ  
    0  
    foreach_in_collectionสมาชิก $tg_member {

        ตั้งค่าesc_name [escape_brackets [lindex $member 2]]
        หาก { [string match $esc_name $node_name] } {
            set matches 1
        } อื่นๆ { ! $need_asterisk &&
            \ [string match $esc_name $bus_name] } {
            set matches 1 } } #

    หาก$matchesคือ 1 ที่นี่ โหนดกําหนดเวลาจะตรงกับชื่อสมาชิก  
    # ใน timegroup อย่างไรก็ตาม อาจยังคงมีข้อยกเว้น  
    # ตรวจสอบดูได้ที่นี่
    หาก { $matches } {
        
        foreach_in_collection exception $tg_exceptions {
            
            set esc_name [escape_brackets [lindex $exception 2]]
            หาก { [string match $esc_name $node_name] }
                set matches 0
            } elseif { ! $need_asterisk && \
                [string match $esc_name $bus_name] } {
                set matches 0
            } } } #

    เราได้ดูข้อยกเว้นทั้งหมดแล้ว หาก $matches ยังคงเป็น 1
    อยู่ # ชื่อโหนดจะตรงกับรูปแบบของสมาชิก และไม่
    # ตรงกับรูปแบบข้อยกเว้น ดังนั้นให้พิมพ์ชื่อ
    โหนด หาก { $matches } {
        post_message $node_name
} }

project_close

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