2012年6月21日木曜日

more relays

SRAMとアドレスレコーダを考えるとリレーが全然足りないので、覚悟を決めてあるだけ全部買って来た。1回路入り1個50セント、40円くらい。秋月より安い。ただ、入荷の予定はないそうだ。JRCと書いてるがYueging(中国)製らしい。eBayで買える中国製は色が青色なのと、サイズがでかいので実装面積の問題がある。オレンジのリレーはHeavy Dutyっぽくて好きなのだが、概して高価。というわけでやっぱり黒色。
買ってきたリレー。だんだん感覚がおかしくなってきて、200個じゃ少ないとか思ってしまう

今あるリレー数をまとめてみた。既に、結構な数を使ってしまっているなぁ。

まずはROMでインストラクションデコーダやアドレスデコーダを作り、残ったリレーでSRAMを作ろうと思う。ROM用に33/68オームのチップ抵抗を1000個ずつ買ってきた。本当は500個でいいのだが、1000個買う方が逆に安いため。また、実装用にDigikeyで6インチ角の基板を注文中。ちなみに、いろいろ探したが基板は秋葉が安い。6.5x4.5inchで20$が相場っぽいが、秋月なら400円だし。唯一6inch角のがDigikeyで11$だったのでメモリ系はこの基板で統一するつもり。これにDIPスイッチを載せられるだけ載せてROMにする(たぶん40WORD=400bit分くらい)。
最近、これに全力を傾けてるけど大丈夫かオレ?

2012年6月20日水曜日

ROM design

SRAMの1bitのコストが高い(1$?)ので、ROMも併用することを考えている。変数はRAM領域を使い、プログラム本体はROM領域に置くという、組み込みでよく見る構成だ。じゃあ、ROMのbitコストはどうなのだろう?最初、ROMでは1個のスイッチと1個のリレーが必要かと思っていたが、下記回路だとスイッチ1個と抵抗2個で実現できる気がする。間違いでした
左の抵抗分圧+スイッチが1bitセル。右のリレーがセンスアンプで、4V以上でon, 3.5V以下でoffになるよう抵抗の分圧を調整する。
真ん中のリレーはenable。ROMを読み出す前にセンスアンプをリセットするために必要。
 このままでは負論理になってしまうのでどっかで反転させる必要あり。

テストしているところ。とりあえず動いている。というわけでROMのbitセルは完全に受動部品で実現できそう。
メモリについてまとめると、
RAM: リレー2個、抵抗3個
ROM: 抵抗2個、スイッチ1個

今日はanchor electronicsで2個1$のリレーを買ってきて互換性をテストしてみた。遅延についてはわからないが、とりあえずメモリとしては互換性に問題はないようだ。

2012年6月19日火曜日

SRAM design

そろそろSRAMについて考えねばと思い、試験回路を作ってみた。
思い返してみると、昔、ひたすらSRAMの回路パターンを見続けていたが、実際に回路を作って動作させてみるのは初めてであった。
1つのリレーで選択、もう1つのリレーで保持する。CMOSプロセスのSRAMが6Tで実装されているのを考えると2リレーで実装できるのは効率的に見える。これは、W(ライト)時には直接VDDかGNDにつなげて書き換えるのに対し、R(リード)時には160オーム程度のリレーが接続され、保持リレーが影響を受けないのを利用しているためだ。したがって読み取りにバッファが必要と思われる。
bit-lineにリレーをつなげて読み出し中。保持リレーは動作し続けている。
intelがFinFETを使った0.1um2以下のSRAMを動作させている一方で、200mm2以上のセル面積のリレーSRAMに愕然とする。でかい基板でも一枚に4WORD(40bit)しか載らない。アドレス生成を考えなくても、8bit全部使うには2x10x256=5120と天文学的なリレーが必要になってしまう。そもそもアドレスバスは5bitで十分だった気がしてきた。。。

2012年6月18日月曜日

PC Controller

次はPCのコントローラを作成。ロジックは、
selPC = 1 + 2 + 3
loadPC = 3
selINC = 3 * ^jmp
loadINC = 2
selIncr = 2
数字はシーケンス番号。
これだけだとリレー3個でできるのだが、selをloadより遅延させるため、各selに対し2リレー+CRが必要になる。とりあえずR33オーム、C470uFでPCが正常動作するのを確認。遅延はもっと少なくてもいいかもしれない。


クロック、シーケンスジェネレータ、PCコントローラをつなげてPCを進めているところ。0xFFまで見守って動作を確認。ちなみに0xFFの次は0x00になる。よしよし。
PCが進むだけだが、リレーがガチャガチャ音を立てながら自動で動作しているのは結構おもしろい。

2012年6月15日金曜日

Clock Generator(2)

クロックの問題があったので、後段にFFをつけた。さらに、手動と自動でクロックを切り替えられるようにもした。これはテストの際、便利なはず。
CRの遅延でクロックをつくり、FFで半分の周波数に落としている。もちろん、オシロで見たDutyは1:1だった。
クロック+電源基板の様子。R10オーム、C2000uFの2-3Hzくらいで実験中。左下のプッシュスイッチが手動クロック、その横のトグルスイッチが手動/自動の切り替え。

次はPCまわりのロジックを組んで、PCを進ませてみようと思う。

2012年6月13日水曜日

Sequence Generator

シーケンスジェネレータの回路図。6State目でリセットをかけて初期に戻し、計5つのステートを発生させている。回路図中の100uFがないと、リレー動作中にリセットがかかって発振してしまう。
とりあえずこのユニットは動作するのだが、別の問題が発覚した。リレーの個体差が大きいため、クロックジェネレータが全く発振しなかったり、Dutyが1:1から大きくずれてしまう。CRを最適化した時に使ったリレーはどれかわからず・・・もう少しまともな発振回路を考えねば。


2012年6月10日日曜日

Sequence Generator

Anchor Electronicsでオシロのプローブを買いに行ったのだが、なんと2個で1$の激安5V1回路リレーを発見した。最近、とある人に頼み込み秋月のリレーを買い足したのでしばらく持つが、SRAMを作るときにまた考えよう。

次はシーケンスジェネレータを作ろうと思う。昔Pentiumが出始めた頃、DOS/VマガジンにCPUがどう動作しているかの説明を読んだ記憶がある。1)fetch、2)decode、3)execute、4)storeのシーケンスで一つの命令を実行しているとのことだった。4つのパイプラインを持ってひとつずつずれて実行しているため、見た目1クロックで1命令実行されている。今回考えているCPUは、動作的にaccumulator型なので、データ読み込みとALUの演算をシリアルで行う、つまり1)fetch、2)decode、3)move、4)execute、5)storeの5ステートを発生させる、これがシーケンスジェネレータである。5クロックで1命令、クロックは5Hzなので1命令1秒と遅いが、まぁ速度上げたければクロック上げればいいのだ。
同時に、アドレスバスを使ってPCをインクリメントする、これは3ステップで完了する。SRAM書き込みを考えると5ステートで足りないが、SRAMの見通しが立ってないので後で考えることにする。
回路はone-hot state counterで、5ステート目の次に1ステートに戻るよう、リングにするかリセットする予定。

さて、このプロセッサは半導体を使わず、プリミティブなデバイスのみを使って構成すると決めた。気づいたのだが、このプロセッサは基本的に電位に対して対称である。つまり、電源の±を逆にしても完全に動作するはずである。動作確認用のLEDは光らないが。。。とにかく、真空管コンピュータでもECLでもCMOSでも不可能で、これはすごいアドバンテージではないか。唯一極性があるのは電解コンデンサだが、この優位性を示すため、無極性電解で構成しようと思う。