#目的
Tang-Nano-4Kを購入した。
無印のTang-Nanoが出てから約2年、4Kは無印の後継機と言う事だろう。
値段を言うのは無粋だが、カメラ、USBケーブル付きで1980円也。
この機能で之は安いと思う。パソコンさえ有れば之だけでFPGA三昧できるぞ。
Tang-NanoよりもLUTは4608LUTと4倍、SRAMは2.5倍に増量、
MCUとしてCortex-M3も組み込み、とどめに8MBのDRAMまで内蔵。
更にボード上に4MBのFlashを搭載し、HDMIのポート迄付けるとは。
◆◆◆ これはフ〇ミコンミニを作れという信託ですか ◆◆◆
も、もちろんカートリッジを持っている範囲だよ。
#経緯
ウェ~ブをなんとなく見ていたら、Tang-Nano-4Kのライセンスへの記述に目が行った。
GOWIN EDA Education版がライセンスファイル不要で使えることの検証
実はTang-Nanokを使いあぐねる原因として、ちと小さいって事も有るが、ライセンス認証制度も原因。
通常ライセンスは1年で切れるし、ネット認証は継続性を信用しがたい。
※GOWINへのライセンス依頼の返答は無しの礫。
※某商社様のご厚意で頂いたTang-Nanoのライセンスは、既に切れていた。
Education版であれば、ずっと使えるだろう。バグフィックなんかは無いだろうけど。
#開発環境
Tang-Nano-4K ※無ければ話にならないな。
GOWIN EDA Education版 ※verilogのコンパイルに必要。
ARMコンパイラ ※Cortex-M3のプログラムコンパイルに必要。
RS232C-USB変換ケーブル ※プログラムのデバッグ出力に使う、別にLEDを並べても構わないだろう。
#GOWIN EDA Education版
GOWINへの登録(住所とかメールアドレス)が必要だが、登録すれば即座に各種ダウンが可能となる。
当然Education版では、GW1NSR-LV4CQN48PC6/I5 のみに限定だが、Tang-Nano-4Kの開発には問題無かった。
V1.9.6.02Beta、Gowin_V1.9.8も使えるが、違いは認識出来なかった。
※V1.9.6.02Beta以外では、Flashへの書き込みが失敗する。
※V1.9.8.01はネット認証が有効にならない、多分サーバーが未対応なのだろう。
#GMD Education版
Tang-Nano-4KはCortex-M3を内蔵しているおり、Cプログラムのコンパイラが必要。
Keilが推奨らしいが、ウン十万円は一寸と言う貴方に朗報、無料の開発環境が有りまっせ。
と言ってもEclipseに自社の表紙を付けただけのようですが。
※GOWINのサイトから落とせる。
※Education版はC:\にしか入れられな様子、大した問題では無いが。
#予め注意
私の環境では、最新の書き込みプログラムからはFlashに書き込みが出来なかった。
※RAMへの書き込は正常動作。
対応策として、ツールは最新と共に旧のソフトも落としておき、
「Programmer」のディレクトリ一式を旧の物に差し替えた。
※但し、旧ではAnalyzer Oscilloscopeが動かないので適宜差し替えが必要。
※MCUへの書き込みはFlashに行うようだ、従ってAnalyzerでのデバッグは不可。悲しい。
#サンプルプログラムとドキュメントについて
◇TangNano-4K-example
LEDとHDMI及びカメラを使用したサンプル。ちとショボいかな。
◇Gowin_EMPU(GW1NS-4C)_V1.1.3 (GOWINから落す)
MCUとHyperRAMのロジックサンプル、及びMCUのソフトサンプル
◇国内FPGA+国内オペレーティングシステム(GW1NSR-LV4C+RT-Thread)でSPILCD駆動
(文中で説明に使用しているソフト)
ロジックとMCUの接続法補についての解説 ※中国語、少し説明不足だな
◇日本語ドキュメント類
Gowin_V1.9.8.01のセットアップで \IDE\doc\JPN に日本語ドキュメントが格納される。
※GOWINの日本に対する本気度が伺われる。多分日本の商社(丸文)が頑張ったのだろう。
但し、日本語以外のドキュメントの方が詳しい場合も有るので要注意。
※下記は含まれてない、多分GOWINから落とせる。探せば他にも有るかも。
・Gowin Programmer ユーザーガイド SUG502J.pdf
・IPUG922-1.1J_Gowin_EMPU_M3ソフトウェアプログラミング リファレンスマニュアル.pdf
#Lチカ
◇MCUを使わないバージョン
TangNano-4K-example を落し「led_test」で試行可能。
※違う開発環境用のピン配置が異なるものも有ったので要注意。
◇MCUを使うバージョン
cm3_mcu と cm3_led を落してコンパイル、
書き込み時にMCUプログラム(cm3_led.bin)を同時に書き込む。
※MCUの取扱いは、下方に別途記載。
#カメラ
TangNano-4K-example を落せば「dk_video」で試行可能。
HDMIに表示データが現れる。
テストパターン表示後、白黒画像が表示される。
※当方の環境ではパターン表示がガタガタに表示される。何故だろう。
※画像が白黒で小さいのは、DRAMの使用が難しかった為なのだろう。<- この推論は誤りDRAMは使っている。
画像が白黒なのはカメラからベイヤー(RAW10,10bit)で出力し、白黒として16bit拡張しているため。
カラー化するにはDSP等でのカラー合成が必要。
カメラからRGB565で出力も可能だが、8bit->16bit処理が必要、正しいカメラ初期化も大変。
#DRAM
GW1NSR-LV4CはHiparRAM搭載なんて言ってるが、DRAM(DDRAM)を混載しているだけ。
(それでも凄いとは思うが)
「Gowin_HyperRAM_Memory_Interface_embedded_refDesign」(GOWINから落とす)
に試験ソフトが有るが、別の開発基板用のようなのでちょこっと改変。
test_hpram を動作させてもErrorにはならないので、正しく動いているのだろう(多分)。
※ErrorでLEDが点灯するように設定している。
当方の環境では135MHz(27MHz5)ではErrorとならないが、162MHz(27MHz6)ではError発生となった。
Analyzer Oscilloscopeを設定しているので、興味あるなら動作を確認されたし。
※HyperRAMは200MH対応の筈だがそれ以前でコケるのはなぜ、勘違い若しくは個体差か。
※Error発生時の波形、1バースト(16バイト)が読み込み出来ていない。
#MCU(ハード)
ロジックにMCUを追加するには、Tools -> IP Core Generator と選択。
IP Core画面で、Soft IP Core -> Microprocessor System -> Hard-Core-MCU -> Gowin_EMPU[GW1NS-4C) と選択。
ダブルクリックで Gowin EMPUが開くので、画面上で必要とする回路ボックスをダブルクリックする。
※マウスオーバー時に青くなるやつ。
各ブロックの活性化画面が開くので、 Enable **** を選択して、OK押下。(それだけ)
※cm3_mcuでは、UART0とGPIOのみを活性化している。
元の画面でOKすれば、プロジェクトに取り込まれる。
※テンプレートとしてsrc\gowin_empu\gowin_empu_tmp.vが表示されるので、これを親モジュールにコピペして信号名を合わせばMCUモジュールが追加される。
PLLも同様であり、IP Core画面から Hard Module -> CLOCK -> PLLVRと選択。
ダブルクリックで表れた画面で、CLKINのClock Frequency を 27MHzに、
CLKOUTのExpected Frequency を 75MHz(若しくは必要な周波数)に設定する。
当方の環境では追加して、PLL Reset と Enable LOCK もネタ元に合わせ設定している。
OKすれば、プロジェクトに取り込まれるので、テンプレート内容を親モジュールにコピペする。
#MCU(ソフト)
お金持ちはKeilを使えるだろうが、GMDで我慢しようね。タダだから。
GMDのインスツールが出来ていれば、起動後左のProject ExplorerにWorkspaceの内容が表示されている筈。
File -> Open Projects From File System と選択し、Import画面を表示させる。
Directory..を選択し、cm3_led(若しくはコンパイルしたい奴) のディレクトリを選択、
Folder内のチェックを確認してから、 Finish を選択。
ワークスペース内に cm3_led が反映している事を確認。
cm3_led を左クリックで選択した状態で、 Build(ハンマーマークのアイコン)を選択。
Consolet画面が流れ出し、Finished building: cm3_led が見えれば大成功。
Debugディレクトリに、cm3_led.bin が出来ている筈。
※cm3_ledは周期的に、LEDの点滅と、UARTへの文字入出力を行うプログラムに改変している。
キー入力が有った場合、其れも表示する。
※UARTの動作確認にはRS232C-USB変換ケーブルが必要です。
Tang-Nano-4Kのピン3-08を出力(tx)、3-09を入力(rx)に設定している。
従って、ケーブルのRXを3-08に、TXを3-09に繋ぐ事によりUARTの信号が確認できる。
ピンを変えたい場合は、led_test.cstを書き換える。
#MCU(デバック)
MCUとしてのデバッグ用として、簡単なモニタを作った。
cm3_mon
ロード方法はcm3_ledと同様。(というか、main.cが違うだけ)
使用できるコマンドは下記の2つ
◇Dxxxxxxxx
xxxxxxxx番地から128バイトのメモリをダンプする。
◇Mxxxxxxxx 若しくは MWxxxxxxxx
xxxxxxxx番地の内容を表示して書き換える。
(ret)で次の番地、(.)でコマンド終了。
現時点では殆ど使う意味は無いだろうが。今後のペリフェラルの動作検証や、
アセンブラともリンクさせた、デバッガに出来ないかと思慮中。
※ROM 0-3ffff(25kKB),RAM 20000000-20007fff 以外にはアクセスできない。
※GMDで、project -> properies -> C/C++ Build -> Setting -> Tool Settings -> Cross ARM C Compiler ->Miscellaneous -> Geenerate assembler listing にチェックを入れると、
Debug\USERにアセンブルリストmain.o.lstが出来上がる。
#書き込み
GOWIN EDA Education版で、cm3_led を指定してコンパイルを実行後、Program Device を選択。
Operation(最初はSRAM Programを表示)をダブルクリックして、Device configuration 画面を表示。
Access Mode を Mcu Mode に変更。Operation を Firmware Erase,Program に変更。
FW/MCU/Binary Input Option の Firmware/Binary File に cm3_led.bin を登録、 save を選択する。
元の画面に戻るので、登録内容を確認して Program 釦を押す。
操作が正しければ、FPGAのconfigとMCUへのプログラム転送が同時に行われる。
※Programmerのバージョンに注意、ダメな場合はcableなんちゃらと出ており、書き込みは失敗している。
※FTDI製のシリアルをUSBに繋げると通信失敗。BL702がFTDIの振りをしているので誤認識するのだろう。
#UARTとprintf
◇UARTの使い方
UART0とGPIOはMCU作成時にEnableにしてるので、ソフトから使用可能となっている。
UART0とGPIOの初期化は、見本をコピペした。。
UART0のクロックはTimer0で設定するように書かれているが、MCUのクロック設定に影響される。
当方では、MCUが80MHzで正常動作しなかったので、75MHz動作としている。
※MCUとしては動いているようだが、UARTの動作が不安定。
※MCUが80MHzで動作しないのは個体差とも考えるが、チップがマニュアル性能を持っていない疑惑も。
MCUクロックを75MHzとしたので、UART0の通信速度設定に、115200*80/75と補正が入っている。
※system_gw1ns4c.cに有る__XTAL(160MHz)との記載変更でも可だが、この方が分かり易いだろう。
◇printfの使い方
サンプルプログラムは随所にprintfを使用されてるが、
これを使用するには、UART0が有効にならないと出力されない。
※retarget.cの中で、printfの下請けルーチンがUART0にリダイレクトしている。
※cm3_ledではTang-Nano-4Kのピン3-08を出力(tx)、3-09を入力(rx)に設定している
※UARTの使用方法はPERIPHERAL\Sources\gw1ns4c_uart.cを見れば多分判るだろう。
※printfが動けば、mcuソフトのデバッグは何とかなる気がする。
※printfを使うだけで6メモリKB程度消費している感じ、サイズを気にするのなら自前で出力するべき。
#個人的なお願い
こんな所にこんなこと書いても、大した影響無いとは思うけど、
折角お値段以上の性能をブッコんでいるのに、こんな所は少々勿体ない。
・ProgrammerのFlash書き込み不動作は、何とか解決してほしいものだ。
・FTDIのチップがUSBに繋がっていると書込み失敗する。誤認識しない様にならないのかな。(前からだけど)
・GMDの格納位置が固定、好きな所に格納さしてほしいな。
・UARTの信号をUSBに通す事が出来ないので、外部に通信ケーブルが必要。
JTAG信号を弄るとかして何とかなりませんか。
・GW1NSR-LV4CQNとして、もっとアピールすべきだ
GW1N-1のシリーズなのだろうが、別物って言っても良いほど機能UPしているのに。
・TangNano-4Kの情報をもっと出してほしい(なるべく日本語で)
多分、TangNano-4KはSipeedの製品で、商社(丸文)では取り扱っていないからなのだろう。
だからTangNano-4Kとしてのサンプルが少ないと邪推。
でも、目的はチップの拡販でしょう。取扱い開発キットに拘る事無いと思うけど。
#感想
過去にこんな事を書いた
「Tang-Nanoはライセンスの有り方が先行き不安なので、これ以上は利用しない予定。
値段安くて、コンパイル早いから、使いやすいんだけどもね。多分日本を相手にしていないのだろう。
アマチュアとしてはサポート無くても使える体制を望みたいものだ。まあ、販売元の自由だろうが。」
が、問題点が解消されちまったので、継続して遊べそうだな。
驚愕の事実だが1980円で、之だけ出来る環境が構築できるとは。世も末だな。
FPGAチップもせいぜい2,300円って所じゃ無いのかな。
USB通信チップなんて、32-bit RISC-V,fmax 144MHz,132KB RAM,192KB ROM,512KB Flashだとさ、
FPGA搭載MPUより強力とは、笑っちゃうけど。
過去に12800円のスターターキットが出た時以来の、パラダイムシフトじゃ無いかな。
しかし、FPGAフリークは日本では少数民族なのだろう。FPGAマガジン終わってるし。
でもそれで良いのか日本。
折角安くていいタマなんだから、将来の為に高校生当たりにばら撒くってのは考えられないのか。
外国製が嫌ならGOWINに頭下げて、日本がセカンドサプライヤーになれば良いだけの話だろうに。
更に、こんなモノをなんで日本で作れないのか。プロセスは高々55nだってよ。
作れる技術は有るだろうが、作るもの売れる物を考えられないのだろう。
先行投資となる種蒔をケチっていては先細りだろうに。なんて言っても詮無きこと。
アマチュアは中国製FPGAを、有り難く使わせてもらいましょう。
あ、念の為に私はGOWINの回し者では有りません。(商社のご好意でライセンスを一回だけ貰ったけど)
別にGOWINはアマチュアの事を考えてやってる訳では無いと思うが、ここ迄の公開には素直に感謝してる。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。