add solutions
This commit is contained in:
		| @@ -0,0 +1,57 @@ | ||||
| ARCHITECTURE masterVersion OF sineTable IS | ||||
|  | ||||
|   signal changeSign : std_uLogic; | ||||
|   signal flipPhase : std_uLogic; | ||||
|   signal phaseTableAddress1 : unsigned(tableAddressBitNb-1 downto 0); | ||||
|   signal phaseTableAddress2 : unsigned(phaseTableAddress1'range); | ||||
|   signal quarterSine : signed(sine'range); | ||||
|  | ||||
|   signal shiftPhase : std_uLogic := '0';  -- can be used to build a cosine | ||||
|  | ||||
| begin | ||||
|  | ||||
|   changeSign <= phase(phase'high); | ||||
|   flipPhase <= phase(phase'high-1); | ||||
|  | ||||
|   phaseTableAddress1 <= phase(phase'high-2 downto phase'high-2-tableAddressBitNb+1); | ||||
|  | ||||
|   checkPhase: process(flipPhase, shiftPhase, phaseTableAddress1) | ||||
|   begin | ||||
|     if (flipPhase xor shiftPhase) = '0' then | ||||
|       phaseTableAddress2 <= phaseTableAddress1; | ||||
|     else | ||||
|       phaseTableAddress2 <= 0 - phaseTableAddress1; | ||||
|     end if; | ||||
|   end process checkPhase; | ||||
|  | ||||
|  | ||||
|   quarterTable: process(phaseTableAddress2, flipPhase, shiftPhase) | ||||
|   begin | ||||
|     case to_integer(phaseTableAddress2) is | ||||
|       when 0 => if (flipPhase xor shiftPhase) = '0' then | ||||
|                   quarterSine <= to_signed(16#0000#, quarterSine'length); | ||||
|                 else | ||||
|                   quarterSine <= to_signed(16#7FFF#, quarterSine'length); | ||||
|                 end if; | ||||
|       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; | ||||
|  | ||||
|   checkSign: process(changeSign, flipPhase, shiftPhase, quarterSine) | ||||
|   begin | ||||
|     if (changeSign xor (flipPhase and shiftPhase)) = '0' then | ||||
|       sine <= quarterSine; | ||||
|     else | ||||
|       sine <= 0 - quarterSine; | ||||
|     end if; | ||||
|   end process checkSign; | ||||
|  | ||||
| END ARCHITECTURE masterVersion; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user