「そんな顔しないでくれよー。年末年始籠って此処まで進めたんだからさー。」
「此処まで、か…。二重の意味で。」
機転を利かせたギャグとは思えない。研究室に戻って早速、残る3人の相手に取り掛かったんだが、のっけから呆気にとられる状況で思わず絶句してしまった。マイコンも用いた暗号化無線通信システムという立派な研究テーマが、あまりに無残な状況だ。
ハードウェアは無線通信モジュールを使って、親機と子機の1対1通信が出来ることを確認出来た段階。PCで集中制御するシステムなのに、ソフトウェアはほぼ白紙の状態。ハードウェアはPCから色々設定する筈なのに、まったくマイコン部分のプログラミングが出来てない。幾ら卒研でもこの段階でこれは酷い。
年末年始に進めたと言うが、それは無線通信モジュールの1対1通信のみ。無線通信モジュールを製造しているメーカーが出している無料の制御ソフトを使って、「親機でボタンを押したら子機のLEDを点けたり消したり出来る」「子機のボタンを押したらPCの制御ソフトにデータの羅列が出る」というごく初歩的な段階。これで進めたと言われても困る。
此処からシステムとして形になる、例えば「複数の子機をPCで識別する」「複数の子機の設定をPCで集中管理する」「子機から送信されてきたデータを解読して、目的に応じたものにする」といったことにまで作り上げるのは、2週間足らずじゃ相当難しい。
親機にも子機にもなる無線通信モジュールにはA/Dや汎用I/Oが複数あるが、それらの設定はPCのアプリケーションでするか、モジュールをPCに直接接続してするかの何れか。汎用性を高めるなら前者が必須。それも全く出来ていないに等しい。
A/Dはあっても、測定対象によっては外部回路が必要になる。身近な温度測定でも、熱電対(註:異なる2種類の金属を接続し、その接続点が接する環境の温度に応じて発生する熱起電力(ゼーベック効果)を利用する温度センサ。アルメル・クロメル対、白金対がよく用いられる)を使うなら専用のアンプ回路が必要だ。小型化や熱電対接続を避けるなら、温度センサICが必要になる。
更に、PCのアプリケーションでモジュール内蔵A/Dの設定は出来ても、取り込む周期やある程度の演算処理−熱電対なら温度変換や補正−をPCが全て担うのは荷が重いから、モジュール内蔵のマイコンでさせた方が良い。それにはC言語が必要−この環境はマイコンのメーカーから無料で出ているようだ−だが、当の本人はマイコンのプログラミングが全く出来てない。
「…ハードウェアとソフトウェア、ソフトウェアはモジュール側とPC側両方を並行して進める必要があるな。」
「そんなこと出来るのか?」
「しなきゃ、次の中間報告で大恥をかくだけだ。大恥をかくだけで済めば良いけどな。」
「う…。」
「何でもかんでも適用出来るシステムは時間的に無理だ。システムとして確立することを優先しよう。」
俺はホワイトボードにハードウェアのブロック図とプログラミングの基本部分を書く。ハードウェアは測定対象を温度に限定して、測定は熱電対を使う。研究室の部品ストックに熱電対アンプはあるし、熱電対は工学部共通の部品庫にある。温度センサICはICを使うところから始めないといけないが、その時間的余裕はない。
熱電対+熱電対アンプの回路はパターン化している。定番の熱電対アンプを使えば尚のことデータシートの回路でほぼ事足りる。室温の測定程度なら回路を弄るより温度の補正とか測定結果の高精度化に注力する方が良い。1モジュールに1組の温度測定回路を実装して、LEDとボタンは動作確認用として残しておく。
電源をどうするかだが、この手のシステムの子機にAC電源はそぐわない。電池駆動にする。電池は単3を2本。アルカリならこれで3V程度、ニッケル水素なら2.4V程度出せる。モジュール搭載のマイコンは…1.8Vから5VまでOKか。なら電池の種類は選ばなくて良いな。回路を簡略化するため、DC-DC回路は省略する。
「ハードウェアはこうしよう。温度測定回路は熱電対アンプのデータシートにあるものをそのまま使えば良い。」
「凄くシンプルだなー。回路はユニバーサル基板で良いかな?」
「温度範囲は室温レベルだし、0.1℃単位の測定なんてしないから、ユニバーサル基板で十分。それよりユニバーサル基板を含めた子機全体を小型化して、小型化と電池駆動で何処でも設置出来ることをアピールする方が、このシステムの方向性に合う。」
「なるほどー。」
何処か他人ごとに聞こえる感嘆の声を無視して、ソフトウェア部分に移る。マイコン側は割り込みとA/D値の温度変換と補正に絞って記録とかはPCに集約する。PC側は子機を一覧から選択したものの測定結果をグラフ表示出来るようにする。子機からのデータ取得は、子機の消費電力を考えてポーリング(註:順次アクセスすること)じゃなくて、PC側からの呼び出し時のみにする。
割り込み周期がすなわち測定周期になるが、今回は1秒にする。室温が1秒で10℃も20℃も上昇するなんて、火事でも起こらない限りあり得ない。そんな特異な状況を考えるよりシステムの充実に注力すべきだ。温度変換したデータは、室温なら-127℃〜127℃なら1バイト(註:此処では8桁の二進数を指す。MSB(最上位ビット)を符号とすると、数値部分の7ビット=絶対値で127が収納できる)に収まる。これなら室温レベルから多少外れた冷蔵庫や太陽光パネルの表面とかでも十分対応できる。
マイコンのRAMは32kバイトある。十分余裕を見て20kバイトでPC側に受信要求を出させるとしても、おおざっぱに20000回=20000秒≒333時間分がマイコン側で記録・保持できる。データ容量はメインルーチンで測定回数をカウントしておけば十分。RAMに書き込むようにプログラミングするところが少々面倒だが、ROMに書き込むのは止めた方が良い。
PC側は、プログラム言語を簡単な方にすれば、ウィンドウからボタンまで自在に作り込める。肝心なのは送信データを解読すること。このモジュールはモジュール固有のプロダクトIDと、親機が自動で割り当てるデバイスIDの2種類を送受信の際に必ず含む。このIDはエスケープ文字(註:制御専用の文字データと同一の値を含む場合に、制御文字データではないと示すために付加されるデータ。プログラムとして認識・実行されることを防ぐためにHTMLのタグや「”」を全角処理することも含む場合がある)を含んで来るから、この識別や処理も必要だ。
恐らくPC側のプログラミングはこのエスケープ文字を含むIDの処理が中心になるだろう。これを怠ると複数の子機が識別出来ないから、送受信そのものが成立しない。エスケープ文字はモジュールのデータシートにある。受信ではそれが来た時にエスケープ文字を除外すること、送信ではエスケープ文字の必要性をチェックして必要なら付加することが基本になる。
いきなり形になるアプリケーションを作るのは無理だ。まずは基本になるエスケープ文字を含む識別処理と複数の子機の認識を確立する。それらが出来ればPCのアプリケーションはどれだけ凝るかになる。システムのコアになる部分をしっかり作り込んでおけば、中間発表で「システムのコアを作った」として最終の発表で「こういうシステムを作った」と持ち込める。
「アプリケーション側はこうしよう。兎に角コアになる部分を確実に作っておくことだ。」
「マイコン部分がどうしても分からないんだけど…。」
「割り込み関数はマイコンごとに異なるから、此処で直ぐに例示出来ない。基本はレジスタを設定して、割り込み関数を書いて、割り込みを許可すること。こうすればマイコンが所定の周期で割り込み処理をするから、得られたデータを処理すれば良い。」
「うーん…。」
「このサンプルはマイコンのデータシートとかに必ずある。それを探してまずソース全体を書いてみること。そのチェックとかはある程度フォローする。」
流石に最初から最後まで面倒を見られない。大体、マイコンの割り込み処理は学生実験でもあったこと。いかに学生実験をいい加減にしてきたかが良く分かる。他人任せにしてデータや結果だけ得ることを「要領が良い」と持て囃しさえする傾向があるが、これを根絶することが重要だろう。
「でも、何となく方向性が見えて来た。助かったー。」
「本来こういうのは、卒研に着手した時点である程度立てておくもんだけどな…。じゃ、次。」
この時点でそこそこ回復した体力を結構削られたが、まだあと2人居るんだよな…。この2人だけ「止めた」じゃ流石に不公平だし、3時過ぎの休憩までもうひと踏ん張りするか。それで全て終わるとも思えないのが何とも…。
ああ…。本当に疲れたな…。どうにか全員の対応を終えて休憩室に居る。時間は3時をとっくに超えている。淹れた紅茶をちびちび飲みつつ、一口チョコレートを摘まむ。これで幾分体力が回復すれば良いんだが。
「随分お疲れだね。」
休憩室に居た神谷さんが言う。
「ひととおり聞いてたけど、相当酷い状況だったからね。…そのうち1人は俺の担当だから、ひたすら申し訳ないとしか言いようがないんだが…。」
「俺も、本当に申し訳ない。フォローしようにも八方ふさがりでサンプルを使える状況にするしかなくて…。」
「平にご容赦のほどを…。」
「もう何と言って謝れば良いやら…。」
「院生の皆さんの責任じゃないですから…。」
他の院生もばつが悪そうに頭を下げる。だが、あれほど出鱈目な状況なのは院生の責任じゃない。それこそ今まで何をしていたのかと問い正しくなる学部4年の年末年始の取り組み方が全てだ。年末年始も変わらず研究室に来ていたと言うが、本当だったのかと疑いたくなる。
恐らく、年が明けたら俺がフォローするし、年末年始の最中も院生や先生がフォローしてくれると踏んでいたんだろう。だが、院生や先生もそれぞれ研究や生活があるから付きっきりは不可能だし、何もかも解決していたら卒研じゃない。他人任せにしてやり過ごせるのはせいぜい3年までだが、その癖が抜けてない。
「学部4年の酷さもあるけど、安藤君のレベルの高さが際立ってたね。1つ1つをきっちり把握した上で当面の方向性や対策を提示出来ていた。なかなか出来ることじゃないよ。」
野志先生が言う。野志先生も午前の途中から会議室に居た。あの一部始終もシンポジウム発表で今週いっぱい不在の久野尾先生の替わりにきっちり監視していたようだ。卒研でも出来が悪ければ評価は徹底的に下げる、特に院進学組は次回の中間発表で進捗を出せないなら最低評価だし、最終発表でも駄目なら修士1年で留年させるとも言ってるし。
「マイコンからPLD(註:Programmable Logic Deviceの略。近年はCPLDやFPGAの総称として用いられることが多い)までしっかり網羅出来てるね。あのレベルなら、そのまま次の中間発表に出しても良いくらいだったよ。」
「そうです、そうです。午前の部が終わってから別途打ち合わせしたんですけど、きっちり要点を押さえてて、方針とかも明確なんですよ。」
「今までの積み重ねの差が出てるね。自分で手を動かして頭を捻ったかどうかが。学生実験の時にもしっかり感じてはいたけど。」
「分かるものなんですか?」
「勿論。それは僕に限らず、どの先生方も同じだよ。そういうことを助教全員で情報交換して成績をつけてる。単純にレポートの出来が良いから10ってことはないよ。」
学生実験では口頭試験の状況が重視されるとは聞いたことがあるが、助教全員で決めていたとは初めて聞いた。学生実験は幾つもの分野があるが、科目としては「学生実験」1つ。助教の力関係は知らないが、誰かその年度の総括者みたいな人が持ち回りであって、その人が調整しているのか決めているのかしていると思っていた。
確かにレポートは、誰かのものを写せば正直やり過ごすことも出来る。データは少なくとも班では共通だし、レポートにおける考察やその他の調査検討事項−マイコンならある処理を他の手法で構築するなど−もテキストに記載されている以上班ごとに変わることはない。先にやり終えた班から貰うことでやり過ごすことは出来る。
だが、学生実験はとりあえず出席して実験をしてレポートを出せば単位は出るが、成績はバラバラ。しかも結構実験中の態度とかを反映しているようだった。助教は時々実験室に来ることはあったが、基本的に助言くらいはするが手助けはしないし、人によっては実験が終わって口頭試験に出向いた先でようやく対面、という場合もあるから余計に「?」だった。
「安藤君は他の助教の先生から聞いてるかもしれないけど、学生実験の様子でその学生がどの程度卒研以降で伸びるかは大体分かるもんだよ。手際の良さとかレポートの纏め具合とかは得手不得手や個人差があるけど、卒研以降は自分で考えて手を動かす学生とそうでない学生の差が顕著になるね。」
「研究室によっては、学生実験の成績が10か9でないと他の講義の成績が良くても入れないところもあるんですよね。」
「澤田研や増井研、堀田研あたりはそうだね。杉原研もかな。そのあたりの先生方の方針として、工作工場を使わない学生は要らないとしているから、学生実験の成績が低いと、他の学生のレポートを写したり実験を任せたりしてたと見て、そんな学生が来ると他の学生や研究室全体の足を引っ張るだけ、と考えておられるんだろうね。」
「レポートの纏め具合とかそういうのは、大して成績には影響しないんですか。」
「レポートが上手く書けないのは学部生じゃ普通だよ。そういうのは卒研や修士博士で練習するうちに上達していくもんだし、そのために院生は学会発表をするようにしてもらってる。要は自分で考えて手を動かして得られた結果をもとに書いているかどうか。そうでないとその実験が正当なものかどうかすら判別出来ないし、それじゃ院でも社会人でも問題外だよ。」
自分で考えて手を動かす。「そんなの当たり前」と思うが、その当たり前が驚くほど当たり前じゃない。レポートも誰かが作るなり何処かから仕入れて来たものを写した方が圧倒的に効率が良いし、実験も終始人任せで、丸写しが効かないデータだけ貰ってその他は写すか貰うかでどうにかなってしまうのが現実だ。
だが、卒研はそうはいかない。院生や先生は助言や相談には乗ってくれるが1つ1つ教えてはくれない。自分で実験して纏めて何処に問題があるかどう進めていくかといったことを自分で導き出さないといけない。それらは学生実験でテキストに沿う形で訓練したことの実践だと、卒研に取り組んで実感する。
学生実験はその日のうちに終わらないと駄目だったし、そのためには深夜までかかってでもやり遂げる必要があった。だが、卒研はある程度の期日までにそこそこの進捗なり考察なりが出来れば、別にある日は休んでも良いし学生居室で遊んでいても良い。だから、学会発表することになった夏は結構大変だったが、それ以降は学生実験よりずっと楽だ。
今まで要領良く−俺に言わせればずるくやり過ごして来た人は、卒研で今までのやり方が通用しないことに面食らう。面食らうだけならまだしも、中間発表で散々な目に遭う。現に前の中間発表でも大半が質疑応答で立ち往生した。前期あたりはまだ何とかなったが、前回以降は進捗を出すため年末年始も無関係に研究室に出て来る羽目になった。
これもまだ久野尾研だからましな方。野志先生が例に出した澤田研、増井研、堀田研、杉原研といった材料・物性関係や一部の電力制御関係の研究室は、自分で動かない学生は要らないという方針。学部生から積極的に工作工場に足を運び、自分で設計した装置を作り、それで実験して得られた結果から考察することが求められる。
そういうある意味泥臭い中から新しい見地が得られ、大学や公的研究機関のようなアカデミックな場であれば学会発表や論文になり、企業であれば特許に繋がる。どの方向に進めどその下地を学生時代に作っておくべき。そういう方針に順応出来そうにないならうちの研究室に来ないで欲しい。助教や院生クラスはそう公言している。
その見返りとして、就職はまったく心配しなくて良い。教授の元に彼方此方の企業から学校推薦という形で引き合いがあって、学生はそこから選んで企業に赴き、一応面接を受けて内定となる。求人倍率は軽く10倍を超えるし業種によっては100倍以上と言う。晶子やそのゼミの学生が耳を疑うような学生の売り手市場だという。
久野尾研でも音響・電子楽器や移動通信−要するに携帯キャリア−といった従来から研究室と関係が強い企業から、医療機器や無線通信関係など新規若しくは発展した形態の企業から多くの引き合いがあって、就職希望者は1人も漏れなかった。だが、学生時代に取り組み方の基礎が出来てないとドロップアウトの危険性が高いし、信用問題にも関わる。
「うちの研究室は同学年でフォローが出来るようにってことでフラグシップっていう概念を使ってるけど、えてしてフラグシップの学生は年末辺りから他の学生のフォローが中心になるね。出来る出来ないというより、やるやらないの二極化が激しくなるから。」
「年々その傾向は強まっているように思いますね。大川さんも木村君(註:現在修士1年のフラグシップ)も、年末以降は同学年のフォローが主体になってましたし。」
「教授会では、学生実験をもっと重視して進級や進学や就職のハードルに出来ないか検討しているそうだよ。どの研究室でも要領良くやり過ごして来た学生の成績に騙されて、研究室に入れたら豹変して愕然とすることがあるらしくて、それを見破る大きな要素はやはり学生実験だと考えているみたいだね。」
「それが現実になると、留年率が大幅上昇するかもしれませんね。」
休憩室に溜息や苦笑い混じりの笑いが起こる。つい去年まで学生実験の只中に居た経験からして、学生実験の評価が進級のハードルになると恐らく留年率は5割を超えるだろう。それくらい学生実験に対する学生の取り組み方は二極化している。それが突然大きく変わるとは思えない。
でも、学生実験の取り組み具合が卒研の取り組み具合に直結する、そこまでいかなくても大きく関係していることは間違いない。学生時代の知識や専門を多少なりとも生かせる分野に進むなら、どうしても自分で準備をする段階から実験をしてその結果から考察する姿勢は必須。ハードルとしてその姿勢が出来るまで大学に留めておくのは一案だと思う。
講義にしても、全く無駄なものは1つもないと思う。確かに講義の最中は意味不明だったり数式の羅列だったりして、工学と言うより数学じゃないかと思ったこともしばしば。だが、卒研をするにあたって、例えば位相の遅れは三角関数と極座標の関係でスッキリ説明出来る。講義は卒研までの基礎になっているのは間違いない。
学生実験は勿論重要だし、実質1人半でやりくりしていたことを思えば、学生実験をさぼる学生は進級させないで欲しい。だが、学生実験には少なからず講義の内容が関連している。講義の内容を実践的に体験して、実験からデータ取得・解析の一連の手法を体得するのが学生実験だから、講義はどうでも良いとは出来ない。
工学部は学科ごとに進級に際して様々なハードルを課している。それは単に学生を苛めてるんじゃなくて−それっぽい教官も居ることは居る−、卒研以降必要となる基礎知識と実験に関する一連の流れをきちんと体得した段階で進級させるためだと思う。そうしないと研究室も困るし、後々本人が一番困る。
もしかすると、この出来る出来ないの差は、大学における教育全般に関わる根本的な問題なのかもしれない。大学数は近年増えているが一方で学生になる年齢層は減少してきている。数年後にはそれが顕著になるだろう。その際、学生をどう集めるか。試験を優しく少なくして入りやすくするのか、敢えて難しいままにするのか。
入ってからも懇切丁寧に指導するのか、学生の自主性に任せるのか。色々なパターンが考えられる。大学も単科大学ならまだしも、理系文系が混在する総合大学だと意見の集約も難しいだろうし、ましてや一致させるのはまず無理だろう。どういう方針で進めるのか運営組織−大学だと主には教授会か−の手腕が問われるところだ。
だが、どんなに制度を弄ったところで完全無欠のものはない。最終的にはやっぱり個々の学生の意識の問題になる。それはやっぱり…、どの大学や学部学科に行きたいかよりどの大学や学部学科に入れるかが進学の基準になるところに行きつくのかもしれない。それはつまり教育制度そのもの…。難しい問題だな。
「…。」
「突っ伏さないでくれよー。」
突っ伏したくもなる。休憩を終えて最初の課題がこれでは…。FPGAによるネットワークの暗号化変調・復調回路というテーマだが、VHDLが全く分かってない。これで「どうしても動かない。助けて」と言われても正直困る。ガソリンが切れたのに交差点のど真ん中で「車が動かない。動かして」と言っているようなもんだ。
VHDLのソースが形になってるのは、entity(註:VHDLにおける入出力の定義。此処で名前と方向(入力か出力か入出力)を決定してから以降の回路動作を記述するのが基本)の部分だけ。これで「この先どうしたものか」と言われても、モジュールを作って組み立てて行けと言って通用する筈がない。
「…これじゃ変調復調どころの話じゃない。IPコア(註:ある機能を持つディジタル回路をパッケージ化したもの。開発ツールで無料で生成できるものもあれば、数千万以上する高価なものまで様々)以前に入力データをきちんとIPコアが認識出来るようにしないと駄目だ。」
「それって、入力と出力を接続すれば良いんじゃないの?」
「そんな都合良く出来てない。IPコアにしたって、認識出来るデータの形式じゃないと対処出来ない。あくまでIPコアはその機能だけしか持ってないんだから。」
根本的に認識が甘いと言うか出来てないと言うか…。繋ぎ合わせて何でも出来るなら電子回路は誰でも出来る。どんなものでも必要な機能はICなりソフトウェアなり搭載しているし、生成するウィザード(註:開発環境で所定の手順と選択で特定の機能やライブラリを生成するツール)で色々な機能とかが実現出来るが、その間の接続は自分でどうにかするしかない。
VHDLにもウィザードがあるが、それはせいぜいVHDLかVerilogの選択とデバイスの選定、それとentityの構築を含めたひな形くらい。それ以外の回路動作は自分で作らないといけない。IPコアでひたすら固めるとしても、その間のインターフェースが完全に一致していることはまずない。つまり、IPコアだけ作れても動く回路は作れない。
「PLL(註:Phase Lock Loopの略。周波数を高めるのに用いる回路で、水晶発振器と組み合わせることで安定な高周波発振器を生成できる)は…組み込んであるか。これがないと話にならないんだが。」
「じゃあどうして動かないんだ?」
「だから、入出力の端子を単にIPコアに接続したら動くってもんじゃない。このIPコアの概要は?」
「えっと…、これ。」
出して来たのはデータシートのコピー。これを読んで解決しろってことか…。俺もIPコア自体は知ってるが、自分のテーマではDSPの部分も自分達で作ったし、IPコアの性能や条件とかはデータシートを読まないと分からない。
「データシートを丸々出されても困る。俺だって何もかも知ってるわけじゃない。このIPコアがどういう機能で、入出力端子とビット数くらいは自分で説明出来るようにしてくれ。」
「う…。院生の人みたいなことを…。」
「院生の人でなくてもそう言う。で、説明は?」
「えっと…。」
学部4年がデータシートをめくりつつ、ホワイトボードにブロック図を描く。…外部から与えた鍵を元に入力信号を暗号化するIPコアか。入力は10bitから24bitのパラレル(註:複数のデータが行き来すること。データが単一だとシリアルと言い、USBはシリアル)。出力は16bit固定。鍵は128bitか。それとentityの信号線を直結してるわけか。
まさしく帳尻合わせ。その域を出ないと動作する回路にはならない。IPコアは入力を16bitにして、出力と合わせたつもりだろう。それはそれで良いが、他に入力のロード(註:電子回路でデータをキャプチャすることとそのための制御信号。RAMなど複数のデータを扱う回路ではデータの取り零しを防ぐために必須)やらイネーブル(註:データや回路動作を有効にすることとそのための制御信号。ICによってはイネーブルを「無効」にすることで消費電力を低減できる)やらがある。それらをきちんと制御しないと動く筈がない。
「動作しないってのは具体的にどういう状況だ?」
「何と言うか…、データが予想どおり出て来ない。変なデータばっかり出て来る。」
「その予想どおり出ないとか、変なデータってのが、回路の問題を探るのに重要なんだ。それをしっかり言えないと相手に問題が伝わらないから、相手も対処のしようがない。」
「う…。」
「回路図も見たところだと…、IPコアのロードの扱いが良くないみたいだな。これをデータの入力とタイミングを合わせないと、データを取り零す。そうだとデータがまともに出て来ないだろう。元のデータがまともに取れてないんだから。」
「どうすれば良い?」
「ちょっとは考えろ。…この回路はネットワーク向けだから、データは常時流れて来るものとして扱ってるのか?」
「そう。」
「だとすると、データのあるなしがロードと無関係だから、データが来るタイミングできちんとロードを有効にするようにしないといけない。この辺のロジアナの観測波形は?」
「えっと…。これ。」
ロジアナの画面を数枚差し出して来る。ロードが'L'になる(註:ディジタル回路なので'H'か'L'の2種類しかない。どちらで回路が動作するかはICや設計次第だが、'L'を有効とする場合が比較的多い)時間が短いな…。データは…100MHzで流れて来てるか。このタイミングでこの幅だと多分無理だな。ジッタ(註:信号波形が時間的に前後すること。タイミングが重要な回路ではジッタを含めて設計しないと動作が不安定になりやすい)で偶に取り込める程度だろう。
「このIPコアの電気的特性を見せてくれ。データシートにある筈。」
「えっと…。これ。」
「ロードがティピカル(註:標準の意味。「Typical」と表記されている)3nsec(註:ナノセカンドの表記の1つ。ナノ=10のマイナス9乗=1/1000000000=10億分の1)。最小2nsecとあるな。てことは、これだとロードはまず出来ない。ロードが2nsecに達してないのが殆どだ。」
「えー?…あー、確かに。」
「このロードは、単純にPLLで作ったメインクロックから分周(註:周波数を何分の1かにすること)して渡してるみたいだな。」
「そう。今回は1/4すればロードパルスになるから。」
「その分周回路はカウンタで作ってるけど、このソースだと極細のパルスしか出ない。」
分周でカウンタを使うのはよくある手段だが、数MHz程度ならまだしもこれくらい早くなると他の回路と組み合わせるとトラブルの要因になる。この手の分周で使うキャリー(註:カウンタが0か最大値までカウントした時に出力する信号。通常'H'で、条件を満たすと'L'になる場合が多い)は、条件を満たす数値の時のクロック半周期分くらいしか出ないからだ。
この分周回路のソースは、典型的なカウンタのキャリー出力。メインクロックが400MHzとなっているから、1/4分周したところでそのキャリーは2.5nsec(註:周期は周波数の逆数なので、1/400MHz=1/(400*10^6)=0.0025*10^(-6)=2.5*10^(-9))の半分。1.25nsecのパルスで最小2nsecの条件があるロードにそのまま適用したところで動作する筈がない。
ジッタや内部回路の時定数(註:抵抗とコンデンサで構成される回路による時間遅れ。高周波の回路だと配線そのものが抵抗やコンデンサ(とインダクタ(コイル))の塊と見なす必要がある)の関係で若干幅が広がる時があって、その時だけ運良くデータをロード出来る回路になってしまってる。これだと動作するところを探すのが難しいレベルだ。
「うーん…。でも、他に条件を満たすようなパルス幅を出せる分周回路なんて、どうやって作れば…。」
「PLLの発振周波数をもっと上げれば、回路を改良することで対処出来る。」
手段は色々あるが、一番簡単なのはメインクロックを現在の400MHzから800MHzにして、1/2分周した出力をDフリップフロップ(註:クロックで1bitのデータを保持する回路。これ1つで1/2分周が出来て使い勝手が良い)を通すことだ。これで安定したデューティ(註:ディジタル信号の'H'と'L'の比)50:50の200MHz信号が出来る。半周期が2.5nsecだからロードのパルス幅条件を十分満たす。
クロックの周波数を上げるのは、水晶発振器だと入手性からもせいぜい100MHzが限界と見て良い。だが、PLLを使えば安価に買える低めの周波数から高周波を簡単に作れる。しかもPLL回路そのものはウィザードが生成してくれるから、パラメータを指定すれば簡単に周波数を変えられる。これもハードウェア記述言語の利点だろう。
「このFPGAだとPLLは1.6GHzまで可能だから、800MHzは余裕。1/2分周はこのソースを改良すれば良いし、Dフリップフロップは回路例を探せばたくさんあるから、それを使えば良い。」
「なるほどー。」
「あと…、イネーブルの扱いも気になるが…。これはひとまず後にして、まずロード周りを改良してテストしてみて。」
「分かった!助かったー!」
本当に分かったんだろうか…?まるで全ての謎が解けたみたいな様子に疑問を抱かずにはいられない。とりあえず目の前の疑問を解決することが先決だし、これで良いか。恐らくIPコアのインターフェースもどうにかしないといけないだろうが。
「じゃあ、次どうぞ。」
「ようし!待ってましたー!」
「…。」
元気が良いのは智一。智一と反対に俺は激しい脱力感に覆われる。質問の常連者なのは今更言うまでもないが、どうして人に頼る時だけこうも元気いっぱいなんだろう?「これで自分の不明な点が一挙解決!」という期待でいっぱいだからか?
「そんなに嫌そうな顔するなよー。」
「そう見えるかー?だとしたら、そうなんだろうなー。」
「俺のためだと思って、もうひと頑張りしてくれ。」
「…本当に智一のためと思うなら、徹底的に自分で考えてどうにかするように説得すべきと思うんだが…。」
問答したところで智一が考えを改めるとは思えない。とっとと対応するか。…智一の後ろにはまだ順番待ちが居るし。
「信号を検出するところは出来てるみたいなんだが、波形がおかしいんだ。こんな具合。」
「どれ…。」
セキュリティシステムを想定して、CCDカメラやマイク・温度センサでごく小さい音や温度変化を検出して鮮明な画像を表示するシステムの基本部分。智一が出したオシロスコープの画面には、テスト用の微小信号と、それを増幅するOPアンプ、そしてそれをシステムの中枢であるFPGAで認識するLVDS(註:Low Voltage Differential Signalの略。数10MHz以上の高速信号を小振幅の差動信号(註:2つの信号の差を信号本体とする方式。グラウンド基準(シングルエンド)でないため、ノイズの影響を受けにくい)として伝送する規格)レベルに変換した結果がある。
「…OPアンプは増幅してるな。おかしいのはコンパレータ(註:参照信号と入力を比較して、参照信号を上回るかどうかで出力を切り替える回路や専用IC)か。両方のデータシートは?」
「これ。」
智一がデータシートを渡す。こっちも束なんだよな…。それはさておき、コンパレータの波形が出たり出なかったりしてる。こういう場合考えられるのは主にコンパレータの方だが、OPアンプの方がコンパレータで必要な信号条件を満たしてない場合もある。両方チェックしないといけない。
「増幅したOPアンプの出力の幅が結構狭いな…。10nsくらいか。」
「ファンクション・ジェネレータのsin(x)/xで試してるんだ。」
「ああ、なるほど。どうりで見憶えがある波形だと思った。…波形の増幅は概ね正常だな。ということは…コンパレータか。」
コンパレータのデータシートを先頭から順に見ていく。…伝搬遅延が気になったが、このくらいなら十分だろう。使用しているICはOPアンプもコンパレータも問題ない。なのに波形がおかしい。…ということは…回路そのものか。
「回路基板はあるか?なければ基板のレイアウト図面。」
「えっと…必要か?」
「ICはデータシートと比べた限り問題ない。となると、回路基板で失敗してる可能性を考えるのが無難だ。ICが正常でも回路が間違ってたら動作する筈がない。」
「基板は実験台にケーブルを接続してるから持って来られない。基板の図面を印刷して来る。」
少しの時間を挟んで、智一が基板レイアウトの図面を持って来る。FPGAとは基板コネクタで接続する形式か。ICのデータシートにあるピン配置と回路図も含めて照合していくか。
「回路基板は神谷さんがシミュレーションもして設計してくれたものだから、間違えてはないと思うんだがなぁ…。」
「可能性は低いが、ひととおり見ないと確証は持てない。それより実装ミスの可能性の方が高いと踏んでる。」
恐らく実装ミスだろう。だが、確認しておかないと疑いを持ったまま他の可能性を検証することになる。念のため基板レイアウトで配線ミスがないことを確認してから、実装の状況を確認する方が順番としても正しい。
「…OPアンプが正常動作しているから、OPアンプ周りは多分…大丈夫だな。だとすると…焦点はコンパレータか。」
「接続は間違ってない筈なんだけどなぁ…。」
「何かが間違ってるから正常に動作しないんだ。…ん?」
データシートと見比べていくと、5番ピンに異変を感じる。ラッチ(註:入力状態(HレベルかLレベル)の一時保持回路やその状態)が浮いてる(註:何も接続されていない端子やピンをこう表現する)。データシートだと…、使わないならHレベルに固定するようにとある。こいつのせいか。
「…此処。コンパレータの5番ピンが浮いてる。これって、入力を保持する必要はないんだよな?」
「ああ。何時信号が入ってくるか分からないからな。セキュリティ目的だし。」
「だとすると、5番ピンはHレベルに固定しておかないと、コンパレータの動作が不定になる恐れがある。」
回路基板そのものは正しい。シミュレーションもしたそうだから正確さはかなり増している。だが、ICによっては未処理のピンがあると動作が不定になったり、何かの拍子−多いのはノイズ−で意図しない動作をしたりすることがある。波形を改めてみると、出たり出なかったりしているから、ラッチ入力の電位が安定しないことで動作したりHかLのレベルのどちらかで固まってしまうことを繰り返してると考えられる。
「データシートにも書いてある。この辺だ。」
「…確かに。たったこれだけのことでまともに動かなくなってたのか?」
「この手のセンシティブなICだと珍しくなくなってくる。このラインが3.3Vだから、コンパレータの8番ピンから持ってくれば良い。これで試してみて動けばそれで解決だ。」
「分かった。これをはんだ付けかー。表面実装はこういう時きついよなぁー。」
「ランド(註:回路基板におけるはんだ付けをする場所)が結構広く取ってあるから、注意深く片方からはんだ付けしていけば出来ると思う。」
智一は拍子抜けしたような様子で、頻りに首を傾げながら席を立つ。はんだ付けまでは面倒見切れない。改造を想定してパターンにかなり余裕を持って作られているのが幸いだ。コンパレータにしても確かにSMDだが、ピッチが1.27mmのものだからまだまだ余裕と見るべき。
「えっと…。俺の番なんだけど、良いかな?」
…これで終わりじゃなかった。まだ…2人居る。先の2人が指示した内容を試した結果だけを持って来るだろうから、この分だと今日はこんなペースだな…。卒論の執筆を多少は進めたいんだけど、これじゃきついな…。