2019.2.27
前へ
次へ
ホームページトップへ戻る

[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第13回]


●VHDLプログラム(回路の記述)

CPLD用のPICUSBIFの回路図はすでにお見せしていますが、今回の回路記述の説明のために回路図に信号名を追記しましたので、下に再掲いたします。

まずは回路図の左側部分の記述について説明します。
74HC138と74HC32を使ってS98OUT、S94OUT、S94INの3つの信号を作っている部分です。
74HC32はともかくとして74HC138はどう書くのだろうかと考えてしまうかもしれません。
VHDLプログラムを書くときはちょいと頭を切り換える必要があります。
回路の信号がどのように生成されるのかということを論理的に組み立てて考えます。
回路図では74HC138から98−9Bと94−97の2本の信号が出力されています。
74HC138にはアドレスバス信号のA7〜A2が入力されています。
そのA7〜A2が100110のとき(つまり98〜9Bのとき)に出力98−9Bがアクティブ(=0)になります。
そのほかのときには出力98−9Bは1になります。
そしてA7〜A2が100101のとき(94〜97のとき)に出力94−97がアクティブ(=0)になります。
そのほかのときには出力98−9Bは1になります。
そしてその出力98−9BとIOWRがどちらも0のときにS98OUTが0になります。
出力94−97とIOWRがどちらも0のときにS94OUTが0になります。
出力94−97とIORDがどちらも0のときにS94INが0になります。
以上をVHDLで書いたのが下のプログラムです。

        process(IOWR,IORD,Ain)
        begin
                        if Ain(7 downto 2)="100110" and IOWR='0' then
                                s98out<='0';
                        elsif Ain(7 downto 2)="100101" and IOWR='0' then
                                        s94out<='0';
                        elsif Ain(7 downto 2)="100101" and IORD='0' then
                                        s94in<='0';
                        else 
                                s98out<='1';
                                s94out<='1';
                                s94in<='1';
                        end if;
        end process;

全体のプログラムリストは[第10回]でお見せしました。
上のプログラム部分はVHDLプログラムリストの終わりに近いところにあります。
回路図では信号入力の一番初めの部分になりますが、CPLDでは必ずしもVHDLで記述した順に実行されるわけではありません。
論理的な信号のまとまりは
process()
begin

end process;
で囲んでひとつのまとまりとして記述します。
processの()の中には、そこで使う入力信号名を列記します。
()の中に記述し忘れても、プログラム全体のどこかで定義されていればコンパイルエラーにはならないようですが、コンパイラはプログラムの初めの部分から順に読み込んで解釈していくようなので、読み込まれた時点で定義部分がまだ読み込まれていないと警告メッセージが出されます。

Ain(7 downto 2)のように2つ以上の信号をまとまった1組の信号として扱うときに、その信号と定数の比較やその信号に定数を代入するときは定数を” ”で囲んで示します。
これに対してS98OUTなどの単独の信号の場合には定数は’ ’で囲んで示します。
上の式の中の<=は大小関係を示しているのではありません。
VHDLでは「<=」は「代入」の意味で使われます。

以上をふまえて上のプログラムリストを見ると、その上に書いたS98OUT、S94OUT、S94INの各信号の生成についての説明をそのまま式にしているだけだということが理解していただけるのではないかと思います。

本日は時間がなくなってしまいました。
回路図の残りの部分については次回以後に説明の予定です。

CPLD入門![第13回]
2019.2.27upload

前へ
次へ
ホームページトップへ戻る