投稿

BrainfuckCPU デコーダー基板

イメージ
 CPUにはデータの流れを制御するデコーダがあります。 データそのものはフリップフロップと加算器を周回することで処理していきますが、どのデータをどこから移し、減算するのか加算するのかをプログラムに従って制御信号を各部に送出するための機能ブロックがデコーダーです。 Logisim-evolutionでの構築結果から、このCPUでのデコーダーはROMからの3bitとプログラム方向判定、データゼロ判定、カッコ判定、カッコ深さ、入出力を用意しました。 実際のハード実装では、入力bitと入力反転bitに対しダイオードNANDを構成し、更にORでまとめることで実現を考えています。 ここで各部の制御のタイミングを設計しておきたいところなのですが、実際のRAMのWE,OEのタイミングやDFFのエッジタイミングなどが不明確なことが多いため決め切ってしまうと後で改修が難しいのではないかと思いました。 そこで考えたのが960個ジャンパーを用いたデコーダーです。 これならどんなものが来ても対応できますね! 14bit入力、17bit出力。DTC114で反転バッファとしています。 PLDかFPGAで組めばいいのでは?見た目綺麗だからいいじゃないですか・・・。

BrainfuckCPU ロジック部品実装

イメージ
 年末にelecrowに注文していました基板が届きました。 実装を楽にするためにロジック基板はステンシルを同時に注文しました。クリームはんだで一気に実装できます。 基板をテープで位置決めし、ステンシルと半田パターンが合うように正確に合わせます。 クリームはんだを置きます。結構固いです。 その後固めのへらで強めに押し付けながらステンシルの穴に伸ばします。ステンシルと基板の隙間ができると不要な場所に入り込んでしまうので、一方向から行います。 その後トランジスタをピンセットで実装します。置くだけなので簡単ですが、トランジスタが密なので隣にピンセットが当たって動いてしまうことがよくありました。ほぼ乗っているだけなので触ったらすぐ動きます。 しかしながら、トランジスタが足りなくなってしまいました。DTA114は山のようにあるのですが、DTC114は100個に一個くらいしかなく実装していくうちに枯渇してしまいました。 3枚クリームはんだを塗ったのですがこれでは乾燥してしまってよくありません。仕方ないのでできる限り実装してリフローをしてしまい、DTC114を購入したら手はんだですることにしました。 実装したら、基板をホットプレートに置いてはんだを溶かします。 これで一枚の基板でのロジックができました。

Brainfuck言語で動くCPUを作る

皆様一度はCPUを作ってみたいなぁと思ったことがあるんじゃないでしょうか? 普通はそう思うと思います。一家に必ず一台オシロスコープが常備されていますか?そんなわけないでしょう、うちにはあるけど。 Brainfuckとはプログラミング言語の一種で、わずか8つの命令で構成されています。無限のメモリ、無限のテープを想定することでチューリング完全性を持つおそらく最小に近い言語です。 そこで私は考えを温めていました。Brainfuck言語で動くCPUを作ることができるのではないか。 特徴を以下に挙げます。 ・わずか8つの命令(3bitで表現可能) ・アドレスジャンプなど複雑な実装をしなくてもいい ・メモリの加算は+1のみであり、演算ユニットが非常に簡単になる ・RAMさえ用意すれば単純な構成ながら8-16ビット程度の大きな拡張が簡単にできる これらのロジックの簡素に加えて拡張性もあることから、ハードウェア実装が非常に容易になると思いました。 また、Brainfuck言語はその特徴的な簡素さから注目されており、多くのプログラミング例があります。 貧弱な計算能力から、数学的な問題を解く程度に過ぎませんが、ハノイの塔、素数計算から、複素数計算によるマンデルブロー集合まで実装されています。一部にはOS開発が行われています。 私は前からゲルマニウムトランジスタを所持しており、それによってBrainfuckのCPUロジックを作成し、マンデルブロー集合を計算させられないかと思っていました。 ロジックシミュレータであるLogisim-evolutionを用いて動作可能なBrainfuckCPUを作成しました。 そこの知見から、74シリーズのロジックICとRAMを使用してハードウェアロジックでのCPUを実現しました。この時はデコーダのタイミング計算が難しくてArduinoをデコーダ代わりとしました。(たいていの場合制御系の方が早くて複雑です) 動作できるハードウェアから逆算した結果、およそ400個のトランジスタで8ビットのCPUを構成可能であると見出したため、その実現に向けてプロジェクトを温めています。 一気にゲルマニウムトランジスタで実装するには大量の問題が出てきます。速度の遅さ(Ft=1MHz程度)、Tr節約のため、フリップフロップを2Tr構成としたいがかなりトリッキーな回路とタイミングに...