En raison d’un problème dans les versions 16.0 et ultérieures du logiciel Intel® Quartus® Prime, vous pouvez constater que l’attribut de « no_rw_check » est ignoré si vous constatez que la sortie de la RAM est de l’avis d’un signal intermédiaire plutôt que d’un port de sortie. Ce problème ne se produit pas dans la version 15.1 et antérieure du logiciel Intel Quartus Prime.
Si vous avez une conception migrée vers la version du logiciel Intel Quartus Prime 16.0 et une version ultérieure, consultez le rapport en cours d’analyse et de synthèse -> LPM_Parameter paramètres -> RAM. Assurez-vous que le paramètre READ_DURING_WRITE_MODE_MIXED_PORTS a une valeur de DON’T CARE si l’attribut « no_rw_check » est utilisé.
L’exemple ci-dessous montre qu’aucun code d’attribut « no_rw_check » détecté dans la version 16.0 du logiciel Intel Quartus Prime :
LIBRARY ieee ;
UTILISEZ ieee.std_logic_1164.ALL ;
RAM D’ENTITÉ IS
PORT (
horloge : IN STD_LOGIC ;
données : IN STD_LOGIC_VECTOR (2 DOWNTO 0) ;
write_address : INTEGER RANGE 0 À 31 ;
read_address : INTEGER RANGE 0 à 31 ;
nous : IN STD_LOGIC ;
q : STD_LOGIC_VECTOR (2 DOWNTO 0)
);
RAM END ;
ARCHITECTURE rtl OF ram IS
TAPEZ MEM IS ARRAY (0 À 31) DE STD_LOGIC_VECTOR (2 DOWNTO 0) ;
ram_block SIGNAL : MEM ;
RAM entre les attributs : chaîne ;
RAM entre attributs de ram_block : le signal est « no_rw_check » ;
READ_ADDRESS_REG SIGNAL : PLAGE INTEGER COMPRISE ENTRE 0 ET 31 ;
Q_REG SIGNAL : STD_LOGIC_VECTOR (2 DOWNTO 0) ;
COMMENCER
PROCESSUS (horloge)
COMMENCER
SI (clock’event AND clock = '1') ALORS
SI (nous = « 1 »),
ram_block(write_address) <= données ;
FIN SI ;
read_address_reg <= read_address ;
FIN SI ;
pas détecté d’attribut « no_rw_check » du code coupé dans la version 16.0 du logiciel Intel Quartus Prime
------------------------------------------------------------------------------------
SI (clock’event AND clock = '1') ALORS
q_reg <= ram_block(read_address_reg) ;
FIN SI ;
q <= q_reg ;
------------------------------------------------------------------------------------
PROCESSUS DE FIN ;
END rtl ;
Pour contourner ce problème, activez la logique d’extension du transfert direct sur les RAM inférés dans le
Affectation -paramètres > -paramètres du compilateur > -> paramètres avancés (synthèse)
Ou
Remplacez le signal de sortie de la RAM comme port de sortie sans utiliser de signal intermédiaire, en remplaçant le code ci-dessus coupé par le code ci-dessous :
------------------------------------------------------------------------------------
SI (clock’event AND clock = '1') ALORS
q <= ram_block(read_address_reg) ;
FIN SI ;
------------------------------------------------------------------------------------
Ce problème devrait être résolu dans une prochaine version du logiciel Intel Quartus Prime Pro edition.