Strob 0 4 августа, 2019 Опубликовано 4 августа, 2019 (изменено) · Жалоба В исходном коде процессы вообще не синхронные. Так что работать как ожидается не будет. Если второй процесс сделать синхронным, то может и синтезируется(хотя сомнительно) правильно, т.к. это не два драйвера, а драйвер и асинхронный сброс. Но лучше такие вещи нормально в одном процессе написать. Весь требуемый функционал это триггер с асинхронным сбросом(ну, точнее установкой в 1). Изменено 4 августа, 2019 пользователем Strob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба Можно ловить по уровню, а сбрасывать отдельным сигналом по клоку, поступающим изнутри ПЛИСины, когда она закончит обработку очередных данных: process (DATA_PIN1, CLK) is begin if DATA_PIN1 = '0' then FLAG <= '1'; elsif rising_edge(CLK) then if CLEAR_FLAG = '1' then FLAG <= '0'; end if; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quato_a 3 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба 10 hours ago, Andy78 said: Даже если сигнал успеет изменится с 1 в 0 и обратно в 1, между клоком ? Изменение 1->0 по клоку вы задетектируете, если длительность 0 на линии (активного уровня в вашем случае) будет длиннее периода клока. Если длительность будет короче периода клака, то есть большая доля вероятности, что не заметите. Если уровень 0 попадет на передний фронт клока, то заметите, иначе нет (начнется метастабильность). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nemos760 0 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба 1 hour ago, SII said: Можно ловить по уровню, а сбрасывать отдельным сигналом по клоку, поступающим изнутри ПЛИСины, когда она закончит обработку очередных данных: process (DATA_PIN1, CLK) is begin if DATA_PIN1 = '0' then FLAG <= '1'; elsif rising_edge(CLK) then if CLEAR_FLAG = '1' then FLAG <= '0'; end if; end if; end process; Насколько я понял приоритет у новых данных, а тут если данные обрабатываться будут долго, то новые потеряются. Записывать '0' в триггер надо сразу без CLEAR_FLAG, а FLAG в соседнем процессе использовать как сигнал разрешения перезаписи буферного регистра (так же по переднему фронту). На входе данных поставить пару триггеров для устранения метастабильности и следовательно сделать задержку сигнала разрешения чтения тоже на 2 такта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 168 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба По фронту PIN1 записать DATA в регистр, из дополнительного бита этого регистра сделать флаг в виде делителя на 2. Передать весь регистр в основной домен, где ждать изменения флага, после чего бросать прежнюю обработку и начинать новую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться