2013-08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

なんか思ったよか大丈夫そう

こんにちは。米田です。

 久しぶりの活動報告です。

 8月22日から8月24日の3日間を「集中作業期間」に設定して思いっきり作業を進めました。
 そもそもなんでこんな期間を設定したかと言うと、工大祭まであと2ヶ月を切っているのにCPUはおろか電卓も完成していないという状況があったからです。7月13日に決めたスケジュールの通りだと電卓はとっくのとうに完成しているはずだったのになぁ。

 集中作業期間には普段のメンバー(米田、竹村、ふじてつ、桐山)のみならず心強き助っ人にお越し頂き一緒に作業をしました。助っ人の方々には主にCPU部品のハンダ付けをやってもらいましたが、その間に組立やデバッグの方をすることができ大変助かりました。本当にありがとう。

 さて、この日完成した部品のうち2つを紹介をいたします。
 一つ目はレジスタへのアクセスに使うマルチプレクサです。私達が作るCPUにはレジスタが16本あり、この16本のうちのどれにアクセスするかを選択するのに使用します。回路規模はどれ位になるかというと,

( (レジスタ本数) - 1 ) × (レジスタ1本のビット数) = (16 - 1) × 4 = 60個


のリレー(1回路のリレー)が必要となる位です。マルチプレクサは回路自体は単純なのですが数が多いためなかなか大変です。これが完成したのは結構大きいです。

 次に表示回路です。これは電卓で計算結果の表示に使います。電球を使ってい、制御基盤にはAC100Vがかかっている部分があります。ショートしてブレーカーが落ちたり、AC100Vに触れて感電するとまずいのでそこそこ安全設計になっています。
DVC00288.jpg

 表示回路が完成して動いているところを見ると電卓本体の完成を急ぎたくなってきます。

 3日間の集中作業では思ったよりも順調に作業が進みました。CPUの80%の部品の完成、電卓の部品のほとんどが完成、電卓の組み立てとデバッグの70%が完了、というところまで何とか到達したのです。

 さぁ、10月の工大祭まで突っ走るぞ〜!



スポンサーサイト

追加メンバー紹介

拝啓、記事をお読みの皆様
この夏いかがお過ごしでしょうか。
我々はハンダ付けの夏を満喫しています。

遅くなりましたが自己紹介させてもらいます。

・名前
桐山裕匡(きりやま ひろただ)
・所属
東京工業大学理学部情報科学科(<-竹村に続いての理学部)
・特技
直立ニソクホコウができる
・〜には目がない
寿司。寿司になりたい。
・ひとこと
ハンダ付けの夏、風流を感じる。


【解説記事】2の補数表現&マルチプレクサ

こんにちは、竹村です。

今回は「計算」パート最終章、2の補数表現マルチプレクサについてです。
これまでに比べて、内容が難しくなると思います。
それでは、張り切っていきましょう!


前回で2進数の足し算ができるようになりました。
では、引き算をしようと思ったとき、どうすればいいのでしょうか?
結論から言うと、前回の最後に紹介した、全加算器を組み合わせた回路(以下、この回路を単に「加算回路」と呼びます)で引き算も計算できるようになるのですが、それには少し工夫が必要です。
では、足し算をする回路で引き算をするためには、どのような工夫が必要なのでしょうか?

足し算と引き算はとても似ています。
引き算のことをマイナスの数を足す足し算だと思えば、引き算を足し算で計算できます。
たとえば、5-3=2を5+(-3)=2と考えればいいのです。
すると、マイナスの数を2進数で表現する必要が出てきます。
それこそが、2の補数表現です。

では、2の補数を具体例を通じて説明していきます。
2の補数は桁数が重要です。
同じ桁数の2の補数どうしでなければ計算ができません。
表1は、4桁の2の補数と、それに対応する10進数をまとめたものです。
4桁の2の補数では、-8から7までの16個の10進数を表現することができます。

 2の補数  10進数 
0111
7
0110
6
0101
5
0100
4
0011
3
0010
2
0001
1
0000
0
1111
-1
1110
-2
1101
-3
1100
-4
1011
-5
1010
-6
1001
-7
1000
-8
(表1:4桁の2の補数)

