FPGA MAX10 環境構築

MAX10で Lチカまで開発環境構築メモ

FPGAチップの MAX10の開発環境を構築したメモ
MAX10-FB MAX10-JB
図の左側 MAX10-JB基盤は オプションボードで
図の右側 MAX10-FB基盤 MAX10本体と合体させることで
JTAG接続の デバッガ兼ファームライタとして利用できます

なお MAX10-JB基盤は PIC18F14K50-I/P と 12MHz水晶が載って
ジャンパを外せば 純粋な PICマイコンとして単体利用できます

ここは普通に MAX10 とJTAG接続する USB Blaster互換基盤として
利用したいところですが 予想以上に初見殺しなデバイスでした
まず
中の説明書には明記されておらず ヒントだけ書かれていますが
「ジャンパピン」の接続が必要です
何も考えずに MAX10 と合体して USB繋いでも認識されません

  • J1~J4オープン J5-J8ショートすることで USB Blaster利用
  • J1~J4ショート J5-J8オープンすることで MAX10からPICへのファームウェア書き込み
  • J1~J4オープン J5-J8オープンして MAX10-FBと繋げず 汎用のPICマイコンとして利用

と使い分けることになります

まずは本体 MAX10-FB から

本来 買った MAX10-FB にはファームウェアが書き込まれていて
MAX10-JB の J1~J4をショートしたうえで MAX10-FB と繋いで
電源を入れれば MAX10-JBの PICへファームウェアが転送される
仕組みだったようです

ところがうまく書き込まれず
後から気づいたのですが 次の図の裏面 12ヵ所の赤丸
ジャンパを全てはんだを盛ってショートさせる必要がありました
そうしないと MAX10に電源が入らない
MAX10-FB 改造
表の J1 も黄色ジャンパ取りつけてショートしました
これは MAX10のブートセレクトらしく
バックアップファームウェアを使わないようにします

また うまく書き込まれたとしても
Windowsからしか USB Blasterを認識できないファームウェアのようです
結局 次の手順で Linux対応のファームウェアを
MAX10-JBへ直接書き込むことにしました


MAX10-JB の PICへ USB Blasterを直接書き込む

幸い PICライタが手元にあるので
PICライタを使って 次のように直接 MAX10-JB へ
ファームウェアを書き込む方法を取りました
MAX10-JB を直接 PICkit-3 と接続
PICkitとの接続ピンアサインは次の通り
5本のケーブルで PICkitへつなげます
(Vss と Vdd は分かりづらいですが それぞれ
裏面のピンヘッダで GND と 3.3V です)
MAX10-JB PICkit接続方法
次の書き込むファームウェアは何を使うかですが
当初 サポートサイト で配布されている
Linux対応ファームウェア「USB_JTAG.zip」 を
PIC用の開発環境 MPLAB X IDE にてビルドしたのですが
結局USBデバイスとして認識されませんでした

そこで見つけた別サイト USB-Blasterもどきの製作にて
ビルド済のファームウェアが配布されて使えたため この方法を紹介します

まず MAX10-JB を改造して USB-Blasterもどきの製作
紹介されている 回路図相当へ変更します (電子工作が必要)
MAX10-JB 改造
この写真の赤丸の通り 次の改造を行います

  • PICの 6番ピンと9番ピンを 100Ω抵抗経由で接続
  • PICの 11番ピンと16番ピンを 100Ω抵抗経由で接続
  • 抵抗R2の PIC側を切って 抵抗の足と PICの10番ピンを接続
  • 裏面の写真の通り PICの 7番ピンと J7 の遠い側のピンを接続

次に USB-Blasterもどきの製作 から
ub7.zip をダウンロードして中に含まれている
Blaster7SPI.hex を取り出し
PICkit経由で MAX10-JBの PICへ書き込みます

