Synopsis DC ツールを使用してプロセッサ コードを合成した後
.mem ファイルを使用して、このデザインの 2 つのコンポーネントに含まれる 2 つの RAM を初期化します。
私が持っているネットリスト ファイル (合成の出力) を使用してそれを達成する方法
.memファイルをそれらのRAMにロードしてテストするだけで、合成する前に簡単でした。
どんな助けでも
わざわざ .mem ファイルをロードしないでください。VHDL でメモリを直接初期化するだけです。
ROM の場合の最も簡単な方法は、それらを定数配列として宣言することです。この宣言が別のパッケージにある場合は、コンパイラまたはアセンブラによって作成された 16 進ファイルから簡単にスクリプトを作成できます。
ここにあなたが始めるための例があります
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;
RAM の場合は、同じ定数配列から初期化を呼び出すことができます。
use Memories.all;
constant ROM : Memory := ROM2;
signal RAM : Memory := ROM2;
これらの構造は、私が少なくとも過去 5 年間に使用した最も原始的な合成ツールでさえ正しく処理されるので、DC で同じことができないとしたら、非常に驚くでしょう。
その初期データは、合成ツールによって保持され、ネットリストに何らかの形で表示される必要があります。その形が理解できれば、必要に応じてデータを修正することもできますが、ソースを更新して再合成した方が簡単でしょう。