どうしてこのように数字を割り当てるのでしょうか?
この割り当て方こそが、加算回路で引き算を実現する工夫なのです。
加算回路は、普通の2進数の計算をするように設計されました。
なので、2の補数も、普通の2進数と同じように計算できる必要があるのです。

では、試しに計算してみましょう。
0101+1101=0010を計算したのが図1です。
前回と同様、一番上の行は繰り上がりを表しています。
表1と見比べてみると、この計算は5+(-3)=2となり、確かに引き算ができています。

2の補数の足し算
(図1:2の補数の足し算)

桁数を維持するために、一番上の桁の繰り上がりは無視します。
「そんなことしていいの?」と思う方もいるかもしれませんが、いいんです。
2の補数はそもそも、それを前提として考えられた数の表現法なのです。

2の補数のすごさはこれだけではありません。
気付いた方もいるかもしれませんが、表1を一番上の桁に注目して見てみてください。
なんと、マイナスの数かそうでないかが、一番上の桁を見ればすぐにわかります!
これは何桁の2の補数でも共通する性質です。

「これの何が嬉しいの?」と思う方がほとんどだと思います。
しかし、CPUにとってはとってもありがたいのです。
なぜなら、その数がマイナスかそうでないかが、たった一桁見ればわかるのですから。
実際に、CPUのとても重要なところで、この性質を使っています

さて、足し算と同じ回路で引き算ができることがわかりましたが、このままではちょっと嬉しくありません。
今のままでは、実際に計算させる式を入力するときに、足し算の形でしか入力できないのです。
そこで、ここからは足し算か引き算かを選べる回路を実現していこうと思います。

たとえば、6-4を計算させたいとき、ボタンを「6」「+」「-4」「=」と押すのは嫌ですよね?そこは「6」「-」「4」「=」と押したくなると思います。
この機能を回路で実現するためには、「-」ボタンが押されたとき、そのあとに入力される数をマイナスに変換する必要があります。
では、2の補数で表された数字は、どのようにすればプラスとマイナスを入れ替えられるのでしょうか?

その方法は、結構簡単です。
全ての桁にNOT演算を施して、それに1を足せばいいのです
NOT演算ってなんだっけ?という人は、論理ゲートについての解説記事を読んでください。
では、4桁の2の補数を例に考えてみましょう。
6を-6にしようとしてみます。
表1より、6は0110で表現されます。
これのすべての桁にNOT演算を施すと1001となります。
最後に、これに1を足すと1010となり、表1で確認してみると確かに-6を表しています。
この方法は、何桁の2の補数にも使えます。

さて、これで足し算か引き算かを選んで入力できる回路ができるかと思いきや、実はもう一工夫必要です。
まだ、足し算か引き算かを「選ぶ回路」を作っていません。
その「選ぶ回路」というのがマルチプレクサです。

マルチプレクサというのは、多くの入力の中から1つを選んで出力する回路の事です。
いまはその中でももっとも単純な、2つの入力のどちらかを選ぶ、2入力マルチプレクサを考えようと思います。

この回路、論理ゲートを組み合わせて作ろうとすると結構な個数が必要なのですが、実はリレーを使うと1個でできてしまいます。
思い出してみてください。リレーは2つのうちどちらかを選ぶスイッチでした。
つまり、入力のどちらかを出力するのです。
これは2入力マルチプレクサそのものではないですか!
ということで、2入力マルチプレクサの真理値表のようなものと、それを実現する回路を、それぞれ表2と図2に示します。

 SEL 
 out 
0
in1
1
in2
(表2:2入力マルチプレクサの真理値表のようなもの)

MUX_relay.png
(図2:リレーによる2入力マルチプレクサ)

つまり、SELが0か1かで、どちらの入力を出力とするかが決まるわけです。
また、これから2入力マルチプレクサは図3のように表現します。

MUX.png
(図3:2入力マルチプレクサ)

さて、これで必要なものは揃いました。
やっと、足し算か引き算を選んで計算できる回路を設計していきます。
ここからは図3の記号と、MIL記号や前回の記事で決めた記号を使います。
覚えていない方がほとんどだと思うので、前回の記事や、MIL記号についての記事を見ながら読み進めるといいと思います

