iCE40 UltraPlusのコンフィグROMにRaspberryPiから書き込んでみた

超低消費電力が売りの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を使えるようにしておく必要があります.

を使って,設定しておきます./dev/spidev0.0がみえていればオーケーです.

ツールのビルドとインストール

SPI経由でデータを書き込むためにはSPI上でROMの消去や書き込みコマンドを発行するプログラムが必要です.冒頭に掲載したリンク先では,flashromが使用されています.

gitでcloneしてmakeすれば使えます.

接続

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のサイズが違う.

そこで,

として差分の944419Bを埋めたファイルを作成し,flashromで書き込むと,無事に書き込めました.

次は

RISC-Vでも実装してみるかなあ.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする