久々の暴言記事(笑)

ディジタルの世界では信号を2進数の「1」と「0」として表現します。ここまでは結構知られていると思います。
ディジタル回路設計では、この1と0を電圧で表します。例えば、5V系の回路では「0Vが1」で「5Vが0」になります。

おや??「1は5Vで0は0Vじゃないの?」と気付いた方、鋭いです!(^ ^)/

本来であれば、「1は高い電圧」で「0は低い電圧」の方が人間の感覚に合っていますから、理解しやすいですよね。でもですね、一見逆なのには歴史的な経緯があります。

以前のICの構造はTTLと呼ばれる形式で、最近はCMOSと呼ばれる形式が主体です。内部の半導体の構成が違うと思ってください。TTLとCMOSでは入力電圧の閾値が異なるのです。詳しくはこちら(Wikipediaさん)
TTLは1を0Vにした方がノイズマージンが取れるので、内部の論理とはひっくり返して0Vで1を表すLow Activeが一般的です。これがCMOSだと先の解説にもありますが0V,5VのどちらをActiveにしても大差がありません。最近出回っているデバイスはほぼCMOSといって過言ではありません。
が、いつの頃からか・・・5Vを1として扱うHi Activeを普通とする人たちが現れました。ご自分で設計された回路の内部で閉じている分には問題ないのですが、他の人が作った回路と接続しようとすると・・・論理が反転してしまいます。一方では0VがHi(1)で、もう一方は5VがHi(1)なのですから。

ここからが暴言ですっ!(笑)
ハード屋さんはごく自然にLow Activeで物事を進めます。デバイスがCMOSになって、入力の閾値が変わったとはいえ、今までの慣習でもあり、何より蓄積してきた資産との接続が容易です(少なくとも論理をいじらなくても良い)。実際、デバイスのEnable信号などもLow Activeが普通ですし。
ところが、ソフトからハードに入ってきた方はHi Activeで回路を描きます。チップのEnable信号なんかだと、わざわざインバータを入れて論理をひっくり返していたりします!(笑)
意味もなくHi Active(例えば前段の電源が落ちて制御信号線が0Vに落ちた時も後段が誤動作しないようにという思惑でHi Activeならばわかるのですが)で回路を描いてきたら・・・ヤバいです。同じ様に、出力や入力電圧を確定させるためにPull Up抵抗という仕掛けを使う事がままありますが、Hi Activeの方々は往々にしてPull Down抵抗にします・・・最近のCPUだとガツガツ電流を流さないポートなら、命令一発でCPU内部に設けられているPull Upを使えるのに、わざわざ外部にPull Down抵抗を付けてきたり。。。しくしく。
※余談ですが、何も考えずにPull Up抵抗が10kΩだったり。電流が流れないCMOS系の考え方ならば問題ないのですが、TTLとは言わないまでもガンガン電流が流れる回路では、このPull Up抵抗に発生する電圧が大きくなりすぎてしまい、信号線の電圧が足りなくなったりとか!TTLが主体の頃はデバイスに流れる電流を計算して4.7kΩとか5.1kΩが多かったので、最近の10kΩの意味は分かるのですが、逆は難しいらしい。

ここ数年、外部の方に回路設計をしてもらう事があったのですが、ご本人が「設計ができます!」と言われても、回路図を見てPull Down抵抗を付けていたら・・・申し訳ありません、第一印象では「あ、この人は設計できない」って判断します(→ 少なくとも実務での経験はほぼ無いと判断します)。信号線の論理は回路図だけでは分からない事が多いですが、Pull Downは一目で分かりますからね。
※回路図を追って行って、Fail Safeの狙いなどで意図してHi Activeにしている場合は第一印象を訂正します!(^ ^)

組み込みなどでハード屋さんどうしは皆Low Activeで会話をしているのに、ソフトしか知らないで組み込みのソフトを書き始めた方はよく混乱していますね。。。
昔はハードに近い組み込み(特に組み込みマイコンのファームウェアとか)はハード屋さんやハード屋さんからソフト屋さんへ転向した人が書いたので暗黙の了解なのですが、ねぇ!?(^ ^)/