2014-10-30 318 views
-1

如果使用MUX可以实现VHDL中的条件。但是我希望我的MUX的输出在时钟的上升沿有所不同。 我真的想给我的MUX的时钟和clk'event作为选择线。VHDL结构体系结构和clk'event

signal a:std_logic; 
process(clk) 
a <= clk and clk'event; 
o <= (a and s1) or ((not a) and s2); 
end process; 

但是,这会给我一个错误,因为clk'event。我试着用clk'stable。但由于clk'stable是一个布尔信号,它会给我一个错误。这也没有类型转换。除了行为之外,还有没有其他的选择可以用于纯粹的结构实现?

+0

这是仅用于模拟还是有意制作一些可合成的设计零件?对于可合成的设计部分,使用上升沿作为MUX条件是没有意义的,因为这种条件没有持续时间(0 ps),所以设计的操作应该重新考虑。 – 2014-10-30 10:56:38

+0

@MortenZilmer它是一个可合成的设计部分 – 2014-10-30 15:29:23

回答

0

推测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工具,则条件信号赋值语句在该过程中将不起作用。

您可以将两个赋值语句并发的信号赋值放在最后作为单独的等价进程和适当的灵敏度列表等价物(等待语句作为每个语句的最后一个语句)。