膨れる全加算器
トランジスタ…コンデンサ…抵抗…
これでAND作って、さっき作ったORつないで…。
半加算器作って、全加算器作って…
て…やってられるかぁ!!
作業開始3日目。
早速破たんしかける電卓魔法回路の作成。
想像以上に苦行だ。
電気回路と違って半田付けしなくていいからなんとかなるかと思ったが、甘かったようだ。
もう展開している力場の中にスペルがが溢れかえっている。
はじめは3次元に配置できるのが楽しかったが、一定以上の部品量になるととてもじゃないが回路のつながりを追いきれなくなる。
よく整理されていないプログラムコードをスパゲティコードなんていうが、これが本当のスパゲティコードだな…。
not素子がスペルになってたんだから、ANDやORも売っていないものかな。
一度魔法屋に見に行ってみようか。
と、そこに部屋をノックする音がした。
「リジットです。お茶をお持ちしました。」
そういうと扉がすっと開く。
俺は展開している力場を閉じた。
「あらあら、そんなに慌てて閉じなくても、覗き見るつもりならノックなんてしませんよ。」
そういってリジットは余裕の笑みをこぼす。
「…ユリスは?」
「ユリスさんなら明日の食材を買いに行かれました。どうぞ…。」
そういってリジットは机の上にお茶を置いてくれる。
俺はそれを一口すすった。お茶の香りの中に甘酸っぱい柑橘系の刺激がほのかに混じっている。
でも、レモンほど酸味はきつくない。
「うまいな…。」
思わず口からそうこぼれた。
そして、そのまま背もたれによりかかり、肺の空気をお茶の香りと共に吐き出す。
「お疲れのようですね。」
リジットが少し離れた椅子に腰かけた。
「あぁ、なかなか回路設計が進まなくてね。回路規模がどんどん大きくなっていってしまうんだ。」
「あらあら…。どんな回路なんですか?」
「んーー…、電卓…計算機だよ。」
俺は少し迷ったが、素直にリジットに教えた。どうせ出来たらすぐにルーシアに使ってもらうつもりだ。
その時、リジットにだけ秘密にするわけにもいかない。
「けいさんき…ですか?」
「ああ、魔法で足し算とか引き算を計算するんだ。」
「それは……」
リジットが少し驚きの表情を浮かべる。
「本当にウィル様は発想が豊かなんですね。」
…素直にそう褒められると罪悪感が…。
結局元の世界の技術を焼き直しているだけなんだよなぁ…。
「でも、難しそうです…。正直私にはどんな魔法なのか見当もつきません。」
「いや、原理はそう難しくないんだ。ただ、同じ回路がいくつも必要でさ。回路規模が膨大なんだよ。」
「えっと…でしたら同じ回路はパッキングなさればよろしいのではないですか?」
「…ぱっきんぐ?」
聞き慣れぬ単語に思わず聞き返してしまう。
「ええ、パッキングです。…えっと…あ、ひょっとしてウィル様の地元では違う呼び方なのでしょうか」
リジットも戸惑っている。この様子だと「パッキング」なるものは一般常識なのだろう。
だが、俺は知らない。知らないことは聞くしかない。
「い、いや、説明してくれ。パッキングってなんだ?」
「その…作った魔法回路を一つにまとめて新しいスペルとして登録することです。」
「ど、どうやればできる?」
「どうといわれると…こう…。」
リジットが力場を展開する。そしてスペルを複数並べた。素子の認識形状が俺とは違うので、確かではないがたぶんウィスプと抵抗…レギだな。
初めてスペル符から起動したときの形状がこんなだった気がする。
リジットはそのスペルを両手で覆い、ぎゅっとおにぎりを作るように握りしめた。
「ウィスプとレギのスペルをまとめます。一応ライト…と命名しますね。」
そういって手を開くと今二つあったスペルが一つの光の塊になっていた。それが「L」の形状をとる。
「このようにスペルをまとめることをパッキングといいます。一度まとめればあとは・・・」
力場の中に「L」がたくさん浮かぶ。
「このようにいちいちウィスプとレギを力場に作らなくても、このライトのスペルで同じ効果を得られるんです。もちろん宝石なんかにに書きこむ事も出来ますし、呪符に書き込めば人に新しいスペルとして伝えることもできますよ?」
…な、なんてことだ。
俺はショックのあまり立ちくらみがする。ユーザー関数?モジュール化?サブルーチン?プロシージャ?
呼び方はジャンルによって様々あれど、要は機能の集積化。それは俺がずっと求めていたものだ。
はやる心を抑えながら早速力場を展開、AND回路を作成する。
そしてそれを両手で包み、なんとなくまとめるような感じで意識すると、スペルが一つになった感じがした。手を開くとそこには新しいスペルが…。おれは早速それにAND回路の記号を当てはめる。
……出来た…。出来たよ。
「す、すげぇ!!」
思わず俺はリジットの手を握りしめた。
「ありがとうっ、リジット!本当に助かった。」
「え…あの…まさかあんなすごい回路をかけるウィル様が知らないとは…。でもお役に立ててうれしいです。それじゃぁ、モールス君を…」
「それはダメ」
そっけなく俺は言ったつもりが、顔のにやけは止まらない。
両手に握ったリジットの手をぶんぶんと上下に振る。
「ハハハ、でも、本当にありがとう。その…すげー感謝してる。」
「そ、そんな…。照れてしまいます…。」
これはすごい。PLDがほしいなんていっていたけど、これならまさしくだ。
いや、容量に制限が無いならFPGAクラスの事だってできるかもしれない。
まぁ、大規模回路になると、スケマティック(回路図)でしか書けないのが難点かもしれないが、
この様子ならそれだって解決手段があるかもしれないな。
さらに言えば、これはアナログ回路にも適用が可能なのだ。
いやぁ、夢がひろが……。
……ガチャン……
何かが落ちる音が横から聞こえた。
振り向くとそこには扉の横で立ち尽くすユリスと、その手から落ちたらしきティーカップとお盆。
改めて自分を顧みれば、リジットの両手を握りしめてる俺と照れてるリジット。
……お決まりのパターンってパッケージングされるされてるものだよね…。
-------------------------------
それからもユリスはプク〜っとなっていた。
お茶を頼んでも、コップの半分までしか入っていないし、
洗濯物もパンツが裏返ったままたたまれていた。
しかも、それをリジットが
「あらあら、これはいけませんね。」
と言ってすっと直してしまってしまうものだから、ユリスがますますぷくーっとする。
一応事情は説明したのだが、なかなか納まらない。
てか、なんで俺が必死に説明しているのだろう…。
そんなユリスだったが、食後、俺の部屋にやってきた。
「ご主人様。今日の勉強をお願いします。」
…プク〜っとなったままだが、勉強はしたいらしい。てか、こんなに熱心に勉強するなんて、昔の自分に爪の垢を煎じて飲ませたいってやつだな。
ちなみに、現在、ユリスは四則演算はマスターしたので、分数と小数の概念を教えている。相変わらずのものすごい吞み込み速度で、もう分数の割り算にも手間取る事はない。
今も物凄い勢いで、用意した練習問題を解いている。しかも、殆ど暗算してるのだ。なんか、こういうの見てると今作ってる電卓とか、本当にいるのかと思ってしまうな…。
…あれ?
練習問題を解くユリスが珍しく手がとまっている。
「どうした?分からない所があったか?」
見上げたユリスは俺と目があうと一瞬ニコッとしかけてから、プク〜っとふくらんだ。
「この分数と小数って、本当に正しいんでしょうか?」
おおぅ、なんと現代数学の概念に挑戦状とはおそれいる(笑)。
なんて思いながらユリスに先を促す。
「どうしてそう思った?」
「はい。例えばこの1/3です。これは3倍すると3/3になります。3を3つに割るのですから答えは1です。」
「うん、そうだな。」
「でも、1/3は小数にする0.333…です。これを3倍すると0.999…になって1にはなりません。同じ計算のはずなのに違う答えが出てきてしまうんです。」
………ホントに現代数学への挑戦キター!
ゆ、ユリス。機嫌が悪いからってエゲツない質問をしてくるな…。
…まぁ、当たり前だが、嫌がらせでこんな質問は出来るわけはなく、純粋に疑問からきてるのは分かってるけどね。
「えっとだな…」
さて、どう説明したものか…」
「まず0.999…というのはどういう数字だ?」
「少数点以下に無限に9が並んだ数字です。」
「そう。それはつまりこういう事だ。」
俺は紙に2本横線を引き、上の一本に1と、もう一本に0.9と書く。
「1はココ、0.9はココだとすると、0.99はここだ。」
1の線のそばに0.99の点を打つ。
「同じように0.999はココ、0.9999はここだ。」
俺は同じように点を打つ。もっとも、0.999も0.9999も1の線に重なっていて見えないが。
「こういう風に0.999…っていうのは1に向かって無限に近づく数字なんだ。そして、それを数学では1と扱えるんだ。」
「ある数字に無限に近づく数字は、そのある数字として扱えるという事ですか?」
「ああ、そうだ。とりあえずはそういうものだとして、処理してくれればいい。そのうち、その辺りの話しも詳しくするから、今は練習問題を終わらせるんだ。あと、無限に近づくっていう事はどういう事なのか、自分で少し考えてみるといいよ。」
と、難しい質問には「それを調べるのを宿題としよう。後で調べた結果を報告してくれたまへ」方式に限る。
俺がよく、新人教育で使った手だ。
「はい、わかりました。」
そういって、一層速度を上げて問題を解いていく。
ん〜、困ったな。一応将来的に極限(lim)を使った計算を教えるつもりだけど、これはあくまで方法論で、本質ではないしなぁ。
てか、極限に対する扱いなんて、純粋数学で議論されそうな話しだ。
もし、日本の大学教育とか受けさせられれば、優秀な学者になれそうなんだけどな。
プク〜っと膨れながら通分する為に2340と3172と1612の最小公倍数を暗算するユリスを見ながらそんな事を思った。答えに4424940と書いているが、合っているかは俺には分からない。
-------------------------------
それから2日後。俺はパッキングの技術を使って一気に回路を作成し終えた。
まったく…いちいち抵抗とコンデンサを並べていたのがばかばかしくなる効率だった。
ちなみに、途中に一応試しで作った4bit計算機は無事に動いている。まぁ0から7までしか計算できないけどね。
電卓の筐体として木箱を買ってきて電卓の形に加工した。いや、電卓というより、大きさ的にはスーパーのレジスターに近いかもしれない。
こだわりとして、ボタンもしっかりと押せるようになっている。プスのスペルは圧力さえかかれば反応できるので、ボタンを作り込む必要はないのだが、やはりクリック感は大事だ。タッチ感がないボタンってなんとなく押した感じがしないからな…。
あと、今回は自分で力場に回路を構成するが、成功したらなにか宝石に呪文を書き込む予定だ。そうすれば量産も可能になるだろう。
俺の後ろにはユリスとリジットが見守っている。ユリスの機嫌は直っていないが、新しい魔法には興味があるらしい。
「よし、いくぞ。」
俺は力場を展開。今までせっせと書き上げた回路を展開する。
プスのスペルの位置関係や、ウィスプの発光位置を調整。
そしていよいよ、魔力回路に全体に魔力をかけた。
体を魔素が動き、ディスプレイ部分に「0」が浮かび上がる。
よ、よし。
では…
3485 + 2135
適当に思いついた数値を入力する。
「5620です!」
俺が「=」を押すより早くユリスが答える。
「って、あなたが計算してどうするのっ」
リジットの突っ込みはもっともだが、まぁ検算にはなるからいいだろう。
いよいよ俺は「=」を押した。
表示は…。
「5620!すごいですご主人さま、正解です」
ユリスの喜ぶ声
「すごいです。本当に魔法で計算できるなんてっ!」
リジットも歓声を上げてくれている。
「ちょ、ちょっとやってみていいですか!?」
ユリスが興味深々といった感じで聞いてきた。
よかった、機嫌がなおったようだ。
「ああ、かまわないよ。」
「あの…、私も触ってもよろしいでしょうか。」
リジットもおずおず聞いてくる。
「もちろん!」
回路がうまく動いて浮かれている俺は大判ぶるまいだ。
二人も夢中で計算機を動かしていた。
…しかし…
これ…意外と…魔力消費がでかいな…。
なんか、えらい勢いで体内の魔素が流れていく感じがする。
でも、途中で魔法を切らすのも恰好悪いし…。
「39563+24793」
「64356!」
そんな俺の逡巡の中、結局二人は一時間くらい電卓を動かしていた。今はユリスが計算速度で電卓と競っている。5桁は互角らしい。しかし、よく二人とも電卓でこんなに夢中になれるものだと感心してしまう。
「すごいです。なんで魔法で計算なんてできちゃうんですか!?」
「これは…ラッセン様に急いで報告しないと…。」
そんな声を聴きながら、ついに限界がきた。
俺の両手からの魔力放出が途絶え、その場で倒れこむ。
「「ご、ご主人様!?」」
…だ、だめだ。
魔力の消費が激しすぎだ、この計算機。
----------------------ここから電気回路チックなお話------------------
原因は簡単、不用意な回路の巨大化だった。
電気回路の場合。回路の巨大化はそれだけで損失とノイズとコストを生む。回路は小さくコンパクトに…が基本なのだ。だが、魔法回路の場合、素子の値段は全部タダ!配線を引っ張っても(多分)損失はなし!魔法スぺルは増やしたからといって、待機消費魔力が増えるなどのデメリットもなし!と、ある意味では夢のような環境であった為、つい調子に乗ってしまった。
贅沢に25bitバス幅で設計し、さらに不正な入力に対する処理やら、オーバーフローの処理やらを追加を行った。
25bitバス幅ということは、演算回路に使われる加算器も、メモリに使われるD-FFも、25セットが基本で必要になるということだ。よって、不用意な機能の追加は莫大な回路の増加を生んでいた。
……だから、仕様の追加は嫌なんだ……。
と、自分で追加した仕様に文句を言う俺。
まぁ、それはさて置き…。
先ほど魔法スペルを増やしても消費は増えないと言ったが実は例外がある。
それがプルアップ抵抗(プルダウン抵抗)だ。
プルアップ抵抗とは、主にデジタル信号を扱うときに、信号のラインと電源ライン(もしくはGNDライン)の間に入れる抵抗の事をこう呼ぶ。今回、25bitバス幅であるこの回路には膨大な数のプルアップ抵抗が使われていた。
1個なら大して魔力消費のないプルアップ抵抗も、数が集まれば馬鹿にはならない。
1KΩの抵抗でも1000個並列に並べたら1Ωになってしまうのだ。
結果、1時間使うと使用者が倒れるというスパルタンな電卓が出来上がったわけだ。
…ちくしょう…。
今回の失敗は実話です。(恥)
初めて大規模なバスラインを動かす回路を作った時、
プルアップ抵抗を10kΩで設計してたら、デジタル電源を作っていたデコデコ(DC-DCコンバータ)がアッチッチになっていました。
プルアップ抵抗と言えど、ちゃんと考えないとダメだという事を反省すると共に、回路はオシロや電圧計だけでなく、触覚(温度)で感じる事も大事なのだと学びました。(そのうち、味覚以外の五感全てを使うのだと悟ります。シックスセンスや、セブンセンシズも求められる事があります。)
ところで、私の業界は消費電力にそこまでうるさくないですが、スマホの回路とかはどうなんでしょう。きっとエゲツないくらいこの辺は突き詰めて設計されてるんだろうなぁと想像しています。