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/ のディレクトリが作られ 一式インストールされます

MAX10-FB で Lチカ

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

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

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

本格的な IDE風の GUIです
Quartus Prime 起動画面
他の IDEと同じく開発物は プロジェクト単位で管理します
メニュー File – New Project Wizard から新規プロジェクトを作成します
プロジェクトは ホーム直下に QuartusPrime ディレクトリを作り
そこにプロジェクト毎のディレクトリを作るようにしました
Quartus Prime Lチカプロジェクト作成
空のプロジェクトを作ったので 必要な設定を行います
ターゲットデバイスが MAX10で シミュレータが ModelSim であることを設定します

メニュー Assignments – Device にてターゲットデバイスを指定します
Family にて MAX10 を指定して Available device にて
今回の MAX10-FBに載っているチップ 10M08SAE144C8G を選択します

なお Boardタブを見ても MAX10-FBのボードは登録されてないようです
ピンアサインなどはこの後 手動で指定するので問題ないです
Quartus Prime ターゲットデバイス指定
次に開発ツールの設定に入りますが その前に
Tools – Options の Generalにある EDA Tool Options にて
ModelSimの実行プログラム置き場所を設定しておきます
Quartus Prime OptionsのEDA Tool Options設定
メニュー Assignments – Settings の EDA Tool Settings で
EDA(半導体設計支援) 関連の設定をしていきます

まず Design Entry/Synthesis にてコンパイラを指定します
とりあえず?的に Precision Synthesis を指定
Quartus Prime EDA DesignEntry Synthesis設定
次に Simulation にてシミュレータを指定します
先ほどインストールした ModelSim を選択します
Format for output netlist には回路記述言語を指定しますが
ここでは Verilog-HDL を使うことにします
Quartus Prime EDA Simulation設定
それでは準備が整ったので 回路を記述していきます
今回は Verilog-HDL のみ使い 高位合成は使いません

Verilog-HDLのソースファイルをプロジェクトへ追加します
拡張子は .v なお関連する拡張子は次の種類があります
(こちらで 把握できた分なので 全てを網羅していません)

拡張子
.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 で一旦ファイル名を変えます
Lchika1.v としました
また その際 Add file to current project へチェックを入れておきます

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

`define COUNT_MS 4000000

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

 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;
     cnt_clock <= 1;
   end else begin
     cnt_clock <= 0;
   end
 end

 always@(button) begin
   cnt_user <= button;
 end

 always@(negedge (~cnt_user || cnt_clock)) begin
   led_counter <= led_counter + 3'd1;
 end

 assign led = led_counter;

endmodule

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

動作としては
clock もしくは button の変化をトリガとして
led値をインクリメントすることで LEDを 8色順番に光らせます
clock は 400万カウント(約0.1秒)後にトリガを出します

これを一度コンパイルしてみます
メニューの 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 の Test Benches... ボタンを押します

テストベンチが登録できる画面で 次の図のように登録します
まず 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 を選択します (高機能版は 有償かもしれないため)

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

    コンポーネント
    On-Chip Memory RAMに相当 デフォルトの4KBで また MAX10の場合は memory initialization機能が使えないためこのチェックを外す必要があった
    On-Chip Flash ROMに相当 ファームウェアを格納する Confiurationは Sigle Uncompressed Imageを選択 また Initialize flash contentはチェックを外す
    Serial JTAG UART JTAG外部接続機能 irqを Nios IIの irqへ結線する必要あり
    PIO メモリマップド可能なパラレルポート 今回は LEDの3色へ接続するため 3bitを指定 また External connectionピンをLEDへ結線するため Export蘭に識別名をつける

    で 次のようになります 各コンポーネント共通で設定が必要なのは
    clk と reset ピンを Nios IIの clk と resetへ結線すること
    data や csr や s1 ピンを Nios IIの instruction_master や data_master
    へ結線すること
    Quartus Prime Platform NiosIIコンテンツ設定
    instruction_master や data_master の設定は
    Message欄のエラーが消えるまで 設定を調整する必要あります

    Address Mapタブの アドレスマップの割り当てを
    各機能が被らないように アドレスを手作業で設定します
    Quartus Prime Platform NiosIIコンテンツ設定
    また Nios IIの設定を開きなおして Vectors の設定を行います
    Reset Vector や Exception Vectorには メモリを指定します
    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 は閉じて
    元のプロジェクトのトップデザインへ貼り付けます
    なお引数には トップモジュール側のワイヤを指定します
    Quartus Prime Platform Platform Designerの取り込み1
    後述しますが JTAG用のピン tck, tdl, tdo, tms を割り当てています

    \
    さらに 生成した Nios IIとしての .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 へ繋げています

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

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

    メニュー Tools - Nios II Software Build Tools for Eclipse
    (SBT) が提供する Eclipse開発環境 (Nios II EDS) を使います

    ただ このメニューが起動するには 次の環境構築が必要です
    (手元の環境 Ubuntu-22.4 + OpenJDK-17 にて確認)

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

    $ 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
    へリネームしておきます

    さらに次のコマンドで eclipse_nios2/ 内へ上書きする
    形で Eclipseプラグインを追加します

    $ tar -xzf eclipse_nios2_plugins.tar.gz
    $
    

    Quartus Primeに含まれていて導入された JAVA
    quartus/linux64/jre64/ はうまく動作しなかったため
    これは削除して OSの最新 JAVA (openjdk-17-jdk)
    を利用するように設定変更します

    $ rm -r ~/intelFPGA_lite/22.1std/quartus/linux64/jre64
    $ ln -s /usr/lib/jvm/java-17-openjdk-amd64 jre64
    $
    

    Eclipseの起動オプションも変更を加える必要あります
    古い JAVA向けのもので Eclipseが起動しないため
    ~/intelFPGA_lite/22.1std/nios2eds/bin/eclipse_nios2/eclipse.ini
    を次のように編集します

    ~
    --launcher.appendVmargs
    -vmargs
    --add-opens=java.base/java.net=ALL-UNNAMED
    -Dosgi.requiredJavaVersion=1.7
    #-XX:MaxPermSize=256m
    -Xms256m
    -Xmx1024m
    -Dosgi.configuration.cascaded=true
    -Dosgi.instance.area.default=@user.home/sbt4e-22.1-workspace
    ~
    

    --add-opens=java.base/java.net=ALL-UNNAMED
    のオプションを追加して
    -XX:MaxPermSize=256m
    のオプションを外す必要がありました

    
    


    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 の電源が必要なことは調査済