Post on 16-Jul-2015
M9Kとは? • Altera社FPGA Cyclone IIIに内蔵されているメモリ(RAM:
Random Access Memory): 1個の容量は9Kbit • 複数のM9Kを組合せて大きなメモリとしても使用可能 • デュアルポートRAMをサポート • DE0搭載のFPGA (EP3C16)
‒ 56個のM9Kを搭載 (合計504Kbit) 利用可能数に限り有り!
2
M9Kの構成 • 用途に応じて構成を変えることができる
3
構成 入力数 出力数 8192 x 1 13 1 4096 x 2 12 2 2048 x 4 11 4 1024 x 8 10 8 1024 x 9 9 9 512 x 16 8 16 512 x 18 8 18 256 x 32 7 32 256 x 36 7 36
M9Kのモード • 同期式(クロック使用)のみサポート
4
Single-port RAM Simple dual-port RAM
True dual-port RAM
Single-port ROM 他にも, Dual-port ROM, FIFO, Shift registerが構成可能
M9Kのタイミングチャート • ROM構成時のタイミング(連続読み出し)
6
clock address q
ADR1
DATA1
アドレスを セットする 次のクロックで ROMにセット
ちょっと遅れて データが出てくる
次のクロックで 読み出し&次の アドレスをセット
ADR2
DATA2
状態遷移図
8
READ ADR Set
Reset r_adr <= 3'b0; LEDG <= 10'b0; clk_cnt <= 26'b0;
NONE clk_cnt <= 26'b0; LEDG <= w_rdata (ROMのデータ);
clk_cnt != 26'd50000000 clk_cnt <= clk_cnt + 1'b1
clk_cnt== 26'd50000000 r_adr <= r_adr + 1'b1; 20nsec (50MHzの逆数)を 50000000回カウントすると 1000000000 nsec = 1secになる
9
• ピン配置が面倒くさいので、デフォルトのプロジェクトを読み込みましょう!
(DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM ”Demonstrations”内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_14_M9K_basic¥ 内にコピー
MIFファイルフォーマット
13
ワード数 8 (つまり入力3ビット), ワード長 (出力) 10ビット
アドレスとワードの表記法(基数)を 設定. ここでは2進数 (binary)
アドレス : ワード の順番に ROMの中身を記述する
先程, 生成した Instantiation template file をコピペ
25
作業用フォルダに できた ROM_LEDG_inst.v をテキストエディタで開く
Quartus II のDE0_TOP.vにコピペ!
Compilation Report と Project Navigator にM9Kが
使用されていることが表示されます
28
Project Navigator(左上にある) の下のスクロールバーを右に スクロールする
Sinple-port RAM のタイミングチャート
32
clock address data wren q
ADR1
DATA1
Write アドレスと データを セットする
次のクロックで Read アドレスが RAMに取り込まれる
ちょっと 遅れて データが 出てくる
Readアドレスを セットする
ADR2
DATA2
Write イネーブル をONにする
次のクロックで 書き込み完了 & Writeイネーブルを OFFにする
今回の仕様 RAMを手で動かしてみる
• スライドスイッチ SW[9:4]: アドレス(6ビット) • スライドスイッチ SW[3:0]: データ(4ビット) • 押しボタンスイッチ BUTTON[2]: 書き込みイネーブル • LEDG[3:0]: RAMのデータ表示
33
34
• ピン配置が面倒くさいので、デフォルトのプロジェクトを読み込みましょう!
(DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM ”Demonstrations”内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_14_M9K_RAM¥ 内にコピー
生成した Instantiation Temple File を テキストエディタで開いてDE0_TOP.v にコピペ
46
作業用フォルダに できた M9K_RAM_inst.v をテキストエディタで開く
Quartus II のDE0_TOP.vにコピペ!
データ: 1111とセットして 押しボタンを押す LEDGに1111 が表示される (アドレス000000に書き込まれた!)
動作確認
51
アドレス: 000000 データ: 0000 LEDGには何も表示されない
データ: 0001とセットして 押しボタンを押す LEDGに0001 が表示される (アドレス000000に書き込まれた!)
動作確認
52
アドレス: 000001 LEDGには何も表示されない (アドレス000001には何も書かれていない)
データ: 0001とセットして 押しボタンを押す LEDGに0001 が表示される (アドレス000001に書き込まれた!)
アドレス: 000000 LEDGには1111が表示される (先程のデータがRAMに残っている!)