入出力のイネーブル信号

ときに、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ビットとかの信号線を書いておこう。

それでは皆さん、ごきげんよう!