Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実践的!FPGA開発セミナー vol.19 LT

Avatar for windy windy
February 25, 2023

実践的!FPGA開発セミナー vol.19 LT

Latticeの小規模・低消費電力 FPGA iCE40でハマった話

Avatar for windy

windy

February 25, 2023
Tweet

More Decks by windy

Other Decks in Technology

Transcript

  1. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • 伊藤 慎治 システムアイ 代表

    (個人事業主) – 2004年独立開業 – 2007年 名古屋市の大須に事務所開設 – 組込システムの受託開発が主な業務 • FPGA歴 – 2004年 FPGAに初めて触れる • AlteraのStratix、Verilog-HDLを使用 – 2005年 Xilinxと出会う • Virtex-Ⅱ Pro (PPC405×2個内蔵)、VHDLを使用 • 当時のツール(EDK)のIPがVHDLのため、以降はVHDL派 – 使ってきたFPGA • Xilinx :Spartan-3,6・Virtex-II Pro・Virtex-4 FX, Artix-7, Zynq-7000 • Intel :Stratix, Cyclone-3, 4, 5 • Lattice :MACH-XO2・iCE40Ultra ←今日の主役 • GOWIN :GW1Nシリーズ(Tang Nano) • 伝統的な組込用途のFPGAのみ – アプリ寄り・AI等は全然、HLSも使ったこと無い 2 自己紹介 Twitter: @windy_pon
  2. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • 手組み基板 – 低周波治療器の原理試作 –

    アナログ部分は客先提示 – マイコンにはルネサスのRL78を使用 3 こんな事もやってます この製品の 中身 全部ユニバーサル 基板に手組み!
  3. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) 対象プロジェクト要件 4 • 24bitADC から1.44Mサンプル/秒でデータを取得する

    • 1回のサンプルは694nsだが、変換に392nsかかるので読出しは300nsで終 わらせる必要がある • SPIクロックに100MHz必要 • 出力波A・BとADC取得タイミングは同期させる必要がある • 当初はマイコンだけで想定されていた!!絶対無理でしょ 1.44Msps(694ns) ADC変換時間 (392ns) 読出し時間 (300ns) 出力波A 出力波B ADC取得 ADC-CNV ADC-BUSY SPI-CLK 240kHz(4,166ns)
  4. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • クロックが3系統必要 – 240kHzの出力波の生成に36MHzが必要 –

    ADCへのSPIクロックに100MHzが必要 – マイコンからのQSPIで50MHz • 36MHzからPLLで100MHzが生成出来る必要がある • ロジックはそんなに要らない • 一部とは言え100MHz動作が必要 • RAMがあればサンプルデータをバッファ出来てマイコンに余 裕が出来て嬉しいかも? 5 FPGAの要件
  5. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • iCE40シリーズでは中くらいの製品 • 今回は一番容量の小さいLP1Kを採用、パッケージは7mm角のQFN48 –

    こんなにピンは要らないが、取りあえずマイコンの空きピンを繋 いでおく • 人気が無いのかMouserに大量に在庫があった(2022/8月) 6 Lattice iCE40 Ultra マクニカの Webサイト より
  6. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • iCE40シリーズでは中くらいの製品 • Logicの1100というのはLUT4-FFのセットが単位 •

    PLLが1個ある • ブロックRAM(EBR)は1個につき4kbit×16個 • 16x16=32bit乗算器が2個ある • iCE40シリーズは2011年12月にLatticeが買収したSilliconBlueと いう会社の製品 • ツール内にやたらとSB_という 名前が出てくる 7 Lattice iCE40 Ultra EETimes Japanより
  7. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • かなり簡素な作りのツール • 左側にプロジェクトファイルのツリーと合成プロセスのツリー •

    右側のメイン画面は、通常コンソール出力のみ • シミュレータはModelSim Lattice Editionが付属(ライセンス不要) • VHDL-2008に対応している 8 Lattice iCE40 Ultra 開発ツール
  8. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • 4kbit-RAMはシンプルデュアルポートでそれぞれ以下の選択肢 – 256×16bit –

    512× 8bit – 1024×4bit – 2048×2bit • 何よりFIFOが無いのが辛い、自分で作れと? – 作りました 11 ハマり所・IP
  9. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • PLLにはOUTA・OUTBと2個の出力クロックがあるが、任意の 周波数合成が出来るのはOUTAの1個のみ – OUTBはOUTAの半分か、入力クロックそのまま

    – 今回の用途では36MHz→100MHzと36MHzそのままの2出 力で使用 • グローバルクロック入力はデバイスに8個あるが、PLLに直接 繋がってるのはこのうち1個だけ – しかもドキュメントに書いてない – 試しに合成してみたらそこはダメだと言われる 12 ハマり所・PLL
  10. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • IOピン直近に入出力レジスタがある – 今時らしく、入出力ともDDR対応 –

    がしかし、リセットが無い! • 入力はともかく、 出力にリセットが無い 14 ハマり所・IOレジスタ
  11. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • ロジックの割当は合成時に決まるので、リセットっぽい動作を 書くと絶対にIOレジスタに割り当ててくれない – こんな書き方をしてもダメ、selが負論理リセットになる

    • 仕方が無いのでSB_IOプリミティブを直接配置したら… – なんと立ち下がりエッジトリガの指定が無視されるという バグを踏んだ… 15 ハマり所・IOレジスタ DO_cmb <= d_out when (sel = '0') else '0'; process (CLK) begin if falling_edge(CLK) then DO <= DO_cmb; end if; end process;
  12. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • パラメータ(generic) 「NEG_TRIGGER」で立ち下がりエッジト リガになるはずが、実機・インプリメント後simでも立上り エッジトリガになっていた

    • 合成後のEDIFネットリストを見たら、「NEG_TRIGGER=0」 になっていた – EDIFを手作業で書き換えたら立ち下がりエッジトリガに なった – これを毎回やれと? 16 ハマり所・IOレジスタ
  13. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • LatticeだからFLASH内蔵だと思ってたら… – なんとiCE40はO T

    P – 他社FPGAと同じく外部SPIフラッシュも使用出来る – さらにコンフィグIFはJTAGではなく、SPI • LatticeのツールはMPSSEがあるFTDIのチップが使える (FT232H、FT2232等)のでこれはそれほど問題ではない – 内蔵ロジアナのような便利なモノは無い – 小さいので全部をsimすれば良い • 今回はマイコンからSPIでコンフィグ 17 ハマり所・コンフィグ
  14. 実践的!FPGA開発セミナー vol.19 LT:iCE40でハマった話 (伊藤 慎治) • 色々ハマりましたが、XilinxやAlteraの最新FPGAと比較するの がそもそも間違い – 超低消費電力、小フットプリントがウリの製品なので

    • Latticeはスマホなどの大量量産品での採用を狙ってる? • 今回の案件では十分役割を果たしてくれました – マイコンからのSPIコンフィグ – 24bit-ADCからの1.44Msmp/sでのデータ取得 – 240kHz出力とのADC-CNVタイミングの同期 – 内蔵RAM使用FIFOによるデータのバッファ • マイコンのタイミング要件が楽になる • 実際には1msごとにQSPIでデータを取得 • ロジックが余っているので、現状マイコンで処理している一部 のデータ処理のFPGAへの移動を検討中 18 まとめ