0.D型フリップフロップを知る(論理回路設計の始めの一歩)
論理回路設計の始めの一歩 「D型フリップフロップ」
(言語)論理回路設計をこれから学ぼうとされる技術者にとって始めの一歩として「D型フリップフロップを知る」の動作を理解しておく必要があります。論理回路の世界では、大別するとAND,OR等の組み合わせ回路とD型フリップフロップの2種類で構成されています。ではD型フリップフロップを見ていきましょう。
回路図で書くとどんな感じ?
以下のような感じになります。これだけは図として覚えておいてください。
動作パターン図(タイムチャート図)
下図は動作パターン図(タイムチャート図)です。
リセットreset_n(Lレベル)が入力されているときは、出力のqはLレベルになります。
リセットが解除(Hレベル)されると、出力qは入力dの値を反映します。反映するタイミングはクロックclkの立ち上がりとなります。
覚えるべきことはこれだけです。どうですか、これなら覚えられそうですね。
言語(VHDL)で書くとどうなるか?
こうなります。上部のentityの部分には入出力信号を定義します。
下部のprocess ~ end process; で動作を定義します。
上から優先されますので、まず入力reset_nがLレベルなら出力qはLレベルであることを記載します。次に入力clkの立ち上がりの時は常に出力qは入力dによることを記載します。たったこれだけです。どうでしょう、「これなら自分でもできそう」な印象を持てるのはでないでしょうか。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity dff is
Port (
d : in STD_LOGIC;
clk : in STD_LOGIC;
reset_n : in STD_LOGIC;
q : out STD_LOGIC
);
end dff;
architecture rtl of dff is
begin
process(clk, reset_n)
begin
if reset_n = '0' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;
end rtl;
言語(Verilog)で書くとどうなるか?
言語は大別するとVHDLの他にVerilogと言う言語があります。VerilogはVHDLに対して記述する量が比較的少なくて済みます。以下に示します。上部のmoduleでは入出力を定義します。VHDLと違うのは inputやoutputに続いてwire やreg で種類を定義していることです。wireはその名前の通りでワイヤーです。一方output reg qは、出力qはレジスタ(フリップフロップで記憶される)であることを示します。
下部、always以下で動作を定義します。上から優先されますので、まず入力reset_nがLレベルなら出力qはLレベルであることを記載します。次に入力clkの立ち上がりの時は常に出力qは入力dによることを記載します。VHDLと書き方は多少違えど記載していることは当然ですが同じになります。
module dff (
input wire d,
input wire clk,
input wire reset_n,
output reg q
);
always @(posedge clk or negedge reset_n) begin
if (!reset_n)
q <= 1'b0;
else
q <= d;
end
endmodule
おわりに
ここまで読んでくださった方は(言語)論理設計のスタートに立った方です。少しずつ学んでいきましょう。ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?