2016年12月16日金曜日

ルックアップテーブル(LUT)ってなんじゃろ

アドベントカレンダーの15日目

さて、前回はオペアンプとコンパレータ―をつかってアナログ回路の序盤を試してみました。
今回はその対極側のデジタル回路の方にトライして見ようと思います。

「デジタル回路って言うとソフトウェアのことでしょ!」と思う人も多いかも知れない。
けれど、今回はCPUによるソフトウェアのパワーと言うわけでは無く
ある意味正統なデジタル回路、つまりは
0と1(OFFとON)の組み合わせによって動く回路
の論理回路をしてみる。

 論理回路は簡単に言うとある入力の組み合わせの時に、ある出力がされる」のこと
だと考えてもらえば大筋間違いはないだろう。
論理回路では入出力の組み合わせのことを真理値表と言う。
試しにAND回路とOR回路の入力と出力の真理値表を見てみよう。




これはCypressのANDとORのデータシートの抜粋です。
真理値表では1と0で表現されていて
「0」OFFもしくはLowのことで、日本語だと偽
「1」ONもしくはHighのことで、日本語だと真
となっている。

AND回路は入力が片方だけではなく、両方ともの入力が入ると出力される。
OR回路ではどちらかの入力が入っていると出力がされている。
王道では「または×の時」の論理和や論理積、否定論理を知って置くべきだが、
カルノー図をつかって縮小した論理作り出すことも珍しいので
細かい部分は電子回路の本を見てほしい。

今回はカルノー図や、論理回路の組み立て方になじみがなくても、論理回路を作る方法がある。
それはルックアップテーブル(LUT)を使う方法になる。

今回はタクトスイッチ3つとLED4つをつかって、ルックアップテーブルを試してみようと思う。
タクトスイッチは始めの状態が「OFF」、「Low」の状態つまりは、正論理でないといけないので
スイッチの配線には注意が要る。
それでは試してみよう。


空のプロジェクトを作ったら、
今回は出力ピンが4つ、入力ピンが3つ使う。なので、DigtalOutが4つ、DigitalInが3つをドラックアンドドロップする。


DigitalInの初期状態がLowの状態でないといけないため、内部に接続する抵抗の設定をPullDownにする。よくある電気工作の本だとPullUpと書いてあることが多いと思うが、今回はこれで大丈夫なので進めてほしい。


ここまでできたら、Digital→logicの中になるLookup table
ドラックアンドドロップしてトップデザインに入れる。



こんな感じになる。



Lookup tableのコンポーネントをダブルクリックして、設定を開くと
こんな感じになっている。



ルックアップテーブルと言うのは真理値表をそのまま入力すれば、動作する
コンポーネントになっている。しかし、入力数と出力数には制限があるので注意してほしい。
表の左側の灰色側が入力側黒の縦線を挟んだ右側が出力側となっている。
今回は3入力、4出力となっているので、増やす必要がある。
左上側のフォームにinput outputが書いてあるここを操作して3入力4出力にしてほしい。
操作し終わるとこんな感じ。



ここまで出来たら、入力の組み合わせに対する出力の設定をしていこうと思う。
試しに、出力側の表の「0」をクリックしてみると「1」に変わるだろう。
逆に「1」をクリックすると「0」に変わるだろう。
つまり左側の組み合わせの時に、任意の出力の組み合わせとなることになる。
今回はこのような組み合わせにしてみた。


任意の設定が出来たら「OK」をクリックして閉じよう。
ここまで出来たら、LUTと入出力のピンを接続しよう。 
接続し終わるとこのような形になる。


ここまで出来たら、使うPinの番号もしくはポート番号を左側のメニューバーにある
「Pin」をダブルクリックして設定をしよう。
今回は特に制約がないので任意のポートに設定をします。
ここまで出来たら、コンパイルをしよう。
コンパイルをしている間に、実際の配線をしましょう。
こんかいはこんな感じで配線をします。
スイッチの配線は間違えないようにしないと正しく動作しないので注意が要ります。


配線が終わったら、プログラムは一切書かないのでこのまま書き込みます。
書き込みができたら、タクトスイッチを押して
ルックアップテーブルの設定通りに動くか試してみよう。
正しく動いたら成功だ!
(/・ω・)/

さて、今回はタクトスイッチとLED4つをつかってルックアップテーブルを試してみました。
ルックアップテーブルは内部の設定次第で今回みたいな使い方(デコーダー)や
カウンタ―にも変わる便利な道具です。
使い方次第で、ロボットやLEDの動作にも使えるので
うまく使うと時間的な制約が緩くなるのでプログラミングも楽になると思います。

上手く組み合わせるとこういう風な動作もプログラミングをしなくても出来るようになります。


0 件のコメント:

コメントを投稿