tinyFPGA-BX boardにTerminalのみでbuildとボードへの書き込みを行った

tinyFPGA-BX boardを購入

最初書き込み方がよくわからなかったのと、tutorialがAtom使ってたが

結局Terminalから全部できたのでそれでいく

環境は
Mac OS Mojave
Python3.7.0 (書き込みソフトのインストールにPythonが必要です, 3系でないとだめかも)

基本的には下記公式なチュートリアル通り
[TinyFPGA BX User Guide](https://tinyfpga.com/bx/guide.html)

### ツールをインストールしていく

- APIOとtinyprogのインストール
- Terminalを開いて、pipでインストールした後にapioコマンドで必要なツールもインストールしておく
- [Macでターミナルを起動する方法](https://syncer.jp/mac-terminal)
- [Pythonのパッケージ管理システムpipの使い方 | note.nkmk.me](https://note.nkmk.me/python-pip-usage/)
    - pipはPythonをインストールするときに一緒にインストールするはずなのでそれつかいます

```
$ pip install -U apio
$ pip install tinyprog
$ apio install system scons icestorm iverilog
$ apio drivers --serial-enable
```

<br>

途中, apio install のところで

```
Warning: full platform does not match: darwin_x86_64                
         Trying OS name: darwin 
```

みたいなのでたけど一応

```
Package 'iverilog' has been successfully installed!
```

みたいな感じでsuccessfullyとは出てきたのでとりあえず大丈夫だった

<br>

### TinyFPGA-BXボードを接続して認識するか確認

TinyFPGA-BXボードにマイクロUSB経由でMacに接続したら、ターミナルを開いてbootloaderが反応するか`$ tinyprog --update-bootloader`と打ち込んでみて試してみる

まず、TinyFPGAをMacにUSBケーブルで接続していない場合は下記のように結果が出力されました

```
$ tinyprog --update-bootloader
    TinyProg CLI
    ------------
    Using device id 1d50:6130
    No port was specified and no active bootloaders found.
    Activate bootloader by pressing the reset button.
```

<br>

TinyFPGAを接続している場合は下記のように出た

```
$ tinyprog --update-bootloader

    TinyProg CLI
    ------------
    Using device id 1d50:6130
    Only one board with active bootloader, using it.
    All connected and active boards are up to date!
```

### Atomのインストールは無視でよい

公式のチュートリアルではエディタとしてAtom使っていてそこから書き込みとかコマンド打てるって書いてあったが
自分がPythonをvenvで入れていて環境合わせるのが面倒だったのと

とりあえず書き込みやverilogファイルのコンパイルならTerminalつかったほうが早かったのでそのままおこなった

[TinyFPGA BX Repository](https://github.com/tinyfpga/TinyFPGA-BX/archive/master.zip)からファイルをダウンロードして解答する、適当なディレクトリに置いておく

apio_templateってフォルダが出てくるので、ターミナルでそこまでcdコマンドで移動しておく

apio_templateの中身は

```
$ tree apio_template
apio_template/
├── apio.ini
├── install_apio.bat
├── install_apio.sh
├── pins.pcf
└── top.v
```

のようになっているはずなので

apio_templateのディレクトリで`$ apio build` とコマンドを打つとbuildがはじまって、成功すると最後にSUCCESSみたいなのが出てくる

```
$ apio build
[Thu Feb  7 22:19:39 2019] Processing TinyFPGA-BX
--------------------------------------------------------------------------------------------------------------------------------------------
yosys -p "synth_ice40 -blif hardware.blif" -q top.v
arachne-pnr -d 8k -P cm81 -p pins.pcf -o hardware.asc -q hardware.blif
pins.pcf:41: warning: no port `PIN_1' in top-level module `top', 
...
...
icepack hardware.asc hardware.bin
======================================================= [SUCCESS] Took 3.88 seconds =======================================================
```
途中、PIN_1とかPIN_2とか使ってませんよ~みたいなwarningが出てくるけど無視して大丈夫です

build後のディレクトリ構成が下記

```
.
├── apio.ini
├── hardware.asc
├── hardware.bin
├── hardware.blif
├── install_apio.bat
├── install_apio.sh
├── pins.pcf
└── top.v
```

buildして出てきた `hardware.bin` ファイルを書き込みます

<br>

TinyFPGAをUSBケーブルでMacに接続して

```
$ tinyprog --update-bootloader
$ tinyprog -p hardware.bin

    TinyProg CLI
    ------------
    Using device id 1d50:6130
    Only one board with active bootloader, using it.
    Programming USB 20.5 with hardware.bin
    Programming at addr 028000
    Waking up SPI flash
    135100 bytes to program
    Erasing: 100%|████████████████████████████████████████████████████████████████████████████████████████| 135k/135k [00:00<00:00, 166kB/s]
    Writing: 100%|████████████████████████████████████████████████████████████████████████████████████████| 135k/135k [00:00<00:00, 194kB/s]
    Reading: 100%|████████████████████████████████████████████████████████████████████████████████████████| 135k/135k [00:00<00:00, 365kB/s]
    Success!

```

のように出てきたら書き込み成功!

TinyFPGA上のボード上LEDがいろいろなパターンで点滅開始したら成功です

### 蛇足: 必要なツールについて調べたこと

- APIO and tinyprog
    - APIO
     - open source FPGAのtoolchainやFPGA上でのプログラムデザインを使いやすくするツール
     - [FPGAwars/apio: Open source ecosystem for open FPGA boards](https://github.com/FPGAwars/apio)
     - [FPGAwars/apio-ide: Experimental open FPGA IDE using Atom and Apio](https://github.com/FPGAwars/apio-ide)
     - [An open source ecosystem for IoT development · PlatformIO](https://platformio.org/)
  - PlatformIOはopen source ecosystem for IOT development
     - [橋本商会 » PlatformIOでArduino開発する](http://shokai.org/blog/archives/10250)
     - パッケージマネージャ兼ビルドツール?
     - 本体はPythonで書かれているらしい
     - pythonを使って、pipでインストールするっぽい?
     - 別に公式からインストールしてもよさそう
     - オフラインで開発できる、IoT関係ようのIDEだったり環境だったりってことなのかな
     - ArduinoIDEが使いにくいからって乗り換えてる人もいる
         - [PlatformIOでArduinoのプログラミング](https://newbie-hhyuga.blogspot.com/2017/08/platformioarduino.html)
    - 組み込み系のクロスコンパイル環境なのか
    - VScode用もあるみたい
    - [Quick Start — apio 0.3.5 documentation](https://apiodoc.readthedocs.io/en/stable/source/quick_start.html)
    - という、Platformioが元となった環境があって、それを元にFPGA開発していくのかな?
    - verilog designsとかもできるらしい
    - main packagesは
     - icestorm
     - [Project IceStorm](http://www.clifford.at/icestorm/)
     - iCE40 FPGAsを開発するためのツール？
     - bitstream filesが作成できる？
     - [第1回FPGAスタートアップセミナーで「完全オープンソースHDL合成とForthマシン実装」というLTをした話 – その他ブログ](https://kiwamu.wordpress.com/2016/11/20/%E7%AC%AC1%E5%9B%9Efpga%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC%E3%81%A7%E3%80%8C%E5%AE%8C%E5%85%A8%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3/)
      - HDL合成ツール
      - 完全オープンソース
      - さらに、icestudioというツールを使うとGUIで回路設計をしてIceStormを使って合成できるらしい
     - icarus verilog
       - [ZEROからのFPGA : Icarus Verilogコンパイラを使う](http://cellspe.matrix.jp/zerofpga/icarus.html)
       - オープンソースのVerilogコンパイラ&シミュレーター
       - Verilog HDLの学習に適している
     - scons
       - [SCons - Wikipedia](https://ja.wikipedia.org/wiki/SCons)
       - open source software build tool
       - 古典的なmakeユーティリティの代替
    - tinyprog
       - [Luke Valenty on Twitter: "tinyprog version 1.0.0 is now available on PyPI! tinyprog works with the new TinyFPGA Bootloader in the TinyFPGA BX. It is faster, more reliable, and easier to use than the old bootloader and programmer. https://t.co/AX5sgiAhFd"](https://twitter.com/TinyFPGA/status/996114325050769409)
     - [tinyfpga/TinyFPGA-Bootloader: An open source USB bootloader for FPGAs](https://github.com/tinyfpga/TinyFPGA-Bootloader/)