さらに MAX10-JBの USB接続が Linuxで認識されたとき
/dev/usbblaster/ のデバイスファイルを作成するよう
UDEVへ設定を追加します
/etc/udev/rules.d/51-usbblaster.rules
の次の内容のファイルを作成しておきます

# Intel/Altera USB-Blaster
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6002", MODE="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6003", MODE="0666", SYMLINK+="usbblaster/%k"
#
# Intel/Altera USB-Blaster II
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6010", MODE="0666", SYMLINK+="usbblaster2/%k"
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6810", MODE="0666", SYMLINK+="usbblaster2/%k"

これでようやく準備が整ったので
MAX10-JB の J5, J6, J8 をショートして
MAX10-FB と合体した状態で LinuxへUSB接続します
dmesg で次のメッセージが出れば認識されてます

[1104123.251726] usb 8-1: new full-speed USB device number 66 using xhci_hcd
[1104123.432341] usb 8-1: New USB device found, idVendor=09fb, idProduct=6001, bcdDevice= 4.00
[1104123.432346] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[1104123.432349] usb 8-1: Product: USB-Blaster
[1104123.432351] usb 8-1: Manufacturer: Altera
[1104123.432353] usb 8-1: SerialNumber: 00000000

Quartus Primeのインストール

次にFPGAの開発環境を導入します
MAX10の場合 インテルから提供される Quartus Prime
が統合開発環境として利用可能です
Quartus Prime インテルダウンロードサイト
ライトエディションは無料での提供ですが
FPGA開発に必要な次の機能を一通り備え 十分使えます

  • 高位合成 C言語などの高級言語による回路動作の記述 (Quartus Primeではオプション機能の扱い)
  • デザインとコンパイル VHDL や Verilog-HDL などの言語記述から論理合成
  • テストベンチ スタティックタイミング解析などシミュレータ上にて回路の動作を検証
  • インプリメント FPGAチップ固有のピンアサイン や 乗算器やDSPといったカスタムブロック を利用できるようにする
  • プログラミング FPGA実機のフラッシュメモリやSRAMへ合成されたコードをダウンロード転送
  • デバッグ FPGA実機に対してデバッガハードウェア経由で動作を解析

Quartus Prime ライトエディションを Ubuntu22.04LTSへインストールしました
ダウンロードしたファイルは次の通り
Quartus Prime ダウンロード一式
Quartus-lite とあるのが Quartus Prime本体
ModelSimSetup とあるのが シミュレータ
HLSProSetup とあるのが 高位合成(HLS)ツール

ファイルサイズが大きいので ダウンロードその他注意が必要
高位合成ツールは Quartus Prime Pro Edition の場所にあります
高位合成ツールだけなら無償で利用できるようです

まず Quartus Prime 本体のインストールから
tarアーカイブを一時ディレクトリに解凍して 中の setup.sh を実行

$ ./setup.sh

The Intel software you are installing is 64-bit software and will not work on the 32-bit platform on which it is being installed.

Do you want to continue to install the software? (y/n): 

(ホームディレクトリ)/intelFPGA_lite/22.1std/ のような場所を指定します
Quartus Prime インストール中
続いて MAX10用のシミュレータとして ModelSimをインストールします
インストール先 は Quartus Primeをインストールした先を手動で指定します
(ホームディレクトリ)/intelFPGA_lite/22.1std/modelsim_ase/ のように
modelsim_ase/ ディレクトリが作られます
ModelSim インストール中
なおここで ~/intelFPGA_lite/22.1std/modelsim_ase/bin/vsim と打って
シミュレータがエラーで起動しない場合
32bit版の Linux共有ライブラリが不足しているので
次のコマンドでインストールしておきます

# apt-get install libxft2:i386 libxext6:i386 libstdc++6:i386

以下 HLSコンパイラの導入の記載ありますが
HLSコンパイラは動作未確認です

