entity sr64_1a is

  port (
       E_N         : in  bit                        ;
       W_N         : in  bit                        ;
       D           : in  bit                        ;
       Q           : out mux_bit                 bus;
       A           : in  bit_vector (5 downto 0)    ;
       VDD         : in  bit                        ;
       VSS         : in  bit
       );

end sr64_1a;


architecture FUNCTIONAL of sr64_1a is

  signal RAM0_RX , RAM1_RX , RAM2_RX , RAM3_RX , RAM4_RX  : reg_bit register;
  signal RAM5_RX , RAM6_RX , RAM7_RX , RAM8_RX , RAM9_RX  : reg_bit register;
  signal RAM10_RX, RAM11_RX, RAM12_RX, RAM13_RX, RAM14_RX : reg_bit register;
  signal RAM15_RX, RAM16_RX, RAM17_RX, RAM18_RX, RAM19_RX : reg_bit register;
  signal RAM20_RX, RAM21_RX, RAM22_RX, RAM23_RX, RAM24_RX : reg_bit register;
  signal RAM25_RX, RAM26_RX, RAM27_RX, RAM28_RX, RAM29_RX : reg_bit register;
  signal RAM30_RX, RAM31_RX, RAM32_RX, RAM33_RX, RAM34_RX : reg_bit register;
  signal RAM35_RX, RAM36_RX, RAM37_RX, RAM38_RX, RAM39_RX : reg_bit register;
  signal RAM40_RX, RAM41_RX, RAM42_RX, RAM43_RX, RAM44_RX : reg_bit register;
  signal RAM45_RX, RAM46_RX, RAM47_RX, RAM48_RX, RAM49_RX : reg_bit register;
  signal RAM50_RX, RAM51_RX, RAM52_RX, RAM53_RX, RAM54_RX : reg_bit register;
  signal RAM55_RX, RAM56_RX, RAM57_RX, RAM58_RX, RAM59_RX : reg_bit register;
  signal RAM60_RX, RAM61_RX, RAM62_RX, RAM63_RX           : reg_bit register;

  signal READ_SX                                          : bit;
  signal WRTEN_SX                                         : bit;

