aboutsummaryrefslogtreecommitdiff
path: root/src/AudioOut.vhd
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2023-02-05 15:07:34 +0100
committerlonkaars <loek@pipeframe.xyz>2023-02-05 15:07:34 +0100
commit7fd197c3ab26c17c12e19f76d893acb1d7ee95fd (patch)
treed49d3a36ec0adaf1a3d0ef7d1c836e4138aec681 /src/AudioOut.vhd
parent01e63253a959f565299a96cab9410e40b09344c7 (diff)
martijn's code toegevoegd voor prog2w1 sound
Diffstat (limited to 'src/AudioOut.vhd')
-rw-r--r--src/AudioOut.vhd71
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;