LatticeのICE40 UltraPlusブレークアウトボード(簡易デモ)

LatticeのICE40 UltraPlusブレークアウトボードは優れた入門レベルのFPGA開発ボードですが、1.2Vコア電源を備えた ICE40UP5K FPGAを搭載し、多くのアプリケーションに非常に強力な性能を備えています。

image

LatticeのICE40 UltraPlusブレークアウトボードには以下の特長があります。

ICE40 UltraPlus(iCE40UP5K-SG48)デバイスのパッケージは48ピンQFN
— この0.5mmピッチQFNパッケージを使用したボードの例
— 大電流RGB LED出力
— iCE40 UltraPlusの電流測定
— デバイスプログラミング用の標準USBケーブル
— RoHS対応のパッケージとプロセス

LatticeのICE40 UltraPlusフレークアウトボードにより、iCE40 UltraPlusまたはSPI Flashのプログラミングが可能です。

SPI FlashにプログラミングするにはJ6ジャンパピンの1と3 および2と4をショート(これらはデフォルトでショート)
— U5(SPI Flash)はMicron Technologyの品番 N25Q032A13ESC40F
iCE40 UltraPlus(FPGA)に設定やプログラミングするにはJ6ジャンパピンの1と2 および3と4をショート
— U1(FPGA)はiCE40UP5K–SG48
SW1を押すとCRESETBが有効になりFPGAがリセット
— ジャンパ11でリセットの確認可
FPGAの設定が完了するとLED D2が点灯
— ジャンパJ28で確認可(J28はデフォルトでショート)

LatticeのICE40 UltraPlusブレークアウトボードのブロック図を以下に示します。

このボードの最初のデモは、スイッチとボード上のRGB LEDに直接接続する簡単なVerilog HDLを開発することです。これには3つの典型的な方法があり、1つはLatticeの開発ツールを使う方法、もう1つは オープンソースのProject IceStormを使う方法、もしくはこれまで何度も取り上げてきた 非常にシンプルな従来のAPIOメカニズムです。

ここではProject IceStormとAPIOメカニズムについて説明します。このデモはLatticeのICE40 UltraPlusブレークアウトボードのUSBケーブルで接続されたLinuxホストで開発されます。Project IceStormのインストール手順は以下のとおりです。

sudo apt install yosys nextpnr-ice40 fpga-icestorm

このデモに関連するverilog HDLコードは leds.vです。

module top(input [3:0] SW, output LED_R, output LED_G, output LED_B);

  assign LED_R = SW[0];
  assign LED_G = SW[1];
  assign LED_B = SW[2];

endmodule

このモジュールは、ボード内の各スイッチを赤色LED、緑色LED、青色LEDそれぞれに接続しています。これにより、このRGB LEDは、これら3つのロジックレベルの組み合わせに基づいて、合計8つの異なる種類の色を生成できます。この例では、これらの色のうち3色のみを動画でテストしています。(PWMのRGB信号はもっと多くの色を作り出すことができますが、この紹介デモではこの方法は使いません)。

このシンプルなFPGA設計を作成するには、他のファイルも必要です。JSON形式のleds.jsonというプロジェクトファイルは以下に提供されています。

leds.json(301.9 KB)

io.pcfと呼ばれるファイルは、このプロジェクトでLatticeのICE40 UltraPlusブレークアウトボードに使用されるピンを定義します。

io.pcf(402 Bytes)

# For the iCE40 UltraPlus (iCE40UP5K-QFN) Breakout Board

set_io LED_R 41
set_io LED_G 40
set_io LED_B 39
set_io SW[0] 23
set_io SW[1] 25
set_io SW[2] 34
set_io SW[3] 43
set_io clk 35

# bank 0
set_io IOT_39A 26
set_io IOT_38B 27
set_io IOT_42B 31
set_io IOT_43A 32
set_io IOT_45A_G1 37
set_io IOT_51A 42
set_io IOT_50B 38

