[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第17回]
●VHDLプログラム(回路の記述4)
今回は74HC173の記述です。
74HC173は74HC174と同じD−FFですが、74HC174が6ビットであるのに対して74HC173は4ビットです。
データのラッチ動作は74HC174と同じです。
もうひとつ74HC174と異なっているのは出力ディスイネーブル端子(DE)があることです。
DEがLのときはQ1〜Q4が出力されますが、DEがHのときはQ1〜Q4はハイインピーダンスになります。
そのときQ1〜Q4がクリアされることはなく、内部では以前の値をそのまま保持しています。
下がその部分のプログラムです。
全体のリストは[第10回]にあります。
process(s94out,Dinout,rcwk2) begin if s94out'event and s94out= '1' then rcwk2<=Dinout(3 downto 0); else rcwk2<=rcwk2; end if; end process; process(rcwk(3),rcwk2) begin if rcwk(3)= '0' then RC3_RC0<=rcwk2; else RC3_RC0<="ZZZZ"; end if; end process; |
74HC173の回路を記述するのに2つのPROCESS文を使っています。
まとめて1つにしようと思えばできると思いますが、今回のように出力を制御する入力が2つ以上あるような場合に、プログラムの書き方によってはコンパイラにそれはダメ!と叱られてしまうことがあります。
こういう場合は素直にそれぞれの入力の場合に分けて記述したほうが無難です。
さてそれで最初のPROCESS文なのですが、ここは74HC174と同じです([第15回]参照)。
s98outに対してs94out、rcwkに対してrcwk2を使っているところが異なっているだけです。
2番目のPROCESS文は出力ディスイネーブルのところです。
回路図では74HC173のDEには74HC174のビット3出力が配線してあります。
74HC174のビット3出力はrcwk(3)です。
rcwkはrcwk(3 downto 0)で4ビットですが、このように一部のビットを取り出して使う場合にはrcwk(3)のように()のなかにそのビットを示す数値を入れて使います。
RC3_RC0はCPLDの外部端子です。
その出力をハイインピーダンスにするには、このプログラムのように
RC3_RC0<=”ZZZZ”
と書きます。
Zはハイインピーダンス出力です。
なぜここの出力をハイインピーダンスにする必要があるのかといいますと、このラインはPIC18F14K50のRC3〜RC0につながっていて、PIC18F14K50のRC3〜RC0はCPU側とデータや制御コマンドをやり取りするために、入出力兼用で使っているからです。
PIC側が出力のときには74HC173からの出力を禁止しないとデータがぶつかってしまいます。
ここに普通のデータラッチを使わないで、DE端子のある74HC173を使っているのはそのためです。
このあたりになると、VHDLプログラムであってもソフトウェアの知識だけでは全くだめで、ハードウェアの知識に加えて、ホストCPUとPICとのデータのやり取りの仕組みを考えるといった、ハードとソフトを融合した知識経験が必要になってきます。
次回に続きます。
CPLD入門![第17回]
2019.3.4upload
前へ
次へ
ホームページトップへ戻る