デジタル回路設計演習課題3
実験課題3
この実験では、カウンタICを用いて、16進カウンタを作成する。

図3-1:カウンタICを用いた4ビットカウンタ
| 種類 | 規格 | 個数 | 部品番号 |
| IC(16進アップダウンカウンタ) | 74HC112 | 1 | U1 |
| IC(NAND) | 74HC00 | 1 | U2 |
| 抵抗 | 470Ω | 4 | R1,R2,R3,R4 |
| 抵抗 | 22kΩ | 1 | R5 |
| 抵抗 | 10kΩ | 1 | R6 |
| セラミックコンデンサ | 0.1μF | 2 | C1,C2 |
| 電解コンデンサ | 10μF | 1 | C3 |
表3-1:カウンタICを用いた4ビットカウンタで使用する電子部品
図3-1は、カウンタICを用いた4ビットカウンタにチャタリング防止回路を付加したものである。
その際に使用する部品を、表3-1に示す。
この回路では、D/~Uが常に0に設定されているので、常にアップカウンタとして動作し、S2を押すたびに、0000→0001→0010→0011→0100→…→1111→0000という動作を繰り変えす。なお、出力は、LED1が1桁目、LED2が2桁目、LED3が3桁目、LED4が4桁目を表しており、10進数にして0から15までの数を数えることができる。
図3-1を参考にして部品を配置すると、図3-2のようになる。これを実行すると、S2を押すたびに出力が+1されており、チャタリングも発生していないことがわかる。

図3-3:16進アップダウンカウンタ
| 種類 | 規格 | 個数 | 部品番号 |
| IC(16進アップダウンカウンタ) | 74HC112 | 1 | U1 |
| IC(NAND) | 74HC00 | 1 | U2 |
| 抵抗 | 470Ω | 4 | R1,R2,R3,R4 |
| 抵抗 | 22kΩ | 1 | R5 |
| 抵抗 | 10kΩ | 1 | R6 |
| 抵抗 | 100kΩ | 1 | R7 |
| セラミックコンデンサ | 0.1μF | 2 | C1,C2 |
| 電解コンデンサ | 10μF | 1 | C3 |
表3-2:16進アップダウンカウンタで使用する電子部品
図3-3は、図3-1の回路に、スイッチを追加し、そのスイッチを操作することにより、アップカウンタとダウンカウンタとを切り替えることができるようにしたものである。
この際に使用する部品を表3-2に示す。
この回路では、S3によって、アップダウンを切り替える。S3が開いているとき、D/~UはGNDと同じ電圧になり、0となるので、アップカウンタとなる。一方、S3が開いているときには、D/~Uは電源と同じ電圧になり、1となるので、ダウンカウンタとなる。
図3-3を参考に部品を配置すると、図3-4のようになる。これを実行すると、S3を開いているときはアップカウンタ、閉じているときはダウンカウンタの動作をしていることがわかる。

図3-5:10進カウンタ
| 種類 | 規格 | 個数 | 部品番号 |
| IC(16進アップダウンカウンタ) | 74HC112 | 1 | U1 |
| IC(NAND) | 74HC00 | 1 | U2 |
| 抵抗 | 470Ω | 4 | R1,R2,R3,R4 |
| 抵抗 | 22kΩ | 1 | R5 |
| 抵抗 | 10kΩ | 1 | R6 |
| セラミックコンデンサ | 0.1μF | 2 | C1,C2 |
| 電解コンデンサ | 10μF | 1 | C3 |
表3-3:10進カウンタで使用する電子部品
図3-5は、図3-1の回路を10進カウンタに変えたものである。
この際に使用した部品を表3-3に示す。
10進カウンタとは0000→0001→…→1001→0000となるものである。つまり、1001になったら、値を初期化してやればよいことになる。初期化には~LOADを用いる。~LOADは、入力が0になったら、あらかじめセットした値にもどすものである。この回路では、ABCDは4つともGNDにつながっているので、初期値は0000にセットされていることになる。
1001になったときに、~LOADの値が0になるようにするには、1桁目と4桁目の両方が1になったときに、~LOADに0を入力できるようにすればよい。これはNANDゲートをもちいると実現することができる。
つまり、図3-5のようにすると、1001になったときに初めて、U2の入力12と13の両方が1になり、NANDの出力0が~LOADに入力され、初期値0000がロードされる。よって、1001の次に0000がきて、10進にして0から9までの数を数えることができるカウンタになる。
図3-5を参考にして部品を配置すると、図3-6のようになる。これを実行すると、1001のときにS2を押すと、0000になり、10進カウンタの動作をしていることがわかる。
考察
-配線を減らす方法
配線を減らすには、まず、入出力の位置を確かめるのがいいと思う。例えば、入力が左に偏っている場合は、その途中に必要な部品も左方向に固めると、長い導線を使用する必要ななくなり、回路としてはすっきりするのではないかと思う。
また、いったん配置した後に、もっと効率よく配置しなおせないか考えてみることも大事である。そうすれば、意外と無駄な配線があることに気づくことができるときもある。
-配線ミスを減らす方法
配線のミスを減らすには、第一にすっきりした回路をつくることを心がける必要があると思う。配線がごちゃごちゃしている場合、奥などを見渡すことが難しくなり、また、どことどこが繋がっているのかもわかりづらいので、ミスを見つける際も困難になる。
また、組み立てる際に、奥から手前に向かって組み立てていくと、奥が見えづらいということがなくなるので、ミスが減るのではないかと思う。
実験の感想
今回、実際に回路を組み立ててみて、非常に理解する上でいい刺激になったのではないかと思った。
今まで、電子回路を分解したり、紙の上で理論やシミュレートした動きを学習してきたが、こうして実際に動きの見える回路を自分の手で組み立ててみると、うまく動かなかったりして苦労した分、完成したときに得るものがより大きかったのではないかと思う。
デジタル回路設計演習課題2
実験課題2
この実験では、JKフリップフロップ2個を用いて、2ビットカウンタを作成する。

