なぜなにユリスちゃん1
それはある昼下がり
ユリス「ご主人様、教えて頂きたい事があるんです。」
ウィル「? なんだ?」
ユリス「よくご主人様は『PLD』とか『FPGA』とかおっしゃいますけど、それはどう言う物なのでしょうか?」
ウィル「…あれ? 俺、口に出して言ってたか?」
ユリス「考えてる時は、声は出さなくても口は動くものなのですよ?」
ウィル「なにそれコワッ! ユリスコワッ!」
ユリス「説明もなくそんな言葉を使われても、読む人には混乱するだけですよ?」
ウィル「うわー、昔、仕様書書いてて先輩に指摘された事、まんま言われたぁ」
ユリス「さあさあ、早く語句を説明しちゃいましょう。」
ウィル「ん〜そうだなぁ。予備知識ない処にいきなりPLDだのFPGAだのの話って結構難しいんだよな。取り敢えず、デジタル回路の話をしてからPLDやFPGAの役割の話をしていこうか。」
ユリス「はい、よろしくお願いします。」
ウィル「ちなみに、此処では『魔法』を『電気』と置き換えて話すのでそのつもりで聞くように。」
ユリス「よくは分かりませんが、分かりました!」
ウィル「さて、電気回路は大きく分けてデジタル回路とアナログ回路に分けられる。此処まで作ってきた回路だと、マッサージ魔法はアナログ回路、電卓魔法はデジタル魔法かな。」
ユリス「でも、マッサージ魔法にもNOT素子使ってましたよね?」
ウィル「嫌な処つくね…。まぁ、0と1で表現される情報を扱う回路がデジタル回路、それ以外はアナログ回路に分類されるんじゃないかな。でも、実際には電卓だってLEDやらボタンやらの制御はアナログなわけで、回路として完全に分離できるものじゃないな。」
ユリス「0と1で表現出来る情報っでどんなのがあるんですか?」
ウィル「なんだって出来るぞ。たとえば『右』と『左』とかな。じゃぁ、ユリス。俺が『0』と言ったら右手を、『1』と言ったら左手を上げてくれ。」
ユリス「はい、分かりました。」
ウィル「0!」
ユリス「はいっ」(右手をあげる)
ウィル「1!」
ユリス「はいっ」(左手上げる)
ウィル「よしよし、そう言う事だ。今は俺がユリスに上げてもらいたい手を0と1で表現したわけだ。」
ユリス「なるほど…でも、これだと両手を上げる。とか、両手を下げる…とかは表現出来ませんよね?」
ウィル「そうだな、そう言う時は桁を増やせばいいんだ。」
ユリス「桁を増やす?」
ウィル「そう、今度は4パターンだ。俺が
『00』と言ったら両手を下げる。
『01』と言ったら右手を上げて左手は下げる。
『10』と言ったら右手を下げて左手を上げる。
『11』と言ったら両手を上げる。
って感じだな。やってみるか。」
ユリス「はいっ」
ウィル「10!」
ユリス「ハイッ」(右手を下げて左手を上げる)
ウィル「11!」
ユリス「ハイッ」(両手を上げる)
ウィル「01 10 00 11,10,11,00,11,01!」
ユリス「ハイッ、ハイッ、ハイッ、ハワッ、ハワワ…っ」
ウィル「01,10,11,00,01やっぱやめて10!」
ユリス「ハワワわ〜…フギャッ!か、肩ぁ〜ッ」
ウィル「こんな形で桁を増やせば表現出来る幅も広がるんだ。」
ユリス「うぅ…『やっぱやめて』もデジタルなんですかぁ?」
ウィル「いや? あれは唯のイタズラ。」
ユリス「ご主人様…ヒドイ…」
ウィル「そして、デジタル回路はこの0と1を電圧や電流で表現するんだ。0ボルトだったら0、5Vだったら1とかね。」
ユリス「5Vが1の回路で、もしも電圧が2Vとかになっちゃったらどうなるんですか?」
ウィル「あぁ、そう言う時の為に実際には何V以上なら1、何V以下なら0という形で制限されるな。この判定の敷居値をスレッショルドレベルっていうんだ。」
ユリス「でもそれだと、スレッショルドレベルギリギリの信号が、入るとノイズで1になったり0になったりしちゃいますね。」
ウィル「…一応、魔法ではまだノイズって出てきてないんだけど…」
ユリス「……テヘッ……」
ウィル「……まぁ、そうならないように、1と認識するスレッショルドと0と認識するスレッショルドには差があるのが普通なんだ。」
ユリス「なんかお話し長くなってきましたね。」
ウィル「自分でもビックリだ。旗揚げゲームなんかするからだぞ。」
ユリス「ご、ご主人様がやりだしたんですよぅ」
ウィル「さて、この01信号を計算処理する回路を論理演算回路と言うんだ。
AND、OR、NOTはもう出てきたよな。
他にもXOR、NAND、NORなんてものがある。」
ユリス「それぞれの説明はないのでしょうか?」
ウィル「うーん、全部細かく説明しててらキリがないから簡単にな。
AND、OR、NOTは作中にチョット出てきてるので省略。
XOR(イクスクルーシブオア)は入力ABが異なる場合は1を出力、同じ場合は0を出力する。
NAND、NORはそれぞれAND、ORの出力を反転させた物だな。
これらの組み合わせと、さらにD-FFなんかを組み合わせてデジタル回路は構成されるんだ。」
ユリス「簡単ていうか、XORの説明しかしてないですね。」
ウィル「いや、これ以上細かく、真理値表とかまで使って説明したしたら、FPGAいくまでに本が一冊かけちまうよ…?」
ユリス「うーん、でも意外と構成要素は少ないんですね。」
ウィル「そうだな。実際にはシフトレジスタとかFIFOとかいう機能素子があるんだけど、これらもこの基本素子の集合として現わせるんだ。現実世界ではこれらの論理素子がICとして売られている。いわゆる74シリーズというやつだ。」
ユリス「現実世界?」
ウィル「74シリーズは元々アメリカのテキサス・インスツルメ◯ツ社が販売した汎用ロジックICのシリーズだ。番号ごとに機能がわかれてる。7404ならNOT、7406はANDといった感じだ。これはライセンス展開され各メーカから販売されている。日本だとTOSHI◯Aとかね。」
ユリス「現実…世界?」
ウィル「昔はこのICを組みわせて論理回路は構成されていたんだ。今でも、電子回路を趣味で作る人は愛用してるんじゃないかな。歴史が古いので本来の意図とは違う色んな使われ方をされてたりするのも面白いところだな。」
ユリス「げんじつせかい?」
ウィル「ユリスっ、そこはもういいから帰ってこい。」
ユリス「え、はいっ」
ウィル「しかし、このICで作る回路は兎に角巨大になりがちだ。基盤一面に黒いゲジゲジが敷き詰められてしまう。また、機能を修正しようとしたら、基盤ごと作り直さなくてはいけない。
…いや、その前にパターンカットとジャンパー線の嵐か…う、頭がっ…。
ま。まぁ、そんな中現れたのがPLD(programmable logic device)だ。これは中に自由に論理回路を構成出来る素子だ。しかも、何度も書き換えられる物もあるので、実験しては修正のトライアンドエラーも気楽におこなえるようになった。」
ユリス「え? 書き換えは気楽に出来ますよ?」
ウィル「魔法はなっ。でも電気では出来ないんだよ。基盤なんて起こしたらそれだけで100万円近くかかるんだ。金貨だと10枚な」
ユリス「そ、それは気楽にできないですね。二回作ったら私が買えちゃいます。」
ウィル「それは…ユリスを買っちゃうお友達が多そうだけどな…」
ユリス「おともだち?」
ウィル「ま、そんなわけでPLDの登場でデジタル基盤の拡張性は格段に上がったのだが、作れる論理回路は小規模なものだった。小規模なGALやPEELといったシリーズだと論理素子が数個。比較的大規模なPLDでも入れられる論理回路は電卓くらいだろうか。そんな中、大規模な論理回路を構成出来るICとしてASIC( application specific integrated circuit)ができた。所謂集積回路というやつで、これなら大規模な論理回路も構成できたのだが、これは一度作ってしまうと書き換えが出来ない。しかも、作り直そうとすると何百万円とかかってしまう。」
ユリス「わたしがセットで買えちゃいますね。」
ウィル「…なんのセットだよ?」
ユリス「うーんと…わたしとリジットのセットでしょうか。」
リジット「わ、私は非売品ですっ」
ユリス「あー、そういうのイイですから。ほら退場退場…」
リジット「え?私は出番これだけですか⁈ちょっ、ちょっと〜…」
ユリス「ふう…、でもそしたらASICってあまり利点ありませんね?」
ウィル「いや、一度版を作ってしまえばIC一個のあたりは安く作れるし、後で言うFPGAよりも消費電力は少ない。メリットはいろいろあるんだ。だが、まぁ大量生産向けだな。俺の会社では使ってなかった。」
ユリス「じゃぁ、実はご主人様も詳しい事は…」
ウィル「うむ、分からんっ。それよりも、だ。この大規模な論理回路を構成可能で、かつ書き換えも自由に出来るのがFPGA(field-programmable gate array)だ。」
ユリス「PLDとFPGAは規模が違うだけなんですか?」
ウィル「まぁ、内部の構成や、PLDと違ってIC自体はプログラム情報をもたないので、別途コンフィグレーションロムが必要だとか、差はあるけどな。規模が違うってことだけ分かってればいいと思う。言葉だけで言うならFPGAだってprogrammable logic deviceだしな。」
ユリス「どの位大規模なんですか?」
ウィル「ん〜、物によるけど、電卓くらいなら数百個は余裕で作れるんじゃないかな。ちなみに、最近は内部にCPUを構成したりも出来る。」
ユリス「CPUがなんなのかわかりませんが、すごいんですねぇ。」
ウィル「ああ。大規模過ぎて回路図では記載しきれない為に、内部の構造はソースコードで記述するんだ。これはHDL(Hardware Discription Language)と呼ばれるもので、有名のはVHDLとVerilogHDLだな。」
ユリス「言葉で回路を表すんですか?なんか難しそうです。」
ウィル「まぁ、慣れは必要だけどな。でもユリスだって電卓の回路を100回書くより、『電卓回路を100個作れ』って書くほうが簡単だと思わないか?」
ユリス「なるほど、そう言われるとそうかもしれません。」
ウィル「できれば魔法も言語記載出来ればいいんだけどな。魔法って回路の表現はかなり融通が利くけど、言語表記はまだできていないんだ。多分論理合成の処理を俺が把握してないからだろうと思うんだけど…」
ユリス「それはそうかもしれません。魔法は自分の認識を超えられないって聞いた事があります。」
ウィル「ん〜、やっぱそうなのかな。まぁ、ともあれ、これがPLDとFPGAだ。」
ユリス「はい、ありがとうございました。まだイメージ出来ない所がありますが、少し自分で考えてみます。」
ウィル「そ、そうか。まぁ、異世界の事だしわかりにくいよな。」
ユリス「はい。異世界ってなんだか知らないですけど、きっとご主人様の説明が分かりにくいからじゃないと思います。万が一、例えそうだとしても、私はそんな事言いませんからご安心下さい!」
ウィル「な、なんだろう。今日はユリスの言葉が痛い…」
ユリス「それじゃぁ、また分からない所があったら教えて下さい。ご主人様っ」
ウィル「お手柔らかにね」
--------
リジット「出番は? 本当に私の出番はあれだけなんですか⁈ もっと出番を〜!」
今回はFPGAの解説です。
いや今まで作中にFPGAとかPLDとか言葉は出していたのですが、まともに語句の説明していなかったので気になっていたのです。
という訳で今回の番外編の解説会を作らさせていただきました。
でもどうなのでしょうか。
読んでくださっている方はこういう中途半端な技術的脱線よりも、ストーリーが進むほうが良いのかもしれないなとも思うのです。
解説といっても中途半端なものですし…。
あ、念のために言いますが、真面目に勉強するなら、ちゃんと教科書使ってくださいね。こういうネットでの情報はちょっとした調べ物にはいいですが、しっかりとした技術は身につきません。
ではでは、お読み下さり誠にありがとうございます。
引き続き、お付き合い頂けたら、うれしいなぁ。
追記2014/04/12
サブタイトルを変更しました。