「論理回路っていったい何ですか?」
源内CADの質問コーナーにこの質問があがったのが、2002年08月22日 13時47分。
悩んだね、これにゃ。今2004年8月だから、2年ほど悩んだコトになる。いや、ずっと悩み続けてたワケじゃぁないけどねぇ
途中まで回答書いてみて、アップするに足る完成度にならなくて、消して、しばらく放っといてw、またそのうち考えて回答にチャレンジして。。。。w
約1年前に行き着いた答えは、「論理回路とは、量と時間を離散化して情報量を有限にすることにより簡略化した処理回路である」っていう答え。
それから半年ほど、この答えを自分の中で検証して見て、やっぱこれだなーと自分で納得したのが約半年前。
それ以降、この定義を簡単明瞭に説明する手法を思いつかなくて悩んでた。いや、ずっと悩み続けてるワケじゃなくってぇ。。w
|
量と時間の離散化。
この概念は、音楽CDのコトを考えれば、すぐ判る。
16bit 44.1kHzサンプリング。そう、これが量と時間の離散化。
瞬間的な音の強さ(=空気振動の変位量)を、-32768〜+32767の16bit長の値で表して、その量を毎秒44100回処理する。
16bit 44.1kHzサンプリングというコトバは、そういうコトを示している。
そうすると、どういう良いコトがあるかって?
「どんな音楽でも音声でも、とにかく人間が音として聞けるものならば全て、毎秒705600bitのデータで示すことが出来る。」、つまり、有限のデータ量を定義できる。
この逆を言えば、「毎秒705600bitのデータを処理できる装置があれば、人間が音として聞けるもの全てを処理できる。」ってコトになる。
で、毎秒705600bitのデータを記録再生する装置として、音楽用CDが作られた。
あ、音楽CDはステレオだから、データ量はこの2倍だわ(^^;
まぁ「人間が音として聞けるもの」っていう表現にちと難があって、アナログレコードからCDに切り替わった時代には「CDの音なんてゼンゼンあかん」って言う人も少なからずいらっしゃいました。
実際、人間用の音楽CDには、犬に聞こえる音の全ては記録再生できないみたいだし。。。(^^;
|
量と時間を離散化して情報量を有限にすると、何が良いかって?
そうすると、処理回路自体が有限になる。
アナログレコード全盛の時代、より良い音を求めて、人々は健気な努力を続けていた。
回路と回路を接続するコードを、酸素含有率が低く純度の高い銅で出来たケーブルに変えた。
回路の中に使われる電界コンデンサを、OSコンデンサという名前のものに変えた。
商用電源AC100Vのコンセントの2ツの電極のうち、どちらが接地されている側かを調べた。
レコードプレーヤーやアンプの下にレンガやコンクリートブロックを置いて、機器に振動が伝わらないようにした。
こういう努力って、どれだけの効果があるか?それは誰にも判らない(^^;
音楽を処理するレコードプレーヤーやアンプの性能限界が定義されない、すなわち無限だから、少しでも無限に近づくための努力。
で、こういう努力をどれだけ積み重ねれば良いかも、誰にも判らない。
つまり無限の処理系を作るための作業量は無限となり、落ち着くのは妥協した時ってコトになった。
音楽CD全盛の時代、こういう努力をする人は、あんまり見なくなった。
それは、音楽自体の情報量が毎秒705600bit×2という有限の値と定義され、その定義から音楽を処理する回路は毎秒705600×2bit相当の処理を行えればそれで十分だから。
雑音の量(S/N比)とか小さい音と大きい音の比(ダイナミックレンジ)とかも、音の情報を「毎秒705600×2bit」と決めた時点で性能限界が決まってしまい、その性能限界を超えるような努力はほとんど無意味だ。
|
実際の論理回路内部は、もっと極端に合理化されている。
1bitの情報を、'1'か'0'かで表し、その中間の値は許さない。例えば「2.1V以上の入力は’1'で、0.9V以下の入力は'0'」っていうふうに決めてしまう。ついでに、「'1'を出力する場合は2.7V以上を出力し、'0'を出力する場合は0.3V以下を出力する」と決めてしまう。
そうすると、その処理回路間の接続に0.6Vまでの雑音が入っても、誤動作したりせず、平気で動作できることになる。
現実の論理回路がそのような仕組みになっているから、論理回路の設計を支援するCADやシミュレータは、「処理回路間のノイズが0.6V以下に収まるように作られることを前提にして、もう細かい電圧は気にせず、'1'と'0'しか扱わない」ってコトになる。実際に回路を組む際にこの前提が守られていれば何ら問題はないし、この前提が守られない状態では論理回路どころか、どんな回路も動作しない(^^;
こんな極端な合理化が許されるのは、先に書いた「情報量が有限」ってのがミソになっている。
「ノイズを気にしながら1本の線を通すよりも、ノイズを気にしなくていい線を100本通す方が楽」
情報量が有限だから、必要な線の数が決められる。だからこういう割り切りが出来る。
この割り切りは、処理回路を構成する半導体にとっても都合が良い。
半導体の上では、ノイズを気にしなくて良い線であれば、ノイズを気にする線よりもはるかに高密度に、かつ機械的に作成できる。
高密度に作れるから、1本の線が100本になっても気にならない。
機械的に作れるから、1本の線が1000本になっても苦にならない(CADが勝手にやってくれるから)。
1本の線を100本とか1000本にバラす時、「時間が離散化されている」ってコトも大きな意味を持つ。
1本の線をバラした時、バラした線を伝達する信号は同時に伝わる必要がある。
時間が離散化されていないと、厳密な意味の「同時」が要求され、イコール実現不可能になる。
時間を離散化しているオカゲで、「離散化された単位時間内で同時」であれば問題は起きなくなる。
こういう論理回路の基礎が出来ると、論理回路で作られたコンピュータの性能が向上し、CADの性能が上がる。
CADの性能が上がると、より複雑な回路を手軽に作れるようになる。つまり生産性があがる。
同時に半導体の製造技術も進化し、より高密度の半導体を作れるようになる。
そうすると、さらに良いコンピュータが出来て、さらに良いCADが出来る。
こういう循環の果てに、50年前のスーパーコンピュータがズボンのポケットに納まるサイズになり、20年前のスーパーコンピュータが各家庭にゴロゴロしている現状になっている。。。
|
現在の論理回路は、そういう循環の果ての果てにある。
だから、今から論理回路を勉強しようって人には、とっつきにくいかもしれない。
この文を書いているTamuroだって、中学校の頃だったか、ANDとかORとか習った時にゃ「ふーん、で、それが何なの?」って思ったw
今わかるのは「ANDとかORとかFlipFlopとか、1個や10個持って来たって、別に何にもならんよ」ってコト。
だけど、「それらを10万個とか100万個とか組み合わせると、なんでも出来るよ」ってコトw
実際Pentium4では4000万個とかって数のトランジスタを使っている。ANDとかORとかFlipFlopとか、かなり乱暴に1個あたり10個のトランジスタを使うと考えても、400万個のANDとかORとかFlipFlopとかがあるワケだ。
そんな数の論理回路を、いったいどないして組み合わせるんじゃ〜って思うかもしれない。
それは、これまで論理回路を進化させてきた循環の中で、何人もの頭の良い人が、そういう方法を編み出してきたから、出来ている。
例えば同期設計。簡単に言うと「FlipFlopのT端子には全て同じクロック信号を入力しましょう」って言うルール。
これによって、時間の離散化の概念が、論理回路の入出力部分だけでなく、論理回路内部でも暗黙にかつ明確に使われるようになった。
この結果、タイミング解析と回路テストが簡略化されて(STAとかSCANとか)、より複雑な回路を誤り無く、かつ高密度に半導体上に形成できるようになった。
例えばHDL。回路の機能を書き下すと、論理回路を勝手に作ってくれる。
これによって、図面上でゲート間を結ぶ線をどこに書こうか、、なんて付加価値の低い作業から設計者を解き放った。
例えばFPGA。内部の論理回路を、3秒ほどで自由に書き換えられる半導体。
これによって、部品集めたりプリント基板作ったり半田付けしたりせずに、大規模な論理回路を簡単に実現できるようになった。
これから先、仕事として論理回路を扱ってゆく人は、10kゲートの回路を2日で作ったりすることになるでしょう。
そして、10進カウンタが7ツまでしかカウントしない〜とかって悩んでた頃を、懐かしく思い出すコトになるでしょうw
その時を楽しみにしながら、10kゲートの回路を2日で作れるように論理回路を勉強しましょう(^^;;;
|