#spi
set_io SPI_SS 16
set_io SPI_SCK 15
set_io SPI_MOSI 17
set_io SPI_MISO 14

このデモですべて使用するわけではなく、LED_R、LED_G、LED_B、SW[0]、SW[1]、SW[2]のみ使用します。このデモで使用されない他のピンは、bank 0とSPIインターフェースに使用されます。このファイルは、必要に応じてより多くの定義を追加することができます。

最初のステップは、以下に示すすべてのファイルを含むプロジェクトフォルダを作成することです。

digikey_coffee_cup@switch: ls
 
leds.v 
leds.json  
io.pcf

以下のようにyosysでプロジェクトの処理を開始します。

digikey_coffee_cup@switch: yosys -p synth_ice40 "-top top -json leds.json" leds.v

Linuxターミナルに以下の出力が表示されます。

[00000.000037]  /----------------------------------------------------------------------------\
[00000.000043]  |                                                                            |
[00000.000048]  |  yosys -- Yosys Open SYnthesis Suite                                       |
[00000.000052]  |                                                                            |
[00000.000056]  |  Copyright (C) 2012 - 2020  Claire Xenia Wolf <claire@yosyshq.com>         |
[00000.000059]  |                                                                            |
[00000.000063]  |  Permission to use, copy, modify, and/or distribute this software for any  |
[00000.000067]  |  purpose with or without fee is hereby granted, provided that the above    |
[00000.000071]  |  copyright notice and this permission notice appear in all copies.         |
[00000.000074]  |                                                                            |
[00000.000078]  |  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES  |
[00000.000081]  |  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF          |
[00000.000110]  |  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR   |
[00000.000117]  |  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    |
[00000.000121]  |  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN     |
[00000.000127]  |  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   |
[00000.000140]  |  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.            |
[00000.000146]  |                                                                            |
[00000.000152]  \----------------------------------------------------------------------------/
[00000.000156] 
[00000.000164]  Yosys 0.33 (git sha1 2584903a060)
[00000.000170] 
[00000.001164] 
[00000.001173] -- Parsing `leds.v' using frontend ` -vlog2k' --
[00000.001269] 
[00000.001279] 1. Executing Verilog-2005 frontend: leds.v
[00000.001284] Parsing Verilog input from `leds.v' to AST representation.
[00000.001408] Storing AST representation for module `$abstract\top'.
[00000.001428] Successfully finished Verilog frontend.
[00000.001444] 
[00000.001451] -- Running command `synth_ice40' --
[00000.001460] 
[00000.001465] 2. Executing SYNTH_ICE40 pass.
[00000.001497] 
[00000.001501] 2.1. Executing Verilog-2005 frontend: /usr/bin/../share/yosys/ice40/cells_sim.v
[00000.001506] Parsing Verilog input from `/usr/bin/../share/yosys/ice40/cells_sim.v' to AST representation.
[00000.013292] Generating RTLIL representation for module `\SB_IO'.
[00000.013424] Generating RTLIL representation for module `\SB_GB_IO'.
[00000.013586] Generating RTLIL representation for module `\SB_GB'.
[00000.013613] Generating RTLIL representation for module `\SB_LUT4'.
[00000.013963] Generating RTLIL representation for module `\SB_CARRY'.
[00000.014145] Generating RTLIL representation for module `\SB_DFF'.
[00000.014329] Generating RTLIL representation for module `\SB_DFFE'.
[00000.014576] Generating RTLIL representation for module `\SB_DFFSR'.
[00000.014914] Generating RTLIL representation for module `\SB_DFFR'.
[00000.015245] Generating RTLIL representation for module `\SB_DFFSS'.

......
etc etc etc
......


 Executing Verilog-2005 frontend: /usr/bin/../share/yosys/ice40/cells_map.v
