Ví dụ của Quartus® II Tcl: Thực hiện ảo tất cả các chân

author-image

Bởi

Nếu bạn sử dụng luồng thiết kế Logic Lock Region mô-đun trong dự án của mình, bạn có thể chọn thực hiện tất cả các chân I/O trong các chân I/O ảo của mô-đun như một cách để dễ dàng nhập mô-đun trong một thiết kế cấp cao nhất. Ngoài ra, nếu bạn muốn biên dịch một lõi IP để xem nó sử dụng bao nhiêu tài nguyên nhưng nó sử dụng quá nhiều chân cho thiết bị mục tiêu của bạn, làm cho các chân ảo có thể cho phép lõi phù hợp.

Quy trình đơn giản sau đây làm cho tất cả các chân trong các chân I/O ảo trong thiết kế của bạn. Đầu tiên, thiết kế được tổng hợp để xác định các nút nào là chân. Tiếp theo, một tập hợp ID tên được đặt tương ứng với các chân trong thiết kế, sau đó một bài tập đã được VIRTUAL_PIN dụng cho mọi chân. Cuối cùng, lệnh export_assignments viết tất cả các bài tập mới vào Tập tin Cài đặt Quartus II của dự án (.qsf).

Ví dụ này sử dụng các lệnh get_names và get_name_info, có sẵn bắt đầu từ phiên bản 4.0 của phần mềm Quartus II (phiên bản 2.0 của ::quartus::p roject gói). Tham khảo ví dụ cuối cùng trên trang này để biết mã sẽ hoạt động bắt đầu với phiên bản 3.0 của phần mềm Quartus II và có các khả năng nâng cao hơn.

load_package flow

proc make_all_pins_virtual {} {

    execute_module -tool map

    set name_ids [get_names -filter * -node_type pin] foreach_in_collection name_id $name_ids { đặt pin_name [get_name_info -info full_path $name_id] post_message "Thực hiện chuyển nhượng VIRTUAL_PIN sang
        $pin_name"
        set_instance_assignment -to $pin_name -name VIRTUAL_PIN ON
    }
    export_assignments
}

Cải thiện mã mẫu

Có nhiều cách để cải thiện mã mẫu.

Xóa các bài tập VIRTUAL_PIN hành hiện có

Bạn có thể thêm lệnh sau vào đầu quy trình để xóa tất cả các bài tập VIRTUAL_PIN hiện có. Đây là một bước hữu ích để đảm bảo các bài tập đang ở trong tình trạng đã biết. Thêm lệnh này trước lệnh execute_module lệnh.

remove_all_instance_assignments -tên của VIRTUAL_PIN

Loại trừ theo cách thủ công các chân nhất định, chẳng hạn như Đồng hồ

Để phần mềm Quartus II thực hiện tối ưu hóa thời gian vì nó phù hợp với một thiết kế, đồng hồ phải được kết nối với các chân I/O cấp cao nhất trong thiết bị mục tiêu và đồng hồ phải được áp dụng cài đặt đồng hồ. Điều này là đúng ngay cả khi tất cả các chân khác trong một thiết kế là chân I/O ảo. Do đó, ví dụ cơ bản trên ngăn phần mềm Quartus II tối ưu hóa thời gian trong quá trình biên dịch vì tất cả các chân, bao gồm cả đồng hồ, đều có một tác vụ VIRTUAL_PIN dụng.

Bạn có thể thêm tham số vào quy trình chấp nhận danh sách tín hiệu để loại trừ khỏi các tác vụ VIRTUAL_PIN tập. Danh sách này thường là tên của các chân đồng hồ trong thiết kế của bạn. Ví dụ sau chấp nhận một danh sách các tên để loại trừ. Nó cũng bao gồm lệnh loại bỏ bất kỳ bài tập hiện có VIRTUAL_PIN tập nào, thảo luận ở trên.

