というわけで、基本的に機能のほとんどをFPGAで自作するものの、そのFPGAのデバッグやコントロールをするためにシステム全体を管理するコントローラー(シスコン)がまずは必要だよね、ってことで、原理基板を作ってみた。
原理基板といってもユニバーサル基板にがつがつ実装&端子を引き出しただけだけど。
必要な機能としては
-
FPGAやアンプ部分への電源投入・遮断の管理
-
FPGAなどの初期化、設定(I2C & SPI)
-
ボタン入力に応じて、入力切替や音量調整をFPGAやアンプに伝える
-
入力状況(USB1は48kHzだよ、USB2は繋がってないよ、とか)などをユーザーに伝えるためのLCD表示
-
開発中のデバッグのためにパソコンとRS232Cでつなげる
とかこんな感じを目指して。
NTR000のためのシスコンは、いろいろ考えた末に、PICじゃなくてAVRのATmega644Pにしました。
秋月で売ってたし。
こいつに簡易マルチタスクを実装して上記の機能を実現していくことにします。
まずは原理基板で、LEDを1秒おきにピコピコ光らせるだけのテストプログラムを焼き付けたのが今回の写真。
上の黒い長方形のものが本体であるATmega644P、下の緑の基板に載ったICがRS232Cドライバ、右上のLEDは通電確認用(電源ケーブルがささってれば光る)、その下のLEDが今回のテストプログラムでATmega644Pで光らせたLEDです。
ついでなので、RS232CからLEDが光ったと同時に「This is a test.」という文字をパソコンへ出力しました。
まぁ、写真を見れば明らかですが、とりあえずLEDがピコピコ光って、パソコンに文字が出力されたので、この原理基板は動いてはいるようです。
これから、この原理基板を用いて、まずはFPGA開発の際のデバッグに必要な「マルチタスク機能」と「パソコンとRS232Cで繋いでデバッグする機能」の2種類を作っていくことにします。
ところで、今回のATmega644PはXilinxのJTAG経由でフラッシュにプログラムを焼きました。
どうもぐぐったところ、ネット上ではあまり情報がないようなので簡単にまとめを下に書いておきます。
Atmelが出してる英語の仕様書を読み砕いてやってみたらできたってだけなので、もし間違っているようならこっそり教えてください。
-
ATmega644PのJTAG関連の端子をそのままJTAGケーブルに直結する。出荷状態のATmega644PはJTAGが有効状態なので、ハードウェアはこれだけでOK。
-
WinAVRなりを使ってプログラムを作って、お望みのhexファイルを作る。
-
atmelのサイトにavrsvfというHex -> SVFファイルに変換するそのものずばりのツールが転がっているので拾ってくる。
-
avrsvfは、644Pに対応していないので無理矢理対応させる。具体的にはATmega644をベースにしてシグネチャを0x1E960Aへ変更。
-
「avrsvf -datmega644p -e -pf -vf -s -ifhoge.hex -ovhoge.svf」などで変換。-sと-vfはなくても動くが、JTAGの通信速度が速すぎて実際には転送できてないことに気づくために有効にしておいたほうが吉。
-
Xilinx impactを起動
-
Boundary scan -> Initialize chainででてきた不明なデバイスにAtmelから拾ってきたBSDLファイルを指定する(焼き付けるだけだと結局使わないと思うので、たぶんダミーのBSDLファイルでもいいと思う)
-
Output Cable SetupでJTAG TCKの速度をATmega644Pの許容値にする。とりあえず最低の750kHzにした。
-
Assign New Configuration fileでさっきavrsvfで作ったSVFファイルを指定
-
excute!
-
問題なければ「Play succeeded」とでる。通信が失敗していれば、verifyエラーとなる。avrsvfでverifyオプションをつけないと、通信が失敗していても「Play succeeded」になるので注意。
さーて、夏コミ作業のおいこみをしないと……。
コメントをいただけるとスタッフが喜びます。同人ゲームのサポートは
メールフォームからお願いします。
コメントをいただけるとスタッフが喜びます。同人ゲームのサポートはメールフォームからお願いします。