<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>森羅万象プロジェクト</title><link>https://shinrabansyo.github.io/</link><description>Recent content on 森羅万象プロジェクト</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://shinrabansyo.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>森羅万象プロジェクトができるまで、、。</title><link>https://shinrabansyo.github.io/blog/2025/06/01/99-01_%E6%A3%AE%E7%BE%85%E4%B8%87%E8%B1%A1%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%BE%E3%81%A7/</link><pubDate>Sun, 01 Jun 2025 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/2025/06/01/99-01_%E6%A3%AE%E7%BE%85%E4%B8%87%E8%B1%A1%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%BE%E3%81%A7/</guid><description>&lt;h3 id="はじめに"&gt;はじめに&lt;a class="td-heading-self-link" href="#%e3%81%af%e3%81%98%e3%82%81%e3%81%ab" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Chapter99では直接開発と関係しませんが、ウラ話や小ネタを提供していきます！！&lt;br&gt;
今回は、&lt;a href="https://www.ipa.go.jp/jinzai/security-camp/2023/zenkoku/index.html"&gt;セキュリティキャンプ'23&lt;/a&gt;を振り返りながら、&lt;br&gt;
森羅万象プロジェクトがどのようにして生まれたのかをお伝えできたらと思います！！&lt;br&gt;
★特にseccamp'24に参加する皆様、キャンプの雰囲気やGWの参考になれば幸いです！！（が、少々ネタバレかもしれません！）&lt;/p&gt;
&lt;h3 id="登場人物"&gt;登場人物&lt;a class="td-heading-self-link" href="#%e7%99%bb%e5%a0%b4%e4%ba%ba%e7%89%a9" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一応、&lt;a href="https://github.com/shinrabansyo/tech-blog/blob/main/Articles/00-%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB/00-01_%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B.md"&gt;前に記事にしている&lt;/a&gt;ので、よければどおぞ。&lt;/p&gt;
&lt;p&gt;ア：Astalisks（Y3『故障を乗り越えて動くシステムのための分散合意ゼミ』、記事書いた人。だから基本（ア）視点。）&lt;br&gt;
キ：Kyuta（Y4『CPU+コンパイラ自作ゼミ』）&lt;br&gt;
シ：shinbunbun（Y3『故障を乗り越えて動くシステムのための分散合意ゼミ』）&lt;br&gt;
ユ：yn0014（Y2『RISC-V CPU自作ゼミ』）&lt;br&gt;
ワ：wakuto（Y2『RISC-V CPU自作ゼミ』）&lt;br&gt;
※なお、「ア」以外のセリフはいい感じにしゃべらせているだけなので、&lt;strong&gt;実際の会話とは異なります&lt;/strong&gt;。なんなら捏造しているかも、、。&lt;/p&gt;
&lt;p&gt;ゆ：uchanさん（seccamp'23のグループワーク担当。Y4の先生。）&lt;/p&gt;
&lt;p&gt;（&amp;lsquo;24はWXYZの区切りでなく、Sで統一されているはずです！）&lt;/p&gt;
&lt;h1 id="1グループワーク何をしよう"&gt;1.グループワーク～何をしよう、、。&lt;a class="td-heading-self-link" href="#1%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e3%83%af%e3%83%bc%e3%82%af%e4%bd%95%e3%82%92%e3%81%97%e3%82%88%e3%81%86" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;（あらすじ：seccamp'23は5日間、1日目と4日目に1hずつグループワークがありました。）&lt;/p&gt;
&lt;p&gt;ゆ：「グループで、セキュリティに関する、長期的な活動を何か考え、5日目に発表してくださーい。」&lt;/p&gt;
&lt;p&gt;ア：「よろしくおねがいしまぁす。てことはぶっちゃけなんでも良さそうですね。どうきめていきましょ。」&lt;/p&gt;
&lt;p&gt;ワ：「まずはよく出るアイデアとして、CTFですかね。ここにいる人だと結構いいとこまでイケそうですよね。」&lt;br&gt;
ア：（たしかに。名刺交換の時に話した人の中に自分で日本2位って言ってた人いたし、、。このメンバーでやったら強そう。）&lt;/p&gt;
&lt;p&gt;キ：「毎週LT会とかもよく聞きますね。5人だと実質月1発表ペースですし。」&lt;br&gt;
ア：（ふむふむ。みんなしゅごい人だから面白い話が聞けそう。）&lt;/p&gt;
&lt;p&gt;シ：「同人誌を書くのもあるあるですね。出し方はわかりますよ。」&lt;br&gt;
ア：（&lt;a href="https://techbookfest.org/market"&gt;技術書典&lt;/a&gt;に出すのかな。というか出したことあるのしゅげぇ。）&lt;/p&gt;
&lt;p&gt;ユ：「Tech記事とかもありですね。&lt;a href="https://qiita.com/"&gt;Qiita&lt;/a&gt;とか&lt;a href="https://zenn.dev/"&gt;Zenn&lt;/a&gt;とかにあげていく感じの。」&lt;br&gt;
ア：（そのうちプライベートでもあげれるようになりたいな。（と思ってたので、結果的にはこのプロジェクトに良い機会を設けてもらいました。））&lt;/p&gt;
&lt;p&gt;ア：「この辺は確かにすぐ思いつきますね。過去の事例とかでオモロいの知ってる、とかありますか？？」&lt;/p&gt;
&lt;p&gt;シ：「&lt;a href="https://www.rust-lang.org/ja/"&gt;Rust&lt;/a&gt;でWebサーバつくるとかありましたね。言語的にセキュリティ高めなのでよいかも。」&lt;br&gt;
キ：「CTFで攻撃したら代わりの置き土産的なのを置いて行って、互いに攻撃しあうのも面白いし続きそう。」&lt;br&gt;
ワ：「OSS開発に参加するとかもありますね。最終的には自分たちで開発とか？」&lt;br&gt;
ユ：「RPGを作ってセキュリティについて勉強できるものとか楽しいと思いますね。」&lt;br&gt;
ア：（おぉ、どれも気になる。でもこういう取り組みはスペシャリストがいて成り立つもんだから、私はきつそう、、？）&lt;/p&gt;
&lt;p&gt;ア：「ちなみに、なにしてみたいとかってありますか？個人的にはグループ作ってブログがおもろそうって感じなんすけど、、。」&lt;/p&gt;
&lt;p&gt;シ：「オリジナルのアプリとかWebサイトとか作ってみたいですね。それこそ記事をホストするような。」&lt;br&gt;
ア：（なるほど。やったことない（←当時大学4年なのに）ので良い勉強になりそうやな。詳しい人がいるのはありがたい。）&lt;/p&gt;
&lt;p&gt;ユ：「得意なのは割とレイヤーが低いところですね。それこそOSとか5人で作ってみても良さそう。」&lt;br&gt;
ア：（お、おぉ、。OSって作れるんだ。確かにゼミでLEDがチカチカしていた記憶はあったけど、キャンプ前にやってたんか、、？）&lt;/p&gt;
&lt;p&gt;キ：「せっかくCPUのゼミに参加したから、それを使えると嬉しいかも。はんだ付けとかの経験も活かせますね。」&lt;br&gt;
ア：（O, Oh&amp;hellip; CPUをつくる、かぁ。C言語とかで電話作れるって聞いたことあるし、CPUもC言語で作るのかな、、？（←答えは次章で））&lt;/p&gt;
&lt;p&gt;ワ：「じゃぁ、CPUもOSもアプリも自作していく活動にしませんか？」&lt;/p&gt;
&lt;p&gt;ア：（！？それはきびしくないか？どれかだけでも一からは開発したことないのに、、。）&lt;br&gt;
シ：「いいっすね！！オリジナリティとしてはピカイチだろうし！」&lt;br&gt;
ユ：「CPUとかOSの構造を知ることはセキュリティについての周辺知識を知るようなものですしね！！」&lt;br&gt;
キ：「せっかくCPUゼミ、OSゼミ、分散システム（Webサーバ系？）ゼミの人がいるんだし！！！」&lt;br&gt;
ア：（！？！？みんなやる気かい、、。）&lt;/p&gt;
&lt;p&gt;ゆ：「ちょっと話聞いてたけどおもしろそうですね。私はもれなく賛成です！・・・みんな賛成そうですが「ア」さんどうします？」&lt;/p&gt;
&lt;p&gt;ア：「じ、じゃあ決まりですね、全部自作！ということで！」&lt;/p&gt;
&lt;p&gt;ーーーーーというかんじで、森羅万象（をつくる）プロジェクトがはじまりました。&lt;/p&gt;
&lt;p&gt;　　　　　正直私（ア）は内心かなり反対でした、、。遠くから見てるか蒸発する未来しか見えなくて。&lt;br&gt;
　　　　　でもこのとき、私以外の4人の目がキラキラしていて、みんな本気なんだなぁっておもいまして、、。&lt;br&gt;
　　　　　今思えば、あのとき「もう少しハードル下げて現実的なものを」って提案しなくてよかったなぁって感じました。&lt;/p&gt;
&lt;p&gt;　　　　　ということで、もしseccampのグループワークでは、割と攻めた目標を立ててガンバってみるのもありかもしれませんね。&lt;/p&gt;
&lt;h1 id="2gwから1週間後どんなcpuにしよう"&gt;2.GWから1週間後～どんなCPUにしよう、、。&lt;a class="td-heading-self-link" href="#2gw%e3%81%8b%e3%82%891%e9%80%b1%e9%96%93%e5%be%8c%e3%81%a9%e3%82%93%e3%81%aacpu%e3%81%ab%e3%81%97%e3%82%88%e3%81%86" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;（あらすじ・・・&lt;br&gt;
ゆ：「ただGWやってもつまらないと思うので、&lt;a href="https://www.ipa.go.jp/jinzai/security-camp/2023/next/program_list.html"&gt;（23年の）ネクストキャンプ&lt;/a&gt;でやったTDD＋モブプロ形式はどうでしょう？」&lt;/p&gt;
&lt;p&gt;ということで、TDD（テスト駆動開発）かつモブプログラミング形式で開発することが決まりました。）&lt;/p&gt;
&lt;p&gt;★TDD（テスト駆動開発）・・・プログラムを一から書くとき、先に「このテストを満たすようにしたい！」っていうのを先に用意する手法。&lt;br&gt;
（GPTに聞いたのを書き換えただけですが）単に足し算でも、、、&lt;/p&gt;</description></item><item><title>CPU自作の準備</title><link>https://shinrabansyo.github.io/blog/2023/12/01/01-01_cpu%E8%87%AA%E4%BD%9C%E3%81%AE%E6%BA%96%E5%82%99/</link><pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/2023/12/01/01-01_cpu%E8%87%AA%E4%BD%9C%E3%81%AE%E6%BA%96%E5%82%99/</guid><description>&lt;p&gt;最終更新：2024/05/07：metalsメインから公式sbtメインの選択肢を追加&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;今回は、「CPUを自作するための基盤」を用意していきます。&lt;br&gt;
&lt;strong&gt;1.CPUって一人でつくれるの！？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2.出てくる用語を簡単に解説&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3.今回のCPUづくりにつかうもの&lt;/strong&gt;&lt;br&gt;
について話していきます。&lt;/p&gt;
&lt;h1 id="1cpuって一人で作れるの"&gt;1.CPUって一人で作れるの！？&lt;a class="td-heading-self-link" href="#1cpu%e3%81%a3%e3%81%a6%e4%b8%80%e4%ba%ba%e3%81%a7%e4%bd%9c%e3%82%8c%e3%82%8b%e3%81%ae" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CPUってどんな部品なのかと言われたら、「○○装置とついている中の、演算装置・記憶装置」　「3が一番弱くて、5、7、9がつくと強くなる」 「製造プロセス(nm)が小さいほど性能が良くなる」などと答える人が多いのではないでしょうか。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;筆者も作り始める前は、「どのような命令を読み取ってどのように処理するんだろう」　「めっちゃ細い銅線と半導体、NAND回路をいい感じに組めたらおk？」　「裏でポインタとかメモリアドレスをいい感じに振り分けてくれてるんだろうなぁ」　なんて思っていました。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;実際、CPUはいい感じの回路が組めて、命令を読み取って、演算・記憶できるものが市販されているのでしょう。（じゃないと売れないですもんね。）でも、ネットを見たり、ゲームをしたりできるような命令や演算ができるものを個人で制作するのは至難の業です。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ただ、仮に必要最低限のCPUをつくった(つくれる)のならば、市販されているCPUはその拡張や応用でつくられていると思えるようになるかもしれません。また、もしあなたがC言語やC++、Go言語やRustといったプログラミング言語を勉強する機会があれば、つまずく人の多いポインタやアドレスの原理が理解しやすくなるかもしれません（これは個人的な体験談ですが）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;まあ、とにかく、ダマされたと思って始めてみませんか？&lt;/strong&gt; 筆者もよくわからないままつくり始めて、なんとかなっているので、、、&lt;/p&gt;
&lt;h1 id="2出てくる用語を簡単に解説"&gt;2.出てくる用語を簡単に解説&lt;a class="td-heading-self-link" href="#2%e5%87%ba%e3%81%a6%e3%81%8f%e3%82%8b%e7%94%a8%e8%aa%9e%e3%82%92%e7%b0%a1%e5%8d%98%e3%81%ab%e8%a7%a3%e8%aa%ac" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;(筆者調べ≒正確、ではありません、あくまで参考までに。)&lt;/p&gt;
&lt;h3 id="テキストエディタvisual-studio-code"&gt;テキストエディタ：Visual Studio Code&lt;a class="td-heading-self-link" href="#%e3%83%86%e3%82%ad%e3%82%b9%e3%83%88%e3%82%a8%e3%83%87%e3%82%a3%e3%82%bfvisual-studio-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;あくまでもテキストエディタであってIDE(統合開発環境)ではない。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt; のExtension(拡張機能)がつよつよすぎてプログラミングに用いられるようになった。&lt;/li&gt;
&lt;li&gt;ちなみに筆者は無料の↑コレと有料のIDE&lt;a href="https://www.jetbrains.com/"&gt;(Jetbrains製品)&lt;/a&gt;を使ったことがあるが、色々な言語やライブラリを使って学習・開発したいのであればVSCode、特化した言語やフレームワークを使っての開発やお仕事で指定されている開発ではIDEを利用することも割とあるので、どちらも使えるようになって損はないと思っている。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="プログラミング言語java-scala-chisel"&gt;プログラミング言語：Java, Scala, Chisel&lt;a class="td-heading-self-link" href="#%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e8%a8%80%e8%aa%9ejava-scala-chisel" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Javaは王道といってよいほどの知名度、プロダクトがある。大規模開発が得意。&lt;/li&gt;
&lt;li&gt;ScalaはJavaっぽく、良いとこ取りで作られた言語で、データ処理が得意。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.chisel-lang.org/"&gt;Chisel&lt;/a&gt;はScalaの&lt;a href="https://www.jetbrains.com/ja-jp/mps/concepts/domain-specific-languages/"&gt;DSL&lt;/a&gt;で、ハードウェア設計に特化。
&lt;ul&gt;
&lt;li&gt;（このプロジェクトで筆者はScalaとChiselとやらを知った、なんてメンバーには言えない。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="3今回のcpuづくりにつかうもの"&gt;3.今回のCPUづくりにつかうもの&lt;a class="td-heading-self-link" href="#3%e4%bb%8a%e5%9b%9e%e3%81%aecpu%e3%81%a5%e3%81%8f%e3%82%8a%e3%81%ab%e3%81%a4%e3%81%8b%e3%81%86%e3%82%82%e3%81%ae" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;今回は以下のものを使ってCPUを作っていきます。（クッキングみたい。）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;開発環境：&lt;a href="https://code.visualstudio.com/Download"&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Visual Studio Code内で必要なプラグイン：
&lt;ul&gt;
&lt;li&gt;Extension Pack for &lt;a href="https://www.oracle.com/java/technologies/javase-downloads.html"&gt;Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.scala-lang.org/download/"&gt;Scala&lt;/a&gt; (Metals)&lt;/li&gt;
&lt;li&gt;Scala Syntax (official)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;サンプルコード：&lt;a href="https://github.com/Astalisks/CPU_FirstActivityWithShinrabansho"&gt;筆者のGitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="これが動けばok"&gt;これが動けばOK！！&lt;a class="td-heading-self-link" href="#%e3%81%93%e3%82%8c%e3%81%8c%e5%8b%95%e3%81%91%e3%81%b0ok" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://shinrabansyo.github.io/images/docs/01-01/01_goal.gif" alt="ゴール"&gt;&lt;/p&gt;
&lt;p&gt;とりあえず、このディレクトリをgit cloneしてきて、中のJavaプログラム×2とScalaプログラムが動けばOKです。&lt;br&gt;
できる方はどんな手を使ってもよいので、どうぞ。&lt;/p&gt;</description></item><item><title>自己紹介</title><link>https://shinrabansyo.github.io/blog/2023/09/01/00-01_%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B/</link><pubDate>Fri, 01 Sep 2023 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/2023/09/01/00-01_%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B/</guid><description>&lt;p&gt;&lt;strong&gt;こんにちは！森羅万象プロジェクトです！（どーん！！）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;いきなり「森羅万象プロジェクト」と言われても、なにがなんだかわからないと思いますので、&lt;/p&gt;
&lt;p&gt;初回は、&lt;br&gt;
&lt;strong&gt;1.森羅万象プロジェクトとは？？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2.メンバー紹介&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3.結局何をするプロジェクトなの？？&lt;/strong&gt;&lt;br&gt;
を話したいと思います。&lt;/p&gt;
&lt;h1 id="1-森羅万象プロジェクトとは"&gt;1. 森羅万象プロジェクトとは？？&lt;a class="td-heading-self-link" href="#1-%e6%a3%ae%e7%be%85%e4%b8%87%e8%b1%a1%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%a8%e3%81%af" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;・このプロジェクトは「&lt;a href="https://www.ipa.go.jp/jinzai/security-camp/about.html"&gt;セキュリティ・キャンプ全国大会2023&lt;/a&gt;」内のグループワークで、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「なんでもかんでも自分で作れたら最強なのでは！？」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;という一言から生まれたものです。&lt;br&gt;
(確か)森羅万象という名前もそこから来ています。&lt;/p&gt;
&lt;h1 id="2-メンバー紹介"&gt;2. メンバー紹介&lt;a class="td-heading-self-link" href="#2-%e3%83%a1%e3%83%b3%e3%83%90%e3%83%bc%e7%b4%b9%e4%bb%8b" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;(Astalisks個人の主観、セキュリティ・キャンプでの印象を含みます)&lt;br&gt;
(2024/12月現在：6人になりました！！)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Astalisks&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;北海道から東京にきました。&lt;/li&gt;
&lt;li&gt;AI、クラウド、ネットワークを広く浅く勉強したと思ってました。&lt;/li&gt;
&lt;li&gt;CPUやOSを作ろうなんてそれまで思ったこともなかった。&lt;/li&gt;
&lt;li&gt;プロジェクトの復習がてら記事づくりのメイン担当に。&lt;br&gt;
&lt;a href="https://twitter.com/Astalisks_ITEVG"&gt;Xのリンク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Kyuta&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;兵庫から東京にきました。&lt;/li&gt;
&lt;li&gt;トランジスタを使った論理回路の設計を中高校時代はずっとしてました。&lt;/li&gt;
&lt;li&gt;あと能楽もできます。&lt;/li&gt;
&lt;li&gt;キャンプでバス移動の際に寝坊してしまいました(ギリギリ間に合ったのでセーフ、、、？)。&lt;/li&gt;
&lt;li&gt;Twitter はしばらく触ってない間にアカウント無くなってました？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;shinbunbun&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;福島県在住。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://labs.cybozu.co.jp/youth.html"&gt;Cybozu labyouth&lt;/a&gt;、&lt;a href="https://www.line-community.me/ja/apiexpert/request"&gt;LINE API Expert&lt;/a&gt;、Rust愛好家。&lt;/li&gt;
&lt;li&gt;キャンプではバックエンドのみの課題を瞬殺してフロントまで作ってた。(すごい。)&lt;/li&gt;
&lt;li&gt;めっちゃお酒つよい、くわしい。&lt;br&gt;
&lt;a href="https://twitter.com/shinbunbun_"&gt;Xのリンク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;wakuto&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;千葉県在住。&lt;/li&gt;
&lt;li&gt;TEEとかメモリ暗号化エンジンの高速化の研究をしている。&lt;/li&gt;
&lt;li&gt;CPU作れる。最近、新しいハードウェア記述言語のVerylにお熱。&lt;/li&gt;
&lt;li&gt;キャンプのバス時間で質問やお悩み相談をしたら、耳寄りな情報をいくつも教えてくれた。(ありがとう。)&lt;br&gt;
&lt;a href="https://twitter.com/otukaw"&gt;Xのリンク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;yn0014&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;茨城県在住。&lt;/li&gt;
&lt;li&gt;DSL(ドメイン固有言語)の研究をしている。C言語の分かるCPUを開発している。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sechack365.nict.go.jp/"&gt;SecHack365&lt;/a&gt;、&lt;a href="https://www.ipa.go.jp/jinzai/mitou/mitou2023/"&gt;(IPAの)未踏(事業)&lt;/a&gt;、&lt;a href="https://www.ipa.go.jp/shiken/kubun/list.html"&gt;IPAの国家試験&lt;/a&gt;6つも受かってる。&lt;/li&gt;
&lt;li&gt;キャンプでは隣のゼミだったので、遊びに行ったら私が分かるまで細かく説明してくれた。(ありがとう。)&lt;br&gt;
&lt;a href="https://twitter.com/yn0014"&gt;Xのリンク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;koonato&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;京都府在住。&lt;/li&gt;
&lt;li&gt;OSが書ける。キャンプでは&lt;a href="https://github.com/uchan-nos/mikanos"&gt;mikanOS&lt;/a&gt;にネットワークを実装したそう。&lt;/li&gt;
&lt;li&gt;友達から「なんでも屋」と呼ばれるほどなんでもできるらしい。&lt;/li&gt;
&lt;li&gt;いきなりモブプログラミングで私の100倍の速さでRust書いてた。（びっくり。）&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="3結局何をするプロジェクトなの"&gt;3.結局何をするプロジェクトなの？？&lt;a class="td-heading-self-link" href="#3%e7%b5%90%e5%b1%80%e4%bd%95%e3%82%92%e3%81%99%e3%82%8b%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%aa%e3%81%ae" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;我々が立てた目標はズバリ、&lt;br&gt;
&lt;strong&gt;「CPUもOSもアプリも、作れるものは全部自作する！！」&lt;/strong&gt;&lt;br&gt;
です。&lt;/p&gt;
&lt;p&gt;セキュリティキャンプではそれぞれ別のゼミを受講し、別々のものを制作していました。CPUを部品のはんだ付けから作った人もいれば、デバイス間の通信の方法を1から考えたり、あるいはデータを分散させて消滅しないシステムを作った人も、、。&lt;/p&gt;
&lt;p&gt;しかし、グループワークで専門の異なるメンバーが集まると、**得意を活かして創作に貢献できる！　作った経験がなくても先駆者が身近にいる！！**という安心感が個人的にはありました。&lt;/p&gt;
&lt;p&gt;どこまで作れるか、いつまでやるかは分かりませんが、進捗を温かい目で見守っていただけますと幸いです。&lt;br&gt;
将来的には制作したものを誰もが真似して作れるように改良し、マニュアルとしてお届けできたらと考えています！！&lt;/p&gt;
&lt;p&gt;またこのような機会を用意していただける&lt;strong&gt;セキュリティ・キャンプ&lt;/strong&gt;に皆さんもぜひ応募してみてください！！&lt;br&gt;
&lt;a href="https://www.ipa.go.jp/jinzai/security-camp/about.html"&gt;IPAのセキュリティ・キャンプ紹介ページ&lt;/a&gt;&lt;/p&gt;</description></item><item><title>01-02_加算器をつくる</title><link>https://shinrabansyo.github.io/blog/1/01/01/01-02_%E5%8A%A0%E7%AE%97%E5%99%A8%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/1/01/01/01-02_%E5%8A%A0%E7%AE%97%E5%99%A8%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/</guid><description>&lt;p&gt;こんにちは！森羅万象プロジェクトです！&lt;/p&gt;
&lt;p&gt;今回は &lt;strong&gt;足し算だけできるCPU（の一部）&lt;/strong&gt; を作っていきたいと思います。&lt;/p&gt;
&lt;p&gt;（定期宣伝）&lt;br&gt;
ちなみにこの記事は、&lt;br&gt;
&lt;strong&gt;CPUを作ったことのない人の、&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CPUを作ったことのない人による、&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CPUを作ったことのない人のための記事&lt;/strong&gt;&lt;br&gt;
ですので、CPU入門・初心者の筆者と一緒に勉強していただけたらと思っています！！&lt;/p&gt;
&lt;p&gt;今回は、「加算器（Adder）」について、&lt;br&gt;
&lt;strong&gt;1.加算ができるモノ ≒ 低機能CPU？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2.足し算プログラムなんて作ったことあるよ？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3.物理的に足し算ができるCPUを作りたい！&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4.加算器をChiselでつくってみた！&lt;/strong&gt;
に分けて説明していきます。&lt;/p&gt;
&lt;h1 id="1加算ができるモノ--低機能cpu"&gt;1.加算ができるモノ ≒ 低機能CPU？&lt;a class="td-heading-self-link" href="#1%e5%8a%a0%e7%ae%97%e3%81%8c%e3%81%a7%e3%81%8d%e3%82%8b%e3%83%a2%e3%83%8e--%e4%bd%8e%e6%a9%9f%e8%83%bdcpu" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;・CPUに必要なパーツについて、ChatGPTに聞いてみた（ものを要約した）ところ、以下のような要素があるとのことでした。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;演算処理ユニット（Arithmetic Logic Unit, ALU）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数値演算: 加算、減算、乗算、除算などの基本的な算術演算を実行。&lt;/li&gt;
&lt;li&gt;論理演算: AND、OR、NOT、XORなどのビット単位の論理演算を行う。&lt;br&gt;
（これらは全部NANDを組み合わせるだけでできる。NAND最強。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;制御ユニット（Control Unit, CU）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令の解釈: プログラムから読み込んだ命令を解釈し、何を行う必要があるかを判断。&lt;/li&gt;
&lt;li&gt;命令の実行: 各種装置に対して命令を送り、実行を管理。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;レジスタ&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一時的なデータ保持: 処理中のデータや中間結果を一時的に保持。&lt;/li&gt;
&lt;li&gt;特定の機能を持つレジスタ: 命令ポインタ、ステータスレジスタなど。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;キャッシュメモリ&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高速アクセス: 頻繁に使用されるデータや命令を一時的に保持し、高速なアクセスを可能にする。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;バスインターフェースユニット&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データ転送: CPUとメモリや他のデバイス間でデータを転送。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;命令セットアーキテクチャ（ISA）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令セット: CPUが理解できる命令のセット。このセットに基づいてプログラムはCPUに命令を出す。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;パイプライン処理&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同時実行: 複数の命令を同時に処理することで、効率的な実行を実現。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;クロックとタイミング&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;システムクロック: CPUの処理速度を決定するタイミング信号。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;しかし、CPUの機能を全て個人で実装するにはノウハウや時間が足りない人も多いでしょう（作ったことない人でばなおさら）。ここでよく言われるのが、「足し算ができるCPUを作成できれば、それは究極的に機能を制限したCPUといえる」という話で、上の1.を作成しているとはいえるかもしれません。&lt;/li&gt;
&lt;li&gt;いきなりメモリ機能やクロック機能を作れと言われてもできる気がしない（？）し、開発の時に「とりあえず動作確認のために加算器を作ろう」という流れになったというメタ的な事情もありますので、今回は加算器を作成していきます（ということで納得してください、、）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="2足し算プログラムなんて作ったことあるよ"&gt;2.足し算プログラムなんて作ったことあるよ？&lt;a class="td-heading-self-link" href="#2%e8%b6%b3%e3%81%97%e7%ae%97%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%aa%e3%82%93%e3%81%a6%e4%bd%9c%e3%81%a3%e3%81%9f%e3%81%93%e3%81%a8%e3%81%82%e3%82%8b%e3%82%88" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;「足し算できるモノを作ってください」と言われたら、PythonやJavaでも作れます（筆者も大学講義でC言語とJavaやりました）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;adder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;// Java
public class Adder {
 private int a;
 private int b;

