記事 ID: 000080467 コンテンツタイプ: トラブルシューティング 最終改訂日: 2021/08/27

バージョン 16.0 以降では RAM 属性「no_rw_check」がインテル® Quartus® Prime ソフトウェアでは無視されるのはなぜですか?

環境

  • インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
  • インテル® Quartus® Prime 開発ソフトウェア・スタンダード・エディション
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    インテル® Quartus® Prime 開発ソフトウェア・バージョン 16.0 以降の問題により、RAM の出力を出力ポートではなく中間信号に出力すると、「no_rw_check」の属性が無視される場合があります。この問題は、インテル Quartus Prime ソフトウェア・バージョン 15.1 以前では発生しません。

    インテル Quartus Prime 開発ソフトウェア 16.0 以降のバージョンにデザインが移行されている場合は、分析および合成 -> LPM_Parameter 設定 -> RAM でレポートを確認してください。「no_rw_check」属性が使用されている場合、パラメーター・READ_DURING_WRITE_MODE_MIXED_PORTSの値が DON'T CARE であることを確認します。

    以下の例は、インテル Quartus Prime ソフトウェアバージョン 16.0 以降で検出されていない属性「no_rw_check」コードを示しています。

    LIBRARY ieee;

    ieee.std_logic_1164.ALL を使用してください。

    ENTITY ram IS

    PORT (

    クロック: IN STD_LOGIC。

    データ: IN STD_LOGIC_VECTOR (2 DOWNTO 0);

    write_address: 0 ~ 31 の整数範囲。

    read_address: IN INTEGER 範囲 0 ~ 31;

    インテル: IN STD_LOGIC;

    q: OUT STD_LOGIC_VECTOR (2 DOWNTO 0)

    );

    END RAM;

    アーキテクチャー RTL OF RAM IS

    MEM IS 配列 (0 ~ 31) のSTD_LOGIC_VECTOR (2 DOWNTO 0) を入力します。

    シグナル・ram_block: MEM;

    属性 ram: 文字列。

    ram_blockの属性 ram no_rw_check: シグナルは「no_rw_check」。

    シグナルread_address_reg: 整数範囲 0 ~ 31;

    シグナル・q_reg: STD_LOGIC_VECTOR (2 DOWNTO 0);

    開始

    プロセス (クロック)

    開始

    IF (clock'event AND clock = '1') 次に

    IF (私たちは = 「1」)

    ram_block (write_address) < = データ。

    END IF;

    read_address_reg < = read_address。

    END IF;

    インテル Quartus Prime ソフトウェア・バージョン 16.0 以降では属性「no_rw_check」が検出されないコード

    ------------------------------------------------------------------------------------

    IF (clock'event AND clock = '1') 次に

    q_reg < = ram_block (read_address_reg);

    END IF;

    q < = q_reg。

    ------------------------------------------------------------------------------------

    エンドプロセス。

    END RTL;

    解決方法

    この問題を回避するには、[Add Pass-Through Logic to Inferred RAM] をオンにします。

    割り当て - >設定 - コンパイラー設定>事前設定 (合成) >

    または

    上記のコードを以下のコードに置き換えることで、中間信号を使用せずに RAM の出力信号を出力ポートとして取り込みます。

    ------------------------------------------------------------------------------------

    IF (clock'event AND clock = '1') 次に

    q <= ram_block (read_address_reg);

    END IF;

    ------------------------------------------------------------------------------------

    この問題は、インテル Quartus Prime 開発ソフトウェア・プロ・エディションの今後のリリースで修正される予定です。

    関連製品

    本記事の適用対象: 1 製品

    インテル® プログラマブル・デバイス

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。