2つに分けていたRAMモジュールを排列化でひとつにまとめる

pp.274-276

コメントを足した以外はテキストのままである。

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity ram_dc_wb is
    port(
        CLK_DC   : in std_logic;
        CLK_WB   : in std_logic;
        RAM_ADDR : in std_logic_vector(7 downto 0);
        RAM_IN   : in std_logic_vector(15 downto 0);
        IO65_IN  : in std_logic_vector(15 downto 0);
        RAM_WEN  : in std_logic;
        
        RAM_OUT  : out std_logic_vector(15 downto 0);
        IO64_OUT : out std_logic_vector(15 downto 0)
    );
end ram_dc_wb;


architecture RTL of ram_dc_wb is

subtype RAM_WORD is std_logic_vector(15 downto 0);  -- RAM_WORDという、16ビットの型を宣言し、
type RAM_ARRAY_TYPE is array (0 to 63) of RAM_WORD; -- RAM_ARRAY_TYPEという、RAM_WORD × 64本の型を宣言し、
signal RAM_ARRAY : RAM_ARRAY_TYPE;                  -- それを実体化

signal ADDR_INT : integer range 0 to 255;

begin
    ADDR_INT <= conv_integer(RAM_ADDR);

   -- 配列 RAM_ARRAY の読み出し処理   
    process (CLK_DC)
    begin
        if (CLK_DC'event and CLK_DC = '1') then -- decodeクロックが立ち上がっって、
            if (ADDR_INT < 64) then             -- アドレスが64未満であったら、
                RAM_OUT <= RAM_ARRAY(ADDR_INT); -- そのアドレスのRAMを読み出してexecモジュールへ与えるが、
            elsif (ADDR_INT = 65) then          -- アドレスが65であったら、
                RAM_OUT <= IO65_IN;             -- INポートから読み出してexecモジュールへ与える。
            end if;
        end if;
    end process;

   -- 配列 RAM_ARRAY の書き込み処理
    process (CLK_WB)
    begin
        if (CLK_WB'event and CLK_WB = '1') then    -- write backクロックが立ち上がって、
            if (RAM_WEN = '1') then                -- write enableが有意であって、
                if (ADDR_INT < 64) then            -- アドレスが64未満であったら、
                    RAM_ARRAY(ADDR_INT) <= RAM_IN; -- execから出てきた値をそのアドレスのRAMへ書き込むが、
                elsif (ADDR_INT = 64) then         -- アドレスが64であったら、
                    IO64_OUT <= RAM_IN;            -- OUTポートへ出力する。
                end if;
            end if;
        end if;
    end process;
end RTL;

シンボル化して下のように配線した。
f:id:ti-nspire:20210131083724p:plain