I2Cで回路書換可能なGreenPAKを使ったロジック回路入門 その1 LUT(ルックアップテーブル)

概要

前回購入したGreenPAK(SLG46826)を利用して、かんたんに利用してみました。今回は実際の回路で利用するロジックを学んでいきたいと思います。

また、今回は無料で利用できる設計アプリを利用していますので、チップを持っていない人でも回路の設計とシミュレーションでの動作確認が可能となっています。アプリの入れ方などは前回の前回の記事を参考にしてみてください。

LUTとは?

ルックアップテーブルの略で、複数の入力から出力を選択するロジックになります。AND回路やOR回路などを実現することができます。

右側にあるComponentsから選択することができます。入力数に応じて2bit、3bit、4bitの3種類が利用可能です。

  1. 2-bit LUT0
  2. 2-bit LUT1
  3. 2-bit LUT2
  4. 2-bit LUT3
  5. 3-bit LUT0
  6. 3-bit LUT1
  7. 3-bit LUT2
  8. 3-bit LUT3
  9. 3-bit LUT4
  10. 3-bit LUT5
  11. 3-bit LUT6
  12. 3-bit LUT7
  13. 3-bit LUT8
  14. 3-bit LUT9
  15. 3-bit LUT10
  16. 3-bit LUT11
  17. 3-bit LUT12
  18. 3-bit LUT13
  19. 4-bit LUT0

上記のように全部で19個のルックアップテーブルが利用可能です。

ビット数個数
2-bit LUT4
3-bit LUT14
4-bit LUT1

ほとんどが3入力ですね。使えるロジックの数はGreenPAKのチップにより異なります。今回はI2Cから何度も書き換えが可能なSLG46826を使っています。

設定方法

設定したいLUTをダブルクリックすると、画面左側に設定画面がでてきます。

このプロパティを編集して設定することが基本となります。今回は2入力のLUTなのでIN0とIN1に対応するOUTを設定可能です。

Standard gatesを選択すると、代表的なロジック回路の設定になります。

AND回路

IN1IN0OUT
000
010
100
111

ANDなので両方の入力が1だった場合のみ1になりますね。IN0とIN1の入力値は変更することができません。真理値表なので、すべてのパターンに対してのOUTの部分のみ設定をします。

NAND回路

IN1IN0OUT
001
011
101
110

NOT AND回路なので、ANDの結果が反転しています。

OR回路

IN1IN0OUT
000
011
101
111

ORなのでIN0かIN1のどちらかが1の場合出力も1になります。

NOR回路

IN1IN0OUT
001
010
100
110

NOT OR回路なので、ORの結果が反転しています。

XOR回路

IN1IN0OUT
000
011
101
110

排他的論理和ですね。入力値が違う値の場合のみ出力が1になります。このへんから慣れないと面倒になると思いますが、基礎的な内容なので理解するようにしてください。

NXOR回路

IN1IN0OUT
001
010
100
111

NOT XOR回路なので、XORの結果が反転しています。入力値が同じ場合のみ、出力が1になります。

Inverter(NOT)回路

IN1IN0OUT
001
010
101
110

この回路は特殊なので気をつけてください。IN0の入力を反転したものがOUTに出力されています。つまりIN1の入力値は利用していません。このように3入力のLUTでもIN2を無視して、IN0とIN1の2入力のLUTとしても利用可能です。

Buffer回路

IN1IN0OUT
000
011
100
111

この回路もわかりにくいです。バッファ回路はIN0の信号がそのままOUTに出力されます。何をしているかというと、弱った信号などがIN0に入力されてもOUTからは正しい信号として出力されます。

NOT回路とBuffer回路は3-bitもしくは4-bit LUTを利用しても、設定可能です。ただしIN0を反転する回路となりますので、2-bitと動作は変わりません。

Multiplexer回路

3-bitもしくは4-bit LUTの場合マルチプレクサ回路が指定できます。4-bitでも指定できるピン数は3-bitと同じです。

SABZ
0000
0010
0101
0111
1000
1011
1100
1111

この回路はSが選択用の信号で、0の場合Aの信号がZに出力されます。1の場合にはBの信号が出力されます。2つの信号のどちらを利用するのかを選択するための回路がマルチプレクサとなります。

NOT回路を組んで見る

前回と同じ入力をPIN5、出力をPIN16にしました。上半分は最低限動作するために必要なもので、最初から接続されている回路になります。VDD2も接続されていましたが利用しないので削除しています。回路的にはVDD2も初期状態のままでも構いません。

LUTは初期状態だと上記の表記になっています。

この状態だと上記のように画面したにルールチェッカーのエラーが出てしまいます。どんな入力値でも全部OUTが0で変化していないと行っています。プロパティを編集してInverterにしてからApplyボタンで反映させることでこのエラーは消えます。そしてIN0のみのNOT回路に画像が変わりました。

