パルテノン講習会 SoC演習 奥山祐市 1 この講義の趣旨 • SoC編:snxcで遊ぼう! – Memory Mapped I/Oを体験する – おくやまの経験上、アセンブラでやると数日かかるこ とを、snxcでは数分で記述できる • オプション – もうすでにわかっているひとは? • 例題を使ってゲームなどを作ってみよう • SFL/NSLについての話は出てきません – 一言だけ・・・ – /home/DE2_70/rtl を参照 2 演習を始める前に • 知っておくと良いこと – make/makefile の知識 • UNIX文化の入り口・基礎 • 時刻の依存関係を基にした汎用的な自動化ツール • これを機にぜひmakefileの読み方/作り方を習得しよう – snxcの中身 • コンパイラはプログラミングの集大成 • これほど小さくて見通しのよいコンパイラは他にない • snxcの中身を読めるようになろう 3 SoC演習編 • 周辺機器の制御 メモリマップドI/O (Memory mapped I/O) • 実験で使う周辺機器とアドレスマップ • snxcによるプログラミング • 資料集 – 各種レジスタの説明 – 演習プログラムの説明 4 周辺機器の制御 • 周辺機器=ペリフェラル • プロセッサは周辺機器をメモリの一部として扱う • 周辺機器のコントローラは、レジスタを介して制 御を行う プロセッサがアクセスできる領域 メモリアクセス 本当のメモリ SN/X ボタン スイッチ LED 7セグメントLED LCD VGA 5 imem SN/Xと周辺機器の接続図 inst_read inst_write iadrs inst SN/X はバスコントローラ アドレスが担当するモジュール の該当範囲に入った際に、周 辺機器レジスタの制御を行う この制御はDE2_70.nslに記 述されている memory_read memory_write adrs datai datao KEY SW LED LCD HEX VGA dmem 外部機器との やり取り 6 実験で使う周辺機器と アドレスマップ モジュール 名 開始アドレス (ベースアドレス) 終了アドレス 大きさ 用途 dmem 0x0000 0x0FFF 2^12 データメモリ KEY 0xA000 0xA000 2^0 プッシュボタン入力 SW 0xA001 0xA001 2^0 トグルスイッチ入力 LED 0xA002 0xA003 2^1 LED(赤16, 緑9)出力 HEX 0xA008 0xA00F 2^3 7-segment LED出力 LCD 0xA020 0xA03F 2^5 LCD(16x2)出力 VGA 0xC000 0xCFFF 2^12 VGA(80x24)出力 7 snxcプログラミング • /home/SNX2/snxc2/SPEC.txtを参照 • C言語のサブセットとなっている • 例 SW =0xA001 LED=0xA002 while(1) mem[LED]=mem[SW]; 8 ボードの制御 1. rtlディレクトリでmake; make downloadする 2. programsディレクトリでmakeする (すべての.scファイルをコンパイルする) 3. programsディレクトリで make <target>.writeでプログラムをダウンロード 4. Key0を押し、リセットをする • 注:make <target>.write中にエラーが出るとボー ドにアクセスできなくなる。その時は、1をやり直 す 9 資料集 10 KEY入力 • プッシュボタンKEY3, KEY2, KEY1入力を検出する 3 2 1 0 0xA000 KEY3 KEY2 KEY0 KEY1 • KEYを押すと0、KEYを離すと1になるので注意 • 下位4ビットのデータのみ保持 11 SW入力 • スイッチSW[15:0]入力を検出する 15 0xA001 14 13 3 2 1 0 ……… • 16ビットのデータをフルに保持する。read可 能・writeは意味なし 12 LED出力 • LEDの出力 – 赤:LEDR[15:0] 緑:LEDG[8:0] 15 14 13 0xA002 (LED赤) 0xA003 (LED緑) 3 2 1 0 3 2 1 0 ……… 9 ……… • read/write 可能 13 HEX出力(1) • 8つの7-segmant LEDへの出力 3 8 2 1 0 ……… ……… 0xA008 0xA00F ……… 14 HEX出力(2) • 一つの7-segment LEDは・・・ – それぞれのビットは {dp, g, f, e, d, c, b, a} として対応付けられている • 意味のある数字を表示する ためには、一工夫必要 dp – 08keyTo7seg.scを参照 15 LCD出力 • LCDは16桁x2行の表示領域を持つ • 入力にはASCIIコード+拡張コードを入れる 3 7 2 1 0 ……… ……… 0xA020 0xA03F ……… 16 ASCII+拡張 コード対応表 VGA出力(1) • 128x32のメモリ領域 • 80x30の表示領域がある • コマンド領域がある 128 80 32 30 コマンド領域 /home/DE2_70/rtl/VGA /README.txt を参照 表示可能領域の外に 隠れている 18 VGA出力(2) • 一つのキャラクタを表示するには – 色指定+(ASCII+拡張)コード 15 0xCxxx 12 11 8 … … 前景色(4bit) 3 7 2 1 0 文字コード(8bit) • 80(x) x 32 (y) のどこに文字を置くか? Address = VGA + 0 ……… 背景色(4bit) 11 1 7 … y座標(5bit) 2 6 ……… x座標(7bit) 19 プログラム一覧(1) 01swToLedR.sc 02swToLedG.sc 03swToHex0.sc 04swToHexN.sc 05swToLcd.sc 06swToVga.sc 07keyToLed.sc 08keyTo7seg.sc 09keyToEdge.sc swLEDR (確認) swLEDG (演習) swHEX0 (確認) swHEXN(演習) ASCII表示(確認) ASCIIと色の表示(確認 key入力(確認) 7segパターン(確認) keyのエッジ検出(確認) 20 プログラム一覧(2) 10wait.sc 11lcdMsg.sc 12vgaMsg.sc 13edgeHex4.sc 14stopWatch.sc 15stwOnLcd.sc 16stwOnVga.sc 99vgaTest1.sc 99vgaTest2.sc 特定の時間待つ (確認・演習) LCDにメッセージを表示 (確認・演習) VGAにメッセージを表示 (確認・演習) ストップウォッチの叩き台(確認) ストップウォッチ(LED版)の作成 ストップウォッチ(LCD版)の作成 ストップウォッチ(VGA版)の作成 VGAテストパターン(確認) VGAテストパターン(確認) 21
© Copyright 2025 ExpyDoc