メモリー / 1ビットレジスタを作る

pp.52-53

前回DFFに同期ロード機能(enable機能)を追加する。基本ゲートだけで組み上げるので結局process文は使わない。

load1のときは入力dがそのままdffd端子へ供給される(すなわち出力が同期更新される。すなわち普通のdffとして働く)。load0のときは出力qdffd端子へ供給される(すなわち今の値が保持され続ける)。

library ieee;
use ieee.std_logic_1164.all;

entity register_1_bit is
    port (
        clk, load, d: in std_logic;
        q: out std_logic
    );
end entity;

architecture behavior of register_1_bit is
    signal temp_d, temp_q: std_logic;
begin
    u0: entity work.mux
    port map (
        a => temp_q,
        b => d,
        sel => load,
        outp => temp_d
    );

    u1: entity work.d_ff
    port map (
        clk => clk,
        d => temp_d,
        q => temp_q
    );
    
    q <= temp_q;

--    process(clk, load)
--    begin
--        if rising_edge(clk) then
--            if load='1' then -- 同期ロード
--                q <= d;
--            end if;
--        end if;
--    end process;
    
end architecture;