TTL地獄から30クロックDESへ──若手時代に学んだ「ハードは嘘をつかない」現場の記録
TTL地獄から30クロックDESへ──若手時代に学んだ「ハードは嘘をつかない」現場の記録
いま私はソフトウェアエンジニアとして、カーネルドライバや組み込みLinuxのコードを書く日々を送っている。しかし、私の技術者としての原点は、まだSoCが“全部入り”になる前、回路とバスとタイミングを自分の手で作っていた時代にある。
いまの若手エンジニアが経験することのないような「現場の手仕事」が、かつては当たり前だった。今回は、そんな私自身の“現場回顧録”を少し書いてみたいと思う。
🛠️ 第1章:TTL地獄との戦い──巨大基板をFPGAで“スカスカ”にした話(1999年)
私がまだ若手エンジニアだった1990年代末のことだ。ある日、磁気券を印刷する装置の回路を任された。そこに待っていたのは、TTL/CMOS ロジックがぎっしり詰まった2階建ての巨大な基板だった。
信号線が迷路のように走り、ICがところ狭しと並ぶ基板。その回路を見て私は思った。「これは……整理できるのではないか」と。
試行錯誤の末、2階建てのうち1階部分の基板サイズにすべてを収めるという目標を立てた。1枚分の回路をそれぞれFPGAに集約し、しかも既存の取り付けサイズに完全互換な形で設計し直す。ソフトウェア側はほぼそのままで動作し、中身だけがスッカスカのスマートな基板に生まれ変わった。
このとき初めて「自分の設計で装置全体の姿を変えられる」という感覚を得た。
いま思えば、この経験がすべての原点だったと思う。
⚡ 第2章:ハードのせいにされた“幻のIRQ”──逆アセンブルで濡れ衣を晴らす
次に直面したのは、今でも忘れられない事件だ。ある冬の日、装置がなぜか止まるという報告が上がった。原因はIRQ、割り込みが勝手に立っている。しかも、寒いときほど発生しやすいという妙な傾向があった。
会議が開かれ、ハード担当の私も出席したが、ほとんどの人が口を揃えて言った。
「これはハードの問題に違いない」
しかし、どうにも腑に落ちなかった。直感的に「これはハードじゃない」と感じたのだ。
私はソースコードの提供を求めたが、ソフトウェア側は拒否。しかたがないので、デバッガで逆アセンブルした命令列を追いながら、少しずつ原因を掘っていった。
そして、ついに突き止めた。
それは「ソフト側のIRQ処理ロジックの問題」だった。ハードのせいではなかったのだ。
結果的に、私は濡れ衣を晴らすことができた。しかし、その後ソフト担当が逆ギレし、「もうおたくのソフトは作らない」と言い出したという後日談がある。なぜか上司がその対応をしていたのも、今では苦笑いの思い出だ。
それでもこの出来事で私は学んだ。「“境界”の問題は、片方だけを見ていても解けない」ということを。
🔐 第3章:「30秒が30クロックへ」──誰もできないと言ったDESをFPGAで動かす
その後、ICカードを使う新しい装置の開発が始まった。そこでは暗号化にDESが使われていたが、CPUだけで処理するとカード発券の処理に30秒近くかかるという現実があった。
社内では「どうしようもない」「この性能では厳しい」と諦めムードが漂っていた。
そんな話を聞いていた私は、ふと思った。
「……じゃあ、FPGAで作ってみるか」
当時、TTL回路をFPGA化してFSMを設計するのに慣れていたこともあり、勝手にDES回路の設計を始めた。シミュレーションでうまく動いたので上司に報告すると、「じゃあやってみろ」と正式に担当が決まった。
私が設計したFPGAは、DES回路だけでなく、バスマスターとして自律的にメモリからデータを読み書きする機能も持っていた。DMAでは遅すぎたので、バスを「乗っ取る」発想で高速化を図ったのだ。R/W信号の逆相まで活用して、転送サイクルを限界まで詰めた。
その結果──
30秒かかっていた処理が、30クロック(数マイクロ秒)で完了するようになった。
後で聞いた話では、「研究開発部でも無理だ」と言われていたらしい。そんな話を技術部にいた私がやってしまったものだから、ずいぶん驚かれた。そして数年後、その研究開発部門に私が異動するきっかけにもなった。技術が自分の道を切り開いた瞬間だった。
🚛 第4章:キャラバン隊と“あーーー!”の叫び──初期化が教えてくれたこと
もちろん、華々しい話ばかりではない。忘れられない“やらかし”もある。
あるとき、現場から「特定の日にエラーが多発する」という報告が上がった。まったく再現できず、頭を抱えていたとき、先輩が一言言った。
「この条件のとき、確かに出るよ」
その瞬間からすべてが動き出した。再現条件がわかれば、ロジックを一歩ずつ追える。
そして原因を見つけたとき、私は叫びそうになった。
「あーーーーー!」
……シフトレジスタのリセットを忘れていたのだ。
この件で私は、初期化の重要性を骨の髄まで叩き込まれた。条件を見抜いてくれた先輩は、のちに工場長になるほど出世した。私にとっても、一生忘れられない恩人だ。
そして、もう一つ。CPLDとSRAMでDPRAMを組んだときのこと。両サイドのバスクロックが異なっていたせいでアクセスが不安定になり、またしてもキャラバン隊が結成される羽目になった。現場でJTAG書き換えをして回ったその日の疲れと冷や汗は、今でもよく覚えている。
🧭 おわりに──SoC時代にはもう体験できない“設計者の手仕事”
その後、私はハードウェア設計者からソフトウェアの世界へと軸足を移し、カーネルドライバを書くようになった。いまは完全にソフトウェアエンジニアとして仕事をしているが、それでもハードウェアをやっていた頃の経験は確実に生きていると感じている。
なぜなら、割り込み処理やバスの挙動、I/Oのタイミングなど、ソフトだけを見ていてはわからない“下の世界”が見えるからだ。
「なぜこの仕様になっているのか」「なぜこの遅延が発生するのか」を本質から理解できるのは、ハードの現場を知っているからこそだと思う。
いまの時代、SoCがすべてを内包し、ハードウェア設計の領域は以前より狭まっている。Web系開発のほうが派手で楽しそうに見えるかもしれない。でも、ハードウェアや低レイヤーの世界には、ものづくりの根っこに触れられる面白さがある。
TTLの山と格闘した日々も、幻のIRQに立ち向かった冬の日も、DESアクセラレータを勝手に作って世界が変わった瞬間も、現場でJTAGケーブルを握った夜も──すべてが、今の私の血肉になっている。
だから、若手のエンジニアにはこう伝えたい。
下のレイヤーにも目を向けてほしい。ハードウェアや回路の世界を敬遠しないでほしい。
その経験は必ず、あなたの技術者としての力を底上げしてくれる。
SoC時代にはもう体験できない“設計者の手仕事”が、確かにここにあった。
そしてそれは、今も私の中で、技術者としての指針になっている。
Discussion