• 追加された行はこの色です。
  • 削除された行はこの色です。
  • RAMを動かす へ行く。

*目次 [#pbc6d706]

#contents


*RAMの端子 [#x4dfecad]
*はじめに [#x4dfecad]

**6264 [#l5d2c7ee]
 ここでは[[6264]]というRAMを用いて解説する。

 ここでは6264というRAMを用いて解説する。6264は8ビットを扱うことができ、記憶容量は64kビットである。データバス(I/O1〜1/8)は8個、アドレスバス(A0〜A12)は13個。このことからも8ビットを扱い、アドレス数は8,192(=2SUP{13};)ということがわかる。

#img(http://s-akademeia.sakura.ne.jp/main/image9/6264.jpg)
実物
#img(,clear)

#img(http://s-akademeia.sakura.ne.jp/main/image9/RAM6264.jpg)
ピン配置図
#img(,clear)

 使わない端子をGNDに接続することで、アドレス数が少ないRAMとして利用することができる。このテクニックはよく使うので覚えておいて欲しい。

例:アドレスバスの端子を8個だけ使うことにすればアドレス数が256(=2SUP{8};)のRAMとして使える。

#img(http://s-akademeia.sakura.ne.jp/main/image9/RAM6264-2.jpg)
#img(,clear)


 CS(チップセレクト)端子はRAMの使用する・使用しないの選択を行う端子である。6264にはこの端子が2つあるが、使用するのは負論理のほうの端子である。CS端子に0(0V)が入力されると、このRAMが使用可能な状態(選択された状態)になる。6264を単独で常に使用可能な状態にするときは、CS端子をGNDに接続しておけばよい。

#img(http://s-akademeia.sakura.ne.jp/main/image9/RAM6264-3.jpg)
#img(,clear)

 6264が手に入りづらい場合、62256で代用することができる。これは記憶容量が256kバイトのSRAMである。実際62256も生産中止されていてなかなか手に入らないかもしれない((フラット型は秋月にあったが、DIP型はなかった))。

 私はサンエレクトロで6264BLP8L([[データシート:http://security2600.sakura.ne.jp/main2/data1/6264BLP8L.pdf]])をかろうじて入手。

#img(http://security2600.sakura.ne.jp/main2/image1/6264BLP8.jpg)
#img(,clear)



*RAMのデータの書き込み [#s895e327]

  ̄WEとなっているので、WEが0Vのときに指定されたアドレスに指定されたデータを書き込みことになる。ただし、このときアドレスの一番低い桁がA0に対応していることに注意。

#img(http://security2600.sakura.ne.jp/main2/image1/RAM6264-3.jpg)
#img(,clear)

例:アドレス00001001番地にデータ00001111を書き込む場合は、A0=A4=1、それ以外のAを0、I/O1=…=I/O4=1、I/O5=…=I/O8=0とする。

*RAMのデータの読み出し [#p7faa73f]

 RAMに記憶してあるデータの読み出しについては、アドレスを指定するだけである。それと同時に読み出しの端子OEを5Vにする。つまり端子自体は ̄OEとなっているので、 ̄OEの入力を0Vにすればよい。同時に読み出し中は書き込みを禁止するので、 ̄WEを5Vにしなければならない。

#img(http://security2600.sakura.ne.jp/main2/image1/RAM6264-4.jpg)
#img(,clear)


*RAMのデータの読み書き回路 [#z14310c3]

 ひとつのRAMのデータの読み書きをさせるには、次の3つの問題がある。

#img(http://security2600.sakura.ne.jp/main2/image1/RAM6264-5.jpg)
#img(,clear)


-第1の問題点:読み・書きをひとつのスイッチで切り替える。
-第2の問題点:読み出し後にLEDを光らせると、LEDが点灯したままになってしまう。新しくデータを読み出したときは、LEDの点灯状態を確認できるように設計したい。
-第3の問題点:I/O端子は双方向になるので、データの流れの方向をうまく切り換えなければならない。

**第1の問題点 [#s8007994]

 単に1接点のスイッチを2つ使ってしまうと無駄が多いので、2接点のスイッチを1つ使って実現する。

#img(http://security2600.sakura.ne.jp/main2/image1/RAM6264-6.jpg)
#img(,clear)

 このように設計すると、SW2をON1に接続したときに ̄OE端子が1、 ̄WE端子が0になり、RAMにとってはデータの読み出しと解釈される。一方、SW2をON2に接続したときに ̄OE端子が0、 ̄WE端子が1になり、RAMにとってはデータの書き込みと解釈される。ポイントはスイッチに繋がったほうがGNDと直結されるので、0Vになるということだ。

**第2の問題点 [#p6df1fcb]

 クロックが高ければ高いほどLEDを直接点灯させているときに、あまりにも短い時間しか光らないので肉眼ではみえなくなってしまう。そのため、例えばある瞬間の入力が1だったときに、その状態がその後変化しても出力を1のまま保存し続けたい。

 これを実現化させる基本的回路として[[フリップフロップ]]がある。フリップフロップはある瞬間の信号の状態を保存する回路である。フリップフロップを使った設計は後で更新するが、ここではまずフリップフロップが内蔵されていて便利なラッチ回路を使うことにする。このラッチ回路を使い、RAMから読み出したデータを保持させる。ラッチ回路自体をON/OFFすることで、そのときのLEDの点灯の確認ができるように設計する。

 ここでは、[[Dフリップフロップ]] (3ステート) が内蔵されたSN74ALS576BN([[データシート:http://security2600.sakura.ne.jp/main2/data1/SN74ALS576BN.pdf]])を使うことにする。

#img(http://security2600.sakura.ne.jp/main2/image1/SN74ALS576BN.jpg)
#img(,clear)


**第3の問題点 [#ta0e24eb]

 RAMのI/O端子から伸びているデータバスの信号の流れる方向は双方向になっている。RAMの読み・書きにしたがい、信号が流れる方向を制御しなければならない。これを実現するためには[[スリーステートバッファ]]回路を用いる。

 ここではスリーステートバッファ回路のICとして、SN74ALS541N([[データシート:http://security2600.sakura.ne.jp/main2/data1/SN74ALS541N.pdf]])を使うことにする。

#img(http://security2600.sakura.ne.jp/main2/image1/SN74ALS541N.jpg)
#img(,clear)

 OE端子(イネーブル端子)が2つあるが、OE1のひとつだけしか使わないので、OE2のほうは接地しておく。~
 そして、 ̄OE1が0Vのとき(OE1は負論理なので0Vでイネーブルが有効になる)、A1〜A8(端子2〜端子9)から入って来たデータの入力をY8〜Y1(端子11〜端子18)から流す。 ̄OE1が5Vのときは、A1〜A8(端子2〜端子9)から入って来たデータの入力をせき止める。

#img(http://security2600.sakura.ne.jp/main2/image1/74ASL541-1.jpg)
 ̄OE1が0Vのとき
#img(,clear)

#img(http://security2600.sakura.ne.jp/main2/image1/74ASL541-2.jpg)
 ̄OE1が1Vのとき
#img(,clear)


*実験 [#uebead5d]

**RAM 6264を手動で制御する [#o0d40e55]

***回路図 [#s21a3d2c]

#img(http://security2600.sakura.ne.jp/main2/image1/RAM_test.jpg)
#img(,clear)

***使用する部品 [#dfeace04]

-SRAM
--6264
-ラッチ回路
--SN74ALS576BN
-スリーステートバッファ回路
--SN74ALS541N
-赤色LED
--8個
-集合抵抗
--10kΩ×2
--8個
-集合抵抗
--330Ω
--8個
-抵抗器
--10kΩ
--3個
-トグルスイッチ
--2個
-DIPスイッチ(8接点)
--2個

*参考文献 [#q652b3f0]

-『はじめてつくるデジタル回路』