文章 ID: 000090227 內容類型: 錯誤訊息 最近查看日期: 2023 年 08 月 08 日

錯誤 (13224):.sv() 的 Verilog HDL 或 VHDL 錯誤<your module="" name=""><your line="" number="">:索引<your index="">超出 '<your range=""><your variable="">'</your>的 []</your>範圍</your></your> </your>

環境

  • Intel® Quartus® Prime Pro Edition 軟體
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    描述

    由於 Intel® Quartus® Prime Pro Edition 軟體版本 21.4 及更早版本存在問題,您可能會在分析和合成階段看到此錯誤。這是由於參數化介面無法使用頂級包裝變數覆蓋 SystemVerilog 介面本地參數邏輯變數。

    在下面的示例中,參數分別為 4 和 1 的介面 localparam 邏輯變數 ADDR_W 和 DATA_W 不會被參數分別為 5 和 8 的頂級包裝變數覆蓋。

    頂級包裝器:

    模組 mem_wrapper #( int ADDR_W = 5, int DATA_W = 8 )

    ...

    mem_if #( ADDR_W, DATA_W ) mem_if ( i_clk_a );

    記憶 ( mem_if );

    ...

    終端模組 : mem_wrapper

    介面:

    介面 mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( 輸入 clk );

    局部參數邏輯 [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};

    ...

    modport mem ( input clk, addr, wren, idat, output odat );

    端介面 : mem_if

    改裝:

    模組記憶體 ( mem_if.mem mem_if );

    邏輯[mem_if。DATA_W - 1:0] 記憶體 [2 ** mem_if.ADDR_W];

    初始
    for(int i = 0; i < 2 ** mem_if.ADDR_W;i++)
    記憶體[i] = mem_if。INIT_V[i];

    ...

    終端模組:記憶體

    解決方法

    若要避免此錯誤,請不要SystemVerilog 介面中使用localparam 邏輯

    例如:

    介面:

    介面 mem_if #( int ADDR_W = 4, int DATA_W = 1 ) ( 輸入 clk );

    邏輯 [DATA_W - 1:0] INIT_V [2 ** ADDR_W] = '{default: '1};

    ...

    modport mem ( input clk, addr, wren, idat, output odat, INIT_V);

    端介面 : mem_if

    此問題已從 Intel® Quartus® Prime Pro Edition 軟體版本 22.4 開始修復。

    相關產品

    本文章適用於 1 產品

    Intel® 可程式裝置

    這個頁面的內容綜合了英文原始內容的人工翻譯譯文與機器翻譯譯文。本內容是基於一般資訊目的,方便您參考而提供,不應視同完整或準確的內容。如果這個頁面的英文版與譯文之間發生任何牴觸,將受英文版規範及管轄。 查看這個頁面的英文版。