|
Тактирование без генератора, Нетактируемые задержки в ПЛИС |
|
|
|
Oct 26 2004, 11:13
|
Участник

Группа: Свой
Сообщений: 33
Регистрация: 26-10-04
Пользователь №: 983

|
Поделюсь опытом
ПЛИС в основном рассчитаны на построение тактируемых устройств. Для этого они содержат специализированные средства для клоков (выделенные контакты, синтезаторы частот, специально проложенные в кристалле пути с малыми задержками для разводки клоков и т.п.) и соответствующее размещение логики. В таких случаях используется внешний тактовый сигнал нужной частоты от генератора, микропроцессора или других устройств размещенных на плате или подключенных к ней. Но бывают случаи, когда в устройстве в основном распределенная логика или/и счетчики, регистры и т.п. внешних сигналов, а машины состояний если и нужны, то не большие и не критичные к временным разбросам. И, если на плате только одна микросхема ПЛИС, то добавление генератора делает существенную прибавку к стоимости устройства.
В таких случаях я делаю машины состояний на линиях задержки с отводами. А эти линии задержки - это последовательно соединенные не подключенные к ногам ПЛИС блоки ввода/вывода (unbonded I/O pad - UPAD). Обычно их довольно много на кристалле и чем меньше ног у корпуса, тем больше количество UPAD. Сама задержка в основном определяется задаваемым выходным током UPAD - чем меньше ток, тем больше задержка. Например, для Spartan2 при заданном выходном токе в 2мА (минимальный) задержка на UPAD составляет около 25нс.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 24)
|
Oct 26 2004, 13:52
|

Местный
  
Группа: Свой
Сообщений: 310
Регистрация: 15-10-04
Пользователь №: 884

|
...........минуты 3 репу чесал, что же написать в ответ :-))))))........ В общем, в силу специфики работы для меня важна детерминированость поведения конечного продукта, а вопрос цены не слишком важен. Так что я, конечно, галочку себе в памяти поставлю на всякий случай, что можно в крайнем случае и вот так извернуться, но применять данный метод пока поостерегусь. :-)))) Все это - IMHO.
--------------------
"Я люблю путешествовать, посещать новые города, страны, знакомиться с новыми людьми." Чингисхан.
|
|
|
|
|
Oct 27 2004, 13:19
|
Участник

Группа: Свой
Сообщений: 46
Регистрация: 27-09-04
Пользователь №: 731

|
В принципе, похожие трюки можно делать, используя атрибуты для цепей (KEEP, S(ave)). Назначение атрибутов можнно посмотреть Libraries Guide. Альтернативный способ - построить генератор на внутренней логике ПЛИС (используются только внутренние ресурсы). В зависимости от скорости кристалла частота такого генератора может быть порядка 100 - 200 МГц.
|
|
|
|
|
Oct 28 2004, 14:48
|
Участник

Группа: Свой
Сообщений: 33
Регистрация: 26-10-04
Пользователь №: 983

|
pergunt Один элемент задержки - это IOBUF (от IOBUF_S_24 до IOBUF_S_2 - последний - самый медленный) с прицепленным UPAD c атрибутом LOC=UNBx. Номер (х) UNB беру из структуры кристалла через FPGA editor (это быстрее, чем искать в документации). Вот кусочек из Post Layout Timing Report Source |Destination | Delay | ---------------+---------------+---------+ H4/DUP2 |H4/DUP3 | 24.434| H4/DUP2 |H4/DUP4 | 49.460| H4/DUP2 |H4/DUP5 | 73.984| H4/DUP2 |H4/DUP6 | 99.064| H4/DUP2 |H4/DUP7 | 123.448| H4/DUP2 |H4/DUP8 | 147.866|
DUP2-3-4-5-6-7-8 - это последовательно соединенные элементы задержки из IOBUF_S_2 и UPAD. Видно, что задержка на каждом практически одинаковая - около 25нс.
|
|
|
|
|
Oct 28 2004, 15:49
|
Участник

Группа: Свой
Сообщений: 46
Регистрация: 27-09-04
Пользователь №: 731

|
Вот пример построения внутреннего генератора, использующего только "внутренности" кристалла. В симуляторе не работает, а в жизни - на всю катушку  На выбранном кристалле XCV50PQ240-4 внутренняя частота CLK составила 210 МГц. При изменении типа OBUFT изменяется и частота. А дальше используй, хоть для задержек, хоть для работы другой внутренней схемы.
Прикрепленные файлы
XLG.ZIP ( 66.18 килобайт )
Кол-во скачиваний: 125
|
|
|
|
|
Oct 29 2004, 05:34
|
Участник

Группа: Свой
Сообщений: 33
Регистрация: 26-10-04
Пользователь №: 983

|
perguntСхемы я рисую в Foundation 4.2, но думю что это без разницы рисовать чем-то или текстом на VHDL/Verilog. На прицепленном рисунке реально работающая в одном из устройств линия задержки из 8-ми элементов. ПЛИС - Xilinx XC2S30-5-VQ100
Прикрепленные файлы
DELAY8.pdf ( 22.61 килобайт )
Кол-во скачиваний: 187
|
|
|
|
|
Oct 29 2004, 06:03
|
Участник

Группа: Свой
Сообщений: 46
Регистрация: 27-09-04
Пользователь №: 731

|
А вот еще одна "необычная" схема. На том же кристалле XCV50PQ240-4 внутренняя частота CLK составила 365 МГц ! Хитрость - PULLUP - если убрать, схема после оптимизации становится пустой...
Прикрепленные файлы
XLG2.ZIP ( 65.92 килобайт )
Кол-во скачиваний: 106
|
|
|
|
|
Oct 29 2004, 09:26
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Все же не совсем я понимаю, что во всех этих конструкциях является пороговым элементом? Мои попытки сделать генератор на atmel AT94 (AT40) ни к чему не привели, получается "серое" состояние. С софтом, пытающимся оптимизировать петли, я боролся тупо. Делал hard-macro, в vhdl их использовал как черный ящик.
Если пожертвовать парой ног ввода-вывода, снаружи их соединить, а внутри зациклить через инвертор, то за счет встроенного триггера шмидта генератор получается надежный.
|
|
|
|
|
Oct 29 2004, 13:42
|
Участник

Группа: Свой
Сообщений: 46
Регистрация: 27-09-04
Пользователь №: 731

|
Проекты сделаны в Xilinx Foundation v4.1. Обычно я использую для открытия таких архивов в меню Project Manager (File\Restore Project). Если не получается, то вот копии TOP Sheet этих двух проектов. И еще раз напоминаю, что в симуляторе такие вещи дают неопределенное состояние, а в реальном кристалле - нормальный генератор. Так что приходится в симуляторе навязывать стимул.
Прикрепленные файлы
XLG.pdf ( 5.91 килобайт )
Кол-во скачиваний: 157
|
|
|
|
|
Oct 29 2004, 19:48
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 22-10-04
Пользователь №: 963

|
Цитата(Shtirlits @ Oct 29 2004, 01:26 PM) Все же не совсем я понимаю, что во всех этих конструкциях является пороговым элементом? Мои попытки сделать генератор на atmel AT94 (AT40) ни к чему не привели, получается "серое" состояние. С софтом, пытающимся оптимизировать петли, я боролся тупо. Делал hard-macro, в vhdl их использовал как черный ящик.
Если пожертвовать парой ног ввода-вывода, снаружи их соединить, а внутри зациклить через инвертор, то за счет встроенного триггера шмидта генератор получается надежный. В AT94 вроде есть возможность поправить прошивку плис со стороны авр не пробовал? если там есть доступ к конфигурации PAD можно наверно и частотой поиграть изменяя задержки
|
|
|
|
|
Oct 29 2004, 21:12
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Менять можно, только это секретная информация, отдается atmel-ом под подписку о нераспространении. Не люблю я это дело, мне исходники публиковать нужно. Пробовать не стал. В том документе, который мне случайно перепал, про параметры pad-ов я ничего не нашел.
На возможность динамической реконфигурации я облизывался, правда как на способ обмена с AVR-кой. Жалко ячейки на мультиплексоры, а тут можно как бы через заднюю дверь зайти. Имея возможность менять функцию LUT4, получаешь как бы LUT6.
|
|
|
|
|
Nov 1 2004, 11:58
|
Участник

Группа: Свой
Сообщений: 46
Регистрация: 27-09-04
Пользователь №: 731

|
1. Ориентировочный расчет частоты для приведенный выше схем покажу на примере первой (где в качестве линии задержки используется UPAD). Из Datasheet на Virtex (10.2002) для кристалла XCV50PQ240-4 видим следующие времена: O input to Pad (Tioop) = 3.5 ns - для буфера LVTTL, 12mA, Fast ; Pad to I output, no delay (Tiopi) = 1.0 ns ; Output Delay Adjustments (Tolvttl_f24) = -0.23 ns. Получаем задержку на Tupad = (Tioop - Tolvttl_f24) + Tiopi = 4.27 ns . Остается добавить задержку по цепи, соединяющей вход и выход IOB (инвертер реализуется внутри IOB). В данной реализации она составила 0.877 ns (скорость Switch Boxes не приводится в Datasheet  ). Итого F = 1 / (4.27 + 0.877) = 194.28 MГц. Такой же прогноз показывает Time Simulation. Если достать вход и выход инвертера и подать стимул на выход, то задержка до входа составит 5.1 ns. 2. Частота будет зависить не только от чипа, но и от температуры. Приведенный выше расчет - для макисальных задержек. Минимальные задержки можно прогнозировать на уровне "соседнего" по скорости XCV50PQ240-5. Тогда прогнозируемая частота составит около 209 МГц, т.е. примерно 8%. 3. Пока не замечал проблем.
|
|
|
|
|
Mar 8 2005, 14:09
|

Местный
  
Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002

|
Цитата(USTAS @ Oct 27 2004, 16:19) В принципе, похожие трюки можно делать, используя атрибуты для цепей (KEEP, S(ave)). Назначение атрибутов можнно посмотреть Libraries Guide. Альтернативный способ - построить генератор на внутренней логике ПЛИС (используются только внутренние ресурсы). В зависимости от скорости кристалла частота такого генератора может быть порядка 100 - 200 МГц. Ага. И "плавать" в этих же пределах от температуры, напряжения питания и фазы Луны.
--------------------
Умею молчать на 37 языках...
|
|
|
|
|
Mar 15 2005, 10:46
|
Местный
  
Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804

|
Сейчас нет времени проверять на практике, но в "Искусство схемотехники" есть схема типового генератора на кварце. Там кроме двух емкостей присутствуют еще два резистора. Эта схема проверена на практике, работает очень хорошо и стабильно. Теперь по Вашему описанию. Есть подозрение, что
elsif I1='1' and I1'event then TMP<= not TMP; end if;
этот фрагмент родит триггер, а не инвертор. В данном случае надо использовать простой комбинаторный процесс с I1 в списке чувствительности, а выключать генератор элементом ИЛИ.
По идее выглядит вот так:
process (I1, RST) begin I2 <= NOT (I1 OR RST); end process;
OUT_CLK <= NOT I2;
Попробуйте, скажите, если получилось. Смотреть генерацию надо на OUT_CLK, касание щупом осциллографа к I1 или I2 может срывать генерацию.
--------------------
WBR, V. Mirgorodsky
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|