何桁の回路でも作ることができますが、いまは4桁で作っていきましょう。
全体のイメージとしては、足し算か引き算かをマルチプレクサで選び、それを加算回路で計算するという感じです。
このイメージを実際の回路にすると、図4のようになります。
入力をa,b、出力をcとし、それぞれ下の桁からa0,a1,a2,a3などとしました。
この回路はSELが0のときa+b=c、SELが1のときa-b=cとなるようにcを計算します
ぱっと見ただけではわからないと思うので、具体例を交えて説明していきます。

adder2.png
(図4:足し算と引き算ができる回路)

まず、2+5を考えてみましょう。
足し算なのでSELは0で、表1よりaは0010、bは0101となりますね。
SELが0なので、2入力マルチプレクサは上の方の入力を出力とします。つまり、bをそのまま出力します。
一番下の桁のcinもSELですから今は0です。
よって、これは前回の記事の図6で示した加算回路とまったく同じ動きをします。
つまり、aとbを普通の2進数の足し算だと思って計算して良いのです。
結果、cは0010+0101=0111となり、表1を見るとちゃんと7になっています。

次に、2-5を考えてみましょう。
先ほどの例と違うのは、SELが1であることだけです。
SELが1だと、2入力マルチプレクサは下の方の入力を出力とするので、bのすべての桁にNOT演算を施すことになります。つまり1010です。
さらに、一番下の桁のcinがSELなので1となり、一番下の桁にさらに1が足されることになります。
足し算は順番を変えても問題ないので、これを1010に足すと1011となり、表1を見ると-5となっていることがわかります。
よって、加算回路では0010+1011が計算され、結果は1101となり、表1を見ると-3であることがわかります。

引き算の方は結構複雑だと思います。
わからなかった方は、2の補数でプラスとマイナスを入れ替える方法を意識して読むと、わかりやすくなると思います。
それでもわからなかった場合は、遠慮なくコメントで質問してください。

ようやく足し算と引き算をすることができる回路が完成しましたが、気を付けなければいけない点があります。
それは、この回路は入力や出力が-8から7までなので、入力や出力がこの範囲に収まるような計算しかできないということです。
たとえば、100-98を計算しようと思っても、この回路では計算できません。
また、4+6を計算しようとすると、表1より0100+0110=1010となり、答えが-6になってしまいます。
後者の例のように、計算はできるものの誤った結果を出力する現象を、オーバーフローと言います。
CPUを万能の計算機だと思い込んで使ってしまうと、こんな落とし穴があるんですね。


今回の解説は以上です。
「計算」パート最終章にふさわしい難しさだったと思います(訳:易しく説明できなくてごめんなさい)
さて次回はついに「値の保存」パート!…なんですが、実はたったの1回で終わってしまうかもしれません。
そんな次回は、Dラッチとその構成について解説します。

それではまた、次回の更新で。


【解説記事】2進数&全加算器

こんにちは、竹村です。

今回は2進数と全加算器についてです。
さっそく説明を始めていきましょう


ついに今回で足し算ができるようになるのですが、回路の説明の前にCPUで数がどのように表現されているか説明しなければなりません。
以前も話しましたが、CPUの内部では0と1だけですべてが表現されています。
すると、0と1だけで数を表す方法、つまり2進数が必要となってくるのです。

それではここで、2進数を復習しておきましょう。
10進数は9の次に繰り上がりが起こるのに対して、2進数は1の次に繰り上がりが起こります
10進数の0から10までと、それに対応する2進数を表1にまとめました。
2進数は下の桁から10進数の1,2,4,8,…を表しているので、2進数の1になっている桁に対応する10進数を足せば、2進数を10進数に変換できます。
たとえば、1011という2進数を10進数に直すと1+2+8=11となります。

10進数
0
1
2
3
4
5
6
7
8
9
10
2進数
0
1
10
11
100
101
110
111
1000
1001
1010
(表1:2進数と10進数)