さらに 高位合成ツールとして HLSコンパイラもインストールします
HLSProSetup-~.run が起動しない場合 libtinfo.so.5 ライブラリが不足
していて 手元の環境では次の対応を行いました

# apt-get install libtinfo-dev

# cd /usr/lib/x86_64-linux-gnu/
# ln -s libtinfo.so.6.3 libtinfo.so.5

バージョンが異なる libtinfo.so.6.3 を強引に libtinfo.so.5 へ
見せる どこにも推奨されてない方法と思います ご注意ください

これでようやく HLSコンパイラのインストーラが起動します
これもインストール場所を手作業で指定して
(ホームディレクトリ)/intelFPGA_lite/22.1std/ とします
gcc/ や hls/ のディレクトリが作られ 一式インストールされます

次に Nios II SBT(Software Build Tools for Eclipse) の導入です

Nios II とは FPGA上で合成できるソフトウェア CPUです
つまり FPGAをマイコンとして利用したり 頑張れば OSが動きます

SBTは Nios II上で動くファームウェア(プログラム)の開発ツールです
Eclipseをベースとしており 統合開発環境となっています

導入にあたって 古いバージョンの Eclipseが別途必要です
Intelのサイトから CDTをダウンロードします
Intel - Eclipse C/C IDE for Mars.2
Quartus Primeのインストール先ディレクトリには 既に
nios2eds/bin ディレクトリがあるので ダウンロードした
CDT (つまり Eclipse本体) をそこへ解凍します

解凍されできた eclipseディレクトリを eclipse_nios2 へリネームします

$ cd ~/intelFPGA_lite/22.1std/nios2eds/bin
$ tar -xzf ~/eclipse-cpp-mars-2-linux-gtk-x86_64.tar.gz
$ mv eclipse eclipse_nios2
$

同じディレクトリには 既に Eclipse用のプラグイン
(eclipse_nios2_plugins.tar.gz) があるので
次のコマンドで eclipse_nios2/ 内へ上書き適用します

$ tar -xzf eclipse_nios2_plugins.tar.gz
$

上記 Elipseとプラグインは JAVA8系でしか動作しません
そのためシステム(Linux)で 複数バージョンを切り替えて使える
alternativesシステムの仕組みを使って JAVA8へ切り替えます
詳細説明は省きますが 次のコマンドを参考にしてください

$ sudo apt install openjdk-8-jdk
~
$ sudo update-alternatives --config java
[sudo] admin のパスワード:
alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。

  選択肢    パス                                          優先度  状態
  ------------------------------------------------------------
  * 0            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      自動モード
    1            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      手動モード
    2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      手動モード

現在の選択 [*] を保持するには 〈Enter〉、さもなければ選択肢の番号のキーを押してください: 2
update-alternatives: /usr/bin/java (java) を提供するためにマニュアルモードで /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java を使います
$ update-alternatives --display java
java - 手動モード
最適なリンクのバージョンは '/usr/lib/jvm/java-17-openjdk-amd64/bin/java' です
  リンクは現在 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java を指しています
  リンク java は /usr/bin/java です
  スレーブ java.1.gz は /usr/share/man/man1/java.1.gz です
/usr/lib/jvm/java-17-openjdk-amd64/bin/java - 優先度 1711
  スレーブ java.1.gz: /usr/lib/jvm/java-17-openjdk-amd64/man/man1/java.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java - 優先度 1081
  スレーブ java.1.gz: /usr/lib/jvm/java-8-openjdk-amd64/jre/man/man1/java.1.gz
$ java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-8u372-ga~us1-0ubuntu1~22.04-b09)
OpenJDK 64-Bit Server VM (build 25.362-b09, mixed mode)
$

なお環境変数 JAVA_HOME は alternativesで切り替わらないため
別途設定する必要があります

MAX10-FB で Lチカ

ここから実際に Quartus Primeで回路合成を試してみます
MAX10-FB には フルカラーLED が搭載されているので
まず簡単な記述で LEDを光らせます

