レジスタの読み出し部を作る

pp.197-198

16ビット×8本のレジスタのうち1本を選んで出力する。これもテキストのままである。

-- reg_dc.vhd
library IEEE;
use IEEE.std_logic_1164.all;

entity reg_dc is
    port(
        CLK_DC   : in std_logic;
        N_REG_IN : in std_logic_vector(2 downto 0); -- セレクト信号(0b000~0b111)

        REG_0,
        REG_1,
        REG_2,
        REG_3,
        REG_4,
        REG_5,
        REG_6,
        REG_7 : in std_logic_vector(15 downto 0);

        N_REG_OUT : out std_logic_vector(2 downto 0);
        REG_OUT   : out std_logic_vector(15 downto 0)
    );
end reg_dc;

architecture RTL of reg_dc is
begin
    process(CLK_DC)
    begin
        if(CLK_DC'event and CLK_DC = '1') then
           -- 16ビット × 8本のうち1本を選んで出力する。
            case N_REG_IN is
                when "000"  => REG_OUT <= REG_0;
                when "001"  => REG_OUT <= REG_1;
                when "010"  => REG_OUT <= REG_2;
                when "011"  => REG_OUT <= REG_3;
                when "100"  => REG_OUT <= REG_4;
                when "101"  => REG_OUT <= REG_5;
                when "110"  => REG_OUT <= REG_6;
                when "111"  => REG_OUT <= REG_7;
                when others => null;
            end case;
            N_REG_OUT <= N_REG_IN; -- セレクト信号は次のステージでも使うのでそのまま出力する。
        end if;
    end process;
end RTL;

全部試すのは大変なので、セレクト信号を0b011にしたときにREG_3が出力されるのを確かめるにとどめる。他のREG_nは假想端子につないでおく。
f:id:ti-nspire:20210118154019p:plain:h300 f:id:ti-nspire:20210118153402j:plain:h300