下面的代码没有编译。如何修改它以使其有效?谢谢。
case S is
when '0' =>
U1: hi port map (x,y,z);
when others =>
U2: hey port map (x,y,z);
end case;
答案 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;