Gói luồng load_package yêu cầu cmdline proc make_all_pins_virtual { args } { tùy chọn bộ

    {\ { "exclude.arg" "" "Danh sách tín hiệu cần loại trừ" } \ } nhóm mảng
    opts [::cmdline::getoptions quartus(args) $options]

    remove_all_instance_assignments -name VIRTUAL_PIN
    execute_module -tool map set name_ids
    [get_names -filter * -node_type pin]

    foreach_in_collection name_id $name_ids {
        đặt pin_name [get_name_info -info full_path $name_id]

        nếu { -1 == [lsearch -exact $opts(loại trừ) $pin_name] } { post_message "Thực hiện chuyển nhượng VIRTUAL_PIN sang
            $pin_name"
            set_instance_assignment -sang $pin_name -name -name VIRTUAL_PIN ON } khác { post_message "Bỏ qua bài tập VIRTUAL_PIN sang
            $pin_name"
        } export_assignments
}

Bạn có thể gọi thủ tục với lệnh này. Ví dụ này giả định rằng bạn có hai đồng hồ trong thiết kế của mình, clk_a và clk_b.

make_all_pins_virtual -loại trừ { clk_a clk_b }

Tự động xác định & xử lý đồng hồ

Ví dụ trước để loại trừ một số tín hiệu nhất định có sự tham gia mà chúng phải được nhập bằng tay. Có thể xác định tín hiệu đồng hồ với các lệnh trong gói ::quartus::advanced_timing. Gói này chỉ khả dụng để tải quartus_tan thực thi, vì vậy bạn phải sử dụng quartus_tan để chạy lệnh với ví dụ sau. Các lệnh trong ví dụ này đều được hỗ trợ bắt đầu với phiên bản 3.0 của phần mềm Quartus II.

Tự động xác định đồng hồ có lợi thế cho phép bạn tự động hóa ứng dụng của USE_CLK_FOR_VIRTUAL_PIN tập. Bạn có thể sử dụng tác vụ USE_CLK_FOR_VIRTUAL_PIN tác phối hợp với tác vụ VIRTUAL_PIN liên kết cài đặt đồng hồ với đồng hồ trong thiết kế của bạn. Điều này cung cấp cho Quartus II Fitter thông tin chính xác về các yêu cầu thời gian khi bạn biên dịch một thiết kế với các chân I/O ảo. Để biết thêm thông tin về bài tập này, hãy tham khảo chủ đề logic Đồng hồ chân ảo trong Trợ giúp Quartus II.

Ví dụ sau làm cho tất cả các chân I/O trong chân I/O ảo thiết kế của bạn. Nó cũng làm cho các bài tập cài đặt đồng hồ chân ảo khi phù hợp.

Mã ví dụ trước tiên tổng hợp thiết kế của bạn. Sau đó, nó cố gắng xóa bất kỳ netlist thời gian hiện có nào trước khi tạo một danh sách mới. Các lệnh get_timing_nodes tạo ra hai tập hợp các nút từ netlist thời gian: pin_ids và clk_ids. Hai bộ sưu tập này là độc quyền; không có nút nào trong bộ clk_ids tập trong bộ sưu tập pin_ids mặc dù đồng hồ có thể ở trên chân I/O.

Vòng lặp foreach_in_collection đầu tiên lấy tên của từng chân trong thiết kế (không bao gồm chân đồng hồ) và thực hiện tác vụ VIRTUAL_PIN công việc đó.

Vòng lặp foreach_in_collection thứ hai lấy tên của từng đồng hồ trong thiết kế. Lệnh get_instance_assignment truy xuất cài đặt đồng hồ tương ứng, nếu nó tồn tại. Nếu tồn tại cài đặt đồng hồ cho đồng hồ (chuỗi không trống), tập lệnh thực hiện tác vụ USE_CLOCK_FOR_VIRTUAL_PIN tập cho tên đồng hồ với giá trị của tên cài đặt đồng hồ.

Load_package điều chỉnh load_package thời gian load_package advanced_timing proc make_all_pins_virtual { } { remove_all_instance_assignments

    -name VIRTUAL_PIN
    remove_all_instance_assignments -name USE_CLK_FOR_VIRTUAL_PIN

    execute_module -tool map qua {
    delete_timing_netlist } create_timing_netlist
    -post_map
    
    set pin_ids [get_timing_nodes -type pin] set
    clk_ids [get_timing_nodes -type clk]
    
    # Thực hiện các bài tập VIRTUAL_PIN vào từng chân trong ghim design
    foreach_in_collection pin_id $pin_ids { đặt pin_name [get_timing_node_info -info name $pin_id] post_message "Thực hiện tác vụ VIRTUAL_PIN sang
        $pin_name"
        set_instance_assignment -thành $pin_name -name -name VIRTUAL_PIN ON
    }

    Số
    lượng cho mỗi đồng hồ trong thiết kế, kiểm tra xem nó có bài tập CLOCK_SETTINGS tương ứng hay không. foreach_in_collection clk_id $clk_ids { đặt

        clk_name [get_timing_node_info -tên thông tin $clk_id] đặt
        clk_stgs [get_instance_assignment -thành $clk_name -name \ CLOCK_SETTINGS] # Nếu có cài đặt đồng hồ cho đồng hồ này, hãy thực hiện chuyển nhượng 
           # USE_CLK_FOR_VIRTUAL_PIN nếu {
        ![ chuỗi bằng "" $clk_stgs] } { post_message "Thực hiện chuyển nhượng USE_CLK_FOR_VIRTUAL_PIN \ sang $clk_name với giá trị
                $clk_stgs"
            set_instance_assignment -đến $clk_name \
                -name USE_CLK_FOR_VIRTUAL_PIN $clk_stgs
        } } export_assignments
}

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.