Jump to content

    

Andy78

Участник
  • Content Count

    5
  • Joined

  • Last visited

Community Reputation

0 Обычный

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Даже если сигнал успеет изменится с 1 в 0 и обратно в 1, между клоком ?
  2. Если я правильно понимаю, то ваш код не гарантирует что будет поймана быстрая смена сигнала на DATA_PIN1. В вашем варианте нет флаг о том что данные готовы для обработки. Что в свою очередь повлечет постоянную обработку старых данных. Задача как раз передать флаг готовности в процесс обработчик по клоку. И чтобы они обработались только 1 раз.
  3. Задача такая, есть шина входящих данных DATA и сигнал DATA_PIN1. В нормальном режиме оно работает так, DATA_PIN1 = 1(признак что не готовы для работы), дальше на DATA выставляются данные и DATA_PIN1 идет 0, как сигнал того что данные готовые для обработки. Но иногда очередные данные(внешние) приходят быстрее чем предыдущих были обработанные: потому DATA_PIN1 становится в 1, а DATA изменяются из вне, после чего DATA_PIN1 идет в 0. В результате бывает ситуация когда переход с 1 в 0 на DATA_PIN1 очень короткий(но его нужно словить и обработать), а новые данные могут относительно долго выставляются на DATA и до момента когда DATA_PIN1 станет в 0, мы уже успеваем обработать предыдущие. 1. DATA_PIN1 = 1 2. DATA = 123 3. DATA_PIN1 = 0 4. через 5-10нс 5. DATA_PIN1 = 1 6. задержка 100-300нс пока в DATA будут новые данные 7. DATA_PIN1 = 0 Нужно чтобы плис словила переход DATA_PIN1 с 1 в 0 на шаге 3\5 и начала обработку этих данных, если успеет обработать - супер, а если в процессе обработки DATA_PIN1 стает в 0, то процесс обработки просто перезапускается в новыми данными.
  4. Суть в том чтобы (пере)запускать обработку данных даже в случае если предыдущие данные еще не были обработанные до конца, триггером этого есть изменении DATA_PIN1 в 0. Ловить их в процессе на клоке нет возможности, длительность изменении 0-1\1-0 меньше клока. Обработка занимает пару десятков тактов, потому и нужна привязка к клоку для обработки всего. еще нет, жду девайс для тестов. Пока теория.
  5. Всем привет, начал изучать плис и появился вопрос о синхронизации процессов, как это правильно сделать. Есть процесс который должен ловить изменения(быстрые) на пине и выставить флаг для процесса что висит на клоке о том что есть данные для обработки. Вкратце что-то вроде этого: signal DATA_PIN1 : std_logic; signal data_ready : std_logic; event_process : process(DATA_PIN1) begin if DATA_PIN1 = '0' then data_ready <= 1; <= тут ставим 1 end if; end process; clk_process : process(clk_100) begin if data_ready = '1' then data_ready <= '0'; <= а здесь 0 .. data processing end if; end process; Вопрос которые меня мучает, не будет ли здесь коллизий в месте где "data_ready" изменяется в двух процессах, в случае если два процесса стартанут одновременно и будет гонка сигналов. Или возможно есть лучше способ как это организовать. Сигнал на DATA_PIN1 очень быстро изменяется, а обработку данных после изменения на том пине нужно привязать к клоку. Спасибо)