ระดับของลอจิกรายงาน

author-image

โดย

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

ขั้นตอนแบบกําหนดเองจะรองรับคํากรามเดียวกันกับคําสั่ง report_timing คุณควรใช้ตัวเลือกเดียวกันกับขั้นตอนที่กําหนดเองที่คุณต้องการใช้กับคําสั่ง report_timing ขั้นตอนแบบกําหนดเองยังรองรับตัวเลือกเพิ่มเติมสามตัวเลือก: -greater_than <value>, -less_than <value> และไฟล์ <report > คุณสามารถใช้ตัวเลือก -greater_than และ -less_than เพื่อจํากัดการรายงานไปยังพาธที่มีตรรกะมากกว่าหรือน้อยกว่าระดับที่ระบุ คุณสามารถใช้ตัวเลือก -file ในการเขียนรายงานไปยังไฟล์ได้

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

การดําเนินการตามขั้นตอน

ขั้นตอนแบบกําหนดเองใช้ขั้นตอนต่อไปนี้

  1. ดูรายการพาธที่ตรงกับเกณฑ์การรายงาน
  2. รับจํานวนระดับของลอจิกสําหรับแต่ละพาธ
  3. แสดงจํานวนระดับของข้อมูลลอจิกและพาธในแผนภูมิ

ขั้นตอนที่ 1: ดูรายการเส้นทาง

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

proc report_levels_of_logic { args } {
    
    # Pass ทั้งหมดตรงไปยังget_timing_paths
    หาก { {eval get_timing_paths $args } paths_col] } {
        post_message -type error $paths_col
        return
    }
}

ขั้นตอนที่ 2: รับจํานวนระดับของลอจิกสําหรับแต่ละพาธ

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

foreach_in_collection path_obj $paths_col { # มี

        ตรรกะอยู่ในเส้นทาง
        กี่ระดับ ตั้งค่า levels_of_logic [get_path_info -num_logic_levels $path_obj]
        
        # เพิ่มข้อมูลพาธไปยังเมทริกซ์
        $logic_levels_matrix add row [list \
            $levels_of_logic \
            [get_path_info -slack $path_obj] \
            [get_node_info -name [get_path_info -from $path_obj]] \
            [get_node_info -name [get_path_info -to $path_obj]]
    ] }

ขั้นตอนที่ 3: แสดงข้อมูลพาธในแผนภูมิ

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

