ARCHITECTURE studentVersion OF sineTable IS

  signal phaseTableAddress : unsigned(tableAddressBitNb-1 downto 0);
  signal phaseTableAddress2 : unsigned(tableAddressBitNb-1 downto 0);
  signal quarterSine : signed(sine'range);

BEGIN

  phaseTableAddress <= phase(phase'high-2 downto phase'high-2-tableAddressBitNb+1);

  sequenceTable: process(phase)
  begin
    if phase(phase'high-1) = '1' then
      phaseTableAddress2 <= 8 - phaseTableAddress;
    else
      phaseTableAddress2 <= phaseTableAddress;
    end if;
  end process sequenceTable;

  quarterTable: process(phaseTableAddress2)
  begin
    case to_integer(phaseTableAddress2) is
      when 0 => quarterSine <= to_signed(16#0000#, quarterSine'length);
      when 1 => quarterSine <= to_signed(16#18F9#, quarterSine'length);
      when 2 => quarterSine <= to_signed(16#30FB#, quarterSine'length);
      when 3 => quarterSine <= to_signed(16#471C#, quarterSine'length);
      when 4 => quarterSine <= to_signed(16#5A82#, quarterSine'length);
      when 5 => quarterSine <= to_signed(16#6A6D#, quarterSine'length);
      when 6 => quarterSine <= to_signed(16#7641#, quarterSine'length);
      when 7 => quarterSine <= to_signed(16#7D89#, quarterSine'length);
      when others => quarterSine <= (others => '-');
    end case;
  end process quarterTable;

  invert: process(quarterSine)
  begin
    if phase(phase'high) = '1' then
      sine <= NOT quarterSine;
    else
      sine <= quarterSine;
    end if;
  end process invert;
  
  --sine <= quarterSine;

END ARCHITECTURE studentVersion;
