Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

0

Share

Download to read offline

Verilog-HDL Tutorial (14)

Download to read offline

Verilog-HDL Tutorial Using DE0 FPGA Board

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Verilog-HDL Tutorial (14)

  1. 1. 1 Verilog-HDL 講習会DE0編(14) Cyclone内蔵メモリM9Kを使う 2, August, 2013 鹿児島大学 中原 啓貴
  2. 2. M9Kとは? •  Altera社FPGA Cyclone IIIに内蔵されているメモリ(RAM: Random Access Memory): 1個の容量は9Kbit •  複数のM9Kを組合せて大きなメモリとしても使用可能 •  デュアルポートRAMをサポート •  DE0搭載のFPGA (EP3C16) ‒  56個のM9Kを搭載 (合計504Kbit) 利用可能数に限り有り! 2
  3. 3. 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
  4. 4. M9Kのモード •  同期式(クロック使用)のみサポート 4 Single-port RAM Simple dual-port RAM True dual-port RAM Single-port ROM 他にも, Dual-port ROM, FIFO, Shift registerが構成可能
  5. 5. M9KをROMとして使う 5
  6. 6. M9Kのタイミングチャート •  ROM構成時のタイミング(連続読み出し) 6 clock address q ADR1 DATA1 アドレスを セットする 次のクロックで ROMにセット ちょっと遅れて データが出てくる 次のクロックで 読み出し&次の アドレスをセット ADR2 DATA2
  7. 7. 仕様 •  ROMに書かれたデータを1秒毎にLEDGに 表示する回路を作成 7
  8. 8. 状態遷移図 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. 9. 9 •  ピン配置が面倒くさいので、デフォルト のプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め) DE0付属のCD-ROM Demonstrations 内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_14_M9K_basic¥ 内にコピー
  10. 10. DE0_TOP.qpfをダブルクリック してQuartus IIを起動 10 Pin Plannerを開いてみると ピン配置が終わっている!
  11. 11. Verilog-HDLを入力 11 ダブルクリック Verilog-HDLの テンプレートが 表示されるので コードを入力 コード入力したら保存を忘れずに!
  12. 12. ROMの中身を用意 12 content.mif を作成する. テキストエディタを開いて content.mif を編集
  13. 13. MIFファイルフォーマット 13 ワード数 8 (つまり入力3ビット), ワード長 (出力) 10ビット アドレスとワードの表記法(基数)を 設定. ここでは2進数 (binary) アドレス : ワード の順番に ROMの中身を記述する
  14. 14. MegaWizard を起動 14
  15. 15. Create a new custom megafunction variation を選択 15
  16. 16. ROM 1-PORT を選択 16 Memory Compiler -> ROM: 1-PORT を選択 Verilog-HDL を選択 ファイル名は ROM_LEDGに
  17. 17. 17 出力 (q)は10ビット ワード数は 8 個 メモリの種類は M9Kを指定
  18. 18. 18 チェックを外す
  19. 19. 19 Browseをクリックし mif ファイル (ROMの中身) を読み込む
  20. 20. 20 Files of type: で「MIF files (*.mif)」を 選択 先程作成した「content.mif」を 選択する
  21. 21. 21
  22. 22. 22
  23. 23. 23 【重要】Instantiation template file に チェックを付けることを忘れないこと!!
  24. 24. ポップアップウインドウには Yesをクリック 24
  25. 25. 先程, 生成した Instantiation template file をコピペ 25 作業用フォルダに できた ROM_LEDG_inst.v をテキストエディタで開く Quartus II のDE0_TOP.vにコピペ!
  26. 26. 26 入力する Verilog-HDL
  27. 27. コンパイルを行う 27 「保存アイコン」を クリックして保存 「コンパイルアイコン」を クリックして コンパイルを行う コンパイル後、このウインドウが 表示されればOK
  28. 28. Compilation Report と Project Navigator にM9Kが 使用されていることが表示されます 28 Project Navigator(左上にある) の下のスクロールバーを右に スクロールする
  29. 29. FPGAをプログラム 29
  30. 30. 動作確認 1秒毎にMIFファイルの中身が LEDGに表示されていますか? 30
  31. 31. M9KをRAMとして使う 31
  32. 32. Sinple-port RAM のタイミングチャート 32 clock address data wren q ADR1 DATA1 Write アドレスと データを セットする 次のクロックで Read アドレスが RAMに取り込まれる ちょっと 遅れて データが 出てくる Readアドレスを セットする ADR2 DATA2 Write イネーブル をONにする 次のクロックで 書き込み完了 & Writeイネーブルを OFFにする
  33. 33. 今回の仕様 RAMを手で動かしてみる •  スライドスイッチ SW[9:4]: アドレス(6ビット) •  スライドスイッチ SW[3:0]: データ(4ビット) •  押しボタンスイッチ BUTTON[2]: 書き込みイネーブル •  LEDG[3:0]: RAMのデータ表示 33
  34. 34. 34 •  ピン配置が面倒くさいので、デフォルト のプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め) DE0付属のCD-ROM Demonstrations 内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_14_M9K_RAM¥ 内にコピー
  35. 35. DE0_TOP.qpfをダブルクリック してQuartus IIを起動 35 Pin Plannerを開いてみると ピン配置が終わっている!
  36. 36. Verilog-HDLを入力 36 ダブルクリック Verilog-HDLの テンプレートが 表示されるので コードを入力 コード入力したら保存を忘れずに!
  37. 37. MegaWizard を起動 37
  38. 38. Create a new custom megafunction variation を選択 38
  39. 39. RAM: 1-PORTを選択 39 Memory Compiler -> RAM: 1-PORT を選択 Verilog-HDL を選択 ファイル名は M9K_RAMに
  40. 40. 40 出力 (q)は4ビット ワード数は 64 個 メモリの種類は M9Kを指定
  41. 41. 41 チェックを外す
  42. 42. 同一アドレスに読み込みと書き込みが同時 に発生した時の処理はデフォルトのまま (書き込みデータをそのまま読み出す) 42
  43. 43. 43 初期データ(RAMの中身)は blank (空っぽ)でOK RAMはデータが書かれる ことがあるから. もちろん, mifファイルで 初期データを指定してもよい
  44. 44. 44
  45. 45. Instantiation Template File 生成の 指定を忘れないように! 45
  46. 46. 生成した Instantiation Temple File を テキストエディタで開いてDE0_TOP.v にコピペ 46 作業用フォルダに できた M9K_RAM_inst.v をテキストエディタで開く Quartus II のDE0_TOP.vにコピペ!
  47. 47. 入力するVerilog-HDL 47
  48. 48. コンパイルを行う 48 「保存アイコン」を クリックして保存 「コンパイルアイコン」を クリックして コンパイルを行う コンパイル後、このウインドウが 表示されればOK
  49. 49. コンパイル後, Compilation Report で M9Kのメモリ量を確認 (64 x 4 = 256ビットになってますか?) 49
  50. 50. FPGAをプログラム 50
  51. 51. データ: 1111とセットして 押しボタンを押す LEDGに1111 が表示される (アドレス000000に書き込まれた!) 動作確認 51 アドレス: 000000 データ: 0000 LEDGには何も表示されない データ: 0001とセットして 押しボタンを押す LEDGに0001 が表示される (アドレス000000に書き込まれた!)
  52. 52. 動作確認 52 アドレス: 000001 LEDGには何も表示されない (アドレス000001には何も書かれていない) データ: 0001とセットして 押しボタンを押す LEDGに0001 が表示される (アドレス000001に書き込まれた!) アドレス: 000000 LEDGには1111が表示される (先程のデータがRAMに残っている!)
  53. 53. まとめ •  M9Kの使い方を学習 ‒ ROM ‒ RAM ‒ いずれもSingle-Port •  課題 ‒ 様々な大きさのROMを作成し, LEDGの表示パ ターンを変えてみよう 53

Verilog-HDL Tutorial Using DE0 FPGA Board

Views

Total views

1,124

On Slideshare

0

From embeds

0

Number of embeds

4

Actions

Downloads

18

Shares

0

Comments

0

Likes

0

×