RAMの読み出し部を作る
pp.198-200
これもテキストのままである。16ビット×256本のRAMのうち1本を選んで出力する。ただしここでは8+1本のなかから選べるようにした。
-- ram_dc.vhd library IEEE; use IEEE.std_logic_1164.all; entity ram_dc is port( CLK_DC : in std_logic; RAM_AD_IN : in std_logic_vector(7 downto 0); -- アドレスが8ビット幅なので256本まで指定できるが、 -- ここでは8+1本のみ使用する。 RAM_0, RAM_1, RAM_2, RAM_3, RAM_4, RAM_5, RAM_6, RAM_7, IO65_IN : in std_logic_vector(15 downto 0); RAM_AD_OUT : out std_logic_vector(7 downto 0); RAM_OUT : out std_logic_vector(15 downto 0) ); end ram_dc; architecture RTL of ram_dc is begin process(CLK_DC) begin if(CLK_DC'event and CLK_DC = '1') then -- アドレス(RAM_AD_IN)に応じたRAMを出力する。 case RAM_AD_IN is when "00000000" => RAM_OUT <= RAM_0; when "00000001" => RAM_OUT <= RAM_1; when "00000010" => RAM_OUT <= RAM_2; when "00000011" => RAM_OUT <= RAM_3; when "00000100" => RAM_OUT <= RAM_4; when "00000101" => RAM_OUT <= RAM_5; when "00000110" => RAM_OUT <= RAM_6; when "00000111" => RAM_OUT <= RAM_7; when "01000001" => RAM_OUT <= IO65_IN; when others => null; -- 該当するアドレスのない場合は何もしない。 --RAM_OUT <= (others => '0'); -- 該当するアドレスのない場合に全ビットを0にしたい場合はこの行を追加する。 --RAM_OUT <= (others => '1'); -- 該当するアドレスのない場合は全ビットを1にしたい場合はこの行を追加する。 end case; end if; end process; RAM_AD_OUT <= RAM_AD_IN; -- RAMアドレスは次のステージで使うのでそのまま出力する。 end RTL;
とても全部は試せないので、セレクト信号を0x41 (0d65)にしたときにIO65_INが出力されるのを確かめるにとどめる。RAM_0~7は假想端子につないでおく。