Interface編集部
2025年12月号別冊付録 GOWIN サポートページ
■2部1章 FFP IPコアを使ってディジタル・フィルタを設計する
記事で紹介したデザインは上記のダウンロード・データで試せます.使い方は次の通りです.
●概要
・ FPGAデザイン集 : 第2部第1章 (FFT IP コアを使ってディジタル・フィルタを設計する) のビルド環境一式
・ Tang Primer 25Kに以下の機能を実装している
1. アナログ信号入力: SPI A-Dコンバータから一定レートでサンプリング
2. [信号処理: FFT] -> [周波数スペクトル値加工] -> [IFFT による周波数フィルタ処理 ](FFT/IFFTは2048点)
3. アナログ信号出力: フィルタ処理済み信号を SPI D-Aコンバータに一定レートで出力
・ A-D コンバータ / D-Aコンバータ モジュールは以下を想定
・ A-Dコンバータモジュール = Digilent Pmod AD1 (PMOD J4コネクタに接続)
・ D-Aコンバータモジュール = Digilent Pmod DA2 (PMOD J5コネクタに接続)
●注意事項
・ 本デザイン中で使用しているIPコアは, 設定ファイル (.ipc) のみを格納している
・ 後述の手順でソースコード生成が必要
●動作確認環境
・ OS: Ubuntu 22.04.4
・ Gowin FPGA Designer: Version V1.9.11.03 Education build(81398)
・ 通常(非Education)版も使用可能
・ openFPGALoader: https://github.com/trabucayre/openFPGALoader (commit:08f5072)
・ FPGAへの書き込みに Gowin Programmer を用いる場合, openFPGALoader は不要
●ビルド方法
▲ 1. 環境変数の設定
・ 環境変数 “PATH” に Gowin IDE の bin ディレクトリへのパスを設定する
# 設定例
$ export PATH=$PATH:/<...>/Gowin_V1.9.11.03_Education_Linux/IDE/bin
▲ 2. IPコアのソースコード生成
下表の4個のIPコアについて, Gowin FPGA Designer を用いて .ipc ファイルからソースコードを生成する必要がある.
| 名前 | ipcファイル | 備考 |
| fft | src/ipcore/fft/fft.ipc | FFT |
| ifft | src/ipcore/ifft/ifft.ipc | IFFT |
| fifo_real | src/ipcore/fifo_real/fifo_real.ipc | 12Bit 実数値用 FIFO |
| fifo_complex | src/ipcore/fifo_complex/fifo_complex.ipc | 12Bit 複素数値用 FIFO |
1. Gowin FPGA Designerを起動し, GUI画面上部メニューの [Tools] > [IP Core Generator] を選択
2. Target Device: の右側をクリックし、”GW5A-LV25MG121NC1/l0″ (Device Version: A) を選択
3. Target Device: のさらに右側にあるファイルアイコンをクリックし、上表に示した ipc ファイルを開く
4. IPコアの設定ウィンドウが開くので、そのまま 「OK」 ボタンをクリックする
・ 正常に完了すると、ipc ファイルと同じフォルダに以下のファイルが生成される
・ <名前>.v / <名前>.vo / <名前>_tmp.v
5. 1~4の手順を、上表の4個のipcファイル全てに対して行う


▲ 3. 周波数フィルタ係数の設定
・ 本デザインでは, 周波数フィルタの係数はビルド時に静的設定なので, 事前に所望の値に編集する
・ ソースファイル: src/freq_filter_coef_com.sv
・ coef_rom[0] ~ coef_rom[1024] の値を編集する
・ 1要素が周波数領域データの 1Binに対応している
・ 設定値は 整数部4Bit + 小数部 4Bit (計8Bit) の符号無し固定小数点値
▲ 4. プロジェクト復元と合成
$ make build
・ 正常に完了すると、以下のファイルが生成される
・ Gowin FPGA Designer プロジェクトファイル: ./signal_proc_with_adc_dac.gprj
・ ビットストリームファイル: ./impl/pnr/signal_proc_with_adc_dac.fs
● FPGAへの書き込み方法
▲ openFPGALoader を用いる場合
$ make writefpga
▲ Gowin Programmer を用いる場合
・ Gowin Programmer でビットストリームファイル ( ./impl/pnr/signal_proc_with_adc_dac.fs ) を指定して書き込む
■2部2章 独自コマンドで制御!ディスプレイ・コントローラの設計
本稿のRTLは,Verylで記述しています.使ったバージョンは次の通りです.
$ veryl --version
veryl 0.16.4 (1339dcb 2025-09-08)
●ソースコードはこちら
https://github.com/ciniml/fpga_samples/tree/gowin_vol5/rtl/display_controller
https://github.com/ciniml/fpga_samples/tree/gowin_vol5/rtl/spi
https://github.com/ciniml/fpga_samples/tree/gowin_vol5/rtl/interfaces/axi4s
■2部4章 UVC
プロジェクトはGitHubで公開しています.
お試し用ビットストリーム
■2部5章 EtherCATスレーブ・デバイスの設計
誌面では省略した,ethercat_core モジュールはこちらです.
■3部 独自MIPIカメラ・モジュール製作挑戦記
●MIPIクロックを受信するところまでのRTLコード
※ 受信周りは https://github.com/ryuz/jelly/blob/master/projects/tang_mega_138k_pro/tang_mega_138k_pro_imx219_stereo/rtl/imx219_mipi_rx.sv
●GAOとopenFPGAloaderを使い分けるためのドライバの変更方法(Windows)
Sipeed製のGowinボードを使う場合,Windows PCのドライバは2種類あります.少し手間がかかりますが,後から変更も可能です.
▲ドライバ1:Gowin純正のドライバ
Gowin Programmer や Gowin Analyzer Oscilloscope を使えます.
▲ドライバ2:WinUSB
こちらはGowin ProgrammerやGowin Analyzer Oscilloscopeは使えませんが,openFPGAloaderを使えます.こちらのドライバはZadigを使って設定します.
●使用したカメラ・モジュールの情報
– Tang Mega 138K Pro Dock 用 IMX219 MIPI 変換基板 (KiCAD 設計データ)
– https://github.com/ryuz/imx219_mipi24_sipeed
– Tang Mega 138K Pro の IMX219 ステレオカメラサンプル(GOWIN標準IP版)
– https://github.com/ryuz/jelly/tree/master/projects/tang_mega_138k_pro/tang_mega_138k_pro_imx219_stereo
– Tang Mega 138K Pro の IMX219 ステレオカメラサンプル(自作IP版)
– https://github.com/ryuz/jelly/tree/master/projects/tang_mega_138k_pro/tang_mega_138k_pro_imx219_stereo_jelly
– Tang Mega 138K Pro の IMX219 4レーン動作確認
– https://github.com/ryuz/jelly/tree/master/projects/tang_mega_138k_pro/tang_mega_138k_pro_imx219_4lane
●MIPI通信を解析して作った独自IP
https://github.com/ryuz/jelly/blob/master/projects/tang_mega_138k_pro/tang_mega_138k_pro_imx219_stereo_jelly/rtl/imx219_mipi_rx.sv
















