2026-09-27

週次オープンソース:reticle、本物の FPGA まで届く HDL ツールチェーン

今週の新プロジェクトはハードウェア記述言語のツールチェーン reticle で、週の終わりには本物の FPGA を構成していた。同じ日に 始まった依存ゼロの USB ライブラリ rawusb が、JTAG ケーブルへの 道を与える。CatCard はウォレット機能を足し続け、JavaScript SDK とブラウザのマネージャを得た。pktkit は一日をレビューに費やし、 約 470 コミットを生んだ。rsasm はプログラム全体のリンクを始めて 最初のリリースを出し、rsemu は Macintosh に進んだ。

reticle:Verilog と VHDL を、ビットストリームまで

reticle は「Rust で ゼロから書いた VHDL / Verilog コンパイラで、外部コードもサード パーティのクレートもない」もので、自己完結した一つのハードウェア ツールチェーンに育つことを目指している。最初の一週間(約 310 コミット)でパイプラインの大半を作った:

  • フロントエンド:Verilog / 合成可能な SystemVerilog(28 ルール のリンタとフォーマッタ付き)と VHDL-2008。どちらも往復可能な テキスト形式を持つ一つの IR に下ろす。
  • 形式検証と合成。 CDCL SAT ソルバ、ビットブラスタ、有界モデル 検査、k-induction、等価性検査。プロセスの下ろし、フリップ フロップ/メモリ/FSM の推論、AIG オプティマイザ、LUT と スタンダードセルへのマッピング、合成後の等価性検査。
  • シミュレーション、タイミング、IP。 並行アサーション(SVA と PSL のサブセット)付きのイベント駆動シミュレータ、対話セッション、 静的タイミング解析とクロックドメイン交差の解析。USB フルスピード デバイス、DVI 送信器、SDRAM コントローラを備えた IP ライブラリ、 そして C API と WebAssembly ビルド。
  • 本物のハードウェア。 reticle は Project X-Ray のデータベース から 7 シリーズのファブリックを読み、.bit を書き、「JTAG 越しに 7 シリーズ FPGA を構成する」ことができる。Gowin GW2A の ビットストリームを書いてロードすることも、Cynthion の Apollo デバッガ経由で Lattice ECP5 を書き込むこともできる。コミットには、 クロック付きの設計を実際のチップにロードしたことと、Cynthion の AUX ポートに USB デバイスを作ったことが記録されている。例題には 6502 コンピュータ、Basys 3 にマップした Apple II、IP ライブラリ から作った NES 互換機がある。

唯一の依存はオプションだ。ボードを構成するには USB を話す必要が あるので、program フィーチャが今週の新顔 rawusb を引き込む: 「libusb の精神での、依存ゼロ・クロスプラットフォームな Rust の USB デバイスアクセス」。Linux の usbfs、Windows の WinUSB、macOS の IOKit と直接話し、ホットプラグ、アイソクロナス転送、そして HID、マス ストレージ、CDC-ACM/FTDI シリアル、UVC ビデオ、USB Ethernet の クラスヘルパを備える。Ethernet のヘルパは pktkit とつながる。週の うちに v0.1.1 から v0.1.4 まで進んだ。

CatCard:セキュリティキー、HSM モード、ブラウザからの入口

CatCard はこれまでで 最も忙しい週で、約 470 コミットだった。大半は純正 Coldcard ファームウェアに合わせる機能だ:ckcc プロトコル越しの HSM モードと Single-Signer Spending Policy エンジン、Key Teleport(純正のワイヤ 形式)、トリック PIN、Seed XOR、BIP-322 のメッセージ署名と proof-of-reserves、PSBT v2(BIP-370)、TOTP 付きの Secure Notes、 Verify Backup 付きのバックアップ。純正を越えるものもある。デバイスは パスキー対応の FIDO セキュリティキーとして振る舞えるようになった。 EVM と Solana のトランザクションはカードとして並べて表示し、Solana では「表示した範囲を越えて署名しない」。チェーンの選択肢に Namecoin が加わった。 NFC ではアドレスを共有したり、トランザクションを受け取ったりできる。 タグを push すると .dfu イメージ付きの GitHub リリースが公開される。

関連プロジェクトが二つ始まった:

  • catcard-sdk は、 エアギャップの CatCard を「普通のブラウザウォレットのように」使える ようにする JavaScript SDK だ。EVM には EIP-1193 / EIP-6963 の プロバイダ、Solana には Wallet Standard のウォレット、Tron には TIP-1193、Bitcoin には Wallet Standard と sats-connect を提供する。 要求と応答はアニメーションする BBQr または BC-UR の QR コードで 運ばれ、SDK は返ってきた署名をすべて期待するアカウントと照合する。
  • catcard-mgr は サーバなしの WebHID のページで、CatCard や純正 Coldcard を識別し、 Coldcard を CatCard に切り替え、ファームウェアを入れたり更新したり し、Coinkite の署名付きファームウェアに戻すこともできる。弱い シード生成器を持つファームウェアの Coldcard には「大きく」警告を 出す。六桁のコードでペアリングした後は、アドレスを取得し、PSBT や Ethereum、Solana のトランザクションを署名に送れる。