また、このままだと確認が面倒なのでVoltage Sourceを追加します。ここでGNDに接続してあげないと回路が動かないので注意してください。非常に忘れやすいポイントです。

設定は、前回と同じで1秒間隔でHIGH、LOWを繰り返すLogic patternになります。

てんとう虫のDebugの押すと、上記のでデベロップメントプラットフォームの選択がでます。この画面がでない場合には、画面下にあるルールチェッカーを確認して、エラーをなくしてください。

今回はソフトウエアシミュレーションを使ってみたいと思います。

最初にプローブの設定を行います。上にある回路図を確認して、PIN5の前後、PIN16の前にプローブを追加してみてください。この場所の信号レベルを確認することができます。

また、デフォルトだと短時間のシミュレーションなので、終了が12秒後で20ミリ秒単位のステップに変更してから「Start simulation」で結果を見てみます。

こちらがシミュレーション結果です。一番上が電源から3.3Vと0Vが1秒間隔で切り替わっているのがわかります。真ん中の赤いグラフは電圧から、HIGHとLOWの信号に変換されていますね。最後に一番下の紫のグラフで入力値がNOT回路で反転していることが確認できます。

実機で確認する

DIP書き込み機や、もう少し高い開発ボードを利用している場合には、かんたんに実機での検証が可能です。前回の記事のままLEDを接続してあったので、動かしてみます。

右上にある「Change platform」を選択して、DIP書き込み機を選択します。

前回と同じようにボタンに設定変更することで、PIN5の入力をHIGHとLOWに画面から切り替えることができます。その入力を判定した結果がPIN16に出力されてLEDが光ると思います。

このようにDIP書き込み機を利用すると、画面から入力を変更することができます。もう少し高い開発ボードを利用することで、開発ボード上のLEDで状態を確認できます。

I2Cで書き込む

GreenPAKの日本での普及活動をしている?あおいさやさんがM5StickC(ESP32)を使って、I2C経由で書き込む方法を公開してくれています。

DIP実装済みのチップや、自作基板などを利用するとI2Cで書き込むことができます。ただし、アプリから直接書き込むことはできず、回路データを出力したあとにI2C経由で書き込むアプリが必要となります。

現在簡易的に入力と出力を確認することができる学習用の自作ボードを作ろうとしていますので、完成したらそちらを使った確認方法なども紹介してみたいと思います。

応用回路(SRラッチ回路)

3入力のLUSを使うと、セット・リセット・ラッチ回路が組めます。PIN5からがセット信号、PIN2からがリセット信号、LUTからの出力が前回の結果を保存するラッチになります。

IN2(PIN5セット)IN1(PIN2リセット)IN0(ラッチ)OUT
0000
0011
0100
0110
1001
1011
1100
1111(または0)

真理値表は上記になります。セットが1になると、OUTが1になり。リセットが1になるとOUTが0になるのが基本です。両方0の場合には、最後の結果が保存されている状態です。この保存する動きをラッチと呼びます。

さて、セットとリセットが同時に1になった場合ですが、一般的には禁止されておりこの条件にならない回路にする場合が多いです。上記の真理値表ではOUTが1になっていますが0でも構いません。個人的にはリセットが1の時には絶対に0になる方がわかりやすいと思っています。

これは回路によって違うので、どちらの状態がより安全かで選択できると思います。OUTが1の場合にモーターなどが動作している場合は、より安全な0にしておいたほうがよいはずです。

V3(PIN2の入力)は上記の設定にしました。わかりやすいために、V2(PIN5の入力)が1秒間隔のHIGH、LOWだったので、周期をずらして0.25秒HIGH、1.25秒LOWの周期にしています。

シミュレーション結果です。一番上が1秒間隔のセット、真ん中がリセットで、一番下が結果になります。リセットがHIGHになったタイミングで、セットがLOWの場合のみ結果がLOWに落ちていますね。そしてセットがHIGHになったタイミングで、結果がHIGHに復帰しています。セットとリセットが両方LOWの場合には、最後の状態を保存しているのがわかると思います。

メーカー説明資料

上記はGreenPAKの販売元であるDialog Semiconductor社が公開している日本語PDF資料です。基本的な使い方とロジック回路がわかっている人であればこの資料のみで概要は把握できると思います。

まとめ

今回はその1だったため、すこし丁寧に説明しました。次回以降はもう少しテンポをあげて基本的なコンポーネントを説明していきたいと思います。

今回紹介したLUTですが、実はDFFやLATCHのモードもあります。これらについても順次説明していきたいと思っています。

続編

コメント

タイトルとURLをコピーしました