2020-05-16 23:14 — asano
カテゴリー:
前回は開発環境を準備したところまで書きました。あとは目的の論理を書くだけと言いたいところですが、ちょっと気になることがあるので先に試してみることにします。
それは以下のような箇所があることです。
オープンドレインによる(負論理の)ワイヤードORです。上の2つは実際は独立したオープンドレインバッファではなくLSIの出力がオープンドレインになっています。
残念ながらGAL16V8にはオープンドレイン出力の機能はありません。探すとオープンドレイン対応のGAL16VP8というものが存在したようなのですが、今さら入手は難しいでしょう。念のためにAliExpressとeBayを見てみましたが発見できませんでした。
これをなんとかGAL16V8で実現しようといくつか考えてみました。
- O.D. Buffer
一番安直なのは外部にオープンドレインのバッファを追加することです。
必要なICが増える、遅延が増える、といったデメリットがあります。 - Diode
オープンドレインとはどういうことなのかと考えると、"L"の時はドライブするが"H"の時はドライブしないというということです。"H"のときGALはドライブしますがそれをダイオードで遮断すればよいと考えたのがこれです。
ダイオードが余計に必要、VOLが上がる、というデメリットがあります。 - 3-State
上と同じことをGALの3-ステート出力を利用して実現したものです。
回路図からはデメリットが見えてきませんが、GALの論理設計に大きな制約がかかります。これについては後述します。 - Gate
いっそのこと負論理ORをGAL内部に取り込んでしまう方法です。
GALの入力ピンを余計に必要とするのがデメリットです。
いずれを選ぶべきでしょうか。実現可能であれば c. が最もリソースが少なくてすみます。GALのピンに余裕があれば d. が良さそうですが、何かの変更に備えてGALのピンはなるべく空けておきたいところです。b. は汎用ロジックでも使う方法なので実績はあります。
さて私はGALもCUPLも初めてなので c. が本当に可能なのか確認しておきたいところです。
GALの8本ある出力ピンの1つをジャンパで選んでLEDに表示するだけです。出力ピンのうち2つには b. の確認用に1N4148とBAT43が入れてあります。
LEDは"H"だと左のみが、"L"だと右のみが、Hi-Zだと両方が点灯します。
スイッチは2,4,6,8ピンを"H"か"L"に切り替えます。
残りの入力ピンは未接続で、GALのB以降には内部プルアップがあるので"H"固定となります。14ピンと8ピンのソケットは74HC07を載せて a. の確認や、オシレータを積んで伝播遅延を見ようかと思っていますがまだ未配線です。
CUPLのソースを以下に示します。
Name test;
Partno GAL16V8B;
Date 2020/05/03;
Revision 0;
Designer asano;
Company Electrelic;
Assembly GALtest;
Location test;
Device G16V8;
/* Input */
Pin 2 = I1A;
Pin 3 = I1B;
Pin 4 = I2A;
Pin 5 = I2B;
Pin 6 = I3A;
Pin 7 = I3B;
Pin 8 = I4A;
Pin 9 = I4B;
/* Output */
Pin 19 = !O1;
Pin 18 = !O1T;
Pin 17 = !O2;
Pin 16 = !O2T;
Pin 15 = !O3;
Pin 14 = !O3T;
Pin 13 = !O4;
Pin 12 = O4T;
/* */
O1 = I1A & I1B;
O1T = I1A & I1B;
O2 = I2A & I2B;
O2T = I2A & I2B;
O3 = I3A & I3B;
O3T = I3A & I3B;
O4 = I4A & I4B;
O4T = 'b'0;
O4T.OE = I4A & I4B;
テスト用なのでピン2,3のNANDをピン19と18に、ピン4,5のNANDをピン17と16に、ピン6,7のNANDをピン15と14に、ピン8,9のNANDをピン13と12に出力するだけです。最後のピン12(O4T)が3-Stateを使ったオープンドレイン相当の出力です。
O4T = 'b'0;
で常に"0"にしておき、O4T.OE = I4A & I4B;
でピン8,9がともに"H"のときだけ出力が有効になり"L”が出力されます。その他の場合は出力は無効でHi-Zとなります。
最後にGALでオープンドレインを実現するための論理設計の制約について書きたいのですが、GAL内部についても触れないと説明できません。長くなりそうなので次回とさせてください。
コメントを追加