summaryrefslogtreecommitdiffstats
path: root/detector.vhd
diff options
context:
space:
mode:
Diffstat (limited to 'detector.vhd')
-rw-r--r--detector.vhd146
1 files changed, 146 insertions, 0 deletions
diff --git a/detector.vhd b/detector.vhd
new file mode 100644
index 0000000..b6e598f
--- /dev/null
+++ b/detector.vhd
@@ -0,0 +1,146 @@
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.std_logic_unsigned.all;
+use IEEE.numeric_std.all;
+
+entity detector is
+ port (
+ clk_in : in std_logic;
+ spdif_in: in std_logic;
+ n_reset : in std_logic;
+ divisor : in integer;
+ silent_thresh : in integer;
+ valid_divisor: in integer;
+ valid_thresh : in integer;
+ mute : out std_logic;
+ dbg:out std_logic_vector(7 downto 0)
+ );
+end detector;
+
+
+architecture rtl of detector is
+ component ccd is
+ port
+ (
+ n_reset : in std_logic;
+ clk : in std_logic;
+ d : in std_logic;
+ q : out std_logic
+ );
+ end component;
+
+ component divider is
+ port
+ (
+ divisor : in integer;
+ clk : in std_logic;
+ n_reset : in std_logic;
+ clk_out : out std_logic
+ );
+ end component;
+
+ component spdif_decoder is
+port (
+ n_reset:in std_logic;
+ spdif:in std_logic;
+ clk:in std_logic;
+
+ bmc_ready: out std_logic;
+ bmc_e: out std_logic;
+ bmc_l: out std_logic;
+ bmc_d : out std_logic;
+
+ d : out std_logic_vector(26 downto 0);
+ ready: out std_logic;
+ sof: out std_logic;
+ bna: out std_logic;
+ sos: out std_logic
+);
+
+
+
+
+
+ end component;
+
+
+ component silence_detector is
+ port
+ (
+ silent_thresh : in integer;
+ valid_thresh : in integer;
+ valid_divisor : in integer;
+
+ clk : in std_logic;
+ sos : in std_logic;
+ d : in std_logic_vector(23 downto 0);
+ n_reset : in std_logic;
+ silent : out std_logic;
+ valid : out std_logic;
+ dbg:out std_logic
+ );
+ end component;
+
+ signal spdif :
+ std_logic;
+ signal clk :
+ std_logic;
+ signal d : std_logic_vector(26 downto 0);
+ signal sos : std_logic;
+ signal valid : std_logic;
+ signal silent:std_logic;
+ signal mute_buf:std_logic;
+
+begin
+ div1 : divider port map (
+ n_reset => n_reset,
+ clk => clk_in,
+ divisor => divisor,
+ clk_out => clk
+ );
+
+ b :
+ ccd port map (
+ n_reset => n_reset,
+ clk => clk,
+ d => spdif_in,
+ q => spdif
+ );
+
+ dec : spdif_decoder port map (
+ n_reset => n_reset,
+ clk => clk,
+ spdif => spdif,
+ d => d,
+ sos => sos,
+ bmc_ready => dbg(2)
+ );
+
+ sd : silence_detector port map(
+ n_reset => n_reset,
+ clk => clk,
+ sos => sos,
+ d => d(26 downto 3),
+
+ silent_thresh => silent_thresh,
+ valid_thresh => valid_thresh,
+ valid_divisor => valid_divisor,
+
+ silent => silent,
+ valid => valid,
+ dbg => dbg(7)
+ );
+
+
+ dbg(0) <= clk;
+ dbg(1) <= spdif;
+ dbg(3) <= sos;
+ dbg(4) <= silent;
+ dbg(5) <= valid;
+ dbg(6) <= mute_buf;
+
+ mute_buf <= silent or (not valid);
+
+ mute <= mute_buf;
+
+end rtl;