pktkit:一日でのレビュー

仮想ネットワークトポロジ用のゼロコピー L2/L3 ツールキット pktkit は、日曜日 だけで約 470 コミットを積んだ。そのうち 400 以上が修正だ。レビュー はモジュールごとに進んだ:TCP エンジン(vtcp)、WireGuard、 OpenVPN サーバ、NAT/NAT64 とその ALG、UPnP、slirp、DHCP、ARP/NDP、 高水準の仮想クライアント。典型的な行は「SYN フラッドには cookie で 答える」「リプレイウィンドウはパケットが認証されてから更新する」 「サーバ、ルータ、ネットワーク、ブロードキャストのアドレスは決して リースしない」。その途中で機能もいくつか入った:「トンネルが鍵を 更新し、上がったままでいるように」する WireGuard のプロトコル タイマ、OpenVPN のデータ暗号の交渉とソフトリセットによる鍵更新、 デフォルトで有効な SACK ベースの損失回復、そして wasm32-unknown-unknown と wasm32-wasip1 向けのビルド(リリースは v0.1.5 から v0.1.7)。

rsasm:プログラム全体のリンク、そしてリリース

rsasm は最初のリリース v0.1.1 から v0.1.3 を出した。新しい tools/link-diff ハーネスは、 複数オブジェクトに分かれたプログラムを二度——リファレンスの アセンブラで一度、rsasm で一度——アセンブルし、両方を同じ GNU ld で リンクして、イメージとシンボルテーブルを比べる。今では x86、ARM、 RISC-V、PowerPC、MIPS、SPARC、m68k、SuperH、RX、RL78、MSP430、 V850、AVR、PE/COFF をカバーする。その作業に伴い、リンカが期待する ターゲット固有のセクション(.ARM.attributes、.riscv.attributes、 .MIPS.abiflags、V850 の .note.renesas)と、届かない分岐先に 対する RISC-V の分岐の拡幅が入った。

rsemu:Macintosh と大型 Amiga

rsemu は Macintosh Plus を加えた:VIA、Apple の 6-and-2 GCR ディスクを読み書きする IWM、 クロックチップとそのパラメータ RAM、キーボード、マウス、サウンド、 NCR 5380 の SCSI ポート。続いて ADB、SWIM、1.44 MB の MFM ディスクを 備えた Macintosh Classic。Amiga 側では A3000(Super DMAC と WD33C93A SCSI)、A4000(AGA と IDE を備えた 68040)、そして SCRIPTS プロセッサを持つ NCR 53C710 から Workbench 3.1 を起動する A4000T。 68040 は MMU と FPU とともに入った。68000 の整数コアは変換 IR に 持ち上げられるようになった。モニタコンソールでは、動作中のマシンの メディアを交換できる。

今週その他

  • oxideav-heif は v0.0.2 から v0.0.4 へ:HEVC と非可逆 AV1 の静止画エンコード、HDR とトーンマップのボックス、AVC とレイヤード HEVC のアイテム、アルファ 付きシーケンス、低オーバーヘッドの mini ファイル、グリッドタイル の並列デコード。workspace のまとめには、実際のファイルで HEIF がエンドツーエンドに動き、 その出力を Apple ImageIO、libheif、ImageMagick がバイト単位で同じ ようにデコードすることが記録されている。oxideav の AVIF と MOV の コードは今やこれを経由する。
  • purecrypto は ファームウェアのサイズのために、大きな事前計算テーブル (edwards25519、P-256、Streebog、Whirlpool)をオプションにした。 x86-64 と aarch64 向けの Valgrind memcheck による定数時間ハーネス も加えた(v0.9.2 から v0.9.4)。
  • rsurl は HTTP/2、 HTTP/3、FTP、SMTP、IMAP、WebSocket、クッキー、libcurl ABI に わたって、curl 互換とフェイルクローズの一巡を経た。SSH は curl と 同じく、未知のホスト鍵をデフォルトで拒否するようになった。
  • システムコールをエミュレートする Linux サンドボックス nixvm は、pktkit の TCP/IP スタックを使った WebSocket の IP トンネルで、ブラウザデモに ゲストのネットワークを得た。arm64 のゲストは HTTPS 越しに apk update を実行できるようになり、v0.0.1 をリリースした。
  • rustygo はゴルーチン、 チャネル、select、続いてリフレクション、ファイル層、fmt を 加えた(v0.0.2)。

来週

reticle には、実機で確かめるべき FPGA フローの残りと、立ち上げる べきさらなるデバイスファミリがある。rawusb は最初の実ユーザを得る。 CatCard は純正との差を詰め続け、catcard-sdk と catcard-mgr には 試してくれるユーザが要る。rsasm は完成したプログラムを自ら出力する ところへ近づき、rsemu はマシンを足し続ける。