Mức độ logic báo cáo

author-image

Bởi

Khi bạn đang chốt thời gian trên một thiết kế, việc biết bao nhiêu cấp độ logic đang ở trong đường dẫn thất bại thường hữu ích. Phân tích Thời gian hiển thị số lượng cấp logic khi bạn báo cáo thời gian cho đường dẫn, nhưng không có báo cáo mặc định liệt kê số cấp logic cho một tập hợp đường dẫn. Ví dụ thiết kế này xác định một quy trình tùy chỉnh mà bạn có thể sử dụng để tạo báo cáo hiển thị số lượng cấp logic cho các tập hợp đường dẫn.

Quy trình tùy chỉnh hỗ trợ các tham số giống như lệnh report_timing của bạn. Bạn nên sử dụng các tùy chọn tương tự với quy trình tùy chỉnh mà bạn muốn với lệnh report_timing của bạn. Quy trình tùy chỉnh cũng hỗ trợ ba tùy chọn bổ sung: -greater_than <value>, -less_than <value> và tệp < báo cáo >. Bạn có thể sử dụng các tùy chọn -greater_than và -less_than để giới hạn báo cáo tới các đường dẫn có dung lượng lớn hơn hoặc ít hơn các mức logic được chỉ định. Bạn có thể sử dụng tùy chọn -file để ghi báo cáo vào tệp.

Quy trình tùy chỉnh hiển thị số lượng cấp logic cho các đường dẫn có thời gian slack xấu nhất. Nó không nhất thiết hiển thị các đường dẫn trong thiết kế với số lượng cấp logic lớn nhất. Các đường dẫn với thời gian slack tồi tệ nhất không phải luôn luôn là những con đường với số lượng cấp độ logic lớn nhất, mặc dù đó thường là sự thật.

Thao tác thủ tục

Quy trình tùy chỉnh sử dụng các bước sau.

  1. Nhận danh sách đường dẫn đáp ứng các tiêu chí báo cáo
  2. Nhận số lượng cấp logic cho mỗi đường dẫn
  3. Hiển thị số lượng thông tin logic và đường dẫn trong biểu đồ

Bước 1: Nhận danh sách đường dẫn

Quy trình tùy chỉnh sử dụng lệnh get_timing_paths mềm, hỗ trợ các tham số tương tự như lệnh report_timing lệnh. Bạn có thể sử dụng bất kỳ tùy chọn report_timing kiểm soát phân tích thời gian. Ví dụ: bạn có thể hạn chế báo cáo số lượng cấp logic đến các đường dẫn kết thúc bằng một tên đăng ký nhất định. Mã Tcl sau đây hiển thị định nghĩa thủ tục và chuyển tất cả các tham số get_timing_paths lệnh.

proc report_levels_of_logic { args } { # Chuyển tất cả các tham số thẳng đến get_timing_paths nếu { [lượt truy cập
    { eval get_timing_paths $args } paths_col] } {
        post_message -gõ lỗi $paths_col
        trả lại }
}

Bước 2: Nhận số lượng cấp logic cho từng đường dẫn

Sử dụng vòng lặp để lặp qua bộ sưu tập đường dẫn trong biến paths_col và trích xuất số cấp logic trong mỗi đường dẫn. Lưu thông tin về đường dẫn trong cấu trúc dữ liệu ma trận Tcl sẽ được sử dụng để in kết quả. Thông tin được lưu là số lượng cấp logic, độ nghiêng của đường dẫn và tên nút nguồn và điểm đến.

foreach_in_collection path_obj $paths_col { # Có bao

        nhiêu cấp độ logic trong đường dẫn?
        đặt levels_of_logic [get_path_info -num_logic_levels $path_obj]
        
        # Thêm thông tin đường dẫn vào ma trận.
        $logic_levels_matrix thêm hàng [list \
            $levels_of_logic \
            [get_path_info -slack $path_obj] \
            [get_node_info -name [get_path_info -từ $path_obj]] \
            [get_node_info -name [get_path_info -to $path_obj]]
    ] }

Bước 3: Thông tin đường dẫn hiển thị trong biểu đồ

Cuối cùng, hiển thị tất cả thông tin đường dẫn được lưu trữ trong biến ma trận. Ví dụ này sử dụng gói báo cáo Tcl để định dạng ma trận để in ra. Mã sau thêm hàng tiêu đề vào ma trận, xác định kiểu hình ảnh của báo cáo, đặt đệm ô và hiển thị báo cáo.

