如何用case编写顺序组件

时间:2015-04-25 17:55:38

标签: vhdl

下面的代码没有编译。如何修改它以使其有效?谢谢。

case S is
when '0' =>
U1: hi port map (x,y,z);
when others =>
U2: hey port map (x,y,z);
end case;

2 个答案:

答案 0 :(得分:2)

如果没有剩下的代码会有一些猜测,但你可能在case之外使用process,因此“非法并发语句”消息,因为case是一个只能在进程中使用的语句。但是,使用port map (x,y,z)的组件实例化是并发语句,因此只能在进程外部使用。

VHDL不是一种编程语言,而是一种硬件描述语言(VHDL的HDL部分),因此在编写VHDL代码时,可以将其视为描述电路,并且在此部分是固定的,但信号值可以随时间变化。

因此,使用port map (x,y,z)实例化进程外部的组件,并控制进程,其他组件,端口等的信号值。

答案 1 :(得分:1)

在实例化组件时,您不在进程中,因此无法使用顺序编程结构。

然而,只要if ... generate是通用或常量,您就可以使用S有选择地生成硬件的值S。 (如果您可以向if ... generate输入信号,那么当信号值发生变化时,需要硬件出现或消失......不会发生!)

请注意,if ... generate没有" elsif"或"否则"选项,所以你必须以稍微尴尬的方式表达你的例子:

gen_S_0 : if S = '0' generate
   U1: hi port map (x,y,z);
end generate;

gen_S_others: if S /= '0' generate
   U2: hey port map (x,y,z);
end generate;