-1

VHDL 中的 if 条件可以使用 MUX 来实现。但我希望我的 MUX 的输出在时钟有上升沿时发生变化。我真的很想将时钟和 clk'event 作为我的 MUX 的选择线。

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 是一个布尔信号,它会给我一个错误。这也没有类型转换。PURE STRUCTURAL 实现而不是行为实现是否有其他选择?

4

1 回答 1

0

大概clk是一个 std_logic 类型的信号。

在没有看到您的实际错误消息的情况下,有问题的行是:

a <= clk and clk'event;

'event属性返回一个 BOOLEAN 类型。 clk似乎符合隐式条件运算符 ( ??),IEEE Std 1076-2008) 的条件,该运算符也返回 BOOLEAN 类型。

不幸的a是,对 std_logic (std_ulogic) 的基本类型的隐式声明的信号赋值是一个基本操作,并且要求输入类型与目标类型匹配。

VHDL 是强类型的,如果没有类型转换,就不能将 BOOLEAN 分配给 std_logic。

此外,分配给a将是一个增量周期长,实际上是一个毛刺或脉冲。

目前尚不清楚它在综合中是否有任何有用的意义。

输出o将在s1期间a = '1',否则s2,除了不包括 的敏感度列表a

您可以通过使用不同的分配类型(例如条件信号分配)在仿真中演示单增量周期长脉冲:

a <= '1' when clk = '1' and clk'event else
     '0';

其中作为并发条件赋值,条件产生一个 BOOLEAN,目标是当条件为 TRUE 时与 std_logic 兼容的“1”枚举文字,或当 FALSE 时为“0”枚举文字。

因为a它不在过程的敏感度列表中,因为顺序条件信号分配o始终是s2.

如果您使用符合旧标准的 VHDL 工具,则条件信号分配语句在此过程中将不起作用。

您可以使两个赋值语句同时进行信号赋值,它们最终将作为具有适当敏感性列表等效项的单独等效进程(等待语句作为每个语句的最后一个语句)。

于 2014-10-30T10:51:25.597 回答