推测clk
是一个std_logic类型的信号。
如果没有问题,看到你实际的错误信息行是:
a <= clk and clk'event;
的'event
属性返回一个布尔类型。 clk
似乎符合隐式条件运算符(??
),IEEE标准1076-2008),它也返回一个BOOLEAN类型。
不幸的是,对a
的赋值是为std_logic(std_ulogic)的基本类型隐式声明的信号分配完成的,该基本类型是基本操作并要求输入类型与目标类型匹配。
VHDL是强类型的,无法将类型转换的BOOLEAN分配给std_logic。
此外,分配给a
将是一个增量周期长,实际上是毛刺或脉冲。
目前还不清楚它在合成中有什么有用的含义。
输出o
将期间a = '1'
s1
,否则s2
,除了灵敏度列表不包括a
。
可以通过使用不同的分配类型,例如有条件的信号分配表明在模拟的单增量周期长脉冲:
a <= '1' when clk = '1' and clk'event else
'0';
凡作为并发有条件分配的条件导致BOOLEAN和target是条件为TRUE时与std_logic兼容的'1'枚举文字,或FALSE时为'0'的枚举文字。
由于a
不在过程的灵敏度列表中,因为顺序条件信号分配o
将始终为s2
。
如果您使用符合旧标准的VHDL工具,则条件信号赋值语句在该过程中将不起作用。
您可以将两个赋值语句并发的信号赋值放在最后作为单独的等价进程和适当的灵敏度列表等价物(等待语句作为每个语句的最后一个语句)。
这是仅用于模拟还是有意制作一些可合成的设计零件?对于可合成的设计部分,使用上升沿作为MUX条件是没有意义的,因为这种条件没有持续时间(0 ps),所以设计的操作应该重新考虑。 – 2014-10-30 10:56:38
@MortenZilmer它是一个可合成的设计部分 – 2014-10-30 15:29:23