Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マイクロプログラム制御方式のCPUを自作した話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kenta
June 02, 2024
Technology
450
0
Share
マイクロプログラム制御方式のCPUを自作した話
Kenta
June 02, 2024
More Decks by Kenta
See All by Kenta
『Verylで作るCPU』を読んでいる
kenta11
0
180
Elixirで作る将棋ソフト
kenta11
0
140
失くしたリモコンを作る2
kenta11
0
99
失くしたリモコンを作る
kenta11
0
51
Other Decks in Technology
See All in Technology
AIと乗り切った1,500ページ超のヘルプサイト基盤刷新とさらにその先の話
mugi_uno
1
270
Google Cloud Next '26 の裏でこっそりリリースされたCloud Number Registry & Cloud Hub コスト分析 を試してみた
hikaru1001
0
150
AIの揺らぎに“コシ”を与える階層化品質設計
ickx
0
190
AI駆動開発で生産性を追いかけたら、行き着いたのは品質とシフトレフトだった
littlehands
0
250
Percolatorを廃止し、マルチ検索サービスへ刷新した話 / Search Engineering Tech Talk 2026 Spring
visional_engineering_and_design
0
230
バイブコーディングで3倍早く⚪⚪を作ってみた
samakada
0
210
雑談は、センサーだった
bitkey
PRO
2
160
Microsoft 365 / Microsoft 365 Copilot : 自分の状態を確認する「ラベル」について
taichinakamura
0
440
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
150
[Oracle TechNight#99] 生成AI時代のAI/ML入門 ~ AIとオラクルデータベースの関係 (前半)
oracle4engineer
PRO
1
170
サービスの信頼性を高めるため、形骸化した「プロダクションミーティング」を立て直すまでの取り組み
stefafafan
0
210
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
770
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
180
Site-Speed That Sticks
csswizardry
13
1.2k
Context Engineering - Making Every Token Count
addyosmani
9
860
Build your cross-platform service in a week with App Engine
jlugia
234
18k
How to train your dragon (web standard)
notwaldorf
97
6.6k
Darren the Foodie - Storyboard
khoart
PRO
3
3.3k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
410
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
170
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
110
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Transcript
マイクロプログラム制御方式 のCPUを自作した話 Kenta Arai 2024/06/02 ぬるぽ 1
自己紹介 • 名前:Kenta Arai • Twitter: @isKenta14 • Qiita: Kenta11
• 仕事:組込みソフトウェア開発 • 趣味で作ったもの • micro-alpha ☜今日はこれの話です • 簡素なマイクロプログラム制御方式CPU • Xilinx FPGA 上で実際に動かせました • simple_uart:UART の SystemVerilog 実装 • elixir_shogi:投了だけできる Elixir 製将棋エンジン 2024/06/02 ぬるぽ 2
背景 • マイクロプログラム制御方式:計算機の制御装置を構成する方式の 一つ • 特徴:制御装置が簡素、ISAの変更が容易等 • 結線論理方式と対比される • 黎明期の計算機でよく使われていた
• KT-Pilot(1961年、京都大学、東芝) • MELCOM 1530(1963年、三菱電機) • 自作CPUで採用されることは少ない(気がする) • 自作してマイクロプログラム制御方式について理解を深めたい 2024/06/02 ぬるぽ 3
目的 • マイクロプログラム制御方式で自作CPUをする 2024/06/02 ぬるぽ 4
CISC と RISC [1] • 典型的な定義 • CISC (Complex Instruction
Set Computer) • 命令の種類:多い • 制御部の構成:マイクロプログラム制御方式 • RISC (Reduced Instruction Set Computer) • 命令の種類:少ない • 制御部の構成:結線論理方式 • 旧来の命令セットが複雑化した(CISC)反省から 命令セットを単純化することで、パイプライン処理を高速化(RISC) 2024/06/02 ぬるぽ 5 [1] 馬場敬信:コンピュータアーキテクチャ改訂4版, オーム社, p. 8, 66, 2019
マイクロプログラム制御方式 2024/06/02 ぬるぽ 6 0000 制御記憶 アドレス レジスタ CPU 主記憶装置
制御記憶 制御記憶アドレス マイクロオーダ 0000 制御記憶 データ レジスタ 汎用レジスタ 0000 0000 0000 0000 算術論理演算装置 IO装置 プログラム カウンタ 0000 命令レジスタ 0000 被制御部 デコーダ 命令フェッチ XXX0 XXX1 XXX2 ロード命令 XXX3 XXX4 ストア命令 XXX5 XXX6 加算命令 XXX7 制御部
MICRO-1[2] • 簡素なマイクロプログラム制御方式のモデル • 制御部 • 制御記憶:1語40ビット、最大4K語の容量 • アドレス長:12ビット •
被制御部 • 主記憶:1語16ビット、最大64K語の容量 • 汎用レジスタ:16ビット×8 • フラグ:ZER, NEG, CRY, OV等 2024/06/02 ぬるぽ 7 [2] 馬場敬信:ソフトウェア講座(23)マイクロプログラミング, 昭晃堂, pp. 31-107, 1985 図:書籍の表紙
MICRO-1を実装 • 開発環境等 • 言語:SystemVerilog • シミュレータ:ModelSim • テストフレームワーク:VUnit •
実践FPGAテスト自動化が とても役に立ちました 2024/06/02 ぬるぽ 8 図:テストの様子 ソ ー ス コ ー ド を コ ン パ イ ル テ ス ト 結 果 が レ ポ ー ト さ れ る
アセンブラとマイクロアセンブラも自作 • Windows版しかなかったので、Linux版を自作しました • Rust 実装なので、cargo コマンドでインストールできます • cargo install
rm1asm; cargo install rm1masm 2024/06/02 ぬるぽ 9
Xilinx FPGA 上に実装 • Arty A7-100 と Basys 3 で動作検証
• 逆ポーランド電卓が動いた! 2024/06/02 ぬるぽ 10
結果 • マイクロプログラム制御方式で自作CPUができた • MICRO-1 を基に簡素な CISC プロセッサを実装 • ついでにアセンブラとマイクロアセンブラも自作
• FPGA 上で逆ポーランド電卓を動作させることに成功 2024/06/02 ぬるぽ 11
考察っぽいなにか • マイクロプログラム制御方式 • 前評判通り、制御装置は簡素かも • オープンな設計が無さそうなので、本格的なものを作るとなると大変だろう • アセンブラとマイクロアセンブラを両方作るのが面倒 •
MICRO-1 • 関数呼び出しで飛べるアドレス範囲が狭すぎる • 現在アドレス+8ビット2の補数表現、までしか飛べません • これに気が付かず大きなプログラムを書いたときに、大変な思いをしました • スタックが狭すぎる(0x0040-0x013F) • これに気が付かず(以下略) • 1人で作るにはちょうどいい規模の計算機かも 2024/06/02 ぬるぽ 12
成果 • ブログ • https://kenta11.github.io/posts/2022-09-23-micro1/ • https://kenta11.github.io/posts/2023-03-18-micro-alpha/ • リポジトリ •
https://github.com/Kenta11/micro-alpha • https://github.com/Kenta11/rm1asm • https://github.com/Kenta11/rm1masm 2024/06/02 ぬるぽ 13