ตัวอย่าง Quartus® II Tcl: ระดับรายงานของลอจิก

author-image

โดย

เมื่อคุณกําลังปรับแต่งการออกแบบ การดูข้อมูลเกี่ยวกับระดับตรรกะระหว่างการลงทะเบียนจะเป็นประโยชน์มาก สคริปต์ต่อไปนี้สร้างค่าที่คั่นด้วยเครื่องหมายจุลภาค (. ไฟล์ csv) ที่มีจํานวนพาธที่มีตรรกะในระดับต่างๆ ในการออกแบบของคุณ คุณสามารถแผนภูมิข้อมูลนี้หรือสร้างฮิสโตแกรมใน Excel ที่แสดงการเผยแพร่พาธตามระดับของตรรกะ

ถ้าสองการลงทะเบียนมีพาธลอจิกหลายพาธระหว่างกัน เฉพาะพาธที่มีระดับลอจิกมากที่สุดจะถูกนับด้วยสคริปต์นี้ ตัวอย่างเช่น การลงทะเบียนสองรายการที่มีหนึ่งสี่ระดับและหนึ่งพาธสองระดับจะถูกนับเป็นพาธสี่ระดับหนึ่ง

สคริปต์สร้างไฟล์ CSV ที่มีชื่อ<ชื่อการแก้ไข>.levels_of_logic.csv

โดยสมมติคุณบันทึกสคริปต์ในไฟล์ที่มีชื่อว่า report_levels_of_logic.tclคุณสามารถเรียกใช้งานสคริปต์ได้ด้วยคําสั่งต่อไปนี้:

quartus_tan -t report_levels_of_logic.tcl -project <project name> [-revision <revision name>] [-name_pattern <string to match>]

คุณสามารถใช้ตัวเลือก -name_pattern เพื่อจํากัดการนับพาธตามลําดับชั้นเฉพาะในการออกแบบของคุณ ระบุสตริงที่จะจับคู่กับการจับคู่ภาษาตัวแทนของเครื่องมือ (Tcl) หากคุณไม่ได้ระบุค่าสําหรับตัวเลือก -name_pattern ตัวเลือกจะเป็นค่าเริ่มต้นเป็น * ตัวอย่างเช่น หากคุณต้องการรายงานระดับตรรกะระหว่างการลงทะเบียนในลําดับชั้น ของ mult:inst6|lpm_mult:lpm_mult_component ในการออกแบบของคุณ ให้ระบุ mult:inst6|lpm_mult:lpm_mult_component* สําหรับค่าของตัวเลือก -name_pattern

แพคเกจ load_package advanced_timing
ต้องใช้ตัวเลือกชุด cmdline

{\
    { "project.arg" "" "ชื่อโครงการ" }
    \ { "revision.arg" "" "" "ชื่อการปรับปรุง" } \ {
    "name_pattern.arg" "*" "จํากัดเพื่อลงทะเบียนการจับคู่รูปแบบนี้
"} }

ชุดอาร์เรย์ [::cmdline::getoptions quartus(args) $options]
ชุดอาร์เรย์ num_levels [list]

# เปิดโครงการและรับชื่อการปรับปรุงหาก {
[string equal "" $opts(แก้ไข)] } {
    project_open $opts(project) -current_revision
} อย่างอื่น {
    project_open $opts(project) -การปรับปรุงแก้ไข $opts(การปรับปรุง)
}
ชุดการปรับปรุง [get_current_revision]

# เตรียม netlist เวลาถ้า {
{create_timing_netlist; create_p2p_delays } res] } {
    post_message -type error $res project_close
    qexit -error }
#

ทําซ้ําผ่านการลงทะเบียนทุกรายการใน design
foreach_in_collection dest [get_timing_nodes -type reg] {

    # รับรายชื่อผู้รักษาประตู (ลงทะเบียน,  พิน นาฬิกา)
    # ที่ป้อนไปยัง
    ชุดโหนดลงทะเบียนdelays_from_keepers [get_delays_from_keepers $dest]
    
    # หากชื่อการลงทะเบียนปลายทางไม่ตรงกับรูปแบบ
    # เพียงไปที่โหนดถัดไป
    ตั้งค่าdest_name [get_timing_node_info -$destชื่อข้อมูล] หาก {
    ! [string match $opts(name_pattern) $dest_name] } {
        continue
    }
    #Walk throughers ทั้งหมดป้อนพิ
    นและนาฬิกาชั่วคราวของโหนดลงทะเบียน $delays_from_keepers {

        set src [lindex $delay 0]

        # Keeper สามารถรวมพินและนาฬิกาและเราต้องการลงทะเบียนเท่านั้น
        ถ้า { ! [string equal "reg" [get_timing_node_info -info type $src]] } {
            continue } #

        หากชื่อการลงทะเบียนแหล่งที่มาไม่ตรงกับรูปแบบ
        # เพียงไปที่ชุดถัดไปsrc_name
        [get_timing_node_info -ชื่อข้อมูล $src] หาก {
        ! [string match $opts(name_pattern) $src_name] } {
            continue } # ณ

        จุดนี้ ทั้งชื่อต้นทางและปลายทาง
        # ตรงตามรูปแบบ และเป็นพาธ
        ลงทะเบียนเพื่อลงทะเบียน # คําสั่ง get_delay_path ส่งคืนรายการโหนดบน
        # พาธ ความยาวของพาธคือความยาวของรายการ
        # รายการประกอบด้วยแหล่งข้อมูลและการลงทะเบียนปลายทาง
        # ระดับตรรกะระหว่างการลงทะเบียนคือ
  
  


- พาธที่ตั้งไว้ 2
        ชุด [get_delay_path -type ยาวที่สุด -จาก $src -to $dest]
        ตั้งค่าlevels_of_logic [expr { llength $path] - 2 }
        
        ] # บันทึกข้อมูลในอาร์เรย์
        หาก { [info มีnum_levels($levels_of_logic)] } {
            incr num_levels($levels_of_logic) }
        } อื่น { ตั้งค่า
            num_levels($levels_of_logic) 1
        } }

project_close

# เขียนข้อมูลลงในไฟล์หาก
{ [.levels_of_logic{rev}.levels_of_logic.csv w} fh] } {
    post_message -type error $fh }
อื่น { #

    เขียนส่วนหัวคําอธิบายลงในไฟล์
    จะใส่$fh "ระดับตรรกะสําหรับ$optsโครงการ (โครงการ) $revแก้ไข"
    ใส่$fh "ไฟล์ที่สร้างขึ้นโดย Quartus® II $quartus(version) บน \
        [clock format [seconds]]"
    จะใส่$fh "\nพอร์ตพาธสําหรับชื่อการลงทะเบียนที่ตรงกัน$opts(name_pattern)"
    ใส่$fh "ระดับลอจิก,จํานวนในการออกแบบ"

    ระดับแนวหน้า [lsort -integer [array name num_levels]] {

        หาก { { การแบ่งจํานวน$fh "$level,$num_levels($level)" } } res] } {
            post_message -type error $res break
            } }
    อย่างใกล้ชิด { close $fh
} }

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