超低消費電力が売りのiCE40 UltraPlusですが,ちょっと遊べる(?)ボード exLeaf-i を社長が作ったので使ってみることに.ボードはこんな感じ.iCE40 UltraPlus 5K,コンフィグROM(M25P80互換),と,オシレータがのっているだけのシンプルな構成.
普段大きめのFPGAを使っていると,合成・配置配線にかかる時間の短さに驚かされます.ちょっとした回路で用途に応じたI/O操作をするのに便利そう.…と思うと,残念に感じられるのがLatticeのダウンロードケーブルを使ったコンフィギュレーションが面倒なこと.
XilinxやIntelのFPGAで一般的に使っているJTAG経由のコンフィギュレーションに比べると,いちいちROMにデータを書き込んで起動しなおすというのは手間に感じます.また,LatticeのProgrammerだと,デバッグ中にチップ内のワンタイムROMにうっかり書き込んでしまうという事故も発生しそうです.
というわけで,https://www.olimex.com/wiki/ICE40HX1K-EVB#Iceprog_with_Raspberry_PI を参考に普段使いのRaspbrryPiを使ってROMにデータを書き込んでみました.
前準備
あらかじめRaspberryPiでSPIを使えるようにしておく必要があります.
raspi-config
を使って,設定しておきます./dev/spidev0.0がみえていればオーケーです.
ツールのビルドとインストール
SPI経由でデータを書き込むためにはSPI上でROMの消去や書き込みコマンドを発行するプログラムが必要です.冒頭に掲載したリンク先では,flashromが使用されています.
gitでcloneしてmakeすれば使えます.
git clone https://www.flashrom.org/git/flashrom.git cd flashrom make CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no \ CONFIG_ENABLE_LIBUSB0_PROGRAMMERS=no \ CONFIG_ENABLE_LIBUSB1_PROGRAMMERS=no all install
接続
RaspberryPiとexleaf-iの接続は次の通り.
RaspberryPi | M25P80 | ボード上のピン |
19 MOSI | SDO | 2 |
21 MISO | SDI | 3 |
23 CLK | SCK | 4 |
24 CE0 | #SS | 1 |
1 3.3V | 6 | |
9 GND | 5 |
ジャンプワイヤーなどで簡単につなくだけで大丈夫でした.
使ってみる
iCEcube2を使って生成したbinファイルを,ボードとSPI接続したラズベリーパイに転送,flashromを使ってROMにデータを書き込めばいい,のですが,搭載しているROMとサイズが違うといってうまく書き込みができませんでした.
生成したbitファイルのサイズが104157Bであるのに対し,搭載しているROM M25P80は,1048576B.たしかにbinファイルとROMのサイズが違う.
そこで,
dd': tr '\0' '\377' < /dev/zero | ^C bs=1 count=944419 of=image cat top_bitmpa.bin image > image.bit
として差分の944419Bを埋めたファイルを作成し,flashromで書き込むと,無事に書き込めました.
root@raspberrypi:/home/pi# flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=20000 -w image.bit flashrom p1.0-131-g3a41e2a on Linux 4.9.41-v7+ (armv7l) flashrom is free software, get the source code at https://flashrom.org Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). Found Winbond flash chip "W25Q80.V" (1024 kB, SPI) on linux_spi. Reading old flash chip contents... done. Erasing and writing flash chip... Erase/write done. Verifying flash... VERIFIED.
次は
RISC-Vでも実装してみるかなあ.
コメント
[…] もちろん,バージョンアップ前同様,iCE40 UltraPlus 5K,コンフィグROM(M25P80互換),と,オシレータを搭載したシンプルな構成と,そのコンパクトなサイズは踏襲したまま.(前のバージョンについては,“iCE40 UltraPlusのコンフィグROMにRaspberryPiから書き込んでみた”に紹介があります.) […]