diff options
| author | UnavailableDev <69792062+UnavailableDev@users.noreply.github.com> | 2023-02-22 11:17:49 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-22 11:17:49 +0100 |
| commit | 6e1cce415050ca82f8243b5ae5a8d1564f311ee8 (patch) | |
| tree | 98f0192011cde1251d38be5573292b5a130e1f1a /basys3/basys3.srcs/apu_LUT_reader.vhd | |
| parent | 9b84c25a53b7269228743e398b13c19af505226b (diff) | |
| parent | 936bb51ceba0427aa1a36fcd6398d56a1a99e160 (diff) | |
Merge pull request #15 from UnavailableDev/dev
APU LUT / Calulations
Diffstat (limited to 'basys3/basys3.srcs/apu_LUT_reader.vhd')
| -rw-r--r-- | basys3/basys3.srcs/apu_LUT_reader.vhd | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/basys3/basys3.srcs/apu_LUT_reader.vhd b/basys3/basys3.srcs/apu_LUT_reader.vhd new file mode 100644 index 0000000..6039798 --- /dev/null +++ b/basys3/basys3.srcs/apu_LUT_reader.vhd @@ -0,0 +1,69 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity apu_LUT_reader is + port ( + clk : in std_logic; + rst : in std_logic; + freq : in std_logic_vector(11 downto 0); + wave : in std_logic_vector(1 downto 0); + value : out std_logic_vector(7 downto 0) + ); +end entity; + +architecture Behavioral of apu_LUT_reader is + + constant AMPLITUDE : natural := 0; + constant SAMPLE_SIZE : natural := 256; + + signal idx : unsigned := (others => '0'); + signal buf : unsigned := (others => '0'); + +begin + + process (clk) + begin + if rst = '1' then + idx <= x"00"; + buf <= x"00"; + value <= x"00"; + elsif rising_edge(clk) then + -- main code here + + if wave = "00" then -- Sawtooth + value <= std_logic_vector( idx ); + elsif wave = "01" then -- Square + if idx < (SAMPLE_SIZE/2) then + value <= x"00"; --std_logic_vector( SAMPLE_SIZE-AMPLITUDE ); -- TODO: make so that this work with a changable amplitude (for square wave) + else + value <= x"FF"; + end if; + elsif wave = "10" then -- Triangle + if idx < (SAMPLE_SIZE/2) then + value <= std_logic_vector( idx*2 ); + else + value <= std_logic_vector( (SAMPLE_SIZE-idx)*2 ); + end if; + else-- wave = "11" then -- Noise + -- TODO: implement noise function here: + value <= x"80"; -- remove this + end if; + + + + if buf < unsigned(freq) then -- change frequency + buf <= buf + 1; + else + buf <= x"00"; + if idx < (SAMPLE_SIZE-1) then -- moves to next index value + idx <= idx + 1; + else + idx <= x"00"; + end if; + end if; + + end if; + end process; + +end architecture; |