(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。因此,如果您想进一步延迟(例如检测其上的边缘),那么您将需要更多触发器。