Tang Primerの使い方
中華格安FPGA;Tang Primerの使い方、入門編です.動かそうとしたところハマってしまったので解決してLチカするまでを書きます.
環境
- windows10
- Anlogic TD(IDE)
となっています.Tang PrimerはTDというIDEで論理合成などを行います.このソフトはWindowsの他,Linuxにも対応しているらしいです.(研究室の仲間がArchLinuxで動かしていました)
FPGAボードにしては非常に安く,2500円と激安!!!!使う予定もないのに買ってしまいました.性能をみると全然悪くなく,そこそこのものなら動かせそう.IDEも公式が配布しているようです.
ラス1ゲット pic.twitter.com/0xljpbpcZv
— fumi (@fumi_maker) February 12, 2020
みんなも買おう!!!!!!!この機会にFPGAを触ってみよう!!!!!!普通は3〜5万とか普通にするFPGAボードだけどこれなら簡単にポチれるね!!!!! akizukidenshi.com
インストール
- 中国語ですが臆せずインストールを進めていきます.普通に進めていけば大丈夫です.
- 完了したらTang Primerを繋ぎます.デバイスドライバーを開き,JTAGとして認識されていることを確認します.
このままではIDEから認識,書き込みができないのでドライバをインストールします.デバイスマネージャからJTAGを右クリックしてドライバの更新を選択します.開いたダイアログでドライバの手動選択をします.
C直下にIDEがインストールしてあるはずです.筆者の場合はWindows10なのでC:/Anlogic/TD4.6.3/driver/Win8_10_64を選択してインストールします.再起動を求められるので再起動をしておきます.
IDEを開いてみます.上側にある下矢印ボタンDownloadをクリックします.開いたダイアログでRefreshボタンの隣にシリアル番号が表示されていればドライバは正常に認識されています.認識されていればインストール関連は完了です.このインストールの項目は飛ばしてください. No hardwareとなっていればドライバは正常に入っていません.ここで入っていない場合は署名されていないドライバのインストールが拒否されている場合があります.これ以降も試してみてください.
- 再度デバイスマネージャを開くとAnlogic usb cableとして認識されているはずです.しかしながらこのドライバは署名されていないため警告マークがついています.署名されていないドライバをインストールをするための手順を踏みます.署名されていないドライバをインストールするためには署名を強制的に無効化してインストールする必要があり少し面倒です.
コマンドプロンプトを管理者権限で起動し,
bcdedit /set TESTSIGNING ON
とタイプします.正常に終了しましたと出たらOKです.失敗した場合はBIOSのセキュアブートを無効化する必要があります.各マザーボードによって違いますが,各種ファンクションキーなどを押してBIOS画面に入ります.各種マザー毎違いますが,セキュアブートのような項目があると思うのでそれを無効化します.設定を保存して再起動.
スタートボタン-設定ー更新とセキュリティー回復ーPCの起動をカスタマイズするから今すぐ再起動を選択します.
再起動したらトラブルシューティングー詳細オプションースタートアップ設定ー再起動を選択します.
すると再起動してスタートアップ設定の画面が出てくるので7をタイプしてドライバ署名の強制を無効にするを選択します.するとそのまま起動します.
再度デバイスマネージャを開くとAnlogic usb cableの警告マークが消えて正常にインストールされていることが確認できます.
この辺の署名なしドライバーをインストールする詳しいやり方は調べるといっぱい出てくるので調べてもらうとよりわかりやすいかと思います.
4thsight.xyz pasofami.game.coocan.jp
仮想環境で動かしてる人向けTIPS
2020/03/20追記:無事にMacOS Catalina+Paralells win10で動作しました.Mojaveでは仮想環境で動作しないようです.仮想環境で開発を使用としている方はご注意ください.
筆者は仮想環境Pallarels Desktop 2019でWindowsを動かしていました.しかし,IDEをインストールしてドライバをインストールしたあとTangprimerを接続するとなぜかOSやIDEがフリーズするようになりました.色々試すも結局解決できず諦めてWindowsネイティブを使うことにしました.ネイティブ環境ではあっさり動きました.結論としてPallarelsはこのドライバと相性が悪いようです.同じ症状の人は注意してください.Linuxの場合は試していないので,もしかすると問題なく動くかもしれないです. VM Fusionで動かしている人は問題なくWindows環境でも認識されていたので仮想環境の相性の問題のようです.フリーズするような現象に陥っている人はOSを変えてみるか,仮想環境ではなく大人しくネイティブで動かすのが早いかもしれません.(2020.3月現在) 解決できた人がいたら教えてください...
この件,あれこれ試していたら他の人は問題なくできる模様で,自分の環境がおかしいという結論に達しました.MacOSインストールし直してみたんですけどそれもダメで打つ手なしの状態です.Macで開発するのは諦めて昔のWindowsラップトップ引っ張り出して使うことにします.
Windows on MacOSでダメだったので教室にデスクトップ持ってきてネイティブで環境作った。 pic.twitter.com/kDpYCNBnfJ
— fumi (@fumi_maker) March 9, 2020
2020/03/20追記:無事にMacOS Catalina+Paralells win10で動作しました. MacOS Catalinaにアップグレードしたところ無事に動作しました.アップグレードをためらっていた理由として,Arduino Micro系に搭載されているatmega32u4がArduinIDEから書き込めないという不具合があるということがあります.Arduinoについては別の環境で開発することができるように整ったのでCatalinaにアップグレードする決断をしました.やっぱり定期的にアップグレードするの大事ですね.
Hello Worldの実行
ようやくこの時がやってきました.早速サンプルコードをGitからクローンもしくはダウンロードしてきます.
github.com ZIPファイルだと思うので展開しておきます,AnlogicのIDEを開きます.
メニューバーのProjectからOpen Projectを選択し,さっきダウンロードしてきたコードの0.LED/prj/led.alを選択します,これがプロジェクトファイルです.
正常に読み込みができると左側のNavigationにVerilogファイルや制約ファイルが読み込まれていることがわかります.
IDEの上の方にある再生ボタンみたいなのをクリックします,これで論理合成がされます,PCのマシンスペックにもよりますが,数十秒で完了します,これが普通にプログラムでいうビルドみたいなものです. IDEの上の方にある黄色の下矢印ボタン:Downloadを選択します, 開いたダイアログでAddをクリックし,LED.bitを選択します,これが論理合成され,生成されたビットストリームファイルとなります.これをFPGAに書き込むわけです. RUNをクリックしてFPGAに書き込みます,5秒くらいで終わります,JTAG finishと表示があったら完了です.成功していればTangPrimerのフルカラーLEDが白ー緑ー青ー赤という順に切り替わっていると思います.おめでとうございます.HelloWolrd達成です.
TangPrimerでLチカ pic.twitter.com/Xer2MLSzVu
— fumi (@fumi_maker) March 9, 2020
Hello World2:やっぱりLチカがいい
でもなんかHello World感ないよね?やっぱり点滅してないと.ということでサクッとVerilogを書いてみました.非常に簡単なVerilogですので読んでみてください.
同様にCloneしてきてプロジェクトをOpenして論理合成して書き込めばOKです.ビットストリームが生成されている場所がさっきと違うのでしっかり指定してあげてください.書き込んだらチカチカが見えると思います.
フルカラーLEDなので色を書き換えりして遊んでみてください.
TangPrimerでLチカ2 pic.twitter.com/AgLrPOOnmA
— fumi (@fumi_maker) March 9, 2020
Hello World3:音を出す
光だけだとつまらないので音もやってみましょう.秋月の200円スピーカーをつないでみます.ここでは制約ファイルを書き換えてP2を出力ポートとしています.同様にCloneしてプロジェクトを読み込んで論理合成してBitファイルを指定して書き込みます.440Hz,基準音のラが出ると思います.
440HzのPWMでブザーを鳴らす pic.twitter.com/hCvzcQ0nHv
— fumi (@fumi_maker) March 9, 2020
カメラ入力とディスプレイ出力
カメラ入力とディスプレイ出力やってみました.公式のExampleの中にCam2LCDというのがあるのでそのプロジェクトを開いて論理合成しただけです.ちゃんと動いているように見えますが,たまに色がおかしくなったりリセットしないとダメになってしまったりと不安定な挙動をすることもあるので少し微妙かも.動作確認程度には使えますね.しかし,カメラ映像を入力してディスプレイでみれるというのはなんというか,嬉しいものです.
CSIカメラをMipiディスプレイに出力した。更新捜査線が目で追えるwwww pic.twitter.com/dzBB30A2lg
— fumi (@fumi_maker) March 12, 2020
— fumi (@fumi_maker) March 12, 2020
VGA出力
VGA出力してみました.まずはカラーバーっぽいもの.計算してちゃんと出してないので少し変な感じになっていますが結構綺麗でしょう?9Bitなので512色しかないですが人間の目とは結構いい加減なものです.
カラーバーらしいものを出力した pic.twitter.com/LAzqqnSGGG
— fumi (@fumi_maker) March 12, 2020
続いてROMを作ってそこに画像を保存してそれを出力します.題材はゆるキャン△のなでしこ.ええ顔があったのでそれをキャプチャして解像度を落としてトリミングしてバイナリにしてMif形式にします.ROMのIPGeneratorからEditして作ったmifを読み込ませます.すると表示したい画像がROMに作られるというわけです.
ゆるキャンΔなでしこを敷き詰めたり90度回転させたりした。 pic.twitter.com/tBrYW07pAs
— fumi (@fumi_maker) March 12, 2020
ちょっと解像度が物足りなかったので4倍の解像度,256*256でCLANNADの画像を表示してみます 同様にMifを作って書き込みます.やっぱり解像度が大きいと綺麗に見れていいですね!感動します.Lチカもいいけど映像を出力して初めてHelo Worldって感じがします.
RAMいっぱいまで使った解像度4倍のCLANNADでファカルティと盛り上がった
— fumi (@fumi_maker) March 12, 2020
Dram使えって話なんですけどね pic.twitter.com/shh2rt5ZMg
本当はもっと大きな画像など出せますが,今回はBRAMをROMとして使っていたのでこれが限界でした.DRAMを使えばもっと大きなデータも保持できるので今後はそれに挑戦してみたいと思います.
まとめ
このツールは一般的に使われている大手XilinxのIDEであるVivadoなどよりもIPも少なく低機能ですが圧倒的に軽量です,ただ,ドライバに署名されておらず強制的に署名を無効化して回避する必要があるのは少し大変ですね.低機能なので初心者にはわかりやすく,理解もしやすいと思います.筆者はVivado+Zyboで学習していましたが論理合成して動かすターンアラウンドタイムが長すぎて辛かったです.TangPrimerは小型ながら非常によくできたツールですので初心者の学習にはちょうど良いものかなと思います.筆者もこれを使って学習してみたいと思います.
何か作ったらリポジトリに追加していきますのでよかったらみてください.
今回はそんな感じです.