Quartus Primeは 次のコマンドで起動します

$ ~/intelFPGA_lite/22.1std/quartus/bin/quartus &

本格的な IDE風の GUIです
他の IDEと同じく開発物は プロジェクト単位で管理します
Quartus Prime 起動画面
新規プロジェクトを作成します メニュー File – New Project Wizard から
プロジェクトは ホーム直下に QuartusPrime ディレクトリを作り
そこにプロジェクト毎のディレクトリを作るようにしました
Quartus Prime Lチカプロジェクト作成
次の画面で Project Typeを選択しますが Empty Projectとします

次の Add Files はプロジェクトへ追加するファイルを指定しますが
(後から メニューの File – Add からでも追加できる)
ここは Nextを押してスキップします

次は ターゲットデバイスの指定です
Family にて MAX10 を指定して Available devicesにて
ターゲットのチップ 10M08SAE144C8G を選択します

ボード製品を購入したのであれば Boardタブから
ターゲットを指定することも可能ですが
あいにく MAX10-FB製品は登録されてないようです
Quartus Prime ターゲットデバイス指定
次に 関連ツール(EDA:半導体設計支援)の選択画面が出た場合 次のように選択します
Design Entry/Synthesis ではとりあえず Precison Synthesis を選択
(後からメニューの Assignments – Settings にて変更可能)
Simulation では MAXシリーズ用に ModelSim と Formatに Verilog HDL を選択
(後からメニューの Tools – Options の General にて変更可能)
Quartus Prime OptionsのEDA Tool Options設定
最後 Summary画面にて設定内容を確認して Finishを押せば
プロジェクトが生成されます
Quartus Prime プロジェクト生成直後
まず Verilog-HDLのソースファイル(拡張子 .v)を作ります
なお参考に QuartusPrime関連の拡張子は次の種類があります
(こちらで 把握できた分なので 全てを網羅していません)

拡張子
.qpf Quartus Primeプロジェクト設定 プロジェクトに対して 1つ
.qsf Quartus Primeプロジェクト設定 リビジョン毎に作られるファイルリスト デバイス 合成・配置配線制約 ピンなどレイアウト制約
.vhd VHDL言語デザイン
.v Verilog-HDL言語デザイン
.sv System Verilog言語デザイン
.vht .vt テストベンチテンプレート .vhtはVHDL .vtはVerilog-HDL
.bdf 回路図ファイル
.sof SRAM向けプログラムイメージ
.pof フラッシュ向けプログラムイメージ
.stp オンチップデバッグの生成ファイル
.vo ネットリスト
.vqm EDAツール向け 論理合成済 ATOMレベルのネットリストファイル
.edf EDAツール向け 論理合成済 出力ファイル

メニューの File – New から新規ファイルを作成し
種類として Verilog HDL File を指定します

仮のファイル名のため File – Save As で一旦ファイル名を変えます
また その際 Add file to current project へチェックを入れておきます
Lchika1.v の名前でプロジェクトへ追加しました

これで図の通り Lchika1.v が編集用に開かれ
また Navigator を Files に切り替えると プロジェクトに加わった
状態となっていることが分かります
Quartus Prime プロジェクトへデザインファイルを追加
次のように Verilog-HDLの文法で記載します

`define COUNT_MS 1000000

module Lchika1 (
 input wire clock,
 input wire button,
 output wire [2:0] led
);
 reg [2:0] led_counter;
 reg [25:0] counter;

 initial begin
   led_counter = 3'd0;
   counter = 26'd0;
 end

 always@(posedge clock) begin
   counter <= counter + 26'd1;
   if (counter == `COUNT_MS) begin
     counter <= 26'd0;
     if (button) begin
       led_counter <= led_counter + 3'd1;
  	  end
   end
 end

 assign led = led_counter;

endmodule