# Đưa vào hàng tiêu đề $logic_levels_matrix insert row 0 \ [list "Levels of logic" "Slack" "From" "To"] # Chúng tôi cần có kiểu dáng được định nghĩa để in bảng kết quả đánh dấu
            {
        ::report:rmstyle basicrpt }
        ::report:report::d efstyle basicrpt {{cap_rows 1}} { bộ dữ liệu        [split "[string repeat "   [columns];"]
            bộ trên cùng         [split "[string repeat "+ - " [columns]]+"] set dưới      [top get]
            topcapsep   set [top get]
            topdata     set [data get]         topcapsep enable topcapsep enable bottom enable tcaption $cap_rows }
            #
        Tạo báo cáo, thiết lập các cột để có một không gian đệm và # in ma trận với dấu hiệu định dạng được chỉ định { r tiêu hủy } ::report:report r 4 style basicrpt cho { set col 0 } { $col < [r columns]} { incr col } {
            r pad $col cả " } post_message
        "Cấp độ logic\n[r printmatrix $logic_levels_matrix]"

Quy trình tùy chỉnh

Mã cho quy trình tùy chỉnh được liệt kê bên dưới bao gồm các tùy chọn để viết báo cáo vào tệp và giới hạn đường dẫn được báo cáo, trừ khi số lượng cấp logic lớn hơn hoặc ít hơn các giá trị do người dùng chỉ định.

Đây là một số ví dụ về cách bạn có thể sử dụng quy trình tùy chỉnh.

  • report_levels_of_logic -setup -greater_than 10 -to [get_registers dữ liệu*] -npaths 1000
  • report_levels_of_logic -hold -from_clock core_50 -npaths 50 -file levels.txt

Để sử dụng quy trình tùy chỉnh, lưu mã Tcl bên dưới trong tệp có tên report_levels_of_logic.tcl. Sau đó, hãy sử dụng report_levels_of_logic.tcl lệnh tại dấu nhắc Tcl Timing Analyzer. Tìm nguồn cung ứng tập tin xác định quy trình tùy chỉnh. Sau đó, bạn có thể sử dụng lệnh mới được xác report_levels_of_logic cho đến khi bạn thoát Trình phân tích Thời gian.

gói cmdline yêu cầu gói struct::matrix yêu cầu gói báo cáo proc report_levels_of_logic { args } { tùy chọn bộ { { "less_than.arg" "" "" "Giới hạn đường dẫn với ít hơn số này" } { "greater_than.arg" "" "Giới hạn đường dẫn với số lớn hơn số
        này" }
        { "file.arg" "" "" "Output file name"
        
    } } array set
    opts [:cmdline::getKnsOptions args $options]

    #
    Đảm bảo rằng quy trình được gọi là với một số tham số nếu { [string equal "" $opts(less_than)] && && [string equal "" $opts(greater_than)] } { cảnh báo kiểu -post_message "Bạn phải chỉ định một giá trị
        số\ cho -less_than hoặc -greater_than" trả lại } # Đảm bảo rằng quy trình được gọi với giá trị tham số nếu
        {
    ![ string là gấp đôi $opts(less_than)] } { cảnh báo kiểu -post_message "Bạn phải xác định một giá trị
        số\
            cho -less_than" trả lại } nếu {
    ![ chuỗi là gấp đôi $opts(greater_than)] } { cảnh báo kiểu -post_message "Bạn phải xác định một giá trị số\ cho -greater_than" trả lại } # Tạo ma trận để giữ thông tin về các đường dẫn bị lỗi được đặt
            logic_levels_matrix
    [::struct::ma trận] $logic_levels_matrix add cột 4 # Chuyển tất cả các tham số không xác định thẳng đến get_timing_paths nếu { [đánh dấu
    {
    eval get_timing_paths $args } paths_col] } {
        lỗi post_message -type $paths_col return
    }
    
    # Xem qua danh sách đường dẫn thời gian, nhận thông tin # về mức độ logic foreach_in_collection path_obj $paths_col { # Giả định đường dẫn sẽ được báo cáo, trừ khi số lượng cấp logic # nằm ngoài giới hạn quy
        định.
        đặt include_path 1
        
        # Có bao nhiêu cấp độ logic trong đường dẫn?
        đặt levels_of_logic [get_path_info -num_logic_levels $path_obj] # Nếu chúng tôi chỉ định ràng buộc thấp hơn, chúng tôi sẽ không báo cáo đường dẫn nếu mức
        
        logic #lớn hơn hoặc bằng ràng buộc thấp hơn nếu
        { ! [chuỗi bằng "" $opts(less_than)] } {
            nếu { $levels_of_logic >= $opts(less_than) } { đặt include_path
                0 } } # Nếu chúng tôi chỉ định giới hạn
        
        trên,
        chúng
        tôi sẽ không báo cáo đường dẫn nếu cấp số logic nhỏ hơn hoặc bằng giới hạn trên nếu { ! [chuỗi bằng "" $opts(greater_than)] } { nếu { $levels_of_logic <= $opts(greater_than) } { đặt include_path 0 } } # Nếu đường dẫn có các cấp logic nằm trong giới hạn của chúng ta, # báo cáo về nó nếu
                {
        $include_path } {
        
            $logic_levels_matrix thêm hàng [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]]
    }
    # Đã hoàn thành việc đi qua tất cả các đường dẫn từ get_timing_paths # Nếu có bất kỳ hàng nào trong
    
    ma trận, đường dẫn phù hợp với các tiêu chí.
    # Chúng tôi phải in bảng với thông tin đó.
    nếu { 0 == [$logic_levels_matrix rows] } { { Không đường dẫn nào đáp ứng tiêu chí # In một tin nhắn nhanh post_message "Không đường dẫn nào đáp ứng các tiêu chí để báo cáo cấp logic" # Nếu có lỗi khi mở tệp, hãy in tin nhắn nói
        #
        đó. Nếu không, hãy nói rằng không có đường dẫn nào đáp ứng các
        tiêu chí nếu { ! [chuỗi bằng "" $opts(tệp)] } { nếu { [mở tệp { mở $opts(tệp) w } fh] } { lỗi loại post_message "Tệp không mở: $fh" } khác { đặt $fh "Không đường dẫn đáp ứng các tiêu chí để báo cáo cấp độ logic" $fh { đóng $fh } } } khác { # Đặt trong hàng tiêu đề
        $logic_levels_matrix chèn hàng 0 \ [danh sách
            "Cấp độ logic" "Slack" "Từ" "Đến"] #
        Chúng tôi cần một phong cách được xác định để in bảng đánh giá kết quả { :: report:rmstyle basicrpt }
        ::report::d efstyle basicrpt {{cap_rows 1}} { bộ dữ liệu        [split "[string repeat " "   [columns];"]
            bộ trên cùng         [split "[string repeat "+ - " [columns]]+"] tập hợp dưới      [top get]
            topcapsep   set [top get]
            topdata     set [data get]         topcapsep enable topcapsep enable bottom enable tcaption $cap_rows }
            #
        Tạo báo cáo, thiết lập các cột để có một không gian đệm và # in ma trận với dấu hiệu định dạng được chỉ định { r tiêu hủy } ::report:report r 4 style basicrpt cho { đặt col 0 } { $col < [r columns]} { incr col } {
            r pad $col cả " } post_message
        "Cấp độ logic\n[r printmatrix $logic_levels_matrix]"
        
        #
        Lưu báo cáo vào tệp nếu tên tệp được chỉ định nếu { ! [chuỗi bằng "" $opts(tệp)] } { nếu { [lần truy xuất { mở
            $opts(tệp) w } fh] } { lỗi loại post_message "Tệp không mở
                được: $fh" } khác { đặt
                $fh "Cấp logic"
                r printmatrix2channel $logic_levels_matrix $fh yêu
cầu { đóng $fh } } } }

Nội dung gốc bằng tiếng Anh trên trang này vừa do con người vừa do máy dịch. Nội dung này chỉ để cung cấp thông tin chung và giúp quý vị thuận tiện. Quý vị không nên tin đây là thông tin hoàn chỉnh hoặc chính xác. Nếu có bất kỳ mâu thuẫn nào giữa bản tiếng Anh và bản dịch của trang này, thì bản tiếng Anh sẽ chi phối và kiểm soát. Xem phiên bản tiếng Anh của trang này.