Aufgrund eines Problems in der Intel® Quartus® Prime Software Version 16.0 und neuer können Sie feststellen, dass das Attribut "no_rw_check" ignoriert wird, wenn Sie die Ausgabe des RAM an ein Zwischensignal anstelle des Ausgabeports senden. Dieses Problem tritt nicht in der Intel Quartus Prime Software Version 15.1 und früher auf.
Wenn Sie ein Design auf die Version der Intel Quartus Prime Software 16.0 und neuer migrieren lassen, überprüfen Sie den Bericht unter Analyse und Synthese -> LPM_Parameter Settings -> RAM. Stellen Sie sicher, dass der Parameter READ_DURING_WRITE_MODE_MIXED_PORTS einen Wert von DON'T CARE hat, wenn das Attribut "no_rw_check" verwendet wird.
Das Beispiel unten zeigt den Code des nicht erkannten Attributs "no_rw_check" ab Intel Quartus Prime Software Version 16.0:
LIBRARY( IEEE);
VERWENDEN SIE IEEE.STD_LOGIC_1164.ALL;
ENTITY-RAM-IS
PORT (
Taktfrequenz: IN STD_LOGIC;
Daten: IN STD_LOGIC_VECTOR (2 DOWNTO 0);
write_address: IM INTEGERBEREICH 0 bis 31;
read_address: IM INTEGER-BEREICH 0 bis 31;
wir: IN STD_LOGIC;
f: OUT STD_LOGIC_VECTOR (2 DOWNTO 0)
);
END-RAM;
ARCHITEKTUR DES RAM-IS
TYP MEM IST EIN ARRAY (0 BIS 31) VON STD_LOGIC_VECTOR (2 DOWNTO 0);
SIGNAL-ram_block: MEM;
ATTRIBUTE Ramstyle: string;
ATTRIBUTE-Ramstyle ram_block: Signal ist "no_rw_check";
SIGNAL read_address_reg: INTEGER-BEREICH 0 bis 31;
SIGNAL q_reg: STD_LOGIC_VECTOR (2 DOWNTO 0);
BEGINNEN
PROZESS (Takt)
BEGINNEN
IF (event AND clock = '1') DANN
WENN (wir = '1') DANN
ram_block(write_address) <= Daten;
END-IF;
read_address_reg < = read_address;
END-IF;
Nicht erkannter Attributcode "no_rw_check" in Intel Quartus Prime Software Version 16.0 ab Version 16.0
------------------------------------------------------------------------------------
IF (event AND clock = '1') DANN
q_reg <= ram_block (read_address_reg);
END-IF;
q <= q_reg;
------------------------------------------------------------------------------------
ENDPROZESS;
ENDE RTL;
Um dieses Problem zu umgehen, aktivieren Sie die Add Pass-Through Logic zu abgeleiteten RAMs in der
Zuweisung - > -> Compiler-Einstellungen - > Vorherige Einstellungen (Synthese)
Oder
Setzen Sie das Ausgabesignal des RAM als Ausgabeport ein, ohne Zwischensignal zu verwenden, indem Sie den oben genannten snipped Code durch den unten stehenden Code ersetzen:
------------------------------------------------------------------------------------
IF (event AND clock = '1') DANN
q <= ram_block(read_address_reg);
END-IF;
------------------------------------------------------------------------------------
Dieses Problem wird voraussichtlich in einer zukünftigen Version der Intel Quartus Prime Pro Edition Software behoben.