ここでは HDLの文法解説は省略しますが
入力として clock (クロック) と button (基板の押しボタン)
出力として 3bit長の led (各bit R G B の LED光に対応)
の 3パラメータ を使った回路です

動作としては clock変化をトリガとして
led値をインクリメントすることで LEDを 8色順番に光らせます
clock は 100万カウント(約0.1秒)後にトリガを出します
button が押されている間は色の変化は停止します

これを一度コンパイルしてみます
メニューの Processing - Start Compilation で
デザインに問題なければ Full Compilation was successful になります
Quartus Prime コンパイル実行
デザインを実機にプログラムする前に シミュレータで動作検証します
シミュレーションするには テストベンチを記述します

メニューの Processing - Start - Start Test Bench Template Writer
により テストベンチのテンプレートを生成してくれます
(プロジェクトの保存フォルダ)/simulation/modelsim/Lchika1.vt
が生成されます

これを File - Open から開いて必要な処理を記述します
図の赤枠部分が 変更・追記 した部分です
テストベンチ
まず シミュレーションのタイムスケール設定
1 ps/ 1 ps
では ピコ秒単位のシミュレーションは細かすぎるので
10 ns/ 1 ns
としました

あとは initialの初期化ブロックや alwaysの順序回路ブロックへ
clockの挙動を記載しました
#1 clock <= ~clock; というのは 1タイムスケール後に ビットを反転する指定です これで 50MHz のクロック動作となり 実機の動作(48MHz)に近くなります また alwaysブロック内の @eachvec の記載は ループ処理が停まる要因なので コメントアウトします
出来上がったテストベンチを登録します
メニューの Assignments - Settings の EDA Tool Settings - Simulation
にて NativeLink Settings にて Compile test bench を選択した上で
Test Benches... ボタンを押すとテストベンチ登録画面が出ます

登録画面で Newを押して登録します
Test bench and simulation files には先ほどの Lchika1.vt を登録して
(Add を押してリストに追加する)
デザインのモジュール名 や テストベンチのモジュール名 を指定
Simulation period は LEDの挙動を一通り見るため 500ms を指定
Quartus Prime テストベンチ設定
ModelSim を起動させてシミュレーションさせます
メニューの Tools - Run Simulation Tool - RTL Simulation を実行します

500ms分のシミュレーション(run 500ms)が行われ 少し待たされます
結果は時系列グラフが表示されるので Zoom Full で全体を見渡します
led の挙動の変化を見て 意図通り動作していると確認できます
Quartus Prime ModelSimシミュレーション1
シミュレーションは Zoom In/Out で任意の時間帯を確認できます
clock の動作の詳細を見るため Zoom In を20回くらい押すと
図の通り 100ns間に 10回ほど切り替わっており 50MHzと確認できます
Quartus Prime ModelSimシミュレーション2
検証も問題なさそうなので 開発を継続します
今回の入出力となる clock button led を実機のI/Oピンと紐づけます

なお MAX10-FB のボードは次のピンアサインとなっているので
これに合わせる形です

MAX10-FB ピンアサイン
IO 接続
PIN27 クロック
PIN120 ~フルカラーLED 赤
PIN121 ~フルカラーLED 緑
PIN122 ~フルカラーLED 青
PIN123 ~SW1 ボタン

メニューの Assignments - Pin Planner を選択します
Pin Planner の画面では clock button led のワイヤが
既に登録されているので
それぞれ Locationの部分をダブルクリック PINを割り当てます
Quartus Prime Pin Planner
Pin Planner の設定が終わったら 再度コンパイルしておきます
メニュー Proccessing - Start Compilation

いよいよ 実機にプログラムします
メニューの Tools - Programmer が書き込みアプリケーションです

まず USB Blasterが認識されていることを確認します
次に書き込みイメージの確認です
今回は SRAMへ書き込むので .sof を指定します