 public Adder(int a, int b) {
 this.a = a;
 this.b = b;
 }

 public int execute() {
 return this.a + this.b;
 }
}

// 使用例
Adder adder = new Adder(3, 5);
System.out.println(adder.execute());
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;そこで、&lt;strong&gt;ChiselというDSL&lt;/strong&gt;の出番なわけです。&lt;br&gt;
ScalaはJavaベースなので、パッと見はJavaと同じように見えます。&lt;/p&gt;</description></item><item><title>最新の開発報告（ver.24年12月）</title><link>https://shinrabansyo.github.io/blog/2025/12/01/99-02_%E6%9C%80%E6%96%B0%E3%81%AE%E9%96%8B%E7%99%BA%E5%A0%B1%E5%91%8Aver.24%E5%B9%B412%E6%9C%88/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/2025/12/01/99-02_%E6%9C%80%E6%96%B0%E3%81%AE%E9%96%8B%E7%99%BA%E5%A0%B1%E5%91%8Aver.24%E5%B9%B412%E6%9C%88/</guid><description>&lt;p&gt;宣伝も含めて、メンバー4人それぞれが近況報告をしております！！&lt;br&gt;
普段の記事よりハイレベルな話も含まれているので、ぜひご覧ください！！&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="1全体の近況報告と記事について"&gt;1.全体の近況報告と記事について&lt;a class="td-heading-self-link" href="#1%e5%85%a8%e4%bd%93%e3%81%ae%e8%bf%91%e6%b3%81%e5%a0%b1%e5%91%8a%e3%81%a8%e8%a8%98%e4%ba%8b%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;記事担当のAstalisksです。&lt;br&gt;
いつも記事にてお話しているので、プロジェクトの説明や近況報告を&lt;br&gt;
簡単にしていきたいと思います。&lt;/p&gt;
&lt;h2 id="改めて森羅万象プロジェクトとは"&gt;改めて、森羅万象プロジェクトとは？&lt;a class="td-heading-self-link" href="#%e6%94%b9%e3%82%81%e3%81%a6%e6%a3%ae%e7%be%85%e4%b8%87%e8%b1%a1%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%a8%e3%81%af" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;「&lt;a href="https://www.ipa.go.jp/jinzai/security-camp/about.html"&gt;セキュリティ・キャンプ全国大会2023&lt;/a&gt;」内のグループワークで結成されたグループで、&lt;br&gt;
2023年8月より週1（2~4時間ほどの）ペースで活動しております。&lt;br&gt;
&lt;strong&gt;「なんでもかんでも自分で作れたら最強なのでは！？」&lt;/strong&gt;&lt;br&gt;
というコンセプトのもと、CPUから自作を始めています。&lt;br&gt;
2024年3月の&lt;a href="https://www.security-camp.or.jp/event/awardreport.html"&gt;セキュリティ・キャンプアワード&lt;/a&gt;では、&lt;br&gt;
自作した世にも珍しい48bitCPUで「Hello World」を表示することに成功しました。&lt;br&gt;
今年の目標はSDカードを使えるようにすることで、アセンブリ規則の制定と実装を行い、&lt;br&gt;
最近ようやく動作かと思われたのですが、謎のエラーにつかまり（後述）、、。&lt;br&gt;
OSやネットワークに進めるのはもう少し先になりそうです、、。&lt;/p&gt;
&lt;h2 id="毎週mtgでの作業について"&gt;毎週mtgでの作業について、、。&lt;a class="td-heading-self-link" href="#%e6%af%8e%e9%80%b1mtg%e3%81%a7%e3%81%ae%e4%bd%9c%e6%a5%ad%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;基本的にモブプログラミングで進めています。&lt;br&gt;
1人が他の人のアドバイスの上でコードを書いていく形です。&lt;br&gt;
毎週の進捗はCosense（旧：Scrapbox）にまとめています。
プログラミング経験がほとんどない私が最近開発をしていて気づいたことなのですが、
歴戦プログラマーである他のメンバーと比べ、文法ミスをしてしまうことが&lt;br&gt;
圧倒的に多いと感じました。&lt;br&gt;
「そこは::が必要ですね」「kindでなくてKindですな」など、&lt;br&gt;
細かい部分がすぐ修正できる点は大変ありがたいのですが、&lt;br&gt;
「そこはAじゃなくてBを使いますね」と私が異なる変数を入れるたびに、&lt;br&gt;
プログラムの意味を理解できていないと痛感しました。&lt;br&gt;
1日1時間必ずAIを使わず（今は）Rustを書く時間を自分に設けて2カ月たちましたが、&lt;br&gt;
開いた差はなかなか埋まらなそうです、、。&lt;/p&gt;
&lt;h2 id="記事について"&gt;記事について、、。&lt;a class="td-heading-self-link" href="#%e8%a8%98%e4%ba%8b%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;記事は基本的には自分が担当しています。&lt;br&gt;
初めは「CPU分からん私が記事書けるようになれば、初学者に優しい記事になるのでは！？」と&lt;br&gt;
思っていましたが、やはりCPUのについて私が理解しておらず、&lt;br&gt;
&lt;a href="https://github.com/shinrabansyo/tech-blog/tree/main/Articles/01-CPU%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8D%E3%81%86%EF%BC%88%E3%81%84%E3%81%8D%E3%81%AA%E3%82%8A%EF%BC%81%EF%BC%9F%EF%BC%89/01-03_%E5%91%BD%E4%BB%A4%E3%82%92%E9%80%81%E3%82%8B%E3%83%BB%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B"&gt;前回の記事&lt;/a&gt;については7カ月間違った挙動の記事を掲げてしまいました。&lt;br&gt;
記事の更新も遅く、大変申し訳ありません。&lt;br&gt;
ただ、日本における素人が書いた自作CPU記事という観点では唯一性があると考えており、&lt;br&gt;
このプロジェクト自体が何十年でも続くものであると私は確信しています。&lt;br&gt;
引き続き記事の投稿、過去記事のブラッシュアップを進めていきますので、&lt;br&gt;
長い目でみていただければと思います。よろしくお願いいたします。&lt;br&gt;
（是非フィードバックをコメントやX（Twitter）にて、、。）&lt;/p&gt;
&lt;h1 id="2sdカードについての近況報告"&gt;2.SDカードについての近況報告&lt;a class="td-heading-self-link" href="#2sd%e3%82%ab%e3%83%bc%e3%83%89%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e8%bf%91%e6%b3%81%e5%a0%b1%e5%91%8a" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;OS担当のkoonatoです！
「OSの森羅万象作るぞ！」というツイートを見かけて参画してから早数か月、OS完成までの道のりは遠いと感じる今日この頃ですが、着実に進めています。&lt;/p&gt;
&lt;p&gt;本章では、SDカード周りの話をしたいと思います。&lt;/p&gt;
&lt;h3 id="レジスタとメモリの関係"&gt;レジスタとメモリの関係&lt;a class="td-heading-self-link" href="#%e3%83%ac%e3%82%b8%e3%82%b9%e3%82%bf%e3%81%a8%e3%83%a1%e3%83%a2%e3%83%aa%e3%81%ae%e9%96%a2%e4%bf%82" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;森羅万象で作成しているCPUにはレジスタが32個あります。このレジスタは計算の要ですが、全てのデータや処理をこれだけで完結させるのは難しいです。というのも、各レジスタには役割があり、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一時的なデータ保存&lt;/li&gt;
&lt;li&gt;関数の引数や戻り値の格納
といった用途ごとに使われます。このため、すぐに空きが足りなくなるのです。これを効率よく管理するために「レジスタスケジューリング」が必要になります。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="メモリ退避とsdカード"&gt;メモリ退避とSDカード&lt;a class="td-heading-self-link" href="#%e3%83%a1%e3%83%a2%e3%83%aa%e9%80%80%e9%81%bf%e3%81%a8sd%e3%82%ab%e3%83%bc%e3%83%89" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;レジスタスケジューリングでは、空きが必要な場合に、レジスタの内容を一時的にメモリへ退避させます。ここで「メモリ」が登場します。プロジェクトではSDカードをメモリとして利用し、データを退避させたりロードしたりする仕組みを取り入れることにしました。&lt;/p&gt;
&lt;p&gt;ただし、SDカードを利用するにはSPI（Serial Peripheral Interface）という通信方式を用いる必要があります。SPIはシンプルですが様々な箇所で使われる通信プロトコルで、4本の信号線（MISO, MOSI, SCLK, CS）を使いデバイス同士をつなげます。このプロジェクトではSPI操作をアセンブラで実装しました。テストプラグラムを動かしたのが下の波形です。&lt;/p&gt;</description></item><item><title>加算器をつくる</title><link>https://shinrabansyo.github.io/blog/2024/03/01/01-02_%E5%8A%A0%E7%AE%97%E5%99%A8%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/</link><pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/2024/03/01/01-02_%E5%8A%A0%E7%AE%97%E5%99%A8%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/</guid><description>&lt;p&gt;今回は &lt;strong&gt;足し算だけできるCPU（の一部）&lt;/strong&gt; を作っていきたいと思います。&lt;/p&gt;
&lt;p&gt;今回は、「加算器（Adder）」について、&lt;br&gt;
&lt;strong&gt;1.加算ができるモノ ≒ 低機能CPU？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2.足し算プログラムなんて作ったことあるよ？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3.物理的に足し算ができるCPUを作りたい！&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4.加算器をChiselでつくってみた！&lt;/strong&gt;
に分けて説明していきます。&lt;/p&gt;
&lt;h1 id="1加算ができるモノ--低機能cpu"&gt;1.加算ができるモノ ≒ 低機能CPU？&lt;a class="td-heading-self-link" href="#1%e5%8a%a0%e7%ae%97%e3%81%8c%e3%81%a7%e3%81%8d%e3%82%8b%e3%83%a2%e3%83%8e--%e4%bd%8e%e6%a9%9f%e8%83%bdcpu" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;・CPUに必要なパーツについて、ChatGPTに聞いてみた（ものを要約した）ところ、以下のような要素があるとのことでした。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;演算処理ユニット（Arithmetic Logic Unit, ALU）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数値演算: 加算、減算、乗算、除算などの基本的な算術演算を実行。&lt;/li&gt;
&lt;li&gt;論理演算: AND、OR、NOT、XORなどのビット単位の論理演算を行う。&lt;br&gt;
（これらは全部NANDを組み合わせるだけでできる。NAND最強。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;制御ユニット（Control Unit, CU）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令の解釈: プログラムから読み込んだ命令を解釈し、何を行う必要があるかを判断。&lt;/li&gt;
&lt;li&gt;命令の実行: 各種装置に対して命令を送り、実行を管理。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;レジスタ&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一時的なデータ保持: 処理中のデータや中間結果を一時的に保持。&lt;/li&gt;
&lt;li&gt;特定の機能を持つレジスタ: 命令ポインタ、ステータスレジスタなど。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;キャッシュメモリ&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高速アクセス: 頻繁に使用されるデータや命令を一時的に保持し、高速なアクセスを可能にする。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;バスインターフェースユニット&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データ転送: CPUとメモリや他のデバイス間でデータを転送。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;命令セットアーキテクチャ（ISA）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令セット: CPUが理解できる命令のセット。このセットに基づいてプログラムはCPUに命令を出す。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;パイプライン処理&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同時実行: 複数の命令を同時に処理することで、効率的な実行を実現。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;クロックとタイミング&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;システムクロック: CPUの処理速度を決定するタイミング信号。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;しかし、CPUの機能を全て個人で実装するにはノウハウや時間が足りない人も多いでしょう（作ったことない人でばなおさら）。ここでよく言われるのが、「足し算ができるCPUを作成できれば、それは究極的に機能を制限したCPUといえる」という話で、上の1.を作成しているとはいえるかもしれません。&lt;/li&gt;
&lt;li&gt;いきなりメモリ機能やクロック機能を作れと言われてもできる気がしない（？）し、開発の時に「とりあえず動作確認のために加算器を作ろう」という流れになったというメタ的な事情もありますので、今回は加算器を作成していきます（ということで納得してください、、）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="2足し算プログラムなんて作ったことあるよ"&gt;2.足し算プログラムなんて作ったことあるよ？&lt;a class="td-heading-self-link" href="#2%e8%b6%b3%e3%81%97%e7%ae%97%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%aa%e3%82%93%e3%81%a6%e4%bd%9c%e3%81%a3%e3%81%9f%e3%81%93%e3%81%a8%e3%81%82%e3%82%8b%e3%82%88" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;「足し算できるモノを作ってください」と言われたら、PythonやJavaでも作れます（筆者も大学講義でC言語とJavaやりました）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;adder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Java&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Adder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 使用例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Adder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そこで、&lt;strong&gt;ChiselというDSL&lt;/strong&gt;の出番なわけです。&lt;br&gt;
ScalaはJavaベースなので、パッと見はJavaと同じように見えます。&lt;/p&gt;</description></item><item><title>命令を送る・受け取る</title><link>https://shinrabansyo.github.io/blog/2025/09/01/01-03_%E5%91%BD%E4%BB%A4%E3%82%92%E9%80%81%E3%82%8B%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/2025/09/01/01-03_%E5%91%BD%E4%BB%A4%E3%82%92%E9%80%81%E3%82%8B%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B/</guid><description>&lt;p&gt;今回は &lt;strong&gt;足し算以外の命令がわかるCPU&lt;/strong&gt; を作っていきたいと思います。&lt;/p&gt;
&lt;p&gt;今回は「ALU（算術論理ユニット）」について、&lt;br&gt;
&lt;strong&gt;1.ALUができたら足し算以外も「分かる」らしい、、&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2.命令を「分かる」ために必要な要素とは？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3.そもそも、電気だけで命令をどう作っている？&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4.ALUをChiselでつくってみた！&lt;/strong&gt;
に分けて説明していきます。&lt;/p&gt;
&lt;h1 id="1aluができたら足し算以外も分かるらしい"&gt;1.ALUができたら足し算以外も「分かる」らしい、、&lt;a class="td-heading-self-link" href="#1alu%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%9f%e3%82%89%e8%b6%b3%e3%81%97%e7%ae%97%e4%bb%a5%e5%a4%96%e3%82%82%e5%88%86%e3%81%8b%e3%82%8b%e3%82%89%e3%81%97%e3%81%84" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;・前回の記事では、CPUの機能の一部として&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;演算処理ユニット（Arithmetic Logic Unit, ALU）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;数値演算: 加算、減算、乗算、除算などの基本的な算術演算を実行。&lt;/li&gt;
&lt;li&gt;論理演算: AND、OR、NOT、XORなどのビット単位の論理演算を行う。&lt;br&gt;
（これらは全部NANDを組み合わせるだけでできる。NAND最強。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という説明をしました。そして前回までの記事で「足し算だけできるCPU」を作成しました。しかし、足し算「だけ」でなく、引き算掛け算割り算、はたまたビットシフト（2乗とか）を行うとなると、「足し算か（そうでないか）を判別できるCPU」を作る必要があります。&lt;a href="https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html"&gt;Intel社のCPU&lt;/a&gt;や&lt;a href="https://www.amd.com/content/dam/amd/en/documents/archived-tech-docs/datasheets/22529.pdf"&gt;AMD社のCPU&lt;/a&gt;は「1bitから15bitの命令を判別できるCPU」であるそうですが、それよりは「10bit固定の命令を判別できるCPU」を作る方が簡単な印象をもちます。そこでなんと「32bitの命令を判別できるCPU」の作成経験があるメンバーがいて、今回はその方のノウハウを参考に作業を進めることになりました。&lt;/p&gt;
&lt;p&gt;少し脱線しますが、&lt;a href="https://www.security-camp.or.jp/index.html"&gt;セキュリティキャンプ&lt;/a&gt;でグループワークの活動や個人の活動を続けたところ、3月に&lt;a href="https://www.security-camp.or.jp/event/awardreport.html"&gt;セキュリティキャンプアワード&lt;/a&gt;で発表する機会をいただきました！！また、同時に&lt;a href="https://www.ipa.go.jp/jinzai/security-camp/2024/forum2025.html"&gt;セキュリティ・キャンプフォーラム&lt;/a&gt;が開催されます！キャンプ参加者の発表以外にもためになる講演やトークショーがあります。一般の方も申し込みで聴講可能なので、ぜひ機会があればご参加ください（ついでに当プロジェクトのフィードバックもお待ちしています！！）&lt;/p&gt;
&lt;h1 id="2命令を分かるために必要な要素とは"&gt;2.命令を「分かる」ために必要な要素とは？&lt;a class="td-heading-self-link" href="#2%e5%91%bd%e4%bb%a4%e3%82%92%e5%88%86%e3%81%8b%e3%82%8b%e3%81%9f%e3%82%81%e3%81%ab%e5%bf%85%e8%a6%81%e3%81%aa%e8%a6%81%e7%b4%a0%e3%81%a8%e3%81%af" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;CPUを作るにあたって、命令を「分かる」ために必要な要素を考えてみます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;まず、「足し算をする」という命令と「引き算をする」という命令を見分けるには、足し算を命令1, 引き算を命令2としておけばよさそうです。&lt;br&gt;
（CPU（内のレジスタ）は0か1の二値しか保持できないので、命令001と命令010（２進数）にして見分けておきます。）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;足し算引き算だけじゃなく、プログラムを少し勉強するとif文みたいなのが出てきます。「加算減算でない別種の命令」が必要という感じですね。&lt;br&gt;
（if文みたいなものを1-1, 足し算を（if文とは別種の計算として）2-1, 引き算を（足し算と似てる計算ということで）2-2として、2進数で001-001、010-001、010-010という風に書いておきます。）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;命令を出すとなったら、出した命令の順番を覚えてお区必要がありそうです。順番・時系列を「カウント」しておくものを用意します。&lt;br&gt;
（１回目が足し算、３回目が引き算なら、01:010-001、11:010-010、みたいな感じ。）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;足し算や引き算をしたら、結果を保存する必要があります。「メモリ」にデータを保存し、メモリが格納されている番地のようなもの（アドレス）が宛先として指定可能である、という授業を受けた人もいるかもしれません。また、命令をカウントするには命令そのものも保存しておく必要があります。&lt;br&gt;
（メモリは市販PCで8GBとか16GBとか言われるくらいなので、今回は（2^8 = 256 ≒ 命令256種類以下ならレジスタは8つあればよい ≒ レジスタは8192つもいらないはずなので）考慮しなくてよいほどめっちゃ大きくて命令は全部保存できるとしましょう。）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CPUのレジスタで保存できる量はメモリより少ないもの、爆速で計算可能です。（主記憶と補助記憶、トランジスタとキャパシタ、SRAMとDRAMとかが関係していますね。）&lt;br&gt;
「１回目」に、「レジスタ３」に入っている3と、「レジスタ５」に入っている5を「足し」て、結果を「レジスタ７」に入れるとするなら、01:010-001-011-101-111、と表せますでしょうか。）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;x=3, y=5にしておいてからx+y=8にしてるなら、3とか5とかの「値そのものを保存する場所」がないといけません。
「１回目」に、「レジスタ３」に入っている3に「5」を「足し」て、結果を「レジスタ６」に入れるとするなら、その命令は01:010-001-011-101-110、などと表せそうです。
ということは、値を保持する場所は2～3個必要で、値そのもの（を置く場所）は0～1個必要そうですね。）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;0,1だけで命令を作ってるので、1bitでもズレたらヤバそうです。「命令全体は○○bit」と決めると、さっきの命令が010-001-011-101-111とか010-001-011-101-110なので「命令は15bit固定」と決めておく必要がありますね。（1bit左にずらして100-010-111-011-110とかになったら、違う命令に、、。）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらをまとめると、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令を管理するものとして「カウントするもの」「メモリの容量」は用意しておく&lt;/li&gt;
&lt;li&gt;命令そのものに必要な要素を用意する
&lt;ul&gt;
&lt;li&gt;「全体の長さ」&lt;/li&gt;
&lt;li&gt;「命令を大きく分類」&lt;/li&gt;
&lt;li&gt;「似た命令をさらに分類」&lt;/li&gt;
&lt;li&gt;「値を持っておくレジスタ×2～3個」&lt;/li&gt;
&lt;li&gt;「値そのもの×0～1個」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらがあれば、命令を正しく理解できそうですね。 &lt;br&gt;
（見落としたもの・不要なものはないんですか？という意見もあるかもしれませんが、今のところはちゃんと必要十分になってます。今のところは、、。）&lt;/p&gt;
&lt;h1 id="3そもそも電気だけで命令をどう作っている"&gt;3.そもそも、電気だけで命令をどう作っている？&lt;a class="td-heading-self-link" href="#3%e3%81%9d%e3%82%82%e3%81%9d%e3%82%82%e9%9b%bb%e6%b0%97%e3%81%a0%e3%81%91%e3%81%a7%e5%91%bd%e4%bb%a4%e3%82%92%e3%81%a9%e3%81%86%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%84%e3%82%8b" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.ipa.go.jp/shiken/kubun/fe.html"&gt;基本情報技術者試験&lt;/a&gt;（←CBTなのでいつでも受けれるのでどうぞ！）を受ける方とか、音楽・CDとかに詳しい方であれば、標本化・量子化・符号化は聞いたことあるかもしれません。先の2.で01（２進数）を使ったのですが、そのbitに0か1を表示するときも同じで、閾値2.5V（FPGA「Tang nano 9K」はUSB接続だから5Vなので）より下だったら0、2.5Vより上だったら1といった表現ができます。&lt;a href="https://wiki.sipeed.com/hardware/en/tang/Tang-Nano-9K/Nano-9K.html"&gt;Tang nano 9Kの公式サイト&lt;/a&gt;より引用し（て少し手入れし）たものを見ると、&lt;/p&gt;</description></item><item><title>OSC東京'25に参加してきました</title><link>https://shinrabansyo.github.io/news/osc-2025-tokyo/</link><pubDate>Sat, 01 Mar 2025 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/news/osc-2025-tokyo/</guid><description>&lt;p&gt;2025年02月22日に、&lt;a href="https://event.ospn.jp/osc2025-spring/"&gt;OSC東京'25&lt;/a&gt;にいってきました！！&lt;br&gt;
簡単な参加レポになります、、！&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="オープンソースカンファレンスoscとは"&gt;オープンソースカンファレンス（OSC）とは&lt;a class="td-heading-self-link" href="#%e3%82%aa%e3%83%bc%e3%83%97%e3%83%b3%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%ab%e3%83%b3%e3%83%95%e3%82%a1%e3%83%ac%e3%83%b3%e3%82%b9osc%e3%81%a8%e3%81%af" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;オープンソースカンファレンス（通称：OSC）は、2004年から日本各地で開催されている、オープンソースソフトウェアをテーマにした技術交流イベントです。開発者コミュニティや企業が一体となって最新技術や事例紹介、ワークショップなどを行い、情報共有とネットワーキングを目的としているイベントです。&lt;/p&gt;
&lt;p&gt;今回は2日目（土曜日）の展示会に参加してきました。30社以上の企業と50以上の団体が参加されていました。ほかの参加者の記事も上がっているので、ぜひご確認ください！！&lt;/p&gt;
&lt;h1 id="恒例の旗集め"&gt;恒例の旗集め&lt;a class="td-heading-self-link" href="#%e6%81%92%e4%be%8b%e3%81%ae%e6%97%97%e9%9b%86%e3%82%81" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;イベントに参加した時、一流のエンジニアはイベントの看板や旗を撮ったりするらしいので、のっかって撮ってきました。&lt;/p&gt;
&lt;p&gt;今回はyn0014（ゆん）さんと現地参加していたのですが、一緒に写真撮ればよかった、、。&lt;br&gt;
&lt;img src="https://shinrabansyo.github.io/images/docs/99-03/01_OSCflag.jpg" alt="01_OSCflag"&gt;&lt;/p&gt;
&lt;h1 id="ドタバタ準備タイム"&gt;ドタバタ準備タイム&lt;a class="td-heading-self-link" href="#%e3%83%89%e3%82%bf%e3%83%90%e3%82%bf%e6%ba%96%e5%82%99%e3%82%bf%e3%82%a4%e3%83%a0" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;前日20時ころに集まり、当日の段取りと使用するプログラムをGowin経由でFPGA（Tang Nano 9K）上に書きこむ準備はしていたのですが、なんと会場につくと動作しません。GithubにPushする前のコードを入れてしまったらしく、結局ゆんさんに焼き直してもらいました（開始10分前でぎりぎり間に合いました）。&lt;/p&gt;
&lt;p&gt;私たちの展示ブースはこのような感じになりました！&lt;br&gt;
&lt;img src="https://shinrabansyo.github.io/images/docs/99-03/02_settings.jpg" alt="02_settings"&gt;&lt;/p&gt;
&lt;p&gt;午前の展示はトラブルなく終わりました。午前中はサークル主や大学生というよりは企業の社員さんが多い印象がありました。
（発表しているところの写真を撮り忘れてしまいました、、。）&lt;/p&gt;
&lt;p&gt;午前中の発表は以下のような形で展示していました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;左上：ゆんさんに自作いただいた(エミュレータでfizzbuzzの挙動を確認するプログラム)[https://github.com/shinrabansyo/emulator/tree/master/examples/fizzbuzz]です、命令とUART出力、レジスタとバイナリの確認が可能です！&lt;/li&gt;
&lt;li&gt;右上：FPGA上に用意したプログラムの出力です、午前中までは命令（画面上だとlh, lhu, lb, lbu）のテストがうまくいけば0を返すプログラムが動作していました。（&lt;a href="https://github.com/shinrabansyo/spec/blob/main/spec.adoc"&gt;命令一覧はこちら！&lt;/a&gt;
）&lt;/li&gt;
&lt;li&gt;左上：FPGAにのせたプログラムのアセンブリ記述部分を載せています（&lt;a href="https://github.com/shinrabansyo/cpu/blob/main/test/fpga/load.asm"&gt;このへん&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;右下：森羅万象プロジェクトの記事を載せています（Zennの記事は&lt;a href="https://zenn.dev/p/shinrabansyou"&gt;こちら！&lt;/a&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://shinrabansyo.github.io/images/docs/99-03/03_breaktime.jpg" alt="03_breaktime"&gt;&lt;/p&gt;
&lt;h1 id="ほかの展示を見てみると"&gt;ほかの展示を見てみると、、&lt;a class="td-heading-self-link" href="#%e3%81%bb%e3%81%8b%e3%81%ae%e5%b1%95%e7%a4%ba%e3%82%92%e8%a6%8b%e3%81%a6%e3%81%bf%e3%82%8b%e3%81%a8" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;お昼休憩の後、自ブースに戻る前にほかの展示を見学に行きました。会場となった教室に入りきらないプラレール式加算器がお出迎え。企業ブース、サークルブース、オープンソース日本支部ブースなどの教室を順に回りました。印象に残ったものを挙げていきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使っているPythonのバージョンを聞かれました。個人では当時最新だった3.12や3.13が多かったですが、企業単位だと3.10以前ばっかりだったようです。&lt;/li&gt;
&lt;li&gt;企業ブースでは本が割引価格で購入できました。売り文句も買い文句も「購入してOSCに参加されている著者にそのままサインもらえる」というパワーワードでした。&lt;/li&gt;
&lt;li&gt;お子様にプログラミングを楽しんでもらえるよう、自作言語でNゲージを動かす展示がありました。しかも、「鉄道の加減速」でなく「駅や車庫に入れ」という、管制官のような直感的に指示できる仕様になっていて驚きました。&lt;/li&gt;
&lt;li&gt;展示のための機材が大分トガっていました。何時のだよというようなブラウン管テレビや真空管、自前のステッカーもいっぱいありました。&lt;/li&gt;
&lt;li&gt;筆者は「なぜそれに憑りつかれたのか」を質問していました。例としては「彼女にフられた、○○は私を裏切らない」や「元からやってた人（師匠）から受け継いだ」、「天のお告げだ。私がやるしかないと信じて数十年経った」など。ただ、皆さん声をそろえて「楽しいから」と話しており幸せな気分になりました。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;やはりOSCなのでオープンソースコミュニティが多かったです。少なくとも以下のような展示・情報を見かけました！&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;カテゴリ&lt;/th&gt;
 &lt;th&gt;プロジェクト&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;DB&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;PostgreSQL、MySQL、TiDB、Neo4j、Firebird&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Debian、Ubuntu、Rocky Linux、AlmaLinux、openSUSE、NetBSD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;オフィススイート&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;LibreOffice&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;監視／エラー監視&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Zabbix、Sentry&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;コラボレーション&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Nextcloud&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ホームオートメーション&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Home Assistant&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;パッケージマネージャ&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Homebrew&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;アプリ作成ツール&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Streamlit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;地図データ&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;OpenStreetMap&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;CMS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;baserCMS、Plone&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;RTOS／組み込みOS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Zephyr RTOS、KOZOS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;画像処理ツール&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Netpbm&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;HA／クラスタリング&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Linux‑HA&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ブロックチェーン関連&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;NEM、Astar Network&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;モバイルOS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;postmarketOS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id="当日時計が完成"&gt;当日時計が完成！？&lt;a class="td-heading-self-link" href="#%e5%bd%93%e6%97%a5%e6%99%82%e8%a8%88%e3%81%8c%e5%ae%8c%e6%88%90" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;自ブースに戻ってきて午後の発表の準備していたところ、wakuto（わくと）さんから「FPGA上で&lt;a href="https://github.com/shinrabansyo/cpu/blob/main/program/clock.asm"&gt;時計&lt;/a&gt;を動かせるようになったので展示に活用してほしい」と連絡が届きました。どうやら徹夜で準備いただいたらしく、1000行ほどのアセンブリを一から記述していったようです。CPU上で動作していることがわかりやすくなり、立ち止まって見てくれる方や説明を聞いてくれる方が（体感）倍増しました！！&lt;br&gt;
&lt;img src="https://shinrabansyo.github.io/images/docs/99-03/04_clock.png" alt="04_clock"&gt;&lt;/p&gt;</description></item><item><title>命令をふやす（その１）</title><link>https://shinrabansyo.github.io/blog/2026/03/01/01-04_%E5%91%BD%E4%BB%A4%E3%82%92%E3%81%B5%E3%82%84%E3%81%99%E3%81%9D%E3%81%AE%EF%BC%91/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/blog/2026/03/01/01-04_%E5%91%BD%E4%BB%A4%E3%82%92%E3%81%B5%E3%82%84%E3%81%99%E3%81%9D%E3%81%AE%EF%BC%91/</guid><description>&lt;p&gt;今回は &lt;strong&gt;加算以外もできるCPU（その１）&lt;/strong&gt; を作っていきたいと思います。&lt;/p&gt;
&lt;p&gt;今回は、CPUに必要な命令（の一部）を考えていきます。&lt;/p&gt;
&lt;p&gt;「CPUに送る・CPUが認識できる命令」について、&lt;br&gt;
&lt;strong&gt;1.命令の種類について&lt;/strong&gt;
&lt;strong&gt;2.CPUに必要な命令１：演算を行う命令&lt;/strong&gt;
&lt;strong&gt;3.命令を追加してみた！&lt;/strong&gt;
に分けて説明していきます。
筆者的には、最もCPUを作っているなと実感した部分です！&lt;/p&gt;
&lt;h1 id="1命令の種類について"&gt;1.命令の種類について&lt;a class="td-heading-self-link" href="#1%e5%91%bd%e4%bb%a4%e3%81%ae%e7%a8%ae%e9%a1%9e%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;・前回の記事では、命令を構成する要素と、そのbit数について紹介しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令を管理するものとして「カウントするもの（pc）」「メモリの容量（mem）」は用意しておく&lt;/li&gt;
&lt;li&gt;命令1つの長さ（instr）は48bit
&lt;ul&gt;
&lt;li&gt;命令の種類を5bitで大きく分類（opcode）&lt;/li&gt;
&lt;li&gt;さらに3bitをつかって命令を細かく分類（opcode_sub）&lt;/li&gt;
&lt;li&gt;値を持っておくレジスタ（rd, rs1, rs2）は2~3個、原則5bit/個&lt;/li&gt;
&lt;li&gt;値そのもの（imm）は0~1個、原則32bit/個&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、前回のプログラムでは「opcode」や「rs1」などの変数を充てていますが、詳しい意味については&lt;a href="https://github.com/shinrabansyo/spec/blob/main/spec.adoc"&gt;本プロジェクトのスペックシート&lt;/a&gt;をご確認ください！&lt;/p&gt;
&lt;p&gt;・さて、これまでの取り組みでは「命令を受け取り、処理ができるCPU」を作成しました。今回の記事からは数回は、「CPUへわたす命令」を考えていきます！！（プロジェクト開始時何も知らなかった筆者は、CPUは命令を考えていくところから始まると思っていたのですが、まさか3記事も作成できるくらい下準備があるとは思っていませんでした、、。）&lt;/p&gt;
&lt;p&gt;・まず、前回までの記事で用意した「足し算命令」について確認します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;add命令&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2つのレジスタの値を足して、結果を別のレジスタに格納する。&lt;/li&gt;
&lt;li&gt;例：&lt;code&gt;add r1, r2, r3&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;r2の値と、r3の値を足して、r1に格納する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;addi命令&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;レジスタの値に即値を足して、結果を別のレジスタに格納する。&lt;/li&gt;
&lt;li&gt;例：&lt;code&gt;addi r1, r2, 3&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;r2の値に、値3を足して、r1に格納する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;単に足し算だけでも、「指定したレジスタの値同士を足し算する」命令と、「指定したレジスタの値に数値そのものをパスして足し算する」命令の2種類の命令があります。&lt;br&gt;
もっと抽象的にいうと、「レジスタとレジスタの結果をレジスタに保存する」形式と、「レジスタと値から処理を行い、それをレジスタに保存する」形式の2形式があると説明できます。&lt;/p&gt;
&lt;p&gt;・結論からになりますが、（本プロジェクトでは）CPUにわたすことのできる命令には他に2形式あります。&lt;br&gt;
1つは「特に計算とかはせず、値をそのままどこかへ書き込む」形式です。メモリで計算した後、別のメモリやレジスタにデータを保存したり、映像出力など外部のデバイスに書き込むような操作を指します。先述した（mem）はこの命令を定義するために必要不可欠な要素です。&lt;br&gt;
もう一つは「条件によって処理が分岐する」形式です。CやPythonなどのソフトウェア言語を学んだ方であれば、if文のように分岐すると考えるとよいかもしれません。命令1が分岐命令の時、条件に合致していれば命令2を、していなければ命令3を処理する、のような操作を指します。先述した（pc）はこの命令を定義するために必要不可欠な要素になります。&lt;/p&gt;
&lt;p&gt;・以上の4形式の命令は取り上げた順に、「R（レジスタ）形式」、「I（イミディエイト）形式」、「S（ストア）形式」、「B（ブランチ）形式」と呼んでいます。これらも、先述したスペックシートで詳しく定義されていますので、ぜひご一読ください！&lt;/p&gt;
&lt;p&gt;・とはいっても、形式ごとに若干実装が異なるため、今回は始めに取り上げたR形式とI形式の命令形式を用いた「演算を行う命令」を紹介していきます！！&lt;/p&gt;
&lt;h1 id="2cpuに必要な命令１演算を行う命令"&gt;2.CPUに必要な命令１：演算を行う命令&lt;a class="td-heading-self-link" href="#2cpu%e3%81%ab%e5%bf%85%e8%a6%81%e3%81%aa%e5%91%bd%e4%bb%a4%ef%bc%91%e6%bc%94%e7%ae%97%e3%82%92%e8%a1%8c%e3%81%86%e5%91%bd%e4%bb%a4" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;・足し算があれば、引き算もありますね。似たような感じで用意します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;sub命令&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2つのレジスタの値を引いて、結果を別のレジスタに格納する。&lt;/li&gt;
&lt;li&gt;例：&lt;code&gt;sub r1, r2, r3&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;r2の値から、r3の値を引いて、r1に格納する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;subi命令&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;レジスタの値から即値を引いて、結果を別のレジスタに格納する。&lt;/li&gt;
&lt;li&gt;例：&lt;code&gt;subi r1, r2, 3&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;r2の値から、値3を引いて、r1に格納する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;・加算減算以外にも、論理演算は似た形式で用意できます。AND、OR、XORなどです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;and命令&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2つのレジスタの値で論理積を取り、結果を別のレジスタに格納する。&lt;/li&gt;
&lt;li&gt;例：&lt;code&gt;and r1, r2, r3&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;r2の値と、r3の値で論理積を取り、r1に格納する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;andi命令&lt;/p&gt;</description></item><item><title>2026-04-08</title><link>https://shinrabansyo.github.io/log/2026-04-08/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/log/2026-04-08/</guid><description>&lt;h2 id="やったこと"&gt;やったこと&lt;a class="td-heading-self-link" href="#%e3%82%84%e3%81%a3%e3%81%9f%e3%81%93%e3%81%a8" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ISA v2 の作成
&lt;ul&gt;
&lt;li&gt;即値とオペコードがバイナリで見やすいようにした！！&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="やること"&gt;やること&lt;a class="td-heading-self-link" href="#%e3%82%84%e3%82%8b%e3%81%93%e3%81%a8" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;仕様書の修正
&lt;ul&gt;
&lt;li&gt;デバイス、ディスプレイとか、、。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>2026-03-25</title><link>https://shinrabansyo.github.io/log/2026-03-25/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/log/2026-03-25/</guid><description>&lt;h2 id="やったこと"&gt;やったこと&lt;a class="td-heading-self-link" href="#%e3%82%84%e3%81%a3%e3%81%9f%e3%81%93%e3%81%a8" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ホームページ完成！公開！&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="やること"&gt;やること&lt;a class="td-heading-self-link" href="#%e3%82%84%e3%82%8b%e3%81%93%e3%81%a8" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ISA v2 作成？&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>2026-03-04</title><link>https://shinrabansyo.github.io/log/2026-03-04/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/log/2026-03-04/</guid><description>&lt;h2 id="やったこと"&gt;やったこと&lt;a class="td-heading-self-link" href="#%e3%82%84%e3%81%a3%e3%81%9f%e3%81%93%e3%81%a8" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ホームページ整備&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="やること"&gt;やること&lt;a class="td-heading-self-link" href="#%e3%82%84%e3%82%8b%e3%81%93%e3%81%a8" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ISA v2 策定&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>セキュリティ・キャンプ 2026 フォーラム に参加してきました</title><link>https://shinrabansyo.github.io/news/seccamp-forum-2026/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/news/seccamp-forum-2026/</guid><description>&lt;p&gt;2月14日（土）に都内で行われたセキュリティ・キャンプ 2026 フォーラムに出展してきました！&lt;/p&gt;
&lt;p&gt;CPUやコンパイラ、各種ツールチェインの展示を行い、大盛況でした。
お越しいただいた皆さん、ありがとうございました！&lt;/p&gt;</description></item><item><title>Website information</title><link>https://shinrabansyo.github.io/site/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shinrabansyo.github.io/site/</guid><description>&lt;p&gt;Site built with &lt;a href="https://github.com/google/docsy/releases/v0.1.0"&gt;&lt;span class="badge bg-primary text-bg-primary fs-6"&gt;Docsy
v0.1.0 &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="build-information"&gt;Build information&lt;a class="td-heading-self-link" href="#build-information" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Netlify build information:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Attribute&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Netlify built&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Deploy context&lt;/td&gt;
 &lt;td&gt;local&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;script&gt;
document.addEventListener("DOMContentLoaded", function() {
 var options = { hour: '2-digit', hour12: false, minute: '2-digit', timeZoneName: 'short' };
 var buildDate = new Date("2026-04-08T16:31:30+02:00");
 document.getElementById("local-time").innerText = buildDate.toLocaleString(undefined, options);
});
&lt;/script&gt;</description></item></channel></rss>