図2-1:JKフリップフリップを用いた2ビット非同期式カウンタ
| 種類 | 規格 | 個数 | 部品番号 |
| IC(JK-FF) | 74HC112 | 1 | U1 |
| 抵抗 | 470Ω | 2 | R1,R2 |
| 抵抗 | 100kΩ | 1 | R3 |
| セラミックコンデンサ | 0.1μF | 1 | C1 |
表2-1:2ビット非同期式カウンタで使用する電子部品
JKフリップフロップを用いた2ビット非同期式カウンタの回路図を図2-1に示す。
その際に使用する部品は表2-1に示されている。
この回路の入力は、S2であり、開いた状態が0を、閉じた状態が1を表している。今回使用するJKフリップフロップは負論理なので、CKが1から0に変わる際に、JとKの値に応じて出力Qが変化するようにできている。今回、JとKの値は常に1であるので、CKが1から0に変わるたびに、出力Qが1から0、0から1に変化することになる。
また、出力はLED1が1桁目、LED2が2桁目を表している。
それを踏まえて、回路を見てみると、1桁目は0→1→0→1→…を繰り返すだけなので、CKをS2につなげば、S2を押すたびに、出力Qが入れ替わるようになる。また、2桁目は、1桁目が1のときにS2が押されると、変化するようにする必要がある。よって、1桁目の出力をCKにつなげれば、1桁目が1のとき、S2が押されると、1桁目の値が1から0に変わるので、それにより、2桁目の出力が変わるようにしている。
図2-1を参考に、部品を配置すると、図2-2になる。
しかし、これを実行すると、チャタリングが発生し、1回しかスイッチを押してないのに複数回スイッチを押した動作をしてしまう。チャタリングの説明は、事前課題の3にある。よって、この回路にチャタリングを防止する回路を追加する必要がある。

図2-3:チャタリング防止回路付き2ビット非同期カウンタ
| 種類 | 規格 | 個数 | 部品番号 |
| IC(JK-FF) | 74HC112 | 1 | U1 |
| IC(NAND) | 74HC00 | 1 | U2 |
| 抵抗 | 470Ω | 2 | R1,R2 |
| 抵抗 | 100kΩ | 1 | R3 |
| 抵抗 | 22kΩ | 1 | R4 |
| 抵抗 | 10kΩ | 1 | R5 |
セラミックコンデンサ |
0.1μF | 2 | C1,C2 |
| 電解コンデンサ | 10μF | 1 | C3 |
表2-2:チャタリング防止回路付き2ビット非同期カウンタで使用する電子部品
図2-3は、図2-1の回路に、チャタリング防止のための回路を追加したものである。
その際に、使用した部品を表2-2に示す。
チャタリングは、スイッチを押した際に、電流が安定するまで、スイッチを開閉した状態を行ったり来たりするものであるが、図2-3のようなRSフリップフロップを付加すると、両方がハイになった際に事前の状態を維持し、結果として出力電流を安定させることができる。
図2-3を参考に、部品を配置すると、図2-4のようになる。これを実行すると、スイッチを押してもきっちり1回分の動作をするようになり、チャタリングが防止されていることがわかる。

