0

Synopsis DC ツールを使用してプロセッサ コードを合成した後

.mem ファイルを使用して、このデザインの 2 つのコンポーネントに含まれる 2 つの RAM を初期化します。

私が持っているネットリスト ファイル (合成の出力) を使用してそれを達成する方法

.memファイルをそれらのRAMにロードしてテストするだけで、合成する前に簡単でした。

どんな助けでも

4

1 に答える 1

2

わざわざ .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 で同じことができないとしたら、非常に驚​​くでしょう。

その初期データは、合成ツールによって保持され、ネットリストに何らかの形で表示される必要があります。その形が理解できれば、必要に応じてデータを修正することもできますが、ソースを更新して再合成した方が簡単でしょう。

于 2013-05-18T09:47:10.287 に答える