2020-05-19 13:40 — asano
カテゴリー:
前回予告したようにGAL16V8でオープンドレイン出力を実現するときの制約について書いてみます。
これ説明するためにはGAL16V8の内部構成の知識がある程度必要です。そこでデータシート記載のブロック図を見てみます。
同等の回路が並んでいるのでこれは一部分、全体の約1/3ほどです。
左側の格子状になっている部分がプログラマブルANDアレイ、右側のOLMCと書かれている部分がマクロセルと呼ばれます。
まずはANDアレイからです。
縦の線には各入力ピンからの信号とその反転信号が接続されています。例えば左端の線はピン2の信号、次はその反転信号、その次はピン1の信号といった具合です。動作モードによってはちょっと違う信号もありますが、今のところは気にしなくても大丈夫です。
横の線は省略表現で、展開した実際の回路は次のようになっています。
交点を繋いでいるのはヒューズ(実際のヒューズではなくEEPROM構造のスイッチですが、PAL時代からの名残でヒューズと呼ばれます)で、これをOn / Offすることで論理をプログラムします。
例えばI0⋅I1が欲しければI0とI1のところをOnにして残りをOffにします。
全てをOffにすると常に1が出力されます。
もしI0とI0をOnにすると常に0となります。
I0⊕I1はこれだけでは作れません。作り方はOLMCのところで説明します。
この一つのANDの結果を「積項」と呼びます。
続いてOLMCの説明ですが、入出力兼用ピンごとに1つありModeによって機能が少し異なります。Modeはデバイス全体で一つの設定です。
- Simple Mode
入力専用ピンが10本、入出力ピンが8本使えます。入出力ピンはそれぞれ入力に使うか出力に使うかはプログラムで固定され、動作中に切り替えることはできません。
これは出力に設定した場合、左から8本来ているのが前述の積項です。先ほどのI0⊕I1は、1本目はI0とI1をOn, 2本目はI0とI1をOn, 残りは0固定にすれば実現できます。
中央のXORは片方の入力がプログラムで固定され出力の極性を切り替えるためのものです。
出力ピンから左に行っているのはフィードバックと呼ばれ、出力ピンの状態をANDアレイに戻します。積項が足りないときなどにOLMCを2つ使うことで補うことができますが、利用できる出力ピンが減る・遅延が増えるといったデメリットもあります。8つあるOLMCのうち2つにはこのフィードバックはありません。
これは入力に設定した場合、ANDアレイからの信号は無視されます。 - Complex Mode
入力専用ピンが10本、入出力ピンが8本使えます。入出力ピンは動作中に入出力を切り替えることができます。
積項の1つが入出力の切り替えに使用され、ORに入力されるのは7本に減っています。 - Register Mode
入力専用ピンが8本、入出力ピンが8本使えます。入出力兼用ピンはピンごとにD Flip-Flopを使用するか設定できます。
D Flip-Flop使用の場合、CLK, OEはすべてのOLMCで共通となり、個別に入力に切り替えることはできません。D Flip-Flopを使わなければComplex Modeと同様の構成になり入出力を切り替え可能です。
本題のオープンドレインはComplex Mode(Register ModeのD Flip-Flop不使用ピンでもできるはず)の入出力切り替えを利用しています。出力が0になるようXORまでの回路を固定しておき、一番上の積項が1のときは出力になり"L"を出力、0のときは入力になりHi-Z出力とするわけです。
意図した使い方ではないと思われ、制約もあります。
- 積項が1つしか使えない。せめて4:4は無理でも2:6くらいあれば使いやすいのですが...
- XORも使えないので極性も自由にならない。
- Flip-Flopも使えない。
(入出力兼用)ピンに余裕があれば一旦余ったピンに普通に出力しておいてフィードバックを利用する手があります。
コメントを追加