VHDL クロック源が2つある場合の注意点

process文の中で clock’ event and clock = ‘1’ とエッジにより駆動する様に記述すると

その中で、再び別の信号の event を書くことは出来ません。

(よくよく考えてみると無理なことはわかるんですけど)

解決策は以下のソース例の様に、前回の状態を保持して、

変化を検出するロジックを記述する事。

process ( clock, reset )

begin

if (reset = EN) then

        .......

elsif (clock’ event and clock = ‘1’) then

        if(start = EN) then

                .......

if( trans_clk’event and trans_clk = ‘0’ ) then     –エラー

        elsif( trans_clk = ‘0’ and old_trans_clk = ‘1’ ) then   –修正

                .......

        end if;

        old_trans_clk <= trans_clk;

end if;

VHDL constantの記述位置

constantを入れたくて、何処に入れたらエラーにならないか調べたら

architecture文の次に入れたら問題ないのですが、

その前のentityで使用したかったので、その前に単純に書くとエラーになるので

以下の方法で、記述しました。

最初package文でくくった中にconstant文を記述

そのあと、

library work;

use work.MCP3024_lib.all;

とすれば、OK

package MCP3024_lib is

        constant        MCP3204_BIT_LEN:        integer         := 12;

        constant        MCP3204_CPU_AD_LEN:     integer         :=  3;

        constant        MCP3204_CH:             integer         :=  4;

        constant        MCP3204_COM_LEN:        integer         :=  7;

end MCP3024_lib;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

library work;

use work.MCP3024_lib.all;