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なので省略