基本的な記憶回路であり,組合せ回路の構成要素となるDフリップフロップに ついて考えてみましょう.頻繁に用いられる回路ですから,この回路の記述例 は是非覚えて下さい.<表:Dフリップフ ップの動作>は,クロックの立ち上が りで動作するDフリップフロップの動作表です.
次にDフリップフロップの記述を示します.if文中のCLK'eventに注目して下さ い.これは,信号CLKが変動したときに真となる値です.eventをアトリビュートと呼びます. このようにこの値が真であり,CLK = '1'という条件を同時に満たすというこ とは,すなわちクロックの立ち上がりを検出することを意味しています.この 表現は非常に重要なので,しっかりと理解して下さい.また,立ち下がりを検 出するにはCLK ='0'と書けばよいのです.
-- ライブラリ宣言
library IEEE;
use IEEE.std_logic_1164.all;
-- エンティティ宣言
entity D_FF is
port (
D : in std_logic;
CLK : in std_logic;
Q : out std_logic );
end D_FF;
-- アーキテクチャ本体
architecture D_FF_Body of D_FF is
signal DBUF: std_logic;
begin
process(CLK)
begin
if CLK'event and CLK = '1' then
DBUF <= D;
end if;
end process;
Q <= DBUF;
end D_FF_Body;
手始めに,同期リセット付きDフリップフロップを記述してみます.
-- ライブラリ宣言
library IEEE;
use IEEE.std_logic_1164.all;
-- エンティティ宣言
entity D_FF is
port (
D : in std_logic;
CLK : in std_logic;
RESET : in std_logic;
Q : out std_logic );
end D_FF;
-- アーキテクチャ本体
architecture D_FF_Body of D_FF is
signal DBUF: std_logic;
begin
process(CLK)
begin
if CLK'event and CLK = '1' then
if RESET = '1' then
DBUF <= '0';
else
DBUF <= D;
end if;
end if;
end process;
Q <= DBUF;
end D_FF_Body;
では,非同期リセット付きDフリップフロップを記述してみます.もう少し複 雑にするために,書き込み制御も行う8ビットのレジスタにしてみます.
-- ライブラリ宣言
library IEEE;
use IEEE.std_logic_1164.all;
-- エンティティ宣言
entity D_FF is
port (
D : in std_logic_vector( 7 downto 0 );
CLK : in std_logic;
RESET : in std_logic;
WE : in std_logic;
Q : out std_logic_vector( 7 downto 0 ) );
end D_FF;
-- アーキテクチャ本体
architecture D_FF_Body of D_FF is
signal DBUF: std_logic;
begin
process(CLK, RESET)
begin
if RESET = '1' then
DBUF <= "00000000";
elsif CLK'event and CLK = '1' then
if WE = '1' then
DBUF <= D;
end if;
end if;
end process;
Q <= DBUF;
end D_FF_Body;
VHDLによる順序回路の記述法 −8ビットバイナリカウンタ−
ホーム
もどる
辞書