Core GeneratorでのROMの作成から利用までの手順
おそらくfaddのテストのときに必須になると思うので、メモ書き程度に。
ROMの作成
- ISEを起動
 - "Project"から、新たなプロジェクトを作っておく(最終的に基盤に焼くことになるプロジェクトになります)
 - "Sourceの"中の、"New Source"を選択
 - ずらっと一覧が出てくるので、"IP (CORE Generator & Architecture Wizard)"を選択
 - 右のほうの"File name"に好きな名前を入力
 - またしてもずらっと一覧が出てくるので"Memories & Storage Elements/RAMs & ROMs/Block Memory Generator"を選択
 - Summaryは無視して"Finish"
 - 少し待つと新しいウィンドウが出てくるので、そのウィンドウの2ページ目に進む
 - "Memory Type"で、自分が使うタイプを選択。(入力オペランドごとにROMを作るなら"Single Port ROM"でOK)
 - 3ページ目に進む
 - "Read Width"に、格納したいデータのbit数を指定(今回は32bitでOK)
 - "Read Depth"に、格納したいデータの数を指定(数字が赤く表示されたら、Block RAMが不足してたりなんなりで、作成不能ってことを意味します)
 - 4ページ目に進む
 - "Memory Initialization"の中の、"Load Init File"で、ROMの初期化情報を書いた.coeファイル(後述)を指定(こちらも、12番目同様、赤文字の時には何かしらのエラーのせいで作成不能を意味します)
 - (5,6ページ目は変更しなくて大丈夫なので)"Generate"
 - 後はほうっておくだけで完成
 
少しverが違うようだけど、ここを参考にしました
.coeファイルについて
説明面倒なのでここを参照しましょう。このサイトで16ってところを2にすれば、当然ながら2進数表記のデータを格納できます。 fadd.cの出力をリダイレクトして作りましょう。
ROMの利用
以下では、Core GeneratorでROMを作る際に指定した名前を"foo"、プロジェクト名を"bar"とします。
- ISEのプロジェクトファイルの置き場にある、"bar"のディレクトリに入ります
 - その中の、"ipcore_dir"に入ります
 - "foo.vho"ファイルを開きます
 - その中ほどにあるcomponent宣言をコピペで自分のファイルに書き足します
 - その中ほどにあるinstance宣言をコピペで自分のファイルに書き足します("your_instance_name"は適宜書き換えましょう)
 - あとは自分の好みのようにport mapして使うだけです
 
ただし、このROMは、"addra"にアドレスを入れた次のクロックでデータを"douta"に吐き出すので、そこだけは注意が必要です。
Core Generatorの吐いたデータを使ったシミュレーションについて
一応、Modelsimでもシミュレーションはできるようです。ソースはこちら。 ただ、正直言って面倒くさいので、ISEに付属しているISimを使うほうが手軽です。Xilinxのライブラリをコンパイルしたりの手間が省けます。(あと、こっちのシミュレータのほうが個人的には好き)
※シミュレーションしたいプロジェクトを開いていることは前提条件
- 左上の"Hierarchy"のすぐ上のラジオボタンが、きっと"Implementation"になっていると思うので、"Simlation"に変更
 - Hierarchyの最上位のファイル(たぶんtopにしてる人が多いと思う)を選択した上で、後は左下の中からISimを起動
 - あとはModelsimと似た感じのUIなので省略
 
