スポンサーサイト

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

テスラーのCPLD入門

自作回路にさせたい動作を考え、論理を整理し、回路図を書き出す。そのとき、使用する論理ゲートの数が増えるとICをどう配置しても配線が収まらなくなってくる。特にフリップフロップなどは一つのゲートへの配線が何本も出るのでジャンパー祭りかスパゲッティになる他ない。そういうとき、自分の好きなように中身をつなぎ変えられるロジックICがあればいいのになぁと誰しも一度は考えたことがあるだろう。
マイコンを条件分岐だけで回し続けることもできるだろうが、それではクロックの制約によって時間が離散的になってしまい、周波数の高い信号を扱うにはあまり向かない。
では何を使えばよいのか。秋月で110円で売られているアレを使えばよい。

cpld.png

プログラマブルなロジック!!これぞまさに求めていたものと言わんばかりの名前!しかも安い!110円!
これなら買って放置しても損にはならん、ってことで買ってみた(数か月前に)。

面実装パッケージなのでユニ基板党員は適宜変換基板を買わねばならない。変換基板とピンヘッダによってCPLD一つあたりのコストは300円弱まで上がってしまう。あれ、意外とそこまで安くない・・・??
秋月の変換基板はピンヘッダが四角形を描く配置で使いにくそうなので当方はaitendoの変換基板を使うことにした。
IMG_0853.jpg

・・・当然こんだけじゃ何もできない。

PLDの本質はマイコンとかなり違うといえど、やはり開発ツールと書き込み機が無ければ話にならないのは一緒である。
CPLDに手を出してみようか迷ってやめた人は凡そ書き込み機の値段を見てあきらめたのではないだろうか。
でもそこはご心配なく。秋月が以前に販売していた「PICの周辺回路をCPLDで作るキット」の説明書に書き込み回路の回路図が乗っている。
それによると、パラレルポートと3ステートバッファICといくらかの基本素子があればJTAGケーブルになるとのこと。
さらに言えばそれすら必要ない。なんとチップ自体とシリアルポートの直結で書けてしまう。これにはArduinoもびっくり。
シリアル書き込みについてはこちらのブログを参考にするとよい。

お次は開発環境をでっちあげる。xilinx提供のwebpack iseを使うのだが・・・
これを取りに行った人の何割が間違ったツールを取ってきたことか。
xiliiseeee.png
最初に入るとvivadoデザインツールのページになるのだが、それではなくちゃんとiseデザインツールのタブを選んでDLする。その前にアカウント作らされるけど会社名とかそういうのは無職の場合はそれっぽい何かを入れて通過しよう。
なおこのツール、ダウンロードデータだけで8GBあるというそこらのOSよりでかい化け物である。
インストール後のディスク使用量は17GBになるのでサブのノートPCにインストールするのは少々ためらわれる。

長い長いインストールが終了したらめでたく開発開始となるが・・・なぜかうちのPCでは64bitのデザインツールが起動しない。とりあえず32bitのほうは使えるので32bitで使うことにした。
ISEの使い方はこちらのページで図入りで解説されているのでそちらを参照すれば最低限のことはできる。

と思いきや「・ひな形をもとに(VHDL)ソースファイルを作成します。」とか
ハイレベルすぎんだろおい。
まあ題名が「ISEの使い方」であって「VHDLの書き方」じゃないからしょうがないのだけど。でもコードを書けないと意味ないのでそちらの解説ページとして「ハードウェア記述言語 -VHDL入門- 」を参考にさせていただくことにした。

書き方についてはまあその・・・自分で見様見真似でやってみると意外となんとかなるから。
当方プログラミングはifとwhileとforしか知らないのだが一日でロジック回路の代替程度の用途のそれっぽいものをコンパイルに通すことができるようになった。
フリップフロップは検索するとモジュールのコードが出てくるのでそれをコピってきて適宜いじればよい。
小さいモジュールを作って次第に包括して大規模になってゆくというのが全体のイメージかしら。ぶっちゃけソフトウェア記述言語より理解しやすいかもしれない。

