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

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



[第42回]


●ムダを省きました

本日になって前回を読み直していましたら、VHDLプログラムで無駄な事をやっているところをみつけましたので、修正いたしました。
−−key in
の下記の部分です。
        elsif AIN(7 downto 2)="100111" and IOR='0' then
                keyinbf<=KEYIN;
                DINOUT<=keyinbf;
KEYINから入力したデータを一旦keyinbfに入れて、すぐにそれをDINOUTから出力しています。
このためだけに8ビットの内部バッファを余計に使ってしまっています。
ここは
DINOUT<=KEYIN;
でいいはずです。

そのように直して再コンパイルしました。
修正した部分のプログラムリストです。

architecture rtl of ledkeyusb1b is
        signal ldtactiv:std_logic;
        signal readyreset:std_logic;
        signal ldatareadywk:std_logic;
        signal keyoutbf:std_logic_vector(2 downto 0);
        --signal keyinbf:std_logic_vector(7 downto 0);
        signal ledadrs:std_logic_vector(2 downto 0);
        signal segment:std_logic_vector(7 downto 0);
        signal rcwk:std_logic;
        signal rcwk2:std_logic_vector(3 downto 0);
keyinbfのところををコメントにしました。
そして
−−key in
のところを下のように直しました。

        elsif AIN(7 downto 2)="100111" and IOR='0' then
                --keyinbf<=KEYIN;
                --DINOUT<=keyinbf;
                DINOUT<=KEYIN;

下は上のように直したプログラムを再コンパイルした結果の画面です。



参考までに、下は前回お見せした修正前のプログラムのコンパイル結果です。


修正前と修正後とでは、Total macrocellsが61/128(48%)から52/128(41%)と大幅に減少しました。
逆に考えてみると、たった1個の8ビットバッファだけで貴重なmacrocellを9個も消費してしまうことの証明でもあります。
この点はCPLDのVHDLプログラムを書くうえで十分こころすべき点でありましょう。

CPLD入門![第42回]
2019.5.3upload

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