LoginSignup
0
2

More than 5 years have passed since last update.

小規模 FPGA でも Lチカ

Zynq は ARM CPU を持った比較的リッチなFPGA を搭載したボードです。より消費電力も小さいFPGA
で高位合成を利用する事は可能でしょうか?Polyphony ではコンパイラとして最適化を意識した設計になっておりリソースの消費量はそう多くありません。

ターゲットは iCE40(Lattice)

消費電力も少ない小規模なFPGA であるLattice のiCE40 UltraPlus UP5K でPython のコードを走らせてみましょう。iCE40 UltraPlus はチップ内にSPI コントローラのプリミティブとLED ドライブ用のプリミティブを持っています。このチップを搭載した評価ボードiCE40 UltraPlus Breakout board を使ってLチカとSPI の制御をしてみましょう。

image.png

iCE40 Ultra Family Data Sheet より抜粋

ターゲットボードの RGB LED をLチカ

評価ボードにはRGB のLED が搭載されています。これを今までのPython のコードblink.py を用いてコントロールしてみましょう。システム構成は図のようになります。

image.png

blink.py から 生成されるモジュールのclk, rst, led の信号線を使ったトップモジュールをVerilog-HDL で作成し、ベンダーのツールで合成、実装することで動作可能なバイナリができます。

image.png

Polyphony が出力するVerilog-HDL はベンダーに非依存であるためX 社で動いた同じPython のコードをL 社ので動かすということが容易にできます。
iCE40UP の特別な点としてトップモジュールにLED ドライバのプリミティブを使用するという指示を書いておく必要があります。その記述によりツールが自動的にLED のドライバを組み込んでくれます。

rgb_primitive.v
//------------------------------
// Instantiate RGB primitives
//------------------------------
SB_RGBA_DRV RGB_DRIVER (
  .RGBLEDEN (1'b1),
  .RGB0PWM  (0),
  .RGB1PWM  (green_wire),
  .RGB2PWM  (0),
  .CURREN   (1'b1),
  .RGB0     (REDn),     //Actual Hardware connection
  .RGB1     (GRNn),
  .RGB2     (BLUn)
);

defparam RGB_DRIVER.RGB0_CURRENT = "0b000001";
defparam RGB_DRIVER.RGB1_CURRENT = "0b000001";
defparam RGB_DRIVER.RGB2_CURRENT = "0b000001";
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2