インテル® 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 開発ソフトウェア・プロ・エディションの今後のリリースで修正される予定です。