ID bài viết: 000076343 Loại nội dung: Xử lý sự cố Lần duyệt cuối: 05/10/2015

Tại sao khối DSP cố định gốc của tôi hiển thị độ trễ bất ngờ trong mô phỏng?

Môi Trường

  • Phiên bản đăng ký Intel®Intel® Quartus® II
  • DSP
  • Mô phỏng
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Mô tả

    Đối với một số sự kết hợp của các tham số, trình mô phỏng và phong cách mã hóa RTL, độ trễ của khối này trong mô phỏng làm thay đổi độ trễ dự kiến bởi - một đồng hồ. Phần cứng thực tế thể hiện độ trễ mong đợi.

    Ví dụ, hành vi này sẽ được nhìn thấy, nếu đồng hồ điều khiển khối DSP là phiên bản bị trì hoãn của đồng hồ tạo ra dữ liệu đầu vào, do đó giới thiệu độ trễ mô phỏng cho đồng hồ đầu vào nhiều hơn so với dữ liệu đầu vào.

    Độ phân giải

    Để giải quyết vấn đề này, bạn phải đảm bảo rằng độ trễ giữa đồng hồ tạo ra dữ liệu đầu vào cho khối DSP và đồng hồ đầu vào của khối DSP, được cân bằng bởi độ trễ trên dữ liệu đầu vào. Ngoài ra, hãy đảm bảo rằng dữ liệu đầu vào sẽ đến vào thời điểm tuyệt đối sau này hoặc thời gian trễ của delta mô phỏng sau này so với đồng hồ đầu vào của khối DSP.

    Lưu ý rằng những thứ như nhiều báo cáo chuyển nhượng hơn trên đường dẫn đồng hồ so với đường dẫn dữ liệu sẽ gây ra sự khác biệt độ trễ đồng bằng mô phỏng giữa các đường dẫn đó.

    Để thực hiện điều này, hãy sửa đổi thiết bị kiểm tra của bạn để:

    1. Đảm bảo rằng các đầu vào tạo đồng hồ cho khối DSP riêng chính xác là tín hiệu tương tự như đầu vào đồng hồ cho khối DSP riêng.
    2. Nếu #1 không khả thi, hãy trì hoãn dữ liệu đầu vào liên quan đến đồng hồ.

    Ví dụ, hãy xem xét mã RTL ban đầu sau:

    RTL gốc:

    clk_gen: quy trình
    Bắt đầu
    clk_orig <= \'0\';
    chờ 5 ns;
    clk_orig <= \'1\';
    chờ 5 ns;
    quy trình kết thúc;

    ...

    nếu (rising_edge(clk_orig)) thì
    ax <= ax 1;
    ay <= ay - 1;
    kết thúc nếu

    mac_test_bad_style: mult_acc
    bản đồ cổng (
    ...
    ax => std_logic_vector(ax), -- [in]
    ay => std_logic_vector(ay), -- [in]
    clk => ("00" & clk_orig), -- [in]
    resulta => resulta2, -- [out]
    ...
    );

    resulta2 sẽ hiển thị độ trễ thấp hơn một đồng hồ so với dự kiến. Lưu ý rằng kết hợp của "00 & clk" trong gán cổng clk của hệ số nhân bổ sung thêm độ trễ lệch mô phỏng từ "clk_orig" tạo ra dữ liệu đầu vào.

    Giải pháp có thể bao gồm:

    Ví dụ 1, Đề xuất: Sử dụng đồng hồ 3 bit xuyên suốt

    Bạn có thể tạo ra đồng hồ 3-bit của hệ số nhân trực tiếp và sử dụng bit hoạt động để đồng hồ dữ liệu đầu vào:

    clk_gen: quy trình
    Bắt đầu
    clk3bit <= \'000\';
    chờ 5 ns;
    clk3bit <= \'001\';
    chờ 5 ns;
    quy trình kết thúc;

    ...

    nếu (rising_edge(clk3bit(0)) thì
    ax <= ax 1;
    ay <= ay - 1;
    kết thúc nếu

    mac_test_bad_style: mult_acc
    bản đồ cổng (
    ...
    ax => std_logic_vector(ax), -- [in]
    ay => std_logic_vector(ay), -- [in]
    clk => (clk_3bit), -- [in]
    resulta => resulta2, -- [out]
    ...
    );

    Ví dụ 2, Khuyến nghị thay thế: thêm độ trễ tương ứng vào dữ liệu đầu vào

    Tuyên bố \'clk => ("00" & clk_orig)\' khiến cổng \'clk" có độ trễ lệch mô phỏng bổ sung từ \'clk_orig\' đang điều khiển dữ liệu. Để khắc phục điều này, bạn có thể sử dụng quy trình clk_gen gốc và chỉ thêm độ trễ vùng mô phỏng vào dữ liệu với các báo cáo chuyển nhượng.

    clk_gen: xử lý (giống với bản gốc)

    ax_del <= ax;
    ay_del<=ay;

    mac_test_bad_style: mult_acc
    bản đồ cổng (
    ...
    ax => std_logic_vector(ax_del), -- [in]
    ay => std_logic_vector(ay_del), -- [in]
    clk => ("00" & clk_orig), -- [in]
    resulta => resulta2, -- [out]
    ...
    );

    Các sản phẩm liên quan

    Bài viết này áp dụng cho 1 sản phẩm

    FPGA Intel® Arria® 10 GX

    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.