では、2進数の足し算はどのようになるのでしょうか?
基本的には10進数と同じで、下の桁から足していって繰り上がりが生じたら次の桁に繰り上がった分の数を足します
たとえば、1110+1011=11001は図1のようになります。
一番上の行は繰り上がりを表しています。
1110と1011と11001は10進数でそれぞれ14と11と25なので、足し算が正しく行なわれていることがわかります。

2進数の足し算
(図1:2進数の足し算)

このような足し算を回路で実現していくのですが、一度にすべての桁を考えるのは難しいので、部分的に抜き出して一桁の足し算を計算する回路を考えていきます。
その回路のことを全加算器と呼びます。
では、全加算器は何を入力とし、何を出力とすればいいのでしょうか。

入力から考えていきます。
まず、足し合わせる2つの数が必要ですね。
それに、下の桁からの繰り上りがあった場合は、それも足さなくてはいけません。
すると、3つの0か1の入力が必要になります。

次に、出力を考えてみましょう。
当たり前ですが、その桁の足し合わされた結果の数が必要です。
さらに、繰り上がりがあった場合には、次の桁にそのことを伝えなくてはいけません。
よって、2つの0か1の出力が必要になります。

では、どのような入力のときにどのような出力になるのでしょうか。
真理値表を図2にまとめてみました。
入力は、下の桁からの繰り上がりをcin(carry inの略)、足し合わせる2つの数をin1、in2としました。
出力は、上の桁への繰り上がりをcout(carry outの略)、足し合わせた結果をoutとしました。
入力が3種類あるので、2×2×2=8種類の入力パターンがあることに注意しましょう。

 cin 
 in1 
 in2 
 cout 
 out 
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
(表2:全加算器の真理値表)

では、この真理値表が正しいか確認してみましょう。
実は以前の活動報告で説明したことがありますが、この記事でも説明します。
要は、3つの0か1を足して、結果を2桁の2進数で表せばいいのです。
このとき、上位の桁がcoutとなり、下位の桁がoutとなります。
足す順番は結果に関係ないので、以下の4パターンしかありません。

0+0+0=00
0+0+1=01
0+1+1=10
1+1+1=11

つまり、入力に1がいくつあるかで結果が決まります
実際に真理値表を確認してみると、確かに合っています。

そして、この真理値表に対応する回路、全加算器は図2のように論理ゲートを組み合わせることで実現できます。
線が重なっているところは、黒い丸があるところだけつながっています

FullAdder.png
(図2:全加算器)

これが先ほどの真理値表通りに動くかどうかの確認は、すべてのパターンをここで紹介するのは無駄に長くなるだけなので、2つの例で確認することにします。
以下の2つの図では、0を黒、1を赤で表しました

FullAdder-ex1.png
(図3:cin=0,in1=0,in2=1の場合)

FullAdder-ex2.png
(図4:cin=1,in1=1,in2=0の場合)

確かに真理値表と一致しています。
論理ゲートの挙動を覚えていない人は、前回の記事と見比べながら確かめるといいと思います。

さて、これで1桁の足し算ができるようになりました。
これから全加算器は図5のように表します。
FAはfull adderの略です。

FA.png
(図5:全加算器の略記)

あとは、前の桁のcoutを次の桁のcinにすれば、何桁の計算でもできるようになります。
ただし、一番下の桁のcinは0です。
例として、4桁の計算をする回路を図6に示します。
足し合わせる数をa,b、足した結果をcとし、それぞれ下の桁からa0,a1,a2,a3などとしました。

adder.png
(図6:4桁の足し算をする回路)

この回路では、4桁目のcoutを一番上の桁とすることで、出力で5桁の2進数を表現できますが、普通は4桁目のcoutを無視して、出力は4桁の2進数とします。
よって、この回路では出力が0から15までの数しか表現できないので、足した結果がこの範囲に収まるように、足し合わせる数に気を付ける必要があります。
もし、足した結果が15を超えるような入力をした場合、15の次は0に戻るので、15で割った余りが出力されることになります。


今回の解説は以上です。
足し算をするだけでこのややこしさです。わかりにくいことがあったら遠慮なくコメントで質問してくださいね。
さて次回は、ついに「計算」パート最終章!2の補数表現とマルチプレクサについて解説しようと思います。
足し算の次は引き算です!

