diff --git a/src/Top.vhd b/src/Top.vhd index 1f5d722..bc00541 100644 --- a/src/Top.vhd +++ b/src/Top.vhd @@ -55,7 +55,12 @@ architecture Behavioral of Top is constant CIC_W : integer := 26; constant FIR_DEC : integer := 5; -- 62.5 кГц / 5 = 12.5 кГц - signal rst_n : std_logic := '1'; + -- Сброс по включению. Раньше здесь была константа '1', и тогда состояние + -- модулей после конфигурации определялось только начальными значениями + -- регистров. Для UART это критично: до первого кадра он молчит, и уровень + -- на линии задаёт его сдвиговый регистр, который обязан быть в единицах. + signal rst_n : std_logic := '0'; + signal rst_cnt : unsigned(7 downto 0) := (others => '0'); signal pdm_bit : std_logic; signal pdm_valid : std_logic; @@ -84,7 +89,17 @@ architecture Behavioral of Top is begin - rst_n <= '1'; + por_proc : process (clk) + begin + if rising_edge(clk) then + if rst_cnt = 255 then + rst_n <= '1'; + else + rst_cnt <= rst_cnt + 1; + rst_n <= '0'; + end if; + end if; + end process por_proc; led_event <= pdm_valid when LED_SRC = 2 else cic_valid when LED_SRC = 1 else