Files
synth/wave/pdm.vhdl

47 lines
870 B
VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity pdm is
port
(
clk : in std_logic;
rst : in std_logic;
-- hardware
out_pin : out std_logic;
-- input interface
enabled : in std_logic;
sample : in std_logic_vector(15 downto 0)
);
end pdm;
architecture Behavioral of pdm is
signal feedback: signed(16 downto 0);
begin
-- PDM process
-- drives pin_out, feedback
process(clk, rst)
begin
if rst = '1' then
feedback <= to_signed(0, 17);
out_pin <= '0';
elsif rising_edge(clk) and enabled = '1' then
if feedback > 0 then
out_pin <= '1';
feedback <= feedback + signed("0" & sample) - ("0" & x"ffff");
else
out_pin <= '0';
feedback <= feedback + signed("0" & sample);
end if;
end if;
end process;
end Behavioral;