それではまた、次回の更新で。


【解説記事】論理ゲート&MIL記号

こんにちは、竹村です。

今回はANDゲート、ORゲート、XORゲートの構成と、MIL記号についてです。
それではさっそく始めていきます。

今回紹介する論理ゲートは、どれも入力が2つあります。
すると、真理値表が少しだけ変わってきます。
NOTゲートは入力が1つだったので、入力のパターンが2種類でした。
それが入力が2つになると、2×2=4種類の入力パターンが考えられます。
なので、真理値表は表1のようになります。
in1とin2が入力で、outが出力です。
今は入力に注目しているので、outは空欄にしてあります。

 in1 
 in2 
 out 
0
0
1
0
0
1
1
1
(表1:入力が2つの場合の真理値表)

表1で空欄になっている4つのoutの部分のそれぞれに、0と1のどちらが入るかによってどんな演算となるかが決まります。
では、具体的に見ていきましょう。

AND演算(論理積)というのは、2つの入力をもち、その両方が1になったときだけ1を出力します。
真理値表は表2のようになります。

 in1 
 in2 
 out 
0
0
0
1
0
0
0
1
0
1
1
1
(表2:AND演算の真理値表)

outが1になるためにはinがどっちも1である必要があるというのは、ANDという言葉のニュアンスに合っています。
これをリレーで実現すると、図1となります。

and_gate.png
(図1:ANDゲート)

それでは、確かめてみましょう。
どちらも0のときは確かにoutは0につながっています。
in1だけ1のときも、スイッチは動かないのでoutは0につながったままです。
in2だけ1のときは、スイッチが動きますが、動いた先のin1が0なのでやはりoutは0です。
両方とも1のときは、スイッチが動き、動いた先のin1が1なのでoutは1になります。
真理値表と見比べてみると、ちゃんとAND演算が実現できていることがわかりますね。

次はOR演算です。
OR演算(論理和)というのは、2つの入力をもち、少なくとも1つの入力が1のとき1を出力します。
真理値表は表3のようになります。

 in1 
 in2 
 out 
0
0
0
1
0
1
0
1
1
1
1
1
(表3:OR演算の真理値表)

outが1になるためにはinのどちらかが2であればよいというのは、ORという言葉のニュアンスに合っています。
これをリレーで実現すると、図2となります。

or_gate.png
(図2:ORゲート)

これがOR演算を実現できているかの確認は、ANDゲートとかなり似ています。
なので、ここはちょっと手抜きをさせてください。
ぜひ自分で、ANDゲートと同じように真理値表と見比べながら確認してみてください。
もしわからなければ遠慮なくコメントで質問してください。

最後にXOR演算です。
XOR演算(排他的論理和)というのは、2つの入力をもち、入力の片方が1でもう片方が0のときに出力が1となります。
真理値表は表4のようになります。

 in1 
 in2 
 out 
0
0
0
1
0
1
0
1
1
1
1
0
(表4:XOR演算の真理値表)

XORは聞きなれない言葉だと思いますが、どっちかだけと覚えると覚えやすいかもしれません。
これをリレーで実現すると、図3となります。

xor_gate.png
(図3:XORゲート)

この回路は、スイッチが動けばoutが1になります。
スイッチは、電磁石の2つの端子のうち片方が1でもう片方が0のときに動きます。
つまり、入力の片方だけが1のときにoutも1になります。
ちゃんとXOR演算が実現できていますね。

さて、これで必要な役者は揃いました。
これからは、これらを組み合わせて、足し算と引き算をする回路を作っていきます
しかしその前に、それぞれの論理ゲートに記号を与えましょう。
いちいちリレーの状態で描いて、どれかを判断するのは大変すぎます。
使うのはMIL記号と呼ばれる記号で、図4のように表現されます。

MIL.png
(図4:MIL記号一覧)

次回からはこの記号をたくさん使います。
MIL記号と論理ゲートの挙動を覚えると、これからの解説記事が読みやすくなると思いますが、覚える気なんてさらさらないという方がほとんどだと思います。
そういう方は、次回以降の解説記事もこの記事と照らし合わせながら読むといいと思います。


