VHDL结构体系结构与clk';事件

VHDL结构体系结构与clk';事件,vhdl,clock,mux,Vhdl,Clock,Mux,VHDL中的if条件可以使用MUX实现。但我希望我的多路复用器的输出在时钟有上升沿时发生变化。 我真的想给时钟和时钟事件作为我的多路复用器的选择线 signal a:std_logic; process(clk) a <= clk and clk'event; o <= (a and s1) or ((not a) and s2); end process; 信号a:std_逻辑; 过程(clk) 假定clk是标准逻辑型信号 在没有看到实际错误消息的情况下,问题行是: a <

VHDL中的if条件可以使用MUX实现。但我希望我的多路复用器的输出在时钟有上升沿时发生变化。 我真的想给时钟和时钟事件作为我的多路复用器的选择线

signal a:std_logic;
process(clk)
a <= clk and clk'event;
o <= (a and s1) or ((not a) and s2);
end process;
信号a:std_逻辑;
过程(clk)

假定
clk
是标准逻辑型信号

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

a <= clk and clk'event;
其中,作为并发条件赋值,条件生成布尔值,当条件为TRUE时,目标是与std_逻辑兼容的“1”枚举文字,当条件为FALSE时,目标是与std_逻辑兼容的“0”枚举文字

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

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


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

这是仅用于模拟,还是打算制作一些可合成的设计部分?对于可合成的设计部件,则使用上升沿作为MUX条件是没有意义的,因为该条件没有持续时间(0 ps),因此在这种情况下,应重新考虑设计的操作。@MortenZilmer这是针对可合成的设计部件
a <= '1' when clk = '1' and clk'event else
     '0';