発生した問題

 ある電子機器メーカーの設計者Aさんは,無線携帯端末の開発を途中で同僚から引き継ぎました。製品仕様書を見ると,メモリ容量に比べてメッセージ保管件数が少なすぎる気がしました。なんと通常の1/4程度しか保管できません。

 そこで回路図をチェックしました。その回路図には,見慣れない会社の名前が書いてあります。同僚に聞いてみると,その会社が開発したソフトウエアとハードウエアをそのまま持ってきて,ユーザー・インタフェースの手直しだけで製品化しようとしていました。

原因と対策

 回路図には,多数のメッセージを格納できるように外付けの64Kバイト(64Kワード×8ビット)RAMを接続していました(図7-1)。8ビット・マイコンには16本のアドレス信号があり,その上位2本をアドレス・デコーダICに入力。「00」「01」「10」「11」の四つのパターンのうち,2本の信号が「01」のときだけRAMを選択します。RAMに入力するアドレス線は16本ですが,CSが有効になるのは上位アドレス線2本が「01」のときだけなので,RAMには16Kバイト分しかアクセスできません。またこのRAMを選択するタイミングのときだけRD(Read)/WR(Write)信号がRAMに供給されるようになっています。


(画像のクリックで拡大)

 なぜこうなっているのか,Aさんは考えてみました。マイコンのマニュアルでアドレス空間を調べると,図7-2(a)のように「0000-1FFF」「FFA0-FFFF」がマイコン内部のメモリや入出力(I/O)のために予約されていました。これらの予約領域を避けるために,アドレス・デコーダICを追加したようです。つまり上位2ビットが「01」のときだけRAMを使えば,図7-2(b)のように「4000-7FFF」を利用することになり,上記の予約領域を避けられます。


(画像のクリックで拡大)

 理由は分かりましたが,Aさんはちょっと変だ,と思いました。そこでマイコンのマニュアルを読むと次のように書いてありました。

◇RD端子は,外部メモリからの命令フェッチやデータ・アクセス時にリード・ストローブ信号を出力しますが,内部メモリをアクセスするときは出力せずにハイ・レベルを保持します。

◇WR端子は,外部メモリからの命令フェッチやデータ・アクセス時にライト・ストローブ信号を出力し,内部メモリをアクセスするときは出力せずにハイ・レベルを保持します。

 つまり,マイコンが内部にアクセスするときには,RD/WR信号は動きません。外部にアクセスするときだけ動きます。従って,メモリ空間の外部拡張領域に対してアドレスをデコードする必要はないことが分かります。結果として図7-2(c)のように,外部に接続したRAMのうち「2000-FF9F」が使えることになります。

 つまりアドレス・デコーダも,それに伴う付属部品も不要だったのです。不要な回路を取り除いた回路図を図7-3に示します。ずいぶんすっきりした回路になりました。使うことのできるメモリ容量を約4倍にした上に,不要部品を取り除くことでコストや基板に占める面積も削減できました。


(画像のクリックで拡大)

技術者必修の基本

 他者が設計したものを引き継ぐときには,必ずどのようなものか概要把握から着手しましょう。「不自然だな,おかしいな」と思うことがあれば,なぜそうなっているのか必ず確認し,設計者の意図をくみ取るようにしましょう。

 もちろん不自然と気が付くためには,何が自然なのか知らなければなりません。ここでは,まず製品仕様に対して必要なメモリ容量はどの程度なのか,を考えることが大事でした。また,メモリ・アクセスの考え方が身に付いていなければ,この問題を見つけることも解決することもできません。

 ただ,あまり難しく考える必要はありません。実際のマイコンの動作を自分で考えてみれば,たとえマイコンのマニュアルを読んでいなくても,マイコンが内部にアクセスするときにはRD/WR信号は動かないかもしれない,と想像はできると思います。マイコン・メーカーの設計者は使い勝手が良くなるように設計しており,不便になるようなことは考えないはずです。

 既存の設計,実装をそのまま受け止めるのではなく,他の設計者がどのように考えているのか思い巡らせ,自分ならばこうすると積極的な姿勢を維持する――技術者であり続けるためにはこのように考えることが大切です。