さて、テスラーのためのと題したのでそれに準じた内容にしてゆくとしよう。
かくいう私自身、CPLDに手を出した発端が半年前くらいに考えたQCWDRSSTCのロジックの配線が面倒くさすぎるということにあるからだ。
今回手始めとして標準的なDRSSTC制御回路をCPLDに詰め込んでみることにする。
まずは目的の回路図からロジック部分だけを抽出し、入力と出力とワイヤーに名前を振ってゆく。
logicud25.png
これは某なんちゃらエンジニアリングさんのユニバーサルドライバ。
お好みのペイントソフトで字を貼り付けて画像を作っておくとよいだろう。てかこれがないと一瞬で何が何か分からなくなる。
ぶっちゃけパズルみたいに組み合わせるGUIのツールがあればそんな名前振りなんていらなくなるんだけど、そんな都合のよいものはないみたいなので素直に名前を振っていこう。
↑記号を並べるモードもちゃんとある
この場合、エンティティでDFFを二つ作り、一つ上の階層でコンポーネントとしてDFFを使う。

一連の作業を行い、コンパイルや各種整合性チェックに通ったvhdlがこちら。
UD2_5

なお、ISEの使い方の解説ページではピンとポートの割り当てを手動で行っていたが、それを行わない場合は内部リソース使用量を最小限にするピン配置が自動で割り振られる。

コンパイル等が済むとこのようなレポートが出てくる。
resultud25pld.png
まあほんと、コンパイラがエラー吐かなかったってだけで、実際使うと何か問題がでるかもしれない。それはいいとして。
表にあるマクロセルというのはつまりフリップフロップのことで、使用頻度の高いフリップフロップのためにあらかじめそういうゲートが中に用意されているのだ。DRSSTCドライバにはDフリップフロップが2つしかないが、なぜか6つも消費したらしい。
その下を見てみると、位相入力がただの入力ではなくグローバルなクロックとして扱われていることが分かる。
つまりもともと記述したDFF二個の論理回路を最適化したところ、一つのDFFの出力を分けるより2つ以上のFFを用意して全てに同時にクロックを流し込んだほうがCPLDのゲート数が一番少なくなると判断されたのだろう。
また、OCD入力がグローバルに出力の有効無効をつかさどることになっているのも割と納得のいく割り当てではないだろうか。ただ、OCD入力が入った瞬間にオフしたいわけではないのでこの言い方に引っかかるところがあるのもまた事実。
とりあえず開発ツールにシミュレーションツールがあるらしいのだけど、これまた使い方がすっげぇ意味わからないのでそのうち実物の信号を入れてみるしかない。

--------------------------
訂正
PhasePositiveが直接ワイヤーに入るのがおかしい。フィッティング後のピン配置を見ると入力が一つ抜けていたのでこいつが飛ばされたらしい。ORゲートを使用して結ぶとちゃんとフィッティング後にも出た。
ただし入力にインバーターが挟まったためグローバルクロックの扱いではなくなった。
しかし、いざ信号を入れるとうんともすんとも言わず。
AND一個だけの回路だと動くので書き込み自体は正常にできている模様。やっぱり一歩一歩検証していくしかないっすねぇ
スポンサーサイト

受動のススメ

自分が死んだあと、生前のある状態とそっくりそのまま同一の構造物を誰かが建造したら自分の意識はそこに乗るのだろうか。

様々な名前やバリエーションで語られる、ある種の哲学の最も基本的・入門的な命題である。
古典的なものではスワンプマンという名前で知られているだろう。トランセンデンスを筆頭に機械に記憶を移す科学者をテーマにしたSF作品は数知れないし、2chでも定期的にこの類の話し合い(場が場だけにギャグ路線であるが)が展開される。

このスワンプマン系命題についての議論の的は主に二段階に分かれる。第一段階として「意識が移るかどうか」。第二段階は「意識が移っていないものを本人と見なせるかどうか」。
文字通りに第二段階の問いの中では第一段階が偽ということが前提となっている。
なお、第二段階の問いになると哲学的ゾンビや他の諸々の命題が一気に押し寄せてくる上、解釈の数もいっぺんに広がってしまうので決定的な答えを下すことは不可能となる。

だが逆に第一段階は色々な方法で偽と結論付けることができる。もちろんそもそもが証明不能問題であるので真という結論を出す考え方というのもいくらでもあるのだが、真を出すことは、いわば追い詰められた犯人が「俺がやってないと言ってるからやっていないんだ」という程度の、小学生の駄々こねのようなものである。
対して偽を出すのは、理論的ステップを踏んで得られた結論が自分の既知の常識と異なっている場合にためらいなく後者を捨て去れる能力があるということだ。もちろん、こちらこそがまさしく科学的なアプローチに間違いない。