begin

  WRTEN_SX <= E_N nor W_N;

  wr_0 : block (WRTEN_SX = '1' and A = "000000")
  begin
    RAM0_RX <= guarded D;
  end block;

  wr_1 : block (WRTEN_SX = '1' and A = "000001")
  begin
    RAM1_RX <= guarded D;
  end block;

  wr_2 : block (WRTEN_SX = '1' and A = "000010")
  begin
    RAM2_RX <= guarded D;
  end block;

  wr_3: block (WRTEN_SX = '1' and A = "000011")
  begin
    RAM3_RX <= guarded D;
  end block;

  wr_4: block (WRTEN_SX = '1' and A = "000100")
  begin
    RAM4_RX <= guarded D;
  end block;

  wr_5: block (WRTEN_SX = '1' and A = "000101")
  begin
    RAM5_RX <= guarded D;
  end block;

  wr_6: block (WRTEN_SX = '1' and A = "000110")
  begin
    RAM6_RX <= guarded D;
  end block;

  wr_7: block (WRTEN_SX = '1' and A = "000111")
  begin
    RAM7_RX <= guarded D;
  end block;

  wr_8: block (WRTEN_SX = '1' and A = "001000")
  begin
    RAM8_RX <= guarded D;
  end block;

  wr_9: block (WRTEN_SX = '1' and A = "001001")
  begin
    RAM9_RX <= guarded D;
  end block;

  wr_10: block (WRTEN_SX = '1' and A = "001010")
  begin
    RAM10_RX <= guarded D;
  end block;

  wr_11: block (WRTEN_SX = '1' and A = "001011")
  begin
    RAM11_RX <= guarded D;
  end block;

  wr_12: block (WRTEN_SX = '1' and A = "001100")
  begin
    RAM12_RX <= guarded D;
  end block;

  wr_13: block (WRTEN_SX = '1' and A = "001101")
  begin
    RAM13_RX <= guarded D;
  end block;

  wr_14: block (WRTEN_SX = '1' and A = "001110")
  begin
    RAM14_RX <= guarded D;
  end block;

  wr_15: block (WRTEN_SX = '1' and A = "001111")
  begin
    RAM15_RX <= guarded D;
  end block;

  wr_16: block (WRTEN_SX = '1' and A = "010000")
  begin
    RAM16_RX <= guarded D;
  end block;

  wr_17: block (WRTEN_SX = '1' and A = "010001")
  begin
    RAM17_RX <= guarded D;
  end block;

  wr_18: block (WRTEN_SX = '1' and A = "010010")
  begin
    RAM18_RX <= guarded D;
  end block;

  wr_19: block (WRTEN_SX = '1' and A = "010011")
  begin
    RAM19_RX <= guarded D;
  end block;

  wr_20: block (WRTEN_SX = '1' and A = "010100")

  begin
    RAM20_RX <= guarded D;
  end block;

  wr_21: block (WRTEN_SX = '1' and A = "010101")
  begin
    RAM21_RX <= guarded D;
  end block;

  wr_22: block (WRTEN_SX = '1' and A = "010110")
  begin
    RAM22_RX <= guarded D;
  end block;

  wr_23: block (WRTEN_SX = '1' and A = "010111")
  begin
    RAM23_RX <= guarded D;
  end block;

  wr_24: block (WRTEN_SX = '1' and A = "011000")
  begin
    RAM24_RX <= guarded D;
  end block;

  wr_25: block (WRTEN_SX = '1' and A = "011001")
  begin
    RAM25_RX <= guarded D;
  end block;

  wr_26: block (WRTEN_SX = '1' and A = "011010")
  begin
    RAM26_RX <= guarded D;
  end block;

  wr_27: block (WRTEN_SX = '1' and A = "011011")
  begin
    RAM27_RX <= guarded D;
  end block;

  wr_28: block (WRTEN_SX = '1' and A = "011100")
  begin
    RAM28_RX <= guarded D;
  end block;

  wr_29: block (WRTEN_SX = '1' and A = "011101")
  begin
    RAM29_RX <= guarded D;
  end block;

  wr_30: block (WRTEN_SX = '1' and A = "011110")
  begin
    RAM30_RX <= guarded D;
  end block;

  wr_31: block (WRTEN_SX = '1' and A = "011111")
  begin
    RAM31_RX <= guarded D;
  end block;

  wr_32: block (WRTEN_SX = '1' and A = "100000")
  begin
    RAM32_RX <= guarded D;
  end block;

  wr_33: block (WRTEN_SX = '1' and A = "100001")
  begin
    RAM33_RX <= guarded D;
  end block;

  wr_34: block (WRTEN_SX = '1' and A = "100010")
  begin
    RAM34_RX <= guarded D;
  end block;

  wr_35: block (WRTEN_SX = '1' and A = "100011")
  begin
    RAM35_RX <= guarded D;
  end block;

  wr_36: block (WRTEN_SX = '1' and A = "100100")
  begin
    RAM36_RX <= guarded D;
  end block;

  wr_37: block (WRTEN_SX = '1' and A = "100101")
  begin
    RAM37_RX <= guarded D;
  end block;

  wr_38: block (WRTEN_SX = '1' and A = "100110")
  begin
    RAM38_RX <= guarded D;
  end block;

  wr_39: block (WRTEN_SX = '1' and A = "100111")
  begin
    RAM39_RX <= guarded D;
  end block;

  wr_40: block (WRTEN_SX = '1' and A = "101000")
  begin
    RAM40_RX <= guarded D;
  end block;

  wr_41: block (WRTEN_SX = '1' and A = "101001")
  begin
    RAM41_RX <= guarded D;
  end block;

  wr_42: block (WRTEN_SX = '1' and A = "101010")
  begin
    RAM42_RX <= guarded D;
  end block;

  wr_43: block (WRTEN_SX = '1' and A = "101011")
  begin
    RAM43_RX <= guarded D;
  end block;

  wr_44: block (WRTEN_SX = '1' and A = "101100")
  begin
    RAM44_RX <= guarded D;
  end block;

  wr_45: block (WRTEN_SX = '1' and A = "101101")
  begin
    RAM45_RX <= guarded D;
  end block;

  wr_46: block (WRTEN_SX = '1' and A = "101110")
  begin
    RAM46_RX <= guarded D;
  end block;

  wr_47: block (WRTEN_SX = '1' and A = "101111")
  begin
    RAM47_RX <= guarded D;
  end block;

  wr_48: block (WRTEN_SX = '1' and A = "110000")
  begin
    RAM48_RX <= guarded D;
  end block;

  wr_49: block (WRTEN_SX = '1' and A = "110001")
  begin
    RAM49_RX <= guarded D;
  end block;
  wr_50: block (WRTEN_SX = '1' and A = "110010")
  begin
    RAM50_RX <= guarded D;
  end block;

  wr_51: block (WRTEN_SX = '1' and A = "110011")
  begin
    RAM51_RX <= guarded D;
  end block;

  wr_52: block (WRTEN_SX = '1' and A = "110100")
  begin
    RAM52_RX <= guarded D;
  end block;

  wr_53: block (WRTEN_SX = '1' and A = "110101")
  begin
    RAM53_RX <= guarded D;
  end block;

  wr_54: block (WRTEN_SX = '1' and A = "110110")
  begin
    RAM54_RX <= guarded D;
  end block;

  wr_55: block (WRTEN_SX = '1' and A = "110111")
  begin
    RAM55_RX <= guarded D;
  end block;

  wr_56: block (WRTEN_SX = '1' and A = "111000")
  begin
    RAM56_RX <= guarded D;
  end block;

  wr_57: block (WRTEN_SX = '1' and A = "111001")
  begin
    RAM57_RX <= guarded D;
  end block;

  wr_58: block (WRTEN_SX = '1' and A = "111010")
  begin
    RAM58_RX <= guarded D;
  end block;

  wr_59: block (WRTEN_SX = '1' and A = "111011")
  begin
    RAM59_RX <= guarded D;
  end block;

  wr_60: block (WRTEN_SX = '1' and A = "111100")
  begin
    RAM60_RX <= guarded D;
  end block;

  wr_61: block (WRTEN_SX = '1' and A = "111101")
  begin
    RAM61_RX <= guarded D;
  end block;

  wr_62: block (WRTEN_SX = '1' and A = "111110")
  begin
    RAM62_RX <= guarded D;
  end block;

  wr_63: block (WRTEN_SX = '1' and A = "111111")
  begin
    RAM63_RX <= guarded D;
  end block;

  with A (5 downto 0)  select
  READ_SX <= RAM0_RX  when "000000",
             RAM1_RX  when "000001",
             RAM2_RX  when "000010",
             RAM3_RX  when "000011",
             RAM4_RX  when "000100",
             RAM5_RX  when "000101",
             RAM6_RX  when "000110",
             RAM7_RX  when "000111",
             RAM8_RX  when "001000",
             RAM9_RX  when "001001",
             RAM10_RX when "001010",
             RAM11_RX when "001011",
             RAM12_RX when "001100",
             RAM13_RX when "001101",
             RAM14_RX when "001110",
             RAM15_RX when "001111",
             RAM16_RX when "010000",
             RAM17_RX when "010001",
             RAM18_RX when "010010",
             RAM19_RX when "010011",
             RAM20_RX when "010100",
             RAM21_RX when "010101",
             RAM22_RX when "010110",
             RAM23_RX when "010111",
             RAM24_RX when "011000",
             RAM25_RX when "011001",
             RAM26_RX when "011010",
             RAM27_RX when "011011",
             RAM28_RX when "011100",
             RAM29_RX when "011101",
             RAM30_RX when "011110",
             RAM31_RX when "011111",
             RAM32_RX when "100000",
             RAM33_RX when "100001",
             RAM34_RX when "100010",
             RAM35_RX when "100011",
             RAM36_RX when "100100",
             RAM37_RX when "100101",
             RAM38_RX when "100110",
             RAM39_RX when "100111",
             RAM40_RX when "101000",
             RAM41_RX when "101001",
             RAM42_RX when "101010",
             RAM43_RX when "101011",
             RAM44_RX when "101100",
             RAM45_RX when "101101",
             RAM46_RX when "101110",
             RAM47_RX when "101111",
             RAM48_RX when "110000",
             RAM49_RX when "110001",
             RAM50_RX when "110010",
             RAM51_RX when "110011",
             RAM52_RX when "110100",
             RAM53_RX when "110101",
             RAM54_RX when "110110",
             RAM55_RX when "110111",
             RAM56_RX when "111000",
             RAM57_RX when "111001",
             RAM58_RX when "111010",
             RAM59_RX when "111011",
             RAM60_RX when "111100",
             RAM61_RX when "111101",
             RAM62_RX when "111110",
             RAM63_RX when "111111",
             '0'      when others;

  wr_q : block (E_N = '0' and W_N = '1')
  begin
   Q <= guarded READ_SX;
  end block;

end FUNCTIONAL ;
