!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; }