図2-5:2ビット同期式カウンタ
| 種類 | 規格 | 個数 | 部品番号 |
| IC(JK-FF) | 74HC112 | 1 | U1 |
| IC(NAND) | 74HC00 | 1 | U2 |
| 抵抗 | 470Ω | 2 | R1,R2 |
| 抵抗 | 100kΩ | 1 | R3 |
| 抵抗 | 22kΩ | 1 | R4 |
| 抵抗 | 10kΩ | 1 | R5 |
| セラミックコンデンサ | 0.1μF | 2 | C1,C2 |
| 電解コンデンサ | 10μF | 1 | C3 |
表2-3:2ビット同期式カウンタで使用する電子部品
図2-5は、図2-3の回路を同期式に変えたものである。
その際に使用する部品を表2-3に示す。
この回路では、1桁目のJKフリップフロップの動作は変わらない。2桁目のJKフリップフロップでは、S2を押した際に1桁目と同じ値がCKに入るようになる。その際に、図2-3のときと同じ出力結果を得るためには、JとKを1桁目の出力とつなげればよい。CKが入ったとき、1桁目が0であったなら、JとKの値も0であるので、出力Qは変わらず、1桁目が1のときは、JとKの値が1であるので、出力Qは反転するようになる。よって、図2-3の回路と、同じ動作をしていることがわかる。
図2-5を参考に部品を配置すると、図2-6のようになる。これを実行しても、同じ結果が得られることがわかる。
デジタル回路設計演習課題1
実験課題1
この実験では、NANDゲートを用いてXOR回路を作成する。

図1-1:NANDによるXOR回路
| 種類 | 規格 | 個数 | 部品番号 |
| IC(NAND) | 74HC00 | 1 | U1 |
| 抵抗 | 470Ω | 1 | R1 |
| 抵抗 | 100kΩ | 2 | R2,R3 |
| セラミックコンデンサ | 0.1μF | 1 | C1 |
表1-1:NANDによるXOR回路で使用する電子部品
今回の実験で使用する部品は表1-1に示されている。
それ用い、回路を回路図で表すと、図1-1のようになる。NANDゲートを4つ、図1-1のようにつなぐとXORゲートと同じ動作をする回路になることは、事前課題の1、2により示されている。
図1-1を参考に実際に部品を配置すると図1-2のようになる。このとき、入力はS2とS3であり、スイッチを開けた状態が0、閉じた状態が1を表している。また、出力は、LED1であり、消灯時が0、点灯時が1を表している。この回路の実行結果は事前課題の1の図BのA,B,Xの結果と同じである。
よって、この回路がXOR回路と同じ動作をすることがわかる。
デジタル回路設計事前課題
事前課題
1.
NAND回路は、入力がすべて1のときに0を出力し、それ以外の場合に1を出力する回路なので、
以下のように、各端子に番号を振り、真理値表を描くと、以下のようになる。

図A

図B
図Bより図17.4の組み合わせ回路の出力結果XがXORの演算結果を一致することがわかる。
よって、この回路はXORゲートと同じ動作をすることがわかる。
2.

