ときに、in, out ポートによる入出力が発生したタイミングを知りたいことがある。そんな時は、in, out ポートの宣言に en アトリビュートを付けよう。
process process1(clkin uint#1 clk, rstin uint#1 rst, out uint#8 en x)
{
x = 100;
while (1) ;
}
これを高位合成すると、以下の VHDL 記述のように、信号 X の他に、X_EN という 1 ビットの出力ポートができる。
entity PROCESS1 is
port (
CLK: in std_logic;
RST: in std_logic;
X: out std_logic_vector(7 downto 0);
X_EN: out std_logic);
end PROCESS1;
X_EN は、Xから出力が発生したタイミングで1になり、それ以外は0になる。
....
process process2(clkin uint#1 clk, rstin uint#1 rst, in uint#1 x_en, in uint#8 x)
{
....
}
toplevel logicboy(in uint#1 clk, in uint#1 rst, ...)
{
com uint#8 en x;
process1(clk, rst, x);
process2(clk, rst, x en, x, ... );
}
トップレベルで com 信号を宣言するときにも en をつける。実際の回路では、x に対して、8 ビットの信号線と、1 ビットのイネーブル信号が生成される。
上の例の process2 のパラメータで、x en は、1ビットのイネーブル信号を、x は、8ビットの信号線を表してる。つまり、en を付けると、1 ビットのイネーブル信号の方を表す。process2 は、これら二つの信号を参照する。
同様に、入力ポートに対しても、その入力が発生する時に1になるイネーブル信号を出力することができる。実際の設計では、イネーブル信号だけが必要な場合もある。その場合、とりあえず1ビットとかの信号線を書いておこう。
それでは皆さん、ごきげんよう!