D-Flip-Flops(DFF)

在所有例子中:

  • clk 是時鐘,
  • d 是輸入,
  • q 是輸出,
  • srst 是一個有源高同步復位,
  • srstn 是低電平有效同步復位,
  • arst 是一個有源高速非同步復位,
  • arstn 是一個低電平有效復位,
  • sset 是一個高效的同步集,
  • ssetn 是一個有源低同步集,
  • aset 是一個活躍的高非同步集,
  • asetn 是一個低有效的低非同步集

所有訊號均為 ieee.std_logic_1164.std_ulogic 型。使用的語法是使用所有邏輯合成器得到正確合成結果的語法。有關備用語法的討論,請參閱時鐘邊沿檢測示例。

上升沿時鐘

process(clk)
begin
  if rising_edge(clk) then
    q <= d;
  end if;
end process;

下降邊緣時鐘

process(clk)
begin
  if falling_edge(clk) then
    q <= d;
  end if;
end process;

上升沿時鐘,同步有效高電平復位

process(clk)
begin
  if rising_edge(clk) then
    if srst = '1' then
      q <= '0';
    else
      q <= d;
    end if;
  end if;
end process;

上升沿時鐘,非同步有效高電平復位

process(clk, arst)
begin
  if arst = '1' then
    q <= '0';
  elsif rising_edge(clk) then
    q <= d;
  end if;
end process;

下降沿時鐘,非同步有效低電平復位,同步有效高電平設定

process(clk, arstn)
begin
  if arstn = '0' then
    q <= '0';
  elsif falling_edge(clk) then
    if sset = '1' then
      q <= '1';
    else
      q <= d;
    end if;
  end if;
end process;

上升沿時鐘,非同步有效高電平復位,非同步低電平有效

注意:set 的優先順序高於 reset

process(clk, arst, asetn)
begin
  if asetn = '0' then
    q <= '1';
  elsif arst = '1' then
    q <= '0';
  elsif rising_edge(clk) then
    q <= d;
  end if;
end process;