AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

FPGAにライフゲームを実装した

www.youtube.com

Xilinx社のSpartan6LX9にライフゲームを実装して動かしてみた。

VGA出力

VGAは素直で実装しやすい。

参考

ピンアサインについて VGA端子 - Wikipedia

信号タイミングについて VGA Video (6.111 labkit)

640*480 60Hzを出力したければ、25.175MHzで9bitのカウンタ*1をインクリメントしてSyncパルスの時だけHSYNCを落とせばいい。VSYNCも同様にして1行毎にカウントアップするだけで行ける。

ライフゲーム実装

参考

ライフゲーム - Wikipedia

c言語で書いてあった c言語でLifeGameを再実装 - AccessViolation Exception

ライフゲームの計算はムーア近傍から写像を作るだけである。RAMから読み出すアドレスを生成する回路と、ムーア近傍値をストアして結果を出す回路を作る。

近傍の値を再利用する都合上RAMを2つ用意し、交互に写像を取る実装にした。*2

VGA出力は計算元になっているRAMからデータを読み取り出力している。

乱数生成

乱数はLFSRで生成している。種はVGAのカウンタの値をいじって0にならないようにしたものが指定できるようにしてある。

線形帰還シフトレジスタ - Wikipedia

*1:水平ピクセルは640 + 16 + 96 + 48カウントできればいい

*2:実際にやるなら3行ストアしてしまったりしてもいいのかもしれない

MiniProg3を使わずにPSoC4に書き込みしたい

PSoC4単体でできるだけ安価に書き込み可能な環境を作る試みに関するまとめです。

CY8CKIT-049-42XX Prototyping Kit

PSoC 4200 Prototyping Kit: マイコン関連 秋月電子通商 電子部品 ネット通販

Cypressが低価格で提供しているPSoC 4ファミリを簡単に利用できるキット。低価格であるところと、小規模なものであれば事足りる性能を持ち合わせています。

内部構成

f:id:kamiyaowl:20150711171540p:plain

PSoC4 Prototyping Kit Guideより引用

PSoC 4 CY8CKIT - 049 4xxx Prototyping Kits - Cypress

実はこのボード、PSoC 4(CY8C4245)への書き込みを安価に実現するためにPSoC 4自体にUART経由でプログラムを流し込めるコードがBootloaderとして用意されています。

そしてUSB-Serial(CY7C65211)が載っていてPCからプログラミングが出来るという仕掛けになっています。*1

書き込み問題

もしプロトタイピングを終えてCY8C4245を単品で購入して使用することを考えた時に、Bootloader経由での書き込みをするためのプログラムは書き込まれていません。

ということはこのボードを切り離した書き込み側を持っていても自作基板等での利用ができないことになります。

MiniProg3

PSoC MiniProg3 Program and Debug Kit CY8CKIT-002 Cypress製|マルツオンライン

\16,000相当。高すぎてこれならPrototyping Kit大量購入して、自作基板にはピンヘッダ等でコンタクトを取ったほうがまだいい*2

というわけでできるだけ安価にPSoC4への書き込みを実現しようという調べ物のまとめになります。

PSoC4 Pioneer Kit

PSoC 4 PIONEER KIT CY8CKIT−042: マイコン関連 秋月電子通商 電子部品 ネット通販

こいつは書き込み器として手前にPSoc 5LP(CY8C5868)を搭載してSWD経由で書き込みを実現しているらしい。というわけでBootloaderを必要としていないため、SWD端子だけ切り離して利用すれば使える。

基板パターンを見る感じ書き込み器単体で露出させるにはパターンカットなり実装済みデバイスの取り外しが必要そうなので却下。

PSoC4 Pioneer Kitの書き込み器を模倣

PSoC4 Pioneer KitのプログラマPSoC 5LPで実装されていることを見て、同じ回路を模倣した品を用意すれば生けるのではないかと思ったがそもそもPSoC 5LPへの書き込みができないので却下。

PSoC 5LP Prototyping Kitに書き込み器を実装

PSoC 5LP Prototyping Kit: マイコン関連 秋月電子通商 電子部品 ネット通販

PSoC 5LP等にプログラマを実装することに関してCypressは情報やサンプルプロジェクトの共有をしている。

AN84858 - PSoC® 4 Programming Using an External Microcontroller (HSSP) - Cypress

と思ってよく考えたらこの基板に乗っているプログラマはCY8C5868でPSoC4 Pioneer Kitと同様のSWDデバッガだった。

この基板を切り離したKitProg(プログラマ)を利用すればSWD経由で多くのデバイスがかけるらしい。

f:id:kamiyaowl:20150711123729j:plain

まさかと思って試したが本当に書き込めてしまった。KitProgなのでBootloadableプロジェクトにする必要もなければボタンを押しながら接続して書き込むような手間も不要。

まとめ

PSoC 5LP Prototyping Kit: マイコン関連 秋月電子通商 電子部品 ネット通販

こいつを一つ買いましょう。

*1:Arduinoの構成とほぼ同じ。Arduino Uno Rev3ではATMEGA328pをUART経由でプログラムするためにUSBコントローラを積んだATMEGA16U2が実装されている

*2:やはり見栄えを考えた時はそうは思わないが

CY8CKIT-049-4xxxで書き込みが行えなくなった時の処置

CY8CKIT-049-4xxx Prototyping Kitの書き込み器側に乗っている石(USB Serial Bridge Controller(CY7C65211-24L))は実はいろいろな機能がついていて、単純にBootloader経由の書き込み以外に

  • UART/SPI/I2C インターフェース(2機使える
  • GPIO制御
  • JTAG Controller
  • CapSense (CapSenseをコンフィグした結果、ボタンのオンオフとしてGPIOにアサインできる

詳しくは USB - Serial Bridge Controller - Cypress に載っています。

今回はUARTをSPIやI2Cに変えていたら何故か*1仮想シリアルポートを認識してくれなくなり、Bootloader経由での書き込みができなかったことについての対処療法のメモです。

事の発端

f:id:kamiyaowl:20150621000334p:plain

普段書き込むBootloader Hostの画面です。どうやってもここに認識してくれなくなり、デバイスマネージャを確認しても認識されていない状況(不明なデバイスではなくそもそも存在しない)

試行錯誤したが

理由はわからず。何故デバイスが消滅したのかも不明

ついさっき復活した

復活した手順だけメモしておく。

f:id:kamiyaowl:20150621000732p:plain

C:\Program Files (x86)\Cypress\USB-Serial SDK\1.0\bin\USB Serial Configuration Utility.exe を起動(存在しない場合は USB - Serial Bridge Controller - Cypress からUSB-Serial Software Development Kit (SDK)をインストール)

仮想COMポートだけ死んでいるのでCyUSBSerialを使ったアプリケーションは(自作の物も含め)動作できる。

さておきデバイスを開き、設定を初期化する

f:id:kamiyaowl:20150621000840p:plain

Restore Default Settingをクリックして設定を初期状態にする。

f:id:kamiyaowl:20150621000850p:plain

あとはデバイスに書き込んだ所、どういうわけか仮想COMポートが復活した...。

終わりに

次同じ現象が起きたら確実に特定するが、対処療法としては十分すぎたので以上。

*1:おそらく変えたことが直接起因しているものではなさそう