GOWINのサポートに連絡し、代理店経由でBSDLファイルを頂くことができました。さっそく、Tang nanoをバウンダリスキャンしてみたいと思います。
デバイスの認識に成功
BSDLファイルをMITOUJTAGというツールに登録し、自動認識すると、
と認識されます。
端子の可視化
画面上に表示されたFPGA(GW1N-1-LV)を選択し、可視化ボタン
を押します。
これでリアルタイムにTang nanoのFPGAの端子の状態が見えるようになりました。
端子の色の意味
- 塗りつぶしのピンクはH出力
- 塗りつぶしの水色はL出力
- 網目のピンクはH入力
- 網目の水色はL入力
- 緑はJTAG端子
- 赤と黒は電源端子
です。
ピン定義の読み込み
FPGAの端子にはデフォルトでは名前がないので、名前を付けないと何の信号を見ているかわからなくなります。
Tang nanoにデフォルトで入っているサンプルプロジェクトのソースはおそらくgithubの
https://github.com/sipeed/Tang-Nano-examples/blob/master/example_lcd/lcd_pjt
にあります。
ピン定義ファイルは
https://github.com/sipeed/Tang-Nano-examples/blob/master/example_lcd/lcd_pjt/src/rgb_psram.cst
と思われるので、この中の記述をコピペしてUCFファイル風に書き換えます。
NET "LCD_B[0] LOC = "41";
NET "LCD_B[1] LOC = "42";
NET "LCD_B[2] LOC = "43";
NET "LCD_B[3] LOC = "44";
NET "LCD_B[4] LOC = "45";
NET "LCD_CLK LOC = "11";
NET "LCD_DEN LOC = "5";
NET "LCD_G[0] LOC = "32";
NET "LCD_G[1] LOC = "33";
NET "LCD_G[2] LOC = "34";
NET "LCD_G[3] LOC = "38";
NET "LCD_G[4] LOC = "39";
NET "LCD_G[5] LOC = "40";
NET "LCD_HYNC LOC = "10";
NET "LCD_R[0] LOC = "27";
NET "LCD_R[1] LOC = "28";
NET "LCD_R[2] LOC = "29";
NET "LCD_R[3] LOC = "30";
NET "LCD_R[4] LOC = "31";
NET "LCD_SYNC LOC = "46";
NET "LED_B LOC = "18";
NET "LED_G LOC = "17";
NET "LED_R LOC = "16";
NET "KEY LOC = "15";
NET "XTAL_IN LOC = "35";
NET "nRST LOC = "14";
これをファイルとして保存し、MITOUJTAGでピン定義ファイルの読み込みを行います。いずれMITOUJTAGがcstファイルに対応するといいですね。
JTAGロジックアナライザの起動
先ほどピン定義ファイルを読み込んで名前をつけたので、一つ一つのピンに名前が付いています。
XTAL_INの信号は入力で規則的な波形、LCD_SYNCは規則的な波形、LCD_HSYNC、LCD_DEN、LCD_CLKは密度が高い波形、RGBは密度が薄い波形として見えています。
Tang nanoのスイッチを押すとKEYという信号が反応するのが見えます。
EXTESTモードで端子を操作
JTAGを使うと、FPGAのI/Oを乗っ取って操作することができます。これをEXTESTモードといいます。
MITOUJTAGのメイン画面でFPGAを選択し、端子操作というボタンを押します。
あとは、操作したい端子をクリックするたびにH→L→H→L・・・と切り替わります。
動画にしました
MITOUJTAGでTang nanoの端子を見たり、操作したりする動画です。端子の状態を観察し、波形で見て、マウスクリックでLEDの色を変えています。
クリックすると再生します。