Lチカ再び、オリジナル4ビットCPUで外部出力制御を行うオリジナルCPUでバイナリコード入門(14)(2/2 ページ)

» 2024年03月25日 08時00分 公開
[今岡通博MONOist]
前のページへ 1|2       

実際に動かしてみる

 それでは、実際に動かしてみましょう。/src/instructions.vの29〜31行目を以下のように書き換えます(リスト2)。

    initial begin
        `include "brink7.asm"
    end
リスト2 /src/instructions.vの29〜31行目の書き換え内容

 連載第9回では、Tang Nanoの基板上に搭載されている6個並びのLEDの1つを点滅させるためにleds[0]にはTang Nanoに搭載されているGoWinのFPGAチップの10番ピンがアサインされていました。今回は、それを32番ピンに変更するために、/src/instructions.cstの28行目を以下のように書き換えます(リスト3)。

IO_LOC "leds[0]" 32;
リスト3  /src/instructions.vの28行目の書き換え内容

 それでは、実際に動かしてみましょう。GoWinのIDEで、SynthesizeとPlace & Routeそして最後にProgram DeviceでTang Nanoの評価モジュールに書き込んでください。

 図3はLEDのアノード側(抵抗付きの端子)をTang Nanoの32番に、カソード側をGNDに接続してblink7.asmを実行した様子です。

図3 図3 LEDドットマトリックスと外部接続したLEDを点灯させる様子[クリックで拡大]

 図3だとLEDドットマトリクスの一番下の段がちょうど4番地を実行しようとしているところです。レジスタR6の値を見てみると、それはLEDドットマトリクスの上から7段目ですが最下位ビットは光ってないですよね。しかし外付けのLEDは光っています。

 これはどういうことか言うと、Tang Nanoに搭載されている6個のLEDに対応させるためにDL166というかinstructions.vは負論理にHDLが組まれているので論理が逆さまになってしまいます。Tang Nanoに搭載されている6個のLEDは、アノードが全て共通でプラス電源に接続されており、カソード側が信号線によって制御されているため負論理、信号線が0になったときLEDが点灯する回路になっています。

 ですからinstructions.vではそれに対応したHDL記述になっています。それに対して外付けのLEDは32番ピンが1になったときに点灯するような接続になっていますので、レジスタR6の最下位ビットが0の時点灯し、1の時消灯するわけです。

 ちなみに、Tang Nanoの基板に搭載されているLEDと同様の動作をさせるなら外付けのLEDを逆に差し替えるだけでできます。アノード側を3V3に、カソード側を32番に差し替えてください。そうするとドットマトリクスのレジスタR6の最下位ビットが点灯すると外付けLEDも点灯するようになります。ちなみに3V3は+3.3Vのことで、図2に示したTang Nanoのピン配置図でいうところの右側の一番下にあります。ですから外付けLEDを差し替えるときはGNDを1つまたぐ格好となります。

正論理と負論理

 コンピュータが外部機器をコントロールする際、負論理が良いか正論理が良いかという議論は昔から行われていいます。筆者の経験で言えば、CPUとROMやRAMとのアドレス線やデータ線は正論理のことが多いですね。それに対して、外部機器を接続する際によく用いられるのが負論理であるオープンコレクタです。ちなみにCMOSやFETを用いる場合はオープンドレインと呼ばれます。

 オープンコレクタはコンピュータ側からの出力回路の1つなんですが、コンピュータからこの回路の入力に1を与えると出力側が短絡します。これはNPN型バイポーラトランジスタの例ですが、この回路は受け側である外部出力デバイスでプルアップ抵抗が施されます。ですので、コンピュータの出力が0の時はプルアップ抵抗により外部出力機器には1が伝わります。すなわち電位が高い状態ですね。一方コンピュータの出力が1の時にはトランジスタは出力側がGNDに短絡しますので、外部出力機器は0を受け取ります。低電位ということですね。このようにNPN型バイポーラトランジスタでオープンコレクタ出力回路を構成した場合、コンピュータの出力と外部出力機器とでは論理が反転しますね。

 ここで大切なのは、プルアップ抵抗の抵抗値と電圧を何Vでプルアップするかということですが、これらは外部機器の都合によって異なります。もしオープンコレクタ出力回路を用意したコンピュータと外部出力機器が離れているのなら、プルアップ抵抗は小さい値の方が外来ノイズにより惑わされることは少なくなります。ただし、その分オープンコレクタ回路のトランジスタの負担は大きくなります。またプルアップ電圧に関して外部出力機器の入力の電圧範囲に合うように設定します。このあたりは、組み込みの技術者には大切なところですので機会があれば記事にまとめたいと思います。

おわりに

 今回は外部出力機器制御の最初のステップとしてDL166にLEDをつないでみました。いかがでしょうか。なんかTang Nanoの基板上のLEDが光るのとは異なり、電子工作っぽい雰囲気になったのではないでしょうか。わくわくしてきますね。これを機にバイナリコーディングに親しんで頂ければ幸いです。

 バイナリコーディングの連載はこの第14回をもって最終回とさせて頂きます。次の連載は4ビットCPUから、ついに8ビットに拡張したCPUによる演習記事を用意しています。新連載もぜひ楽しみにしていてください。(連載完)

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.