Сброс по включению вместо константы

rst_n был прибит к единице, и состояние модулей после конфигурации задавали
только начальные значения регистров. Теперь короткий сброс на 256 тактов.
Симуляция проходит. Отсутствия байт на UART это не вылечило -- коммит
самостоятельный, как гигиена, а не как исправление.
This commit is contained in:
nikit3s
2026-08-17 18:58:37 +03:00
parent 58e6a11a3f
commit f936d86f89
+16 -1
View File
@@ -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
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