# ใส่แถวส่วนหัว
        $logic_levels_matrix insert row 0
            \ [list "ระดับของลอจิก" "Slack" "จาก" "ถึง"]
    
        # เราต้องมีการกําหนดสไตล์ในการพิมพ์ตารางผลลัพธ์
        { ::report::rmstyle basicrpt }
        ::report::d efstyle basicrpt {{cap_rows 1}} {
            ชุดข้อมูล        [split "[string repeat "   " [columns]];"]
            ชุดด้านบน         [split "[string repeat "+ - " [columns]+"]
            ชุดด้านล่าง      [top get]
            ชุด topcapsep   [top get]     topdata [data get]         topcapsep เปิดใช้งาน
            topcapsep   เปิดใช้งาน
            tcaption    $cap_rows
        } #
        
        สร้างรายงาน ตั้งค่าคอลัมน์ให้มีช่องว่าง 1 ช่อง และ
        พิมพ์เมทริกซ์ตามรูปแบบที่ระบุ
        { r destroy }
        ::report:report:report r 4 style basicrpt
        สําหรับ { set col 0 } { $col < [r columns]} { incr col } {
            r pad $colทั้งสอง " }
        post_message
        "ระดับลอจิก\n[r printmatrix $logic_levels_matrix]"

ขั้นตอนแบบกําหนดเอง

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

นี่เป็นตัวอย่างบางส่วนของวิธีที่คุณสามารถใช้ขั้นตอนแบบกําหนดเอง

  • report_levels_of_logic -setup -greater_than 10 -to [get_registers data*] -npaths 1000
  • report_levels_of_logic -hold -from_clock core_50 -npaths 50 -file levels.txt

หากต้องการใช้ขั้นตอนแบบกําหนดเอง ให้บันทึกรหัส Tcl ด้านล่างในไฟล์ที่มีชื่อว่า report_levels_of_logic.tcl แล้วใช้แหล่งคําสั่ง report_levels_of_logic.tcl ที่พรอมท์ Tclr ตัววิเคราะห์เวลา การจัดหาไฟล์เป็นตัวกําหนดขั้นตอนแบบกําหนดเอง จากนั้นคุณสามารถใช้คําสั่งที่กําหนดไว้ใหม่report_levels_of_logicจนกว่าคุณจะออกจากตัววิเคราะห์เวลา

แพคเกจจําเป็นต้องมีแพคเกจ cmdline
จําเป็นต้องมี struct::matrix
package ต้องใช้report_levels_of_logicรายงาน

proc { args } {

    ตั้งค่าตัวเลือก { {
        "less_than.arg" "" "ขีดจํากัดไปยังพาธที่มีหมายเลขน้อยกว่านี้"
        { "greater_than.arg" "" "" จํากัดเฉพาะพาธที่มีจํานวนมากกว่านี้"
        } { "file.arg" "" "ชื่อไฟล์เอาต์พุต"
        
    } }
    ชุดอาร์เรย์เลือก [:cmdline::getKnownOptions $options]

    # ตรวจสอบให้แน่ใจว่ามีการเรียกขั้นตอนด้วยบางประการ
    หาก { [string equal "" $opts(less_than)] & [string equal "" $opts(greater_than)] } {
        post_message -type warning "คุณต้องระบุค่าตัวเลข\
            สําหรับ -less_than หรือ -greater_than" การ
        ส่งคืน
    } #
    
    ตรวจสอบให้แน่ใจว่ามีการเรียกขั้นตอนด้วยค่าตัวเลข
    อยู่หาก { ![ string is double $opts(less_than)] } {
        post_message -type คําเตือน "คุณต้องระบุค่าตัวเลข\
            สําหรับการส่งคืน -less_than"
        } หาก {
    ![ string is double $opts(greater_than)] } {
        post_message -type warning "คุณต้องระบุค่าตัวเลข\
            สําหรับการส่งคืน -greater_than"
        } #
    
    สร้างเมทริกซ์เพื่อเก็บข้อมูลเกี่ยวกับพาธที่ล้มเหลว
    ที่ตั้งค่าlogic_levels_matrix [::struct:: matrix]
    $logic_levels_matrix เพิ่มคอลัมน์ 4

    # ส่งสิ่งที่ไม่ทราบทั้งหมดไปยังget_timing_pathsหาก {
    {eval get_timing_paths $args } paths_col] } { post_message
        -type error $paths_col
        return
    }
    
    # ดูรายการพาธเวลา รับข้อมูล
    # เกี่ยวกับระดับของตรรกะ
    foreach_in_collection path_obj $paths_col {
    
        # สมมติฐานว่าพาธจะได้รับการรายงาน เว้นแต่ว่าจํานวนระดับของ
        # ลอจิกอยู่นอกขอบเขต
        ที่ระบุ ตั้งค่าinclude_path 1
        
        # มีตรรกะอยู่ในเส้นทาง
        กี่ระดับ ตั้งค่าlevels_of_logic [get_path_info -num_logic_levels $path_obj]
        
        # หากเราระบุขอบเขตที่ต่ํากว่า เราจะไม่รายงานพาธหาก
        ระดับ # ของตรรกะมีค่ามากกว่าหรือเท่ากับขอบเขตล่าง
        ถ้า { ! [string เท่ากับ "" $opts(less_than)] }
            { ถ้า { $levels_of_logic >= $opts(less_than) } { ตั้งค่า include_path
                0 } } #
        
        หากเราระบุขีดจํากัดบน เราไม่รายงานพาธหาก
        ระดับ # ของตรรกะน้อยกว่าหรือเท่ากับขีดจํากัดบนถ้า {
        ! [string เท่ากับ "" $opts(greater_than)] }
            { ถ้า { $levels_of_logic <= $opts(greater_than) } { set
                include_path 0
            }
        } #
        
        หากพาธมีระดับของตรรกะที่อยู่ภายในขอบเขตของเรา
        # รายงานอยู่
        ถ้า { $include_path } {
        
            $logic_levels_matrix เพิ่มแถว [list \
                $levels_of_logic \
                [get_path_info -slack $path_obj] \
                [get_node_info -name [get_path_info -from $path_obj]] \
                [get_node_info -name [get_path_info -to $path_obj]]
    }
    # เสร็จสิ้นการผ่านเส้นทางทั้งหมดจาก get_timing_paths #
    
    หากมีแถวใดๆ ในเมทริกซ์ พาธที่ตรงกับเกณฑ์
    # เราต้องพิมพ์ตารางพร้อมข้อมูล
    นั้น หาก { 0 == [$logic_levels_matrix rows] } {
    
        # ไม่มีพาธตรงตามเกณฑ์
        # พิมพ์ข้อความด่วน
        post_message "ไม่มีพาธที่ตรงกับเกณฑ์ในการรายงานระดับลอจิก"
        
        # หากมีข้อผิดพลาดในการเปิดไฟล์ ให้พิมพ์ข้อความว่า
        # ดังกล่าว หรือบอกว่าไม่มีพาธที่ตรงตามเกณฑ์
        หาก { ! [string เท่ากับ "" $opts(ไฟล์)] } {
            หาก { [เข้าถึง { open $opts(file) w } fh] } {
                post_message -type error "จดหมายข่าว: $fh"
            } อื่นๆ {
                ใส่$fh "ไม่มีพาธที่ตรงกับเกณฑ์ในการรายงานระดับของลอจิก"
                ที่ละเอียด { close $fh $fh }
            } } } อื่น { #
    
        ใส่ในแถวส่วนหัว
        $logic_levels_matrix แทรกแถว 0 \
            [รายการ "ระดับของลอจิก" "Slack" "จาก" "ถึง"]
    
        # เราต้องมีสไตล์ที่กําหนดให้พิมพ์ตารางผลลัพธ์
        ที่ให้มา { :: report:rmstyle basicrpt }
        ::report::d efstyle basicrpt {{cap_rows 1}} {        ชุดข้อมูล [split "[string repeat "   " [columns];"]
            ชุด top         set [split "[string repeat "+ - " [columns]+"]
            ชุดด้านล่าง      [top get]
            ชุด topcapsep   [top get]
            topdata     [data get]
            topcapsep เปิดใช้งาน topcapsep   เปิดใช้งานด้านล่างเปิดใช้งาน
            tcaption    $cap_rows
        } #
        
        สร้างรายงาน, ตั้งค่าคอลัมน์ให้มีที่ว่าง 1 ช่องใน padding และ
        # พิมพ์เมทริกซ์ด้วยรูปแบบที่ระบุ
        { rทําลาย }
        ::report:report:r 4 style basicrpt
        สําหรับ { set col 0 } { $col < [r columns]} { incr col } {
            r pad $colทั้งสอง " "
        } post_message
        "ระดับลอจิก\n[r printmatrix $logic_levels_matrix]"
        
        # บันทึกรายงานไปยังไฟล์หากมีการระบุชื่อไฟล์
        ถ้า { ! [string เท่ากับ "" $opts(ไฟล์)] } {
            หาก { [open $opts(file) w } fh] } {
                post_message -type error "Print't open file: $fh"
            } อื่นๆ {
                ใส่$fh "ระดับลอจิก"
                r printmatrix2channel $logic_levels_matrix $fh
                เข้าถึง { close $fh } } }
}

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