diff options
author | lonkaars <loek@pipeframe.xyz> | 2023-02-05 15:07:34 +0100 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2023-02-05 15:07:34 +0100 |
commit | 7fd197c3ab26c17c12e19f76d893acb1d7ee95fd (patch) | |
tree | d49d3a36ec0adaf1a3d0ef7d1c836e4138aec681 /src/AudioOut.vhd | |
parent | 01e63253a959f565299a96cab9410e40b09344c7 (diff) |
martijn's code toegevoegd voor prog2w1 sound
Diffstat (limited to 'src/AudioOut.vhd')
-rw-r--r-- | src/AudioOut.vhd | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/AudioOut.vhd b/src/AudioOut.vhd new file mode 100644 index 0000000..715bf7f --- /dev/null +++ b/src/AudioOut.vhd @@ -0,0 +1,71 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; +use IEEE.NUMERIC_STD.ALL; + +entity AudioOut is + generic( + INPUT_DEPTH: integer := 256; + INPUT_SAMPLE_SIZE: integer := 36984; + INPUT_AUDIO_HZ: integer := 44100; + INPUT_CLK_HZ: integer := 100000000 + ); + Port ( reset, clk : in STD_LOGIC; + inMusicData : in STD_LOGIC_VECTOR(7 downto 0); + outMusic : out STD_LOGIC); +end AudioOut; + +architecture Behavioral of AudioOut is + signal count: integer; + --signal bStartMusic : boolean; + +begin + process (reset, clk) + variable currentThreasHold: integer; + begin + -- if reset + if (reset = '1') then + -- default values for outputs, so output state is always defined + outMusic <= '0'; + count <= 0; + currentThreasHold := 0; + -- + elsif rising_edge(clk) then + -- default values for outputs, so output state is always defined + outMusic <= '0'; + count <= 0; + currentThreasHold := 0; + + -- start code + -- calculate amount of puls to turn on PWM + -- calculate available PWM pulses: (INPUT_CLK_KHZ/INPUT_AUDIO_KHZ) + -- multiply by target audio signal level + -- devide by available audio signal depth + currentThreasHold := ((INPUT_CLK_HZ/INPUT_AUDIO_HZ) * to_integer(unsigned(inMusicData))) / (INPUT_DEPTH); + + -- check if PWM duty cicle is high enough: currentThreasHold has to be variable otherwise first check count = 1 one to late + if (count >= currentThreasHold) then + -- no pwm output + outMusic <= '0'; + else + -- keep pwm high + outMusic <= '1'; + end if; + + -- + count <= count + 1; + + -- check for max level + -- if counter is >= the max amount of pulses per audio sample + if (count >= (INPUT_CLK_HZ/INPUT_AUDIO_HZ)) then + -- Next audio sample + count <= 1; + end if; + + + + + end if; + end process; + +end Behavioral; |