jenya7 0 1 марта, 2021 Опубликовано 1 марта, 2021 (изменено) · Жалоба 44 minutes ago, Flip-fl0p said: Так чего мы ждем ?! Вкорячить синхронизатор на нужный сигнал и горя не знать. Почему еще не сделали это ? что то странное происходит. не могу понять что. я почему выносные модули сделал. если засунуть второй клок в модуль entity NEW_CHARGE_CONT is port ( CLK_120M : in std_logic; CLK_100M : in std_logic; ну и так далее, то у меня почему то ломается другой модуль который принимает команды по SPI. причем никакой связи между модулями нет. Изменено 1 марта, 2021 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба 8 минут назад, jenya7 сказал: что то странное происходит. не могу понять что. я почему выносные модули сделал. если засунуть второй клок в модуль entity NEW_CHARGE_CONT is port ( CLK_120M : in std_logic; CLK_100M : in std_logic; ну и так далее, то у меня почему то ломается другой модуль который принимает команды по SPI. причем никакой связи между модулями нет. Это Вы так думаете, что связи нет. А она есть. И скорее всего ломается из-за неправильных СDC или ещё где-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба 2 minutes ago, Flip-fl0p said: Это Вы так думаете, что связи нет. А она есть. И скорее всего ломается из-за неправильных СDC или ещё где-то. как один клок может повлиять на другой. и сигналы все внутренние, не выходят наружу. rst3 <= not rst2 and rst1; process (CLK_120M) variable del : integer := 0; begin if (rising_edge(CLK_120M)) then if (count_reset = '1') then locked_reset <= '1'; end if; if (locked_reset = '1') then del := del + 1; if (del = 4) then del := 0; locked_reset <= '0'; end if; end if; end if; end process; process (CLK_100M) begin if (rising_edge(CLK_100M)) then rst1 <= locked_reset; rst2 <= rst1; end if; end process; process (CLK_100M) begin if (rising_edge(CLK_100M)) then if (count_ena = '1') then if (rst3 = '1') then ticks_counter <= (others => '0'); s_ms_counter <= (others => '0'); else ticks_counter <= ticks_counter + '1'; if (ticks_counter = TICKS_FOR_1MS) then ticks_counter <= (others => '0'); s_ms_counter <= s_ms_counter + '1'; end if; end if; end if; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба У вас неправильно сформирован rst3. В синхронизаторе можно использовать только выход второго триггера. Добавьте третий триггер в цепочку, формируйте rst3 из выходов второго и третьего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба 3 minutes ago, andrew_b said: У вас неправильно сформирован rst3. В синхронизаторе можно использовать только выход второго триггера. Добавьте третий триггер в цепочку, формируйте rst3 из выходов второго и третьего. так? rst4 <= not rst3 and rst2; process (CLK_100M) begin if (rising_edge(CLK_100M)) then rst1 <= locked_reset; rst2 <= rst1; rst3 <= rst2; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба Да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба а если я создам на ПЛЛ клок 160 мега вместо 100, все эти пляски с бубнами не нужны будут? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться