Tang nanoのバウンダリスキャン

GOWINのサポートに連絡し、代理店経由でBSDLファイルを頂くことができました。さっそく、Tang nanoをバウンダリスキャンしてみたいと思います。
# デバイスの認識に成功
BSDLファイルを[MITOUJTAG](http://www.tokudenkairo.co.jp/jtag/)というツールに登録し、自動認識すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/a3ba8f3d-1e94-4044-4af6-861f1022e542.png)
と認識されます。

認識された直後のようすです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/4ab5d360-1289-e37e-43bc-fb6d9fc36450.png)
# 端子の可視化
画面上に表示されたFPGA(GW1N-1-LV)を選択し、可視化ボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/61755a91-67b8-d0d6-873a-1b337f719207.png)
を押します。

これでリアルタイムにTang nanoのFPGAの端子の状態が見えるようになりました。
![tn-jtag.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/714e32ac-08f4-b58a-2a33-d23d21f685b2.jpeg)
## 端子の色の意味
端子のH/L、In/Outの状態が色分けで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/13cf4fc2-4905-5381-aa20-1fb96395a259.png)
 - 塗りつぶしのピンクは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ファイル風に書き換えます。

```tangnano.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](http://www.tokudenkairo.co.jp/jtag/)でピン定義ファイルの読み込みを行います。いずれMITOUJTAGがcstファイルに対応するといいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/6dd2faf7-16a9-92a1-25a4-4e4e45d328f9.png)
# JTAGロジックアナライザの起動
MITOUJTAGのロジアナを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/da57d36c-686d-d606-0b1f-99d2cd4f8922.png)

先ほどピン定義ファイルを読み込んで名前をつけたので、一つ一つのピンに名前が付いています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/610beb03-20a1-fae5-bd96-e8b71ef3acfe.png)

スキャン開始!!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/e1bd2e05-b986-06d4-6e1d-6eff87e83975.png)

XTAL_INの信号は入力で規則的な波形、LCD_SYNCは規則的な波形、LCD_HSYNC、LCD_DEN、LCD_CLKは密度が高い波形、RGBは密度が薄い波形として見えています。

Tang nanoのスイッチを押すとKEYという信号が反応するのが見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/0bd89e7d-b93f-5f9f-8fb2-16626f52cb0e.png)
# EXTESTモードで端子を操作
JTAGを使うと、FPGAのI/Oを乗っ取って操作することができます。これをEXTESTモードといいます。

MITOUJTAGのメイン画面でFPGAを選択し、端子操作というボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/20ae04d1-7ec1-223e-3d71-5286a62371c1.png)

この状態で操作したい端子をクリックし、トグルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/8f3fd725-ce4c-0463-c69f-40f7936cc468.png)

あとは、操作したい端子をクリックするたびにH→L→H→L・・・と切り替わります。
# 動画にしました

[MITOUJTAG](http://www.tokudenkairo.co.jp/jtag/)でTang nanoの端子を見たり、操作したりする動画です。端子の状態を観察し、波形で見て、マウスクリックでLEDの色を変えています。
クリックすると再生します。
[![Youtubeの動画](http://img.youtube.com/vi/8RjGH65NoG4/0.jpg)](http://www.youtube.com/watch?v=8RjGH65NoG4)