Сброс по включению вместо константы
rst_n был прибит к единице, и состояние модулей после конфигурации задавали только начальные значения регистров. Теперь короткий сброс на 256 тактов. Симуляция проходит. Отсутствия байт на UART это не вылечило -- коммит самостоятельный, как гигиена, а не как исправление.
This commit is contained in:
+16
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user