!doctitle{!defabbr("Neknaj Circuit Game"){NCG}}->align("center")$
本稿は、学校の課題研究纏めとして作成したものをnml形式で再構成したものです
!description{This research introduces a specialized domain-specific language (DSL) for designing and simulating digital circuits entirely through text-based notation. The approach not only simplifies circuit modifications and testing but also shows promise in educational contexts, despite some challenges in generating new designs using language models.}$
>>> !title{Abstract}$
This research introduces a specialized domain-specific language (DSL) for designing and simulating digital circuits entirely through text-based notation. The approach not only simplifies circuit modifications and testing but also shows promise in educational contexts, despite some challenges in generating new designs using language models.
>>> !title{研究背景・基礎知識}$
現在、いくつかのフリーの論理回路シミュレータが存在するが、ほとんどはGUIを用いて操作されるものである。テキストデータとして回路を扱える有名なツールは存在しないが、プログラミング言語のような形式で回路を記述できれば、編集の容易さや他ツールとの統合が飛躍的に向上する。さらに、近年の大規模言語モデル(LLM)の発展や、テキストデータを扱うための専門ソフトウェアの普及により、その有用性はますます高まっている。
ハードウェア記述言語(HDL)はテキストによる回路記述の一例であるが、主に実用的な大規模回路を対象としているため、教育用途や小規模回路の設計には適していない。一方、他の分野では、Mermaidがテキストから図を生成し、LaTeXが高品質な組版文書を作成するなど、テキストベースの記述による明確性、再現性、そして共同作業の向上が実現されている。
>>> !title{研究目的・意義}$
本研究の主たる目的は、論理回路の設計およびシミュレーションをテキストベースで行う効果を検証することである。特に学習初期で扱うような小規模回路に焦点を当てることで、回路設計の簡素化と利便性の向上を目指すとともに、論理回路の記述およびテストのための堅牢なツールを提供することを目指す。
本研究の意義は、既存のGUI中心の論理回路シミュレータとは異なる新たなアプローチを提示し、デジタル回路設計における新たな展開を促す点にある。
テキストによる設計手法は、迅速なプロトタイピングや容易なバージョン管理を可能にし、開発者間の協働作業を促進する。また、最新の大規模言語モデル(LLM)の進展を活用することで、回路設計支援の新たな可能性を切り開き、教育的ツールとしても実用的な設計手法としても今後の発展が期待される。
>>> !title{研究方法}$
本研究では、論理回路記述のための独自ドメイン固有言語(DSL)と、それに付随する開発ツールを設計・実装した。
評価は、人間のユーザーフィードバックおよびLLMを用いた検証の両面から行った。
設計において重視した点は以下の通りである
- 入出力関係の記述に特化: 論理回路同士の関係のみを記述し、物理的な位置やレイアウトの指定を省略する。
- モジュール化: 繰り返し現れる回路を、簡便に記述する。
- NORゲートへの帰着: 全回路をNORのみで構成することで、論理完全性の確認とシミュレーション仮想マシンの簡素化を図る。
- トランスパイル機能: 回路記述を既存のプログラミング言語に変換し、大規模回路の検証を容易にする。
- テスト記述機能: 回路に期待する挙動をテストケースとして記述可能にする。
- Webデバッグツール: WebアプリとしてGUIのデバッガを提供する。
- テキストエディタ連携: 既存のテキストエディタとの統合を考慮した設計にする。
LLMを回路設計の補助として用いる試みとして、既存コードの解説、既存コードの改良、新規コードの作成の観点から評価を行った。
>>> !title{結果・考察}$
結果として、DSLを用いたアプローチは、論理回路の設計および実装を実現できた。本研究は、テキストベースの回路記述が従来のGUIベースシミュレータに対して、編集の柔軟性や他ツールとの連携という点で優位性を持つことを実証している。
初期ユーザーからのフィードバックとしては、私が過去に開発した論理回路シミュレータと比べてモジュールの使いまわしが格段にしやすくなった、テスト機能がそこそこ便利である等の意見を頂いた。
LLMによる支援については、既存コードの解説、既存コードの改良については問題なく行えた。新規コードの作成は各種エラーを起こして実用に耐えるには至らなかった。
>>> !title{結論及び今後の展望}$
本研究では、論理回路の設計およびシミュレーションに特化したDSLを開発し、その有効性を確認した。
GUIベースのシミュレータに対するユーザーフレンドリーな代替手段を提供するとともに、今後の改良に向けた堅実な基盤を築いている。
今後は、DSLの機能拡張、シミュレーション速度の向上、そしてFPGAなどによるハードウェア実装に注力する予定である。
またLLMによる補助についても、今後のLLM技術の進展とともに、サンプルコードの充実などによって信頼性や実用性が高まると期待される。
>>> !title{Github Repository}$
本研究で作成したソースコードは以下で閲覧することができる。前者が作成したDSL、後者がこのDSLを用いた回路の実装例である。
!link("https://github.com/neknaj/circuitgame"){Github neknaj/circuitgame}
!link("https://github.com/neknaj/cpu-circuitgame"){Github neknaj/cpu-circuitgame}
>>> !title{コード例}$
DSLによって記述した回路の例
>>$ code
<<= func hAddr (x y)->(c s) {
c: and <- x y;
s: xor <- x y;
}
func fAddr (x y z)->(c s2) {
c1 s1: hAddr <- x y ;
c2 s2: hAddr <- s1 z ;
c : or <- c1 c2;
}
module sr_latch (s r)->(q nq) {
q: nor <- r nq;
nq: nor <- s q;
}
LLMによって上記ソースコードにコメントを付けた例 (hAddrのみ)
>>$ code
<<= // 機能: hAddr (半加算器)
func hAddr (x y)->(c s) {
// xとyのAND演算でキャリー出力を計算する
c: and <- x y;
// xとyのXOR演算でサム出力を計算する
s: xor <- x y;
}