主記憶用のRAMの作り方 (Ver.9まで)
主記憶用のRAMの作り方 参照。
Mega Functionによる主記憶用RAM作成
FPGA上で大規模な回路を実装する時に、
それらの回路を効率よく実装するため、
FPGAベンダはいくつかの代表的な回路に対して
マクロを準備しています。
主記憶用のRAMは、このマクロ(QuartusII上ではMega Functionと呼ぶ)を
用いて作成します。
なお、通常のRAMはアドレスを与えると即データを出しますが、
Mega Functionで作ったRAMは出口にレジスタがあるようで、
アドレスを入力した後にクロックを入れないとデータが出てきません。
注意して下さい。
- ライブラリで"megafunctions→storage→lpm_ram_dq"を選択してOKを押す。
- Mega Function Wizardが立ち上がる。
- "MegaWizard Plug-In Manage"のウィンドウが出る。
Mega Functionの出力形式と出力場所/出力名を聞かれるが、
そのままNextを押してかまわない。
- "MegaWizard Plug-In Manager - LPM_RAM_DQ (3/7)"というウィンドウが出る。
いきなり番号が飛ぶが問題はない。
- SIMPLEは1ワード16 bits構成なので、
RAMのデータ幅を16 bitsにする必要がある。そのため、
"How wide should the 'q' output bus be?"を16 bitsにする。
- "How many 16-bit words of memory?"を変更し、
RAMのエントリ数を決める。とりあえず、4096 wordsにする。
- 座学で話したように、仕様書どおり65536 word作ろうとすると、
コンパイル時に"選択したデバイスを配置できない"と怒られます。
- Nextを押す
- "MegaWizard Plug-In Manager - LPM_RAM_DQ (4/7)"
- "Which port should be registered?"の項目の
"'q' output port"のチェックを外す
- これをチェックしたままにしておくと、'q'の出口に
flip-flopが設置され、読み出しに2クロック必要となります
- Nextを押す
- "MegaWizard Plug-In Manager - LPM_RAM_DQ (5/7)"
- 動作中の主記憶の様子をIn-System Memory Content Editorで
見ることができるようにするため、
"Allow In-System Memmory Content Editor to capture and update content..."をチェックする。
- あらかじめ主記憶に書き込むデータの
ファイル(ファイルの作り方は後方を参照)を準備してあるのならば、
"Do you want to specify the initial content of the memory?"
をYesにし、ファイルを指定する。
- Finishを押す。
- 確認が出るので、もう一度Finishを押した後、配置する。
主記憶(RAM)のデータ・ファイル(プログラムも含む)の作り方
- "File→New→Memory Files→Memory Initialization File"を選択し、
メモリ・ファイル・エディタを立ち上げる。
- ワード数とワード・サイズを聞かれるので、
ワード数には必要なワード数を指定し、ワード・サイズを16を指定する。
- Excel風のウィンドウが出ますので、RAMの内容を編集します。
保存すると、拡張子が.mifのMemory
Initialization File(MIFファイル)が作成されます。
- "View→Cells Per Row"で1行あたりのワード数を変更できるので、
使いやすいワード数にすると良いでしょう。
- "View→Adress Radix"および"View→Memory Radix"で
表記(2進数/8進数/10進数/16進数)を変えれるので、
好きな表記で編集すると良いでしょう。
- セルの間に新たなセルをいれたければ、"右クリック→
Incert Cell"で間に新たなセルを挿入できます。
- MIFファイルは簡単な構造のテキスト・ファイルですので、
直接いじくることも可能です。
- アセンブラを作るのでしたら、この形式で出力させるように作ると良いでしょう
FPGAで動作中の主記憶(RAM)を読み書きする
QuartusIIに付属するIn-System Memory Content Editorを
使うことにより、FPGAで動作中のRAMの内容を見たり操作することができます。
- "Tools→In-System Memory Content Editor"を立ち上げます。
- 右上の"Hardware"の項目で"USB-Blaster"を選択します。
- 問題がなければ、左上の"Instance Managaer"にFPGA中に作成
されたRAMの一覧が出ます。
- "Instance Manager"でエディットするRAMを選択します。
- 下のRAMの内容を示すウィンドウが"??"で埋まります。
- 下のRAM内容を示すウィンドウでRAMの操作を行います。
- ウィンドウを右クリックして"Read Data from In-System Memory"を
選択すると、RAMの内容を読み込みます。
- (前回の読み込みから)更新された部分は赤色で表示されます。
- RAMの内容の変更のしかた。
- 変更したい部分の左にカーソルと持って来て、
書き込みたい値を入力します。
- 書き込まれた値は青色で表示されます。
- この時点では、変更はまだFPGA内部には反映されていません。
- ウィンドウを右クリックして"Write All Modified Words to
In-System Memory"を押して経ん後部をFPGAに書き込みます。
- ウィンドウを右クリックして"Continuously Read Data from
In-System Memoery"を選択すると、
RAMの内容を0.5秒ぐらいの間隔で読み込みを繰り返します。
- リアルタイムでRAMが更新されている様子が見えます。
- 更新された部分は、一瞬、赤色になります。
- ウィンドウを右クリックして"Stop In-System Memory Analysis"を
選択すると、リアルタイムの更新を終了します。
- メモリ・アクセスまわりのデバッグを行う場合は、
クロック周波数1Hzぐらいで動作させながら、
RAMの内容を見ると良いでしょう。
- 他にも、右クリック後の操作で書き込む値をMIFファイルから
読み込んだり(Import Data from File)、
逆に、メモリの内容をMIFファイルに書き込んだり
できますので(Export Data to File)、必要に応じて利用してください。
In-System Memory Content Editorの詳細は、
オンライン資料: Quartus II開発ソフトウェアの
Quartus IIハンドブックのVolume 3, Chapter 15, "FPGAメモリおよび定数のインシステム・アップデート"に書かれています。
Last modified: 2010/4/7 11:00