3.
チャタリングとは、スイッチ機構などにおいてオン・オフが切り替わる際に、装置の劣化や微細な振動などにより、オン・オフが細かく繰り返される現象であり、これが生じると、一瞬の間に複数回もの切り替えが行われたことになり、誤作動を生じてしまう。
これを防止するためには、高速な変化に回路が反応しないようにしたり、周期を長くするなどの方法がとられる。
UNIXレポート
<1-1>ファイルの識別を行う
ファイルの情報を読み取るにはfileコマンドを用いる。
file gif.fif、file jfif.fpgを実行する、
gif.gif: GIF image data, version 89a, 600 x 495
jfif.jpg: JPEG image data, JFIF standard 1.01
となり、それぞれ形式の異なるファイルであることがわかる。
<1-3>文字の抽出
テキストファイルから特定の文字列を抜き出すコマンドとしてgrepコマンドがある。
このコマンドにオプションで-vをつけることにより、特定の文字列を含まない行を出力できる。
よってgrep -r book 検索したいファイル名 と命令することにより検索したいファイルからbookを含まない行を抜き出すことができる。
<2-1>絶対パスと相対パスによるアクセスの仕方
/home/jikken/Mail/cur/mail.txt
~/Mail/cur/mail.txt
~jikken/Mail/cur/mail.txt
../Mail/cur/mail.txt
./../Mail/cur/mail.txt
./../../jikken/Mail/cur/mail.txt
<2-2>ファイル・ディレクトリの削除
オプションとして-rを指定した場合は、ディレクトリとその中にあるファイルを全て削除できるようになる。
たとえば、rm -r work とした場合、workというディレクトリとその中にあるコンテンツは全て削除される。
また、-fを指定した場合は、削除予定のファイルが存在しなかった場合の警告文などが表示されなくなる。
例えば、rm a.cとした場合、a.cというファイルが存在しなかった場合は、rm:cannot remove 'a.c':No such file or directory
と表示されるが、rm -f a.cと入力した場合はa.cというファイルが存在しなかった場合でも警告文は表示されない。
-iを指定した場合は、削除する前に削除するかどうかを尋ねるようになる。
例えば、rm -i a.cとすると、rm remove regular empty file 'a.c'?と尋ねてくる。削除する場合はy、削除をキャンセルする場合はnを入力すればよい。
<3-1>アクセス権利
アクセスモードがr-xの場合、ディレクトリの削除やその中にあるファイルの参照、削除はできるが、ファイルをディレクトリ内にコピー、移動することができない。
アクセスモードが--xの場合は、r-xの場合に加え、中にあるファイルの参照、削除もできなくなる。
<3-2>アクセス権利の変更
chownはファイルやディレクトリの所有者やグループを変更するコマンドで、例えば、chown jikken a.cとした場合はa.cというファイルの所有者をjikkenに変更したということになる。
また、chown jikken:studenta.cとした場合は、a.cというファイルの所有者をjikkenに、グループをstudentに変更したことになる。
さらに、-rオプションを用いると、ディレクトリの中身の所有者やグループを一括で変更できる。
<4-2>数値のソート
Web上で以下のような統計資料をダウンロードした。
6551 6522 6627 6731 6770 6816 6810 6766 6792
6642 6647 6723 6805 6876 6908 6873 6821 6832
6693 6657 6745 6822 6891 6892 6847 6842 6821
6677 6648 6724 6811 6866 6848 6815 6831 6831
6664 6638 6694 6786 6831 6824 6796 6791 6800
6677 6670 6722 6776 6821 6804 6783 6780 6753
6611 6604 6676 6708 6731 6741 6725 6732 6717
6560 6542 6649 6691 6735 6771 6722 6693 6692
6545 6539 6612 6688 6708 6683 6691 6710 6679
6557 6532 6573 6662 6742 6698 6699 6689 6722
6561 6549 6597 6652 6725 6717 6688 6699 6711
6542 6572 6632 6712 6757 6733 6691 6695 6691
これの4列目についてソートを行う。
less toukei.txt | sort +3 を実行すると、以下のようになった。
6693 6657 6745 6822 6891 6892 6847 6842 6821
6677 6648 6724 6811 6866 6848 6815 6831 6831
6642 6647 6723 6805 6876 6908 6873 6821 6832
6664 6638 6694 6786 6831 6824 6796 6791 6800
6677 6670 6722 6776 6821 6804 6783 6780 6753
6551 6522 6627 6731 6770 6816 6810 6766 6792
6542 6572 6632 6712 6757 6733 6691 6695 6691
6611 6604 6676 6708 6731 6741 6725 6732 6717
6560 6542 6649 6691 6735 6771 6722 6693 6692
6545 6539 6612 6688 6708 6683 6691 6710 6679
6557 6532 6573 6662 6742 6698 6699 6689 6722
6561 6549 6597 6652 6725 6717 6688 6699 6711
結果を見ると、4列目が降順でソートされているのがわかる。
<5-2>プロセスの強制終了
まず、実行中のプロセスが無限ループなどに入り、終了できなくなった場合はCtrl+Cでキャンセルする。
しかし、プロセスがバックグラウンドで実行中でCtrl+Cでキャンセルできない場合は、以下のようにする。
1.psコマンドにより実行中のプロセスを表示し、終了させたいプロセスのPIDを調べる。
2.killコマンドを用いて、kill -KILL PIDとして、プロセスを強制終了させる。
<6-2>穴埋め
(a)POP
(b)SMTP
(c)MIME
<6-4>よくある詐欺について、その説明と対策
フィッシングメールとは、本文にあたかも金融機関などからのメールであるかのような文を載せ、口座番号やパスワードなどの個人情報の入力を促すものである。
我々にできる対策をしては、送信者に心当たりのないメールは開かないこと、電話をするなどして確認することなどがある。
<7-1>他の計算機との接続
情報専攻のマシンに接続する際は、まずsshコマンドを用いて、ssh -l remotehostとして接続する旨を伝える。
詳しく記述すると、ssh -l アカウント huispc.huis.hiroshima-u.ac.jpとなる。
そして、パスワードを入力するように言われるので、パスワードを入力して接続をする。
<課題10.5>コマンド引数
ARGV変数の最大値の個数が#ARGVという場所に格納されているため、それを用いて、変数iを0から1ずつ大きくしながらARGVの個数の最大値までARGV[i]内の値を加算し続ける以下のプログラムを作った。
#!/usr/local/bin/perl
for($i=0;$i<$#ARGV+1;$i++){
$sum = $sum + $ARGV[$i];
}
print "sum = $sum\n";
実行結果
./perl10-5.pl 5 6 2 4 7
sum = 24


