nickbor 0 30 апреля, 2006 Опубликовано 30 апреля, 2006 · Жалоба Профи, помогите хоббиисту пожалуйста. Спаял и кое как запрограммировал свою первую плату на Spartan 2. Вроде как работает, но мучают меня сомнения. Вот, например есть у меня описанный на VHDL счетчик, запитанный от 1-го синхросигнала. По N-му счету он переписывается в регистр. А чтение из регистра производится по 2-му синхросигналу. 1й и 2й синхросигналы от разных кварцев. Может ли такое случится один раз из миллиона, что в момент чтения только полрегистра записалось? Вы уж простите меня за глупый вопрос :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jorikdima 0 30 апреля, 2006 Опубликовано 30 апреля, 2006 · Жалоба Мне кажется врядли. Скорее всего чето не так в коде. понимаю чот он простой, но выложи на всякий случай осмотрим. Ты уверен что по синхросигналу переписываешь в регистр а не при каждом изменении значения счетчика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 30 апреля, 2006 Опубликовано 30 апреля, 2006 · Жалоба Именно так и будет. Надо обязательно ставить дополнительный регистр и синхронизатор, который переписывает из регистра, синхронного со счетчиком, по второму синхросигналу, но только в тот момент, когда нет записи из счетчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nickbor 0 30 апреля, 2006 Опубликовано 30 апреля, 2006 · Жалоба Счетчик переписывается в регистр по первому синхросигналу. Спасибо всем, придется придумывать как синхронизовать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 30 апреля, 2006 Опубликовано 30 апреля, 2006 · Жалоба Чтобы все было по науке - смотрите здесь http://www.sunburst-design.com/papers плюс приаттаченный файл. asynchronous_signals_in_a_synchronous_world.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nickbor 0 2 мая, 2006 Опубликовано 2 мая, 2006 · Жалоба Спасибо, изучаю... Кстати, мой случай христоматийный. Наверняка все сталкивались со случаем, когда идет оцифровка и ввод данных по одному синхросигналу, а шина обмена с процессором - по другому. Есть, конечно, возможность задержать обмен по шине, но встает вопрос, когда выдавать сигнал о задержке, сколько времени он идет, не медленнее ли, чем смена данных и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 2 мая, 2006 Опубликовано 2 мая, 2006 · Жалоба Случай настолько хрестоматийный, что в него влипали даже крупные фирмы. Если я помню правильно, кажется USART 16550 стал 16550A именно по этой причине. Тот, который без А имел проблемы синхронизации. Если не хотите задерживать обмен, надо ставить доп регистр после счетчика, в который переписывается по 1 синхросигналу, и одновременно взводите этим ипульсом 1й триггер синхронизатора. По фронту второго синхросигнала взводится 2й триггер синхронизатора, который разрешает запись в регистр, тактируемый 2 синхросигналом и сбрасывает асинхронно 1й триггер. Триггера D-типа, выход первого соединен с D входом второго. С первого - импульс, подаваемый в момент, когда уже завершена запись в буферный регистр. C второго - 2й синхросигнал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться