Interface編集部
2023年12月別冊付録 7000円ボードで始めるFPGA開発Vol.3 サポートページ
FPGAボードTang Primer 20K(Sipeed)を使って,FPGAの入門から応用までいろいろやっています.
応用的な内容としては,イーサネット,音声出力,カメラ入力,モニタ出力,画像処理を扱っています.
●本別冊付録で使ったFPGAボードへの書き込み方法
▲接続(ビットストリームの書き込み)が不安定な場合
開発に使用するPCによっては,USB接続(JTAG)が不安定な場合があります.
これによって,ビットストリームの書き込みとGAO(ロジアナ機能)が影響を受けます.
・Windowsの場合
・USBケーブルを差し込むPCのポートを変更して試してみてください(あるいはPCを変更).
・Gowin EDAの書き込み機能より,openFPGALoaderの方が安定して書き込めます(ドライバの変更が必要).
・どうしてもうまくいかない場合,次のデバイス経由で接続すると安定して使用できます(USB-JTAG変換にTang Primer 20Kとは違うチップを使っている).
- GWU2X
- FT2232H
・Linuxの場合
・USBケーブルを差し込むPCのポートを変更して試してみてください(あるいはPCを変更).
・Gowin EDAの書き込み機能より,openFPGALoaderの方が安定して書き込めます(ドライバの変更が必要).
Linuxの場合,現状ではTang Primer 20KのUSBポート経由で接続すると,GAOを使えないようです.代わりに次のデバイス経由で接続すると使えるようになります.
ビットストリームの書き込みについても,これらのデバイスを使用する方が安定動作するようです.
- GWU2X
- FT2232H
ビットストリーム書き込みの際は,DIPスイッチの1を下に下げておいてください.
●目次(追加情報含む)
1章 FPGAことはじめ
FPGAを初めて使う方向けに,FPGAの概要を解説します.GOWIN FPGAの特徴も紹介します.
1部1章 開発環境のインストールとLチカ
統合開発環境GOWIN EDAのインストールから,Lチカ用の新規プロジェクトの作り方までを解説します.
1部2章 GAO(Gowin Analyzer Oscilloscope)
FPGAの回路内に仕込む,ロジック・アナライザです.FPGAで組んだ回路の内部信号もモニタリングできます.
1部3章 マトリクスLED
7セグメントLEDをダイナミック駆動して,カウンタを表示します.
ダイナミック駆動の仕組みも図解します.
誌面では紹介していませんが,ロータリエンコーダを使ってダイナミック駆動の駆動レートを変えた場合の動画を次に示します.
表示されている数字は,7セグの桁表示遷移間隔[ms] です.
(20 と表示されているときは,1桁目から2桁目への表示遷移間隔が20[ms])
動画(30fps)と人間の目で見たときでは結構違いがあります.
駆動レートを高くすると,全桁が同時に表示されたように見えます.
1部4章 SystemVerilogの勧め
Verilog HDLにはない,SystemVerilogの便利な機能を紹介します.
1部5章 チャタリング対策
スイッチのチャタリングに対して,電子回路で対処する方法と,論理回路(FPGA内の)で対処する方法を解説します.
2部 論理回路で実現するイーサネット
<記事の内容を試す手順(2024年11月更新)>
次のリポジトリ一式をダウンロードします.
https://github.com/ciniml/fpga_samples/
■Tang Primer 20K用ビットストリーム生成
次の手順で,Tang Primer 20Kに書き込むビットストリームを生成します.
(環境:WSL+Ubuntu20.04.6LTS)
▲手順1:open jdkのインストール
$ sudo apt install default-jdk
▲手順2:sbtのインストール
$ sudo apt-get update
$ sudo apt-get install apt-transport-https curl gnupg -yqq
$ echo deb https://repo.scala-sbt.org/scalasbt/debian all main | sudo tee /etc/apt/sources.list.d/sbt.list $ echo deb https://repo.scala-sbt.org/scalasbt/debian / | sudo tee /etc/apt/sources.list.d/sbt_old.list
$ curl -sL “https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823” | sudo apt-key add
$ sudo apt-get update
$ sudo apt-get install sbt
▲手順3:Rustのインストール
$ sudo apt install rust-all
▲手順4:GOWIN EDAのインストール
Gowinのウェブ・ページからGowin_V1.9.9Beta-4_Education.tar.gzをダウンロード後,展開する.
$ tar zxvf Gowin_V1.9.9Beta-4_Education.tar.gz
展開すると,IDEディレクトリができる.
IDE/binにパスを通す.
▲手順5:XLSのインストール
・kondaでXLSビルド環境をインストール
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ bash Miniconda3-latest-Linux-x86_64.sh -p conda-env/ -b
$ source conda-env/bin/activate
$ conda install -c litex-hub xls
xls/mixerの Makefile のXLS_HOMEに conda-env/share を代入する.
・mixerのビルド
xls/mixerで次のコマンドを実行する.
$ make gen
▲手順6:全体のビルド
eda/ethernet_audio ディレクトリで make する.
$ make
出来上がったビットストリームをTang Primer 20Kに書き込みます.
■PC側ソフトウェアはRustでビルド
音声データをUDPストリームとして流すソフトウェアはPC上で動します.
これはRustで書かれているため,RustのビルドシステムCargoを使ってビルドします.
ChiselやRustをビルドするにはLinuxの方が都合がよいです.
Windows機しかない場合でも,WSL2上で動くUbuntu 22.04を使えばビルドできます.
●Rustプログラムのビルド方法
Ubuntu上では次のコマンドでRustをインストールできます.
$ curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh
ダウンロードしたリポジトリのCargo.tomlファイルが有るディレクトリで,次のコマンドでビルドできます.
$ cd fpga_samples/util/udpaudiosend
$ cargo build
$ cd fpga_samples/util/udpaudiocontrol
$ cargo build
正常にビルドできると,target/debug ディレクトリに実行可能ファイルが生成されます.
●WSL2からイーサネット経由でTang Primer 20Kと通信する
WSL2上のUbuntuからホスト側(Windows)を経由してイーサネット通信する場合,IP通信をbridge接続する方法が使えます.
▲ホスト側でWSL2の設定をする
ホスト側のホームフォルダに.wslconfigファイルを作り,次の内容を記述しておきます.
[wsl2]
networkingMode=bridged
vmSwitch=WSL
dhcp=False
localhostForwarding=True
※vmSwitchの設定値は環境によって異なります.
▲Ubuntu側でIPアドレスの設定をする
WSL2上のUbuntuでは,ホストOS経由で外部と通信するための仮想イーサネットアドレスが自動で付与されます.
(編集部で確認した範囲では,172.で始まるアドレスが付与される)
IPアドレスは,Chiselのソースコード内で次の通り決め打ちとなっています.
FPGA側:192.168.10.2
FPGAと通信する側(PC側):192.168.10.1
決め打ちとなっているFPGA側のIPネットワークと合わせるため,Ubuntu側のIPアドレスを設定します.
コマンドは次の通りです.
$ sudo ip address add 192.168.10.1 dev eth0
●PCから音声データをUDPで流す
P58の動作確認に従って,コマンドを実行すると,Tang Primer 20Kのオーディオ・ジャックから音声が出力されます.
3部 カメラとモニタを使うシステム
ベンダの用意したサンプル・プロジェクトに対して,独自の拡張を追加します.
画像のフレームバッファやメモリ・インターフェースはGOWIN EDAに用意されたIPを使うことで,手軽にシステムを実現しています.
画像に対する輪郭検出処理は,独自に論理回路を記述して実現します.
第1章~第3章
第4章
●リスト
本誌で紹介したリストの一部を掲載します.
第1部
第1章
第2章
第3章
リスト1, リスト2, リスト3, リスト4, リスト5, リスト6, リスト8, リスト9,リスト10
第5章
第2部
第1章
第2章
第3章
リスト1, リスト2, リスト3, リスト4, リスト5, リスト6,
第4章
リスト1, リスト2, リスト3, リスト4, リスト5, リスト6
第3部
第2章
第3章
第4章
●ダウンロード・データ
●関連デバイス
⇒FPGAボード:Tang Primer 20K(https://akizukidenshi.com/catalog/g/gM-17540/)
・第1部第3章
⇒6桁7セグLED:OSL60362-LR (https://akizukidenshi.com/catalog/g/gI-17987/)
・第2部第4章
PT8211(https://akizukidenshi.com/catalog/g/gI-17061/)
・第3部第1章~第3章
⇒Tang Nano 4K(https://akizukidenshi.com/catalog/g/gM-18248/)
・第3部第4章
⇒OV5640(https://ja.aliexpress.com/item/1005005923515997.html?spm=a2g0o.order_list.order_list_main.5.d3b7585a1yxoKO&gatewayAdapt=glo2jpn)
⇒4.3インチLCD(https://ja.aliexpress.com/item/1005005439593117.html?spm=a2g0o.order_list.order_list_main.48.d3b7585a1yxoKO&gatewayAdapt=glo2jpn)