SRAMへの書き込みは 即座に実機の回路へ反映されますが
電源を切ると設定内容が消えます
Quartus Prime Programmer
うまくいけば次の アニメーションGIFのように動作します
MAX10-FB テストLチカアニメーション

Platform Designer と Nios II

基本的な回路合成方法も解り 次はCPUでも作ってみたいところですが
その前に Quartus Primeには Platform Designerという機能があります

Platform Designerとは いわゆるライブラリにあたる便利機能で
USBや Ethernetの機能 あるいは 画像処理などの DSP機能など
必要に応じた機能が利用可能になっています

また Nios IIという 32bitアーキテクチャの ソフトウェアCPU があり
つまり FPGA上で CPUを合成して PCを作ることができます
ここでは Platform Designer を使い Nios II コンピュータを試します

Quartus Primeにて新しいプロジェクトを作成して
メニューの Tools - Platform Designer を選びます

Platform Designerの構成情報は .qsys という拡張子で保存されます
今回は 新規に構成情報を作ることになります
Quartus Prime Platform Designer
左上に IP Calalogの欄が見えていて これがいわゆるライブラリです
この中から欲しいものを選んで追加していきます
初期段階では Sytem Contents上に クロックソースである clk_0
のみが追加された状況であることが確認できます

カタログから 早速 Nios II を選んで追加(Add)します
Quartus Prime Platform Designer NiosII
コンポーネントを追加する毎に 詳細設定のダイアログが開きます
Nios II の場合 CPUのモデルが 2種類から選べるようです

  • NiosII/e 機能制限版 それでも RTOSを動かしたり JTAGデバッグできる
  • NiosII/f 高機能版 乗除算器など動作効率が高く Linuxも動くらしい

  • 今回は NiosII/e を選択します (高機能版は 有償かもしれないため)
    Finish を押せば System Contens 一覧にコンポーネントが追加反映されます

    同様の要領で 次のコンポーネントを追加しました

    コンポーネント
    On-Chip Memory Basic Functionsカテゴリ配下にある
    RAMに相当 デフォルトの4KBを指定
    また MAX10の場合は memory initialization機能が使えないためこのチェックを外す必要があった
    On-Chip Flash これも Basic Functions配下
    ROMに相当 ファームウェアを格納する Confiurationは Sigle Uncompressed Imageを選択 また Initialize flash contentはチェックを外す
    JTAG UART Interface Protocols → Serial配下
    JTAG外部接続機能
    irqを Nios IIの irqへ結線する必要あり (後述)
    PIO Processors & Peripherals配下
    メモリマップド可能なパラレルポート
    今回は LEDの3色へ接続するため 3bit(Width) OUTPUTを指定
    Finish後 System Contents欄にて External connectionピンをLEDへ結線するための
    Export蘭に識別名をつける設定をしておきます
    Export列をダブルクリックして 識別名「pled」を付与します

    一覧の Connections欄をいじって 必要な結線を指定します

  • clk_0 の clk ピンを Nios IIの clk や他コンポーネントの clk へ結線する
  • clk_0 の clk_reset ピンを Nios IIの reset や他コンポーネントの reset へ結線
  • Nios IIの debug_reset_request を clkの clk_in_reset へ結線する
  • 各デバイスの data, csr, s1 ピンを Nios IIの instruction_master や data_masterへ結線する
  • jtag の irq を nios IIの irqと結線する

  • Quartus Prime Platform NiosIIコンテンツ設定
    Messages欄に 構成チェックによるエラーが表示され
    上記結線によりある程度解消されますが まだエラーが残ります

    まず 2つある ~slave is not specified については
    Nios II(nios2_gen2_0)の設定を開きなおして Vectors タブを設定します
    Reset Vector や Exception Vectorに On-Chip Memoryを指定します
    Quartus Prime Platform NiosII割り込みベクタ設定
    overlaps のエラーが複数残っていますが
    アドレスマップのアドレス衝突が原因です
    Address Mapタブからアドレス割り当てを調整します
    ×マークの付いている所が衝突個所で アドレスを図のように調整します
    Quartus Prime Platform NiosIIコンテンツ設定
    これで一通り Nios IIの構成は完成しているはずなので
    一旦メニューの File - Save As で名前を付けて保存します
    指定名称.qsys の拡張子で設計ファイルとて保存されます

    続けて
    メニューの Generate - Generate HDL により HDLを生成させます
    付けた名前/synthesis/付けた名前.qip をはじめとするデザイン
    が生成されるはずです

    これら Platform Designerの生成物は 元のプロジェクトへ
    自動的に組み込まれるわけではなく 手動で組み込む必要があります

    メニューの Generate - Show Instantiation Template を見ると
    モジュールの呼び出しの文例を確認することができます
    Quartus Prime Platform Instatiation Template
    文例は後で貼り付けるのでどこかへコピーして退避しておき
    Platform Designer は閉じます

    次のような案内ダイアログが出ますが
    生成された .qip や .sip ファイルをプロジェクトに追加しろ
    という内容で このすぐ後段で対応するので参照してください
    Quartus Prime Platform platform Designer生成ファイル
    Quartus Primeのプロジェクトに戻ったら
    トップデザイン.v を新規に登録して (メニューの File - New)
    先ほど退避した Platform Designer の文例を貼り付けて修正します
    修正個所は引数部分で トップモジュール側のワイヤを指定します
    Quartus Prime Platform Platform Designerの取り込み1
    後述しますが JTAG用のピン tck, tdl, tdo, tms を割り当てています
    デザインは Processing - Start Compilation でコンパイルしておきます

    また Platform Designer で生成した .qip もプロジェクトへ組み込みます
    メニューの Project - Add/Remove Files in Project にて
    次の図のように 一覧へ追加します
    Quartus Prime Platform Platform Designerの取り込み2
    今回 ピンアサインは
    メニューの Assignments - Pin Planner のように
    clk(入力クロック), led(フルカラーLED) を物理ピンに割り当てます

    また Nios II用の JTAGデバッグピンである altera_reserved_t* 4つも
    作られているのでこれも同様に割り当て設定を行います
    これら4つのピンアサインは固定なため 結局次のような割り当てです
    Quartus Prime Pin Planner
    altera_reserved_t* を外部向けの物理ピンへ直結するよう
    先ほどのトップモジュールのコード assign構文にて
    tck, tdl, tdo, tms へ繋げています

    これにより ピン59~62 を通じ Nios IIへデバッガを接続できます

    次に必要となるのは Nios II にファームウェアを与えること
    つまり Nios II上で動作するプログラムを作ることです

    メニュー Tools - Nios II Software Build Tools for Eclipse
    を選択して Eclipse開発環境 (Nios II EDS) を立ち上げます


    FPGA関連へ戻る

    FPGA関連

    FPGA関連

    若いころからのマイコン熱が過熱して
    FPGAも試してみたいと思うようになりました

    FPGAでは プログラマブルに回路を論理合成して
    任意のICが作れます 頑張れば CPUも作れます

    近年では マイコンのサポートモジュールとして
    画像認識などのAI処理を行わせる例もあります

    関連記事: デジタル関連写真
    関連記事: Raspberry Pi関連
    関連記事: IoT関連
    関連記事: PICマイコン

    MAX10 MAX10-FB基盤

    マルツにて販売されていた FPGAを思わず購入しました
    MAX10 パッケージ
    FPGAとしては Intel社(旧ALTERA社)製の MAX10 を使っています
    MAX10シリーズの中でもエントリレベルの LE(ロジックエレメント)数
    8000なので ファミコンなどの 8bit機のエミュレータくらいは作れるかと

    図の右側が MAX10チップを使っている 本体基盤 MAX10-FB
    図の左側が USB Blaster互換のJTAGデバッガ兼書き込み機 MAX10-JB
    2つをセットで買いました

    本当は 解説本 をセットで買うべきですが
    ケチって自力で勉強しようとしてます
    MAX10 本体とJTAG基盤
    中に入っていた基盤は写真の通り
    特に左のJTAG基盤は パッケージに「お買い上げ後すぐに使えます」
    と書いてあったが そうでもなくいろいろ準備が必要 こちらを参照

    GALAXY S22 Ultra

    ようやくの新作 Galaxy S22は Noteシリーズとの統合したか

    Galaxy Note 10+ を 2年ほど使い やはり Sペンの使い心地に惹かれ
    新しい Galaxy Noteの登場を期待してたのですが 新作は出ず

    ペンの使える新作を待っている間も Note 10+の有機ELは
    表示不可領域ができたり 若干発色が黄色っぽくなったり
    有機ELの弱点である寿命の弱さを露呈してきてる状態でした

    そのうち 2022年4月 ようやく Galaxy S22 Ultra を購入しました
    Galaxy S22 Ultra 購入品
    S22 Ultraはペンが搭載され これが実質 Galaxy Noteの後継です
    (そして Noteシリーズは今後もう出ないのかもしれません)

    買ってみてまず感じたのは まず値段が高い 18万円近くする
    Galaxyシリーズの新作を買うのはもう限界かも
    ペン付を狙うなら iPadしか選択肢がない

    次に SDカードスロットがなくなっていることに気付いた
    本体に 256GBフラッシュがあり支障はないですが
    Androidの利点がまたひとつ失われた喪失感は
    ワンセグフルセグがなくなってしまった時を思い出させます

    写真には 同時に買ったフィルムシートと
    ClearViewカバーは Note 10の時も買って気に入ったので
    今回も買いました
    Galaxy S22 Ultra 本体
    梱包物も シンプルな操作マニュアルと USB Type-Cケーブル
    必要最低限のものだけ という感じです

    Type-Cケーブルは Note 10からのデータ移行に便利でした
    Galaxyシリーズには Smart Switch というツールが使え
    旧端末から データ アプリ をそのまま持ってきてくれます
    Galaxy S22 Ultra 設定直後
    セットアップ直後のイメージです
    写真だと分かりづらいですが 端末の色は バーガンディという
    赤っぽい茶色 カバーに完全に隠れるので分かりません

    CPUは Snapdragon8 で
    2.99GHzが1コア 2.4GHzが3コア 1.7GHzが4コア
    の構成 発熱がすごいらしいですが
    よほど重いゲームしない限りは 熱くならない感じでした

    auですが 5Gのアンテナはたまにしか立たない程度
    5Gのエリア構築ってそんなに大変なのか

    ドローン関連

    ドローンを扱います

    ドローン関連パーツ

    ドローンを作れないかと思い 関連パーツを購入しました
    ドローンパーツセット
    左上は 可変スイッチング電源のキット マイコン駆動用の定電圧を作るため
    左下は 12V13Aまで出力できるスイッチング電源 モータ駆動用の電源
    中央上は ブラシレスDCモータ プロペラの動力
    中央は ラズパイ用カメラ 空撮用
    中央下は ESCと呼ばれ 4モータを駆動するためのコントローラ
    右は プロペラ
    ESC片面
    ESCは 中華製のものを Amazonで購入 ただし資料がまったくなく調査中
    60Aといった大電流で 4つのモータををドライブできる パワフル仕様
    しかも 2600円程度とお手頃な値段です
    コネクタのピンアサインを調査する必要あります
    ESC反対面
    こちらはその裏面 載ってるチップを調べたところ ドローンによく使われている構成
    MCUに SiliconLab製 EFM8BB21F16G で 50MHzで駆動する 8bitマイコン
    MOSFETドライバは FortiaTech製 FD6288Q
    モータ用に 12Vと マイコン用に 3.3V の電源が必要なことは調査済