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

Два синхросигнала и гонки

Профи, помогите хоббиисту пожалуйста. Спаял и кое как запрограммировал свою первую плату на Spartan 2. Вроде как работает, но мучают меня сомнения. Вот, например есть у меня описанный на VHDL счетчик, запитанный от 1-го синхросигнала. По N-му счету он переписывается в регистр. А чтение из регистра производится по 2-му синхросигналу. 1й и 2й синхросигналы от разных кварцев. Может ли такое случится один раз из миллиона, что в момент чтения только полрегистра записалось? Вы уж простите меня за глупый вопрос :)

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


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

Мне кажется врядли. Скорее всего чето не так в коде. понимаю чот он простой, но выложи на всякий случай осмотрим. Ты уверен что по синхросигналу переписываешь в регистр :blush: а не при каждом изменении значения счетчика?

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


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

Именно так и будет. Надо обязательно ставить дополнительный регистр и синхронизатор, который переписывает из регистра, синхронного со счетчиком, по второму синхросигналу, но только в тот момент, когда нет записи из счетчика.

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


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

Счетчик переписывается в регистр по первому синхросигналу.

Спасибо всем, придется придумывать как синхронизовать...

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


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

Чтобы все было по науке - смотрите здесь http://www.sunburst-design.com/papers

плюс приаттаченный файл.

asynchronous_signals_in_a_synchronous_world.pdf

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


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

Спасибо, изучаю... Кстати, мой случай христоматийный. Наверняка все сталкивались со случаем, когда идет оцифровка и ввод данных по одному синхросигналу, а шина обмена с процессором - по другому. Есть, конечно, возможность задержать обмен по шине, но встает вопрос, когда выдавать сигнал о задержке, сколько времени он идет, не медленнее ли, чем смена данных и т.п.

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


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

Случай настолько хрестоматийный, что в него влипали даже крупные фирмы. Если я помню правильно, кажется USART 16550 стал 16550A именно по этой причине. Тот, который без А имел проблемы синхронизации.

 

Если не хотите задерживать обмен, надо ставить доп регистр после счетчика, в который переписывается по 1 синхросигналу, и одновременно взводите этим ипульсом 1й триггер синхронизатора. По фронту второго синхросигнала взводится 2й триггер синхронизатора, который разрешает запись в регистр, тактируемый 2 синхросигналом и сбрасывает асинхронно 1й триггер.

Триггера D-типа, выход первого соединен с D входом второго. С первого - импульс, подаваемый в момент, когда уже завершена запись в буферный регистр. C второго - 2й синхросигнал.

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


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

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

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

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

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

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

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

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

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

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