Ne vous embêtez pas à charger des fichiers .mem; il suffit d'initialiser les souvenirs directement en VHDL.
La méthode la plus simple - s'il s'agit de ROM - est de les déclarer en tant que tableaux constants. Si cette déclaration est dans un paquet séparé, vous pouvez facilement écrire sa création à partir d'un fichier hexadécimal créé par un compilateur ou un assembleur.
Voici un exemple pour vous aider à démarrer
package Memories is
type Address is natural range 0 to 2**8 - 1;
type Byte is std_logic_vector(7 downto 0);
type Memory is array(Address) of Byte;
-- Positional association is convenient if you are filling the whole memory
-- constant ROM1 : Memory := (X"00", X"11", X"22", and so on);
-- I'm not going to type out the lot!
-- Named association is better for a simple test program
constant ROM2 : memory := (
0 => X"C3",
1 => X"38",
2 => X"00",
16#38# => X"C3",
16#39# => X"00",
16#3A# => X"00",
others => X"FF"
);
end Memories;
Si elles sont RAMs, vous pouvez appeler les initialiser à partir de la même matrice constante.
use Memories.all;
constant ROM : Memory := ROM2;
signal RAM : Memory := ROM2;
Ces constructions sont gérées correctement par même des outils de synthèse les plus primitifs que je l'ai utilisé au cours des cinq dernières années au moins, donc je serais très surpris si DC ne peut pas faire la même chose.
Cette donnée initiale doit être conservée par l'outil de synthèse et figurer sous une forme quelconque dans la netlist. Si vous pouvez comprendre ce formulaire, vous pouvez modifier les données si nécessaire, mais il est probablement plus facile de mettre à jour la source et re-synthétiser.