gpt4 book ai didi

vhdl - clk'event 与rising_edge()

转载 作者:行者123 更新时间:2023-12-03 07:49:04 28 4
gpt4 key购买 nike

我一直用它来检测上升沿:

if (clk'event and clk='1') then

但这也可以使用:

如果上升沿(clk)则

阅读this post ,推荐rising_edge(clk),但也有a comment表明 rising_edge(clk) 可能会导致错误的行为。

我无法决定将来选择哪一个,是继续使用 (clk'event and clk='1') 还是采用 rising_edge(clk) .

这两者有什么实际经验吗?有什么偏好吗?

谢谢!

最佳答案

rising_edge 定义为:

FUNCTION rising_edge  (SIGNAL s : std_ulogic) RETURN BOOLEAN IS
BEGIN
RETURN (s'EVENT AND (To_X01(s) = '1') AND
(To_X01(s'LAST_VALUE) = '0'));
END;

FUNCTION To_X01 ( s : std_ulogic ) RETURN X01 IS
BEGIN
RETURN (cvt_to_x01(s));
END;

CONSTANT cvt_to_x01 : logic_x01_table := (
'X', -- 'U'
'X', -- 'X'
'0', -- '0'
'1', -- '1'
'X', -- 'Z'
'X', -- 'W'
'0', -- 'L'
'1', -- 'H'
'X' -- '-'
);

如果您的时钟仅从 0 到 1,以及从 1 到 0,则rising_edge 将产生相同的代码。否则,您可以解释差异。

就我个人而言,我的时钟只会从 0 到 1,反之亦然。我发现 rising_edge(clk)(clk'event and clk = '1') 变体更具描述性。

关于vhdl - clk'event 与rising_edge(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15205202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com