13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Tang-Nano-4Kの性能を確認する

Last updated at Posted at 2021-11-17

#目的
 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.jpg

#経緯
 ウェ~ブをなんとなく見ていたら、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対応の筈だがそれ以前でコケるのはなぜ、勘違い若しくは個体差か。
hpram_err.jpg
 ※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が出来上がる。
cm3_mon.jpg
#書き込み
 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はアマチュアの事を考えてやってる訳では無いと思うが、ここ迄の公開には素直に感謝してる。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?