VHDL结构架构和clk'event

Posted

技术标签:

【中文标题】VHDL结构架构和clk\'event【英文标题】:VHDL structural architecture and clk'eventVHDL结构架构和clk'event 【发布时间】:2014-10-30 09:33:55 【问题描述】:

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 实现而不是行为实现还有其他替代方案吗?

【问题讨论】:

这只是为了模拟,还是打算制作一些可综合的设计部分?对于可综合的设计部分,使用上升沿作为 MUX 条件是没有意义的,因为该条件没有持续时间(0 ps),因此应该重新考虑设计的操作。 @MortenZilmer 这是一个可合成的设计部分 【参考方案1】:

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

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

a <= clk and clk'event;

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

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

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

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

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

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

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

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

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

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

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

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

【讨论】:

以上是关于VHDL结构架构和clk'event的主要内容,如果未能解决你的问题,请参考以下文章

VHDL语言基础

VHDL程序的基本结构

VHDL语法相关

VHDL语法相关

VHDL语法相关

FPGA学习笔记06-VHDL语法基础-生成语句(generate)