(VHDL) 编写一个双触发器来解决与异步输入数据相关的元稳定性
(VHDL) Write a double flip flop to resolve meta stability associated with asynchronous input data
背景
我是 VHDL 的新手,正在尝试了解如何编写双触发器代码来处理与用户按下我的 fpga 板 (Cyclone V) 上的按钮相关的亚稳态。我了解使用双触发器来稳定数据背后的逻辑,但不确定如何在 VHDL 中实现。(来源:, eetimes article)
问题
我不确定如何编写双触发器的代码(请参阅下面的尝试)。有人可以提供显示工作双触发器的示例代码吗?
我尝试双触发器的示例代码
--input is std_logic;
input <= key(0) -- user pressed key =1, key can be pressed and held
process(input)
signal inputFF : std_logic;
begin
if rising_edge(clock) then
inputFF<= input;
if input = '1' and inputFF = '1' then
-- enter if-statement: user pressed the key and the data was
-- synchronized by going through a double flip flop?
end if;
end if;
end process;
我的想法:
我不确定 if 语句是否充当双触发器。我将输入传递给 rising_edge 上的 inputFF,然后检查 input 和 inputFF 是否等于 1.
这是一个翻转:
process (clock)
begin
if rising_edge(clock) then
inputFF <= input;
end if;
end process;
这是另一个:
process (clock)
begin
if rising_edge(clock) then
inputFF2 <= inputFF;
end if;
end process;
大多数人会像这样组合它们来节省一些代码行:
process (clock)
begin
if rising_edge(clock) then
inputFF <= input;
inputFF2 <= inputFF;
end if;
end process;
唯一可以使用的安全信号是inputFF2
。因此,如果您想进一步延迟(例如检测其上的边缘),那么您将需要更多触发器。
背景
我是 VHDL 的新手,正在尝试了解如何编写双触发器代码来处理与用户按下我的 fpga 板 (Cyclone V) 上的按钮相关的亚稳态。我了解使用双触发器来稳定数据背后的逻辑,但不确定如何在 VHDL 中实现。(来源:
问题
我不确定如何编写双触发器的代码(请参阅下面的尝试)。有人可以提供显示工作双触发器的示例代码吗?
我尝试双触发器的示例代码
--input is std_logic;
input <= key(0) -- user pressed key =1, key can be pressed and held
process(input)
signal inputFF : std_logic;
begin
if rising_edge(clock) then
inputFF<= input;
if input = '1' and inputFF = '1' then
-- enter if-statement: user pressed the key and the data was
-- synchronized by going through a double flip flop?
end if;
end if;
end process;
我的想法: 我不确定 if 语句是否充当双触发器。我将输入传递给 rising_edge 上的 inputFF,然后检查 input 和 inputFF 是否等于 1.
这是一个翻转:
process (clock)
begin
if rising_edge(clock) then
inputFF <= input;
end if;
end process;
这是另一个:
process (clock)
begin
if rising_edge(clock) then
inputFF2 <= inputFF;
end if;
end process;
大多数人会像这样组合它们来节省一些代码行:
process (clock)
begin
if rising_edge(clock) then
inputFF <= input;
inputFF2 <= inputFF;
end if;
end process;
唯一可以使用的安全信号是inputFF2
。因此,如果您想进一步延迟(例如检测其上的边缘),那么您将需要更多触发器。