Перейти к содержанию
    

Два процесса с разными частотами...

Изложу идею вопроса - есть два процесса, работающих на разных частотах - 3,8 и 24 МГц. Тот, который медленнее (1 процесс), выдает данные второму, а он в свою очередь на основании входных данных создает воздействие на выход. Абсолютно уверена в работоспособности кодов этих процессов по-отдельности. Каждый из процессов работает отдельно в симуляции, при соединении и прошивке в плату - не работает. Предполагаю, что проблема с передачей данных между ними.

ps: Привести кусок кода не могу - "два процесса" - это идея. их там совсем не два :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изложу идею вопроса - есть два процесса, работающих на разных частотах - 3,8 и 24 МГц. Тот, который медленнее (1 процесс), выдает данные второму, а он в свою очередь на основании входных данных создает воздействие на выход. Абсолютно уверена в работоспособности кодов этих процессов по-отдельности. Каждый из процессов работает отдельно в симуляции, при соединении и прошивке в плату - не работает. Предполагаю, что проблема с передачей данных между ними.

ps: Привести кусок кода не могу - "два процесса" - это идея. их там совсем не два :crying:

 

Стандартный синхронизатор - два D-триггера, работающих на частоте принимающего процесса. На D-вход первого подаётся управляющий сигнал другого процесса, сигнал снимается с q-выхода второго трг.

Также необходимо внимательно следить за передачей сигнала от более высокочастотного процесса к менее. Т.к. , если такой сигнал будет меньше ~260nS, то в процессе с 3.8MHz он может быть пропущен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стандартный синхронизатор - два D-триггера, работающих на частоте принимающего процесса. На D-вход первого подаётся управляющий сигнал другого процесса, сигнал снимается с q-выхода второго трг.
Спасибо, попробую. Запущу, отлажу - напишу.

 

Также необходимо внимательно следить за передачей сигнала от более высокочастотного процесса к менее. Т.к. , если такой сигнал будет меньше ~260nS, то в процессе с 3.8MHz он может быть пропущен.
тут проблем нет - сигнал передается от медленного процесса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тут проблем нет - сигнал передается от медленного процесса.

 

... а он в свою очередь на основании входных данных создает воздействие на выход.

 

Тут, по смыслу, несколько другое сказано...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дело в метастабильности вестимо. часть таких проблем лечиться синхронизаторами. другая часть протоколом + синхронизаторы. Как смотрите статью.

 

ЗЫ. также рекомендую посмотреть реализацию eth_mac от Igor Mohor. модуль eth_wishbone.

по сути 50% модуля сплошные синхронизаторы их разных клок доменов. Причем работают синхронизаторы модуля при передачи сигналов в обоих направлениях : fsrc > fdst и fsrc < fdst.

К сожалению эти синхронизаторы не описаны в статье.

310388.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подскажите пожалуйчта еще ссылки на подобные документы

 

где можно найти доки по :

1) асинхронной передаче данных с подтверждениями (handshaking)

2) синхронизации сингналов при разных цлк доменах

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подскажите пожалуйчта еще ссылки на подобные документы

 

 

2) синхронизации сингналов при разных цлк доменах

 

http://www.chipdesignmag.com/display.php?articleId=32

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дело в метастабильности вестимо. часть таких проблем лечиться синхронизаторами. другая часть протоколом + синхронизаторы. Как смотрите статью.

 

ЗЫ. также рекомендую посмотреть реализацию eth_mac от Igor Mohor. модуль eth_wishbone.

по сути 50% модуля сплошные синхронизаторы их разных клок доменов. Причем работают синхронизаторы модуля при передачи сигналов в обоих направлениях : fsrc > fdst и fsrc < fdst.

К сожалению эти синхронизаторы не описаны в статье.

А можно тут пример привести на VHDL рабочего двунаправленного синхронизатора? Т.е пинг-понг события из одного клокового домена в другой и обратно? А то во всех учебниках синхронизатор в графике рисуют, а в VHDL оно потом криво работает. И еще вопрос. Встречал упоминание о трехтриггерных синхронизаторах. В каком случае их оправданно использовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Встречал упоминание о трехтриггерных синхронизаторах. В каком случае их оправданно использовать?

Двухтриггерный синхронизатор (как, впрочем, и трехтриггерный) не гарантирует от проблем с метастабильностью - он лишь существенно понижает вероятность сбоя из-за метастабильности - увеличивает MTBF. Трехтриггерный еще улучшает ситуацию по сравнению с трехтриггерным. В особо ответственных местах имеет смысл ставить трехтриггерные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На мой взгляд самый верный способ через фифо! или же ввести синхронизирующий сигнал (синхронизатор) между двумя процессами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

классика жанра : http://www.sunburst-design.com/papers/

там в таблице документов видно куда щёлкать

 

вообще-то вопрос неоднократно поднимался - смотрите по форуму

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...