今回の解説は以上です。
新しい知見が得られるというよりかは、似たような知識の羅列になってしまう回でした。
だからというわけではないですが、今回の記事にはちょっとおまけがついています。
読まなくても次回以降困ることはありません。
内容は難しめですが、興味のある方は読んでみてください。

次回は、2進数と全加算器について解説します。
ついに、足し算ができるようになりますよ!

それではまた、次回の更新で。



おまけ
今回の記事で、論理ゲートをいくつか紹介しました。
実は、論理ゲートの中に、他の論理ゲートを使って作れるものがあります。
NOTとANDをいくつかつなげることでORもXORも作れますし、一方で、NOTとORでANDを作ることもXORを作ることもできます。

これは一般に知られている事実なのですが、どんな真理値表(入力がいくつあってもいいです)に対応する回路も、NOTとANDとORをいくつかつなげることで表現できます。
もちろん、NOTとANDでORを表現したり、NOTとORでANDを表現したりできるので、NOTとANDまたはNOTとORだけで充分です。
それでも、よく使われるのはNOTとANDとORの3つですね。

ここで、こう考える人がいるかと思います。
リレーで作るときもNOTとANDとORの組み合わせでXORとかを作ればいいのに、と。
ですが、そんなことをすると大変なことになってしまいます。
リレーはタダじゃないんです!1個70円と意外に高いんです!それに、個数が増えれば作業量も増えるんです!
というわけで、よく使う論理ゲートを、なんとかして少ない数のリレーで実現しようと、頭をひねりにひねった結果が、紹介した論理ゲートの構成なのです。

ちなみに、最初はANDゲートやORゲートだけでも2個ずつで、XORゲートに至っては8個とか言ってました。
今考えると、恐怖でしかありません。

この話は、活動の中で個人的に印象深い部分だったので、おまけという形としてでも話したかったんです。
わがままにお付き合いいただき、ありがとうございました。


【解説記事】今後の予定&論理ゲート

こんにちは、竹村です。

前回の解説記事は内容が簡単なこともあって質問が来ないかなーなんて思っていたんですが、面白い質問が飛んできました。
コメントで答えたので、みなさんも見てみてください。
いつどの記事に質問しても大丈夫ですから、少しでも気になったことは気軽に質問してみてくださいね。

さて、これからCPUをどのように作っていくのかを説明していくわけですが、そもそもCPUとはなんなのでしょうか?
そして、どんな機能が必要なのでしょうか?

CPUはCentral Processing Unitの略称です。
簡単に言ってしまえば、コンピュータの頭脳部です。
では、CPUにはどんな機能が必要なのでしょうか?

ずばり、CPUにとって重要な機能は以下の二つです。
・計算をすること
・値を保存しておくこと

どうしてこの二つが重要なのか、例を交えて考えてみましょう。

いま、CPUに1から10までの和を計算させることにしましょう。
最初に思いつく最も単純な方法は、1と2を足して、その結果に3を足して、…と順に10まで足していく方法です。
実は、数学の公式などを使わない限り、ほとんどのCPUはこの方法でしか計算できません。
つまり、一度に多くの数字を足し合わせることができないのです。
するとここで、中間的な結果を保存しておく必要が出てきます。
確かに、1+2の結果を覚えておかないと、次は何に3を足せばいいのかわかりません。
それに、最終的な結果も計算した瞬間に消えてしまっては意味がないですよね。

このように、CPUは「計算」と「値の保存」が重要です。
なので、これからはこの2つの要素にスポットを当てて解説をしていこうと思います。
まずは、これから数回かけて「計算」に関することを説明します。そしてそのあとに、これまた数回かけて「値の保存」に関することを説明していく予定です。

そのあとはまだ未定です。
解説記事を続けるなら、具体的なCPUの設計の説明をしたいと思っています。
個人的にはすべてを説明したいなあと思っているのですが、はんだ付け地獄 諸事情によりできない可能性もあるので、今は何とも言えません。

それでは「計算」パートのはじめとして、論理ゲートと、そのうちの1つであるNOTゲートについて説明をはじめようと思います。


