現在地

GAL動かしてみた 第2回:16V8でオープンドレイン


テーマ:

カテゴリー:

前回は開発環境を準備したところまで書きました。あとは目的の論理を書くだけと言いたいところですが、ちょっと気になることがあるので先に試してみることにします。

それは以下のような箇所があることです。
回路図1
オープンドレインによる(負論理の)ワイヤードORです。上の2つは実際は独立したオープンドレインバッファではなくLSIの出力がオープンドレインになっています。

残念ながらGAL16V8にはオープンドレイン出力の機能はありません。探すとオープンドレイン対応のGAL16VP8というものが存在したようなのですが、今さら入手は難しいでしょう。念のためにAliExpressとeBayを見てみましたが発見できませんでした。

これをなんとかGAL16V8で実現しようといくつか考えてみました。
回路図2

  1. O.D. Buffer
    一番安直なのは外部にオープンドレインのバッファを追加することです。
    必要なICが増える、遅延が増える、といったデメリットがあります。
  2. Diode
    オープンドレインとはどういうことなのかと考えると、"L"の時はドライブするが"H"の時はドライブしないというということです。"H"のときGALはドライブしますがそれをダイオードで遮断すればよいと考えたのがこれです。
    ダイオードが余計に必要、VOLが上がる、というデメリットがあります。
  3. 3-State
    上と同じことをGALの3-ステート出力を利用して実現したものです。
    回路図からはデメリットが見えてきませんが、GALの論理設計に大きな制約がかかります。これについては後述します。
  4. 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内部についても触れないと説明できません。長くなりそうなので次回とさせてください。

参考文献・関連図書: 
GAL16V8データシート, Lattice Semiconductor.
GAL16VP8データシート, Lattice Semiconductor.

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。