2012年7月1日日曜日

ROM

ROM1bitにつきリレー一個というのは無駄に思えて、なんとか減らせないかと無い頭を絞って考えたが、結局見つからなかった。抵抗差を利用すれば4bitまでなら抵抗マトリックスだけでも使えそうだが、それでも制御用のリレーを考慮すると得にならない。A/Dコンバータも使えないし・・・。スキャンも考えたが逆に多くなる。おそらく、昔の人もいろいろ考えて結局マトリックスの交点に一素子が使われているのだろうが、その考え方の過程を知りたいぞ。

これでは進まないので、1bit1リレーで作り始める。まず回路図。

10WORDS(100bit)のROMボード。裏面の半田付けに心が折れそうになった。。。ラッピングワイヤの半田のノリが悪すぎる。

表側。ぎりぎり入った感じ。
10ワードでは少ないのでリレーが手に入れば追加したいけど大変だからしたくない。

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を最適化した時に使ったリレーはどれかわからず・・・もう少しまともな発振回路を考えねば。