@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそ、すべては、SystemC v0.9公開から始まった
はじめに
このブログで、かなり前に、Arm Cortex-A53入りFPGAを使って俺様SoCを作ろう、的なことを書きました。 そのブログを検索してみたら、なんと、2010.10.17と、10年以上も前でした。
俺様SoCでは、FPGAの中に、Arm Cortex-A53とComputer Systemを組み込んだもの。
今回は、FPGAそのものを開発するという俺様FPGAのお話。。。俺様FPGAって、なんだー。
俺様FPGAとは?
俺様FPGAとは、FPGAそのものを開発するというもの。え、FPGAって自分で開発できるの?と思うでしょうが、実はできるんです。 ただし、Siliconにするにはお金がかかるのでシミュレーションまでしか無償ではできませんが。。。
どうやって、作ればいいのか?
オープンソースのFPGA開発ツール、SymbiFlow
最近、FPGAベンダーの開発ツールではなく、オープンソースのFPGA開発ツールを使って、FPGAのbitstreamが生成できるようになりました。その代表が、SymbiFlow です。
このSymbiFlowは、FrontendのSynthesisのYosysとBackendのFPGA tools (nextpnrとVerilog to Routing)で構成されています。
bitstream が生成できるのは、
- Project IceStorm : Lattice iCE40
- Project X-Ray : Xilinx 7-Series
- Project Trellis : Lattice ECP5
- QuickLogic : EOS S3/QLFK4N8
の4種類です。あたしは、Lattice 専用のツールだと思っていましたが、Xilinx 7-Series (Zynqも)やQuickLogicもサポートしていたですね。
Project Icestorm, Project Trellis, QuickLogic に関しては、DSP や Hard Block もサポートしているようです。
サポートしているボードは、
- Digilent Arty A7-35T (XC7A35T)
- Digilent Basys 3 Artix-7 (XC7A35T)
- QuickFeather Develpment Kit (EOS-S3)
- Digilent Zybo Z7 (XC7Z2010)
- Alphamax NeTV2 (XC7A35T)
- ECP5-5G Versa (LFE5UM5G-45F)
- UL3S :(LFE5U-12F/25F/45F/85F)
- TinyFPGA Ex (LFE5U-85F/LFE5UM5G-85F)
- iCE40-HX8K Breakout Board (ICE40HX8K-B-EVN)
- iCEblink40LP1K Evaluation Kit (ICE40LP1K-BLNK-EVN
- iCEstick Evaluation Kit (ICE40HX1K-STICK-EVN
- Digilent Nexsys Video Artix-7 FPGA (XC7A200T-1SBG484C)
- DPControl iCEVision Board (iCE40UP5K)
です。結構ありますね。
俺様FPGAを作るには、
俺様FPGAを作るには、SymbiFlow Architecture Definitions に書いてある内容に従う必要があります。
特に、Development Practices に書いてある Strucure の
- Directories
- Files
- Names
- Notes
のルールを守って、俺様FPGAを定義する必要があります。また、Verilog to Routing Notes についても守る必要があります。
iCE40についてみてみる
Project IceStorm の Lattice iCE40 の SymbiFlow Architecture Definitions を見てみましょう! SymbiFlow の symbiflow-arch-defs の ice40 にあります。
- cells
- device
- docs
- primitives
- tiles
- tests
- utils
- yosys
があります。devices の下には、
- layouts
- tile-routing-virt
- top-routing-virt
があります。layouts/N4k ディレクトリには、
- CMakeLists.txt
- ntemplate.N4k.fixed_layout.xml
があります。CMakeLists.txt は、
add_file_target(FILE ntemplate.N4k.fixed_layout.xml) n_template( NAME N4k.fixed_layout.xml PREFIXES lp;hx SRCS ntemplate.N4k.fixed_layout.xml )
になっています。ntemplate.N4k.fixed_layout.xml ファイルは、下記のようになっていて、16 x 20 のレイアウトになっているっぽいです。
<!-- set: ai sw=1 ts=1 sta et --> <fixed_layout name="{N}4K" width="16" height="20"> <!-- FIXME --> </fixed_layout>
primitives の下には、
- mux2
- mux4
- sb_carry
- sb_ff
- sbio
- sb_lut
- sb_ram
があります。mux2 を見てみたら、下記のような CMakeLists.txt だけでした。
mux_gen( NAME ice_mux2 INPUTS LT,FF MUX_NAME ICE_MUX2 SPLIT_INPUTS 1 TYPE logic WIDTH 2 )
上記の mux_gen は、common/cmake/gen.cmake の中で定義されていました。
まとめ
オープンソースのFPGA開発ツール SymbiFlow では、Lattice/Xilinx/QuickLogic のFPGAをサポートしていることはわかりました。 Latticeの iCE40 の Symbiflow Architecture Definitions のファイルをちょこっと覗いてみました。
このことから、俺様FPGAを作ることはできそうです。
どのような俺様FPGAを作ればいいのかを考えないと。。。