みなさんは「コンピュータの内部では0と1だけですべてが表現されている」という話を聞いたことがあると思います。
頭脳部であるCPUも、例外ではありません。

ではそもそも、CPUでは何を0として何を1としているのでしょうか?
答えは電圧です。「ピカチュウ!10万ボルトだ!」のあれです。
僕たちは、5ボルトの電圧を1、0ボルトの電圧を0と考えて設計しました。
なぜそうしたのか、という話は説明が難しいので詳しくは触れませんが、「リレーでCPUを作るのに都合がよかったから」ということです。

これで0と1が表現できたからCPUができるぞー!と言いたいところですが、そんなに簡単ではありません。ここからが本題です。
そうです、CPUにどうやって計算をさせるかという話です。

CPUは論理演算という計算しかできません。
論理演算とは、0と1だけを使った計算の事です。
しかし、計算と言っても、僕たちが小学校で習ったような足し算や引き算ではありません。
代表的なものとしてNOT(否定)、AND(論理積)、OR(論理和)、XOR(排他的論理和)などがあります。
これらの演算を組み合わせることで、足し算や引き算だけでなく、さまざまな計算をすることができます。
詳しくはもう少し後の解説記事まで待っていてください。

論理演算をする機構のことを論理ゲートと言い、NOT演算やAND演算をするものをそれぞれNOTゲートやANDゲートなどと呼びます。
では、リレーをどのように使って論理ゲートを作るのか、NOTゲートを例にして説明していきます。

さっきから論理演算を計算だと説明していますが、関数だと考えてもらった方がわかりやすいと思います。
つまり、何かが入力されたら、それに対応する出力をするということです。
NOT演算は、1つの0か1を入力することができ、0が入力されたときには1を、1が入力されたときは0を出力します。
これを表にまとめると表1のようになります。

 入力  出力 
  0   1 
  1   0 
(表1:NOT演算の真理値表)

つまり、入力とは違う数字を出力しているわけです。
これにNOT(否定)という名前がついているのもしっくりきますね。
また、入力と出力をまとめた、このような表のことを真理値表と呼びます。
今後もよく出てくるので、言葉を覚えてもらえると助かります。

では、この演算をリレーを使ってどのように実現するのかというと、図1のようにします。
inは入力、outは出力のことです。
Vは電源電圧のことで、要は1です。
Gはグラウンドのことで、要は0です。

not_gate.png
(図1:NOTゲート)

では、図1がほんとにNOT演算を実現できているのか確かめてみましょう。
電磁石には、一方の端子が1で、もう一方の端子が0のときだけ電流が流れます。
なので、inが0のとき電磁石は磁力をもたず、スイッチは動きません。
つまり、outはVとつながっているので1になります。
一方、inを1にしてみると、電磁石の端子が1と0になるので電磁石が磁力をもち、スイッチが動きます。
つまり、outはGとつながるので0になります。
以上より、確かにNOT演算を実現できていることがわかります。


今回の説明は以上です。
前回に比べて難しい雰囲気なってきました。
冒頭の部分も長かったので、読むのが大変だったと思います。
わかりやすく書いたつもりではいますが、質問がありましたら遠慮なくお願いします。

次回は「計算」パートの続きとして、ANDゲート、ORゲート、XORゲートの構成と、MIL記号について解説しようと思います。

それではまた、次回の更新で。


新しい…

こんにちは、ふじてつです。

久しぶりの活動報告です。


期末試験とかがありましたが、こちらの活動も進んでいます。

前にちらっとブログにも書きましたが、
配線方法を変えることで大幅に作業スピードがアップしました!!

従来
従来の配線方法

新しい配線方法
新しい配線方法


この新しい配線方法は作業量が少なくなり、とてもよいのですが、
何かの拍子に線が抜けてしまう可能性もあります。
そういう事故に気をつけなければなりません。

自分はこの作業をしたあと、誰かに配線を引き抜かれる夢を見て飛び起きたので、
自分に恨みでもない限り、線は抜かないでください(笑)


そんなこんなで、試作機の電卓のパーツはだいぶ出来上がって来ました。
デバックの作業が進んでいますが、ちゃんと動くことを祈るばかりです。



そして、なんと、

メンバーが4人になりました!!!!!1

今までちょっとお手伝いをしてくれていたK君こと桐山くんが正式にメンバー入りしてくれました。
これは百人力です!

後日当ブログにて、自己紹介をしてもらいますのでぜひそちらも御覧ください。



こんな感じで久しぶりの活動報告を終わりにしたいと思います。
今後はまたコンスタントに更新していきます。


【解説記事】リレーとは?

こんにちは、竹村です。

今回は活動報告ではなく、待ちに待った解説記事です!

初めての解説記事として、僕たちが使っているリレーについて説明しようと思います。
気になるけどきっと難しいんだろうなあ…と思っているそこのあなた!
この解説記事はそんなあなたのために書いているのです!
なので、一度は頑張って最後まで読んでみてもらえると嬉しいです。

そしてもし、読んで分からないところや分かりにくいところがあったら、
遠慮なくコメントで質問しちゃってください!
僕たちが返事をしたり記事を修正したりします。
というのも、この解説記事をベースに工大祭での展示を作るので、何も知らない人がなんとなく読んでそれなりにわかるレベルの記事を書きたいんです。
そこで、このブログを読んでもらってる方に分かりにくい部分を指摘してもらうことで、記事のレベルは上がり、質問した方は理解できて一石二鳥!という欲深い合理的な手法を考えたわけです。
また、「わかりやすかった」という旨のコメントも大歓迎です。
もれなく僕たちのモチベーションが急上昇します。
コメント、お待ちしています!

それでは、解説のはじまりはじまり~。


リレーとは、一言で言えば電磁石で動くスイッチです。

スイッチと言っても、僕たちが使うのは、二つの状態のどちらかを選ぶ単純なものです。
身近な例でいえば、ONとOFFのみがあるリビングの照明のスイッチなどが挙げられます。
イメージとしては図1のような感じです。
丸い部分が端子で、ここと他の部品(電源や抵抗など)をつなぐことで回路ができます。

swicth1.png
(図1:単純なスイッチのイメージ)

このスイッチは、どちらかに傾けるとその状態で止まります。
リビングの照明が突然消えるなんてことは無いですよね?
ですが、リレーは少し違います。

リレーのスイッチは基本的に一方に傾いており、その反対側に電磁石があります(図2)。
スイッチと電磁石は別々の回路です。

swicth2.png
(図2:電磁石があるスイッチ)

このとき電磁石に電流が流れると、電磁石が磁力をもち、導線が引き寄せられてスイッチが切り替わるのです(図3)。

swicth3.png
(図3:電磁石が磁力をもった状態のスイッチ)

もちろん、電磁石に電流が流れなくなると、図2の状態に戻ります。

リレーの仕組みはなんとこれだけです。
ね?簡単でしょう?

実際のリレーは図4のように書きます。

relay.png
(図4:初期状態のリレー)

電磁石が真ん中に来ていることと、一番下が二つに分かれていること以外、図2と変わりません。
つまり、上下段の回路と、中央の段の回路はつながっていません。別物です。

また、電磁石の位置が違うからといって挙動が変わるわけではありません。
見やすい書き方になっているだけで、挙動はさっき説明したのと同じです。
つまり、電磁石に電流が流れると図5のようになります。

relay_mirror.png
(図5:電磁石に電流が流れているリレー)

また、一番下が二つに分かれているのは、出口が二つになっただけです。
基本的に一つしか使わないので気にしなくて大丈夫です。


リレーの説明は以上となります。いかがだったでしょうか?
次回の解説記事では、論理ゲートというものと、その中の一つであるNOTゲートについて説明しようと思います。

活動報告の方も順次更新していきます。
それではまた、次の更新で。


«  | ホーム |  »

プロフィール

アンチ半導体同盟(仮)

Author:アンチ半導体同盟(仮)
東京工業大学 工大祭 2013でリレー式計算機を展示します。
日時:10月12日(土)、10月13日(日)
場所:大岡山キャンパス西9号館W934講義室
企画名:リレー式計算機展

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (0)
活動紹介 (19)
メンバー紹介 (2)
解説記事 (6)

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。