Сброс по включению вместо константы
rst_n был прибит к единице, и состояние модулей после конфигурации задавали только начальные значения регистров. Теперь короткий сброс на 256 тактов. Симуляция проходит. Отсутствия байт на UART это не вылечило -- коммит самостоятельный, как гигиена, а не как исправление.
This commit is contained in:
+17
-2
@@ -55,7 +55,12 @@ architecture Behavioral of Top is
|
|||||||
constant CIC_W : integer := 26;
|
constant CIC_W : integer := 26;
|
||||||
constant FIR_DEC : integer := 5; -- 62.5 кГц / 5 = 12.5 кГц
|
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_bit : std_logic;
|
||||||
signal pdm_valid : std_logic;
|
signal pdm_valid : std_logic;
|
||||||
@@ -84,7 +89,17 @@ architecture Behavioral of Top is
|
|||||||
|
|
||||||
begin
|
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
|
led_event <= pdm_valid when LED_SRC = 2 else
|
||||||
cic_valid when LED_SRC = 1 else
|
cic_valid when LED_SRC = 1 else
|
||||||
|
|||||||
Reference in New Issue
Block a user