[00000.455808] Parsing Verilog input from `/usr/bin/../share/yosys/ice40/cells_map.v' to AST representation.
[00000.456112] Generating RTLIL representation for module `\$lut'.
[00000.456328] Successfully finished Verilog frontend.
[00000.456341] 
[00000.456344] 2.44.2. Continuing TECHMAP pass.
[00000.456365] No more expansions possible.
[00000.456387] <suppressed ~3 debug messages>
[00000.459356] 
[00000.459365] 2.45. Executing AUTONAME pass.
[00000.459978] 
[00000.459982] 2.46. Executing HIERARCHY pass (managing design hierarchy).
[00000.459989] 
[00000.459993] 2.46.1. Analyzing design hierarchy..
[00000.459996] Top module:  \top
[00000.460003] 
[00000.460007] 2.46.2. Analyzing design hierarchy..
[00000.460010] Top module:  \top
[00000.460016] Removed 0 unused modules.
[00000.460886] 
[00000.460891] 2.47. Printing statistics.
[00000.460898] 
[00000.460902] === top ===
[00000.460903] 
[00000.460907]    Number of wires:                  4
[00000.460910]    Number of wire bits:              7
[00000.460913]    Number of public wires:           4
[00000.460918]    Number of public wire bits:       7
[00000.460920]    Number of memories:               0
[00000.460924]    Number of memory bits:            0
[00000.460927]    Number of processes:              0
[00000.460930]    Number of cells:                  0
[00000.460940] 
[00000.461566] 2.48. Executing CHECK pass (checking for obvious problems).
[00000.461573] Checking module top...
[00000.461584] Found and reported 0 problems.
[00000.462700] 
[00000.462704] -- Writing to `p top -json leds.json' using backend `json' --
[00000.462865] 
[00000.462870] 3. Executing JSON backend.

End of script. Logfile hash: 0c9178c87b, CPU: user 0.46s system 0.01s, MEM: 19.25 MB peak
Yosys 0.33 (git sha1 2584903a060)
Time spent: 74% 13x read_verilog (0 sec), 7% 1x synth_ice40 (0 sec), ...

ビルド処理を続けるには、FPGAの配置配線を行う以下のコマンドを実行します。

digikey_coffee_cup@switch: nextpnr-ice40 --up5k --json leds.json --pcf io.pcf --asc leds.asc

それが完了すると、ターミナルには以下のように表示されます。

...
etc.
... 
Info: [ 79233,  79271) | 
Info: [ 79271,  79309) | 
Info: [ 79309,  79347) | 
Info: [ 79347,  79385) | 
Info: [ 79385,  79423) | 
Info: [ 79423,  79461) |* 
13 warnings, 0 errors

Info: Program finished normally.

ビルド処理を終了するには、以下のように.binファイルを作成します。

digikey_coffee_cup@switch: icepack leds.asc leds.bin

FPGAは以下のようにSRAMにプログラミングすることができます。

digikey_coffee_cup@switch:  iceprog -S leds.bin

もしくはFLASHメモリに書き込みます。

digikey_coffee_cup@switch:  iceprog leds.bin

ボード上のJ6のジャンパがそれぞれのケースに適切に設定されていることを確認してください。以下のボード詳細を参照してください。

ジャンパ設定の詳細を示すボードの写真はこちらです。

image

このステップが完了すると、FPGAが構成されます。以下の動画でデモをご覧ください。

動画では、各ボタンを押すと対応するRGB LEDが点灯する様子が示されています。これは、シンプルな「非同期」FPGA構成の例です。

この入門記事では、この素晴らしいボードのIceStorm FPGA設定メカニズムについて説明しました。次の記事ではFPGAボードを設定するAPIOルートについて説明します。LatticeのICE40 UltraPlusブレークアウトボードは、試作エリアを備えた、ポータブルで低価格なFPGA開発ボードで、多くのアプリケーションに使用でき、DigiKeyで入手可能です。どうぞ良い一日を!

Este artículo está disponible en español aquí.

この記事はスペイン語で こちらからご覧いただけます。




オリジナル・ソース(English)

1 Like