Quartus® II ソフトウェアの問題により、VHDL コードがデュアルクロックの混合幅デュアルポート・メモリーを推論し、幅の狭いポートのプロセスの前に配置されたより広いポートの処理を推論した場合、この内部エラーが発生する場合があります。
例えば:
portA_p : PROCESS (clk)
BEGIN
IF (rising_edge(clk)) THEN
IF we_a = '1' THEN
-- Write access
ram(addr_a / 2)(addr_a mod 2) := data_a;
-- Read during write on the same port returns NEW data
q_a <= data_a;
ELSE
-- Read returns OLD data
q_a <= ram(addr_a / 2)(addr_a mod 2);
END IF;
END IF;
END PROCESS portA_p;
portB_p : PROCESS (clk)
BEGIN
IF (rising_edge(clk)) THEN
IF we_b = '1' THEN
ram(addr_b) := data_b;
-- Read during write on the same port returns NEW data
q_b <= data_b;
ELSE
-- Read returns OLD data
q_b <= ram(addr_b);
END IF;
END IF;
END PROCESS portB_p;
この問題を回避するには、より広いポートのプロセスが最初に表示されるように、プロセスの順序を元に戻します。
この問題は、インテル® Quartus® II ソフトウェアの今後のリリースで修正される予定です。