さて、なぜスワンプマンの第一段階でなかなか偽を受け入れられない人が多いかと言えば、ずばり命題のストーリーの中でコピーの建造がオリジナルの死後に行われるからだ。
そこで少しストーリーを変える。コピー元のオリジナルは死亡せず、生きている状態でその場にコピーを作成することにする。そしたらもうオリジナルは死のうが生きようが好きにすればよい。
こちらの場合ではかなり分かりやすくなるだろう。もしこのストーリーで意識が移るのならどうなるか?
コピー誕生時に移るならその瞬間オリジナルはいきなり意識を失って死ぬのか?
・・・これを「はい」と答えられると非常に困っちゃうんだけど・・・まあ、その、なんだ、とりあえずコピー先はコンピューターとかロボットとか異形の存在ってことにしといてさぁ、自分の知識をロボットに与えても自分は自分のまま変わらないから、とでも考えてしのごう。
で、コピー誕生時に意識が移り、残った肉体は哲学的ゾンビになるっていう発想もできるのであるが、思考を進めると後々全ての存在は一様に哲学的ゾンビであるってことになるのでそういうクローズドループ的なフィードバック的な輪によってこの発想は締め出してしまおう。
そう、意識や心の思考実験を考えるにあたって個人差が出るのはどこで思考を止めるかだ。もし止まらずに考えつづければ自分の意識も心も、自由意志も、またこの宇宙そのものも存在しないということを受け入れることになる。
大半の人間はどこかしらで「自分は人工知能とは必ず本質的に違う。自分で考える意識を持っている。生命と人工物を分ける決定的な要因が存在するはずだ。だからそれを発見すればよい」と、あらかじめ先入観的なゴールを設定してそれを守る行動をとり始めるようになる。
この派閥が影響力を持っているのが人工知能の話で、「実は人間もただテーブルに従って入出力しているだけでした」と認めるだけで一切の齟齬を取り払えるにも関わらず、その道の研究者でもやはり人間の特異性を求めがちなのである。この辺はチューリングテストや中国語の部屋等のキーワードで調べれば20世紀の一連の人工知能を巡っての議論をわかりやすく追うことができるだろう。
私自身は思考実験が示したことはすべて受け入れ宇宙すら無きものと考える立場であるし、また全人類にそれを望む。
何も常識を捨てることは恐ろしくない。諸物の根源と日常はそのスケールのあまりの相違によって別々の理論体系に分かれるからだ。例えば光速に近い速度の相加はただの足し算とはならないが日常では速度の相加はそのまま合計しても何一つ支障をきたさないし、不確定性理論によってすべての粒子が確率分布になっているといっても日常見かける物は全て確固としてそこに存在だけである。
同じく自由意志がないと示されたところで、事実として表面上はそれがあるように感じるのだから生活レベルでは今まで通り自由意志を肯定して過ごして差支えない。そして常識を捨てることの意義とは、主観を排除すべき議論においてすぐに頭を切り替えて客観的分析のみをもとに考えることができるようになることにある。
人間の抱える矛盾は総じてこの、ミクロとマクロの視点の取り違えによって生じている。全人類が日常を見るマクロの目と世界を見るミクロの目、言いかえれば宗教と科学を適材適所に用いることができるようにならなければ、人間はこの不安定に振動する非合理的な世界から脱却することはできない。

いささか話が外れてしまったがスワンプマン第一段階の問いへと戻ろう。先ほどはコピー作成時に意識が移るかどうかだったが今度はオリジナルの死がキーになるかどうかを考える。
この場合、例えばコピー作成から50年が経過してオリジナルが死ぬとすれば話が早い。50年も経てば互いは異なる多くの経験をし、意識は全く同期を外してしまう。持っている記憶が違っているのだから意識が直接乗り移れるわけがない。
強引に記憶ごと乗り移ったなら、コピー先に元あった意識は追い出されてしまうのか?その場合はまさに霊に憑りつかれたかのように豹変してしまいそうだ。
この際いっそ人間の寿命を無視してウェイト期間を10万年でも100万年でも極端にしてしまおう。その時にそれと時系列的にかろうじて同一な物があったとして、たぶんナメクジとトランスフォーマーくらい違ったものになっていることは避けられまい。そうなればもうオリジナルのコピーであるかないかなど何の意味も持たないことがわかるだろう。

なら、残る選択肢は原題と同じく死亡とコピー建造が同時という場合だ。
長期間待つ場合について、ウェイト時間を限りなく0に近づけてゆけばこの場合を考えることができる。
スキャンと再構成を0と見なせる時間で行えたと仮定し、すると上記の場合にわかったとおり、わずかでも時間が経つと意識は分岐してしまうので再構成後のまさにその瞬間を狙わねばならない。
これを実現したとすると、最初に論じた場合と同等になり、すなわちコピーを取った瞬間にオリジナルがいきなり死亡するという状況が発生してしまうのだ。
さらに屁理屈まがいのことを言えば、人間の死は瞬間でなされるものではないのだ。脳死とかなんちゃらかんちゃらで統一的見解が得られないことが示している通り、生体機能は徐々に失われるので生死の本当にクリティカルな境界は恣意的に決めることしかできない。
だから仮に意識がまだ比較的残っている状態で移るとすればオリジナルに謎の意識が残ることになり、意識が消える瞬間(があると仮定して)に移るとしたら、その時はすでに移るべき意識が消えているのだから何も移らないことになる。

このようにしてスワンプマン第一段階の答えは偽であるとひとまず確定した。もしやはり真であると言い張りたいのなら、その根拠は必ずこの議論とは何の足掛かりもない飛躍したところから持ってきたものである。
仮にその根拠が正しかったとしても、正しいと示すためには既存の理論とそれの間の隙間を順番に埋めなればならない。隙間を埋めない限りはそれは似非科学や迷信であり続けるしかないのだ。

と、まあこんな風に書いてみても読む側はどっかを読み飛ばしたり、あるいは知識ベースが違ったりすると書いた側が求める像を上手くイメージしてもらえない。結局人間は自発的に考えないと理解できないものだ。
そこでスワンプマンに代表されるタイプの思考実験を可能な限り多くの人に自発的にイメージさせる方法はないのかというと、世の中にはなんとうまいことを考える人がいる。
もうリンクすら貼らないが、「どこでもドア 思考実験」と検索して出てくるアレだ。五億年ボタンなら知っているひとが多いだろうが、それに類するインターネット読み物である。
まことに恥ずかしながら私はつい最近までどこでもドアの話を知らなかった。それを初めて目にしたとき、自分がかつて幾度となくふと考えて、しかし形容する言葉が浮かばないあれらのイメージがことごとく見事に文字から浮かび上がってきて至上の感慨を覚えたことを憶えている。
そのサイトは分割して書籍化されているのでじっくり読みたいなら本屋か図書館で探してみるとよいだろう。

哲学的な何か、あと科学とか哲学的な何か、あと科学とか
(2006/11/30)
飲茶

商品詳細を見る


あとは多世界解釈やシュレディンガーの猫など、なんとなくてきとうに解釈して分かった気になりがちなトピックを入門的な観点でさらってくれる。シュレディンガーの猫は「どうせ箱の中で検出器か猫が観測者になってるんだろwww」というような単純なものではない。
こういう類の解釈は崇高な物理学者さまが難しい計算をした結果から導かれることであり、そのもととなる理論などは素人が一目見て理解できるものなんかではない。そこで要点だけつまんで全人類に理解可能な言葉に置き換える必要がある。たとえばエントロピー増加法則といえば、理科に精通していない人でもとりあえず「全ては放っておくと乱雑になる」という言葉は浮かぶだろう。そもそもエントロピーは純粋な熱力学用語でありマクロな乱雑さとは一切接点のない単語なのであるが、乱雑さという直観的な単語を与えられることで普通の人間でも熱力学(詳しい過程は無視して)の表す一つの結論を"知る"ことができるようになるのだ。
だからシュレディンガーの猫などの話題が一般社会の中で出てくること自体が既に、誰かが頑張って科学の口語化に尽力した結果と言える。
「CPUが人間でメモリは机、HDDは倉庫」という例えも口語化の一つの形であろう。
口語化の功罪を考えれば、何かの分野を専攻している人が外野の人に自分の研究の話をするとかならず異口同音に定型の口語化文を言われてうんざりすることが罪だろう。
もっと卑近な例ではレールガンを作ったら「指で撃つやつ?」って言われるアレである。
超電磁砲だともはや「電気で撃つ銃」って概念しか残っていなくてローレンツカもくそもない有様。
いっぽうテスラコイルを作ると決まって「平沢進」と言われるのだ。
だが口語化の罪は功に比べれば無視できるほどに小さい。なぜなら口語化された定型句を憶えている人が仮にその定型句を聞いたことが無かったとして、そしたらその真面目な理論を学ぶようになるかと言えば一切ならないからだ。
逆に本格的に何かを学んでいる人の多くは最初は口語定型句によって興味を持ったと思われる。
一般的に科学は専門用語が多くてとっつきにくいと言われてるが、それがまさしく科学の罪なのだ。どんな人も自分の持っている専門知識を口語化して概略だけは伝えられるようにならなくてはならない。  と言ったら一番困るのは数学者だろうか。物理は現実の問題を扱うので割と直観的な例を出しやすいように思える。

さて、口語化で周知したら次に何をすべきか。人間とチンパンジーの学習行動のうちでもっとも違う部分は何か。他者に教えるか否かである。チンパンジーの学習能力は地球上の動物の中でも最も高い部類に入ると言われているが、自分の習得したことを他個体に伝承するということを一切しない。子供のチンパンジーは大人が道具を使っているのを見て真似することしかできない。つまり前代の試行錯誤を結局まるっきりもう一回行わなければならない。そのため文明というか技術というかがある一定より先には発展しないしないのだ。
それとは異なり、人間は自分が経験したことを無駄を取り除いて他者に伝えることができる。指導を受けた者は先駆者よりスムーズに彼のかつて行ったことを達成できる。
とは言っても、それが実は思ったほどうまくいっていないことが多々ある。大学に入ってからこれを特に実感するようになった。教える側が無意識に、「聞いている相手の知識は自分と同等」と仮定して話すのだ。
高校など、限られた時間で明確なノルマを達成しなければならない状況では教師はいやでも教え方の研究をせざるをえず、結果的に教わる側の理解の進展に合わせた論の展開を行うようになる。いや、できてない教師もいたっちゃいたけど。そういう人は中学部みたいなあまりリスクのないとこに配属されて、高3みたいな肝心な学年には評判の良い人があてられるのだ。


さて、教わる側の理解の進展に合わせるというのは具体的にはどのようなことなのか。
それはこの本を読めば驚くほどよくわかる。

CPUの創りかたCPUの創りかた
(2003/10/01)
渡波 郁

商品詳細を見る


たぶん電子工作をかじったことのある人なら聞いたことのあるタイトルである。CPUというからにはデジタル、とくに情報系とつながりが大きい分野の話だろうという印象を受ける。そのため、とくにそっち方面の工作をする気がない人は敬遠しがちになるのだが、それがこの本がタイトルで無念にも自身の価値を覆い隠してしまっている部分である。
この本は実は"ふつう"の電子工作をする人のためにこそあるのだ。
自分がここでどんな賞賛を並べるよりも実際に手に取ってみるのが早い。
1年くらい電子工作をやったことのある人なら内容は大体既知かすぐに分かることであるが、それ以上に「教える」ことの本質についてつくづくと学ばされる。
世界にこれ以上「入門書」という単語がふさわしい書物があるだろうか?
プログラミングの入門書を思い浮かべれば、ほとんど全て何らかの他の言語を習った前提で書かれていて、本当にhello worldから入る書物は一体どれだけあるだろうか?
それはいいとして、本書を最初から読み進めると、電気を1から学び始めたらつまづくだろうなという箇所でことどとく一旦話が切れて別の角度から最低限必要な事項の解説が入るのだ。相手は本なのになぜか自分の思考が全部読まれているかのような印象まで受ける。それほどまでに読者側の反応をフィードバックさせたクローズドループな思考で作りこまれた文章なのだ。
対面で相手の表情をうかがいながらしゃべったとしてもここまでできるだろうか?
恐らくすべての人間にできることではあるまい。それどころか全人類の中で相当な少数派の人間にしか成し得ないことではないだろうか。
事実として、私自身は多分似たような知識レベルの人間の中では比較的相手の側を考慮して説明する人ではあるが(ブログの文章は殴り書きなのであんまりそうじゃないけど)、スワンプマンの上手い説明を思いつくことは数年かけてもできなかった。
それを完璧なかたちで成し遂げる「どこでもドアの思考実験」に私は一生かけても到達することはできない。
おそらく電気について教えることになっても「CPUの創りかた」ほどのことは仮に工学部に進学したとしてもできないだろう。
入門者を順序良く導けるのは極めて希少なの才能なのだ。
そのような指導者と出会えなかった場合、自分で断片的な資料を集めてパンパンの頭で少しづつ考えることしかできない。だから、そういうときはいっそ自分から学ぶことはやめて良い説明に巡り合うのを待つことにしよう。
受動的な勉強というのもなかなか悪くないものである。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。