|
|
  |
Два синхросигнала и гонки |
|
|
|
Apr 30 2006, 06:00
|
Группа: Участник
Сообщений: 11
Регистрация: 30-04-06
Пользователь №: 16 614

|
Профи, помогите хоббиисту пожалуйста. Спаял и кое как запрограммировал свою первую плату на Spartan 2. Вроде как работает, но мучают меня сомнения. Вот, например есть у меня описанный на VHDL счетчик, запитанный от 1-го синхросигнала. По N-му счету он переписывается в регистр. А чтение из регистра производится по 2-му синхросигналу. 1й и 2й синхросигналы от разных кварцев. Может ли такое случится один раз из миллиона, что в момент чтения только полрегистра записалось? Вы уж простите меня за глупый вопрос
|
|
|
|
|
Apr 30 2006, 07:11
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250

|
Именно так и будет. Надо обязательно ставить дополнительный регистр и синхронизатор, который переписывает из регистра, синхронного со счетчиком, по второму синхросигналу, но только в тот момент, когда нет записи из счетчика.
--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
|
|
|
|
|
Apr 30 2006, 16:19
|
Группа: Участник
Сообщений: 11
Регистрация: 30-04-06
Пользователь №: 16 614

|
Счетчик переписывается в регистр по первому синхросигналу. Спасибо всем, придется придумывать как синхронизовать...
|
|
|
|
|
Apr 30 2006, 18:12
|
Знающий
   
Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943

|
Чтобы все было по науке - смотрите здесь http://www.sunburst-design.com/papersплюс приаттаченный файл.
--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
|
|
|
|
|
May 2 2006, 04:01
|
Группа: Участник
Сообщений: 11
Регистрация: 30-04-06
Пользователь №: 16 614

|
Спасибо, изучаю... Кстати, мой случай христоматийный. Наверняка все сталкивались со случаем, когда идет оцифровка и ввод данных по одному синхросигналу, а шина обмена с процессором - по другому. Есть, конечно, возможность задержать обмен по шине, но встает вопрос, когда выдавать сигнал о задержке, сколько времени он идет, не медленнее ли, чем смена данных и т.п.
|
|
|
|
|
May 2 2006, 06:53
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250

|
Случай настолько хрестоматийный, что в него влипали даже крупные фирмы. Если я помню правильно, кажется USART 16550 стал 16550A именно по этой причине. Тот, который без А имел проблемы синхронизации.
Если не хотите задерживать обмен, надо ставить доп регистр после счетчика, в который переписывается по 1 синхросигналу, и одновременно взводите этим ипульсом 1й триггер синхронизатора. По фронту второго синхросигнала взводится 2й триггер синхронизатора, который разрешает запись в регистр, тактируемый 2 синхросигналом и сбрасывает асинхронно 1й триггер. Триггера D-типа, выход первого соединен с D входом второго. С первого - импульс, подаваемый в момент, когда уже завершена запись в буферный регистр. C второго - 2й синхросигнал.
--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|