Dフリップフロップ

入出力

名前 入力・出力 ビット幅 説明
d 入力 1 入力
clk 入力 1 同期信号
reset_n 入力 1 非同期リセット(不論理)
q 出力 1 出力

真理値表

入力 出力
d clk reset_n q
0 0
0 クロックの立ち上がり 1 0
1 クロックの立ち上がり 1 1
クロックの立ち上がり 以外 1 値を保持

クロックの立ち上がりはクロックの立ち上がり

コード

  • VerilogHDL
d_ff.v
module d_ff(d, clk, reset_n, q);
  input d, clk, reset_n;
  output q;
  reg q;
 
  always@(posedge clk or negedge reset_n)
    if(!reset_n)
      q <= 1'b0;
    else
      q <= d;
 
endmodule
  • VHDL
d_ff.vhd
library	IEEE;
use IEEE.std_logic_1164.all;
 
entity d_ff is
  port (d, clk, reset_n : in std_logic;
        q : out std_logic );
end d_ff;
 
architecture d_ff_body of d_ff is
begin
  process(clk, reset_n)
  begin
    if(reset_n = '0') then
      q <= '0';
    elsif (clk'event and clk = '1') then
      q <= d;
    end if;
  end process;
end d_ff_body;

シミュレーション

  • テストベンチ(VerilogHDL)
d_ff_tb.v
`timescale 1ns / 1ps
module d_ff_tb_v;
  reg d;
  reg clk;
  reg reset_n;
  wire q;
 
  d_ff d_ff_d(.d(d), .clk(clk), .reset_n(reset_n), .q(q));
 
  initial begin
    clk = 0;
    forever
      #50 clk = ~clk;
  end
 
  initial begin
    d = 0; reset_n = 0;
    #100 d = 1; reset_n = 1;
    #200 d = 0;
    #100 d = 1;
    #230  reset_n = 0;
  end
 
endmodule
  • テストベンチ(VHDL)
d_ff_tb.vhd
library ieee;
use ieee.std_logic_1164.all;
 
entity d_ff_tb is
end d_ff_tb;
 
architecture d_ff_tb_body of d_ff_tb is
 
  component d_ff
  port ( d, clk, reset_n : in std_logic;
         q : out std_logic );
   end component;
 
  signal d, reset_n :  std_logic;
  signal clk :  std_logic := '0';
  signal q :  std_logic;
begin
 
  d_ff_d: d_ff port map(
    d       => d,
    clk     => clk,
    reset_n => reset_n,
    q       => q
  );
 
  process
  begin
    clk <= not clk;
    wait for 50 ns;
  end process;
 
  process
  begin
    d <= '0'; reset_n <= '0';
    wait for 100 ns; d <= '1'; reset_n <= '1';
    wait for 200 ns; d <= '0';
    wait for 100 ns; d <= '1';
    wait for 230 ns; reset_n <= '0';
    wait;
  end process;
 
end;
  • シミュレーション波形

関連項目