svtsvt
Oct 26 2004, 11:13
Поделюсь опытом
ПЛИС в основном рассчитаны на построение тактируемых устройств. Для этого они содержат специализированные средства для клоков (выделенные контакты, синтезаторы частот, специально проложенные в кристалле пути с малыми задержками для разводки клоков и т.п.) и соответствующее размещение логики. В таких случаях используется внешний тактовый сигнал нужной частоты от генератора, микропроцессора или других устройств размещенных на плате или подключенных к ней.
Но бывают случаи, когда в устройстве в основном распределенная логика или/и счетчики, регистры и т.п. внешних сигналов, а машины состояний если и нужны, то не большие и не критичные к временным разбросам.
И, если на плате только одна микросхема ПЛИС, то добавление генератора делает существенную прибавку к стоимости устройства.
В таких случаях я делаю машины состояний на линиях задержки с отводами.
А эти линии задержки - это последовательно соединенные не подключенные к ногам ПЛИС блоки ввода/вывода (unbonded I/O pad - UPAD). Обычно их довольно много на кристалле и чем меньше ног у корпуса, тем больше количество UPAD. Сама задержка в основном определяется задаваемым выходным током UPAD - чем меньше ток, тем больше задержка. Например, для Spartan2 при заданном выходном токе в 2мА (минимальный) задержка на UPAD составляет около 25нс.
Porychik Kize
Oct 26 2004, 13:52
...........минуты 3 репу чесал, что же написать в ответ :-))))))........
В общем, в силу специфики работы для меня важна детерминированость поведения конечного продукта, а вопрос цены не слишком важен. Так что я, конечно, галочку себе в памяти поставлю на всякий случай, что можно в крайнем случае и вот так извернуться, но применять данный метод пока поостерегусь. :-))))
Все это - IMHO.
pergunt
Oct 27 2004, 10:57
А в схематике есть возможность приделать зтот UPAD ?
И какие еще способы кто знает чтобы внести задержку в схему(без применения клока! ) ?
Как, например, для CPLD есть атрибута NOREDUCE.
А какие варианты для FPGA, чтобы лишние внесенные для задержки элементы не удалялись (не оптимизировались)?
Задержки порой хотелось бы подстраивать от 2 до 25 нс.
В принципе, похожие трюки можно делать, используя атрибуты для цепей (KEEP, S(ave)). Назначение атрибутов можнно посмотреть Libraries Guide.
Альтернативный способ - построить генератор на внутренней логике ПЛИС (используются только внутренние ресурсы). В зависимости от скорости кристалла частота такого генератора может быть порядка 100 - 200 МГц.
pergunt
Oct 27 2004, 13:47
Атрибуты KEEP и OPTIMIZE ведут себя, на мой взгляд, как-то нестабильно при транслировании чипа. То одну задержку получишь, то другую. Да и набирать элементов мне приходилось порой очень много - т.е. такое чувство, что все равно оптимизируется..
С внутренним генератором - организовывать как то опасаюсь(да и как сделать не выходя на ножки чипа?).
Кто еще какие способы задержек может предложить?
И вопрос к svtsvt - Как вы все таки прописываете UPAD !?
Как определяете номер пина Unbonded ?
svtsvt
Oct 28 2004, 14:48
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нс.
pergunt
Oct 28 2004, 15:42
[B]svtsvt
Пробовал нарисовать как Вы рекомендуете, пока не получается - ошибки при трансляции.
А какой версией Вы пользуетесь (ISE..?..)?
Вот пример построения внутреннего генератора, использующего только "внутренности" кристалла. В симуляторе не работает, а в жизни - на всю катушку

На выбранном кристалле XCV50PQ240-4 внутренняя частота CLK составила 210 МГц. При изменении типа OBUFT изменяется и частота. А дальше используй, хоть для задержек, хоть для работы другой внутренней схемы.
svtsvt
Oct 29 2004, 05:34
pergunt
Схемы я рисую в Foundation 4.2, но думю что это без разницы рисовать чем-то или текстом на VHDL/Verilog.
На прицепленном рисунке реально работающая в одном из устройств линия задержки из 8-ми элементов.
ПЛИС - Xilinx XC2S30-5-VQ100
А вот еще одна "необычная" схема. На том же кристалле XCV50PQ240-4 внутренняя частота CLK составила 365 МГц ! Хитрость - PULLUP - если убрать, схема после оптимизации становится пустой...
pergunt
Oct 29 2004, 08:42
svtsvt
Большое спасибо за ИДЕЮ ! и пример.
Мне также удалось в пакете ISE подцепить для задержек Unbonded pins.
Весьма существенно, как Вы отметили, это поиск неподсоединенных падов
через эдитор, т.к. никакого дата шита с их номерами нет.
Прямо в библиотеке UPAD нет, поэтому извратился через bidirect.
USTAS
Схему пока открыть не смог. Ваши примеры для какого софта (версии)?!
Shtirlits
Oct 29 2004, 09:26
Все же не совсем я понимаю, что во всех этих конструкциях является пороговым элементом?
Мои попытки сделать генератор на atmel AT94 (AT40) ни к чему не привели, получается "серое" состояние.
С софтом, пытающимся оптимизировать петли, я боролся тупо. Делал hard-macro, в vhdl их использовал как черный ящик.
Если пожертвовать парой ног ввода-вывода, снаружи их соединить, а внутри зациклить через инвертор, то за счет встроенного триггера шмидта генератор получается надежный.
Проекты сделаны в Xilinx Foundation v4.1.
Обычно я использую для открытия таких архивов в меню Project Manager (File\Restore Project).
Если не получается, то вот копии TOP Sheet этих двух проектов.
И еще раз напоминаю, что в симуляторе такие вещи дают неопределенное состояние, а в реальном кристалле - нормальный генератор. Так что приходится в симуляторе навязывать стимул.
pergunt
Oct 29 2004, 15:48
USTAS
Спасибо за схемы !
Насколько стабильная получалась частота генерации?
Запускалась всегда?
Могут ли быть срывы?
А как возможно прикинуть частоту этих генераторов?
Как изменить частоту(в осцилляторе)?
Цитата(Shtirlits @ Oct 29 2004, 01:26 PM)
Все же не совсем я понимаю, что во всех этих конструкциях является пороговым элементом?
Мои попытки сделать генератор на atmel AT94 (AT40) ни к чему не привели, получается "серое" состояние.
С софтом, пытающимся оптимизировать петли, я боролся тупо. Делал hard-macro, в vhdl их использовал как черный ящик.
Если пожертвовать парой ног ввода-вывода, снаружи их соединить, а внутри зациклить через инвертор, то за счет встроенного триггера шмидта генератор получается надежный.
В AT94 вроде есть возможность поправить прошивку плис со стороны авр
не пробовал?
если там есть доступ к конфигурации PAD можно наверно и частотой поиграть изменяя задержки
Shtirlits
Oct 29 2004, 21:12
Менять можно, только это секретная информация, отдается atmel-ом под подписку о нераспространении. Не люблю я это дело, мне исходники публиковать нужно.
Пробовать не стал.
В том документе, который мне случайно перепал, про параметры pad-ов я ничего не нашел.
На возможность динамической реконфигурации я облизывался, правда как на способ обмена с AVR-кой. Жалко ячейки на мультиплексоры, а тут можно как бы через заднюю дверь зайти. Имея возможность менять функцию LUT4, получаешь как бы LUT6.
pergunt
Nov 1 2004, 09:58
USTAS
Извиняюсь за повтор вопроса к Вам по-поводу схем генераторов:
1. Возможно ли рассчитать частоту или придется мерить, что получается на других чипах?
2. Повторяемость частоты при прошивке схемы в другой чип (но с тем же номером)?
3. Запуск всегда происходит или возможны проблемы?
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. Пока не замечал проблем.
Цитата(USTAS @ Oct 27 2004, 16:19)
В принципе, похожие трюки можно делать, используя атрибуты для цепей (KEEP, S(ave)). Назначение атрибутов можнно посмотреть Libraries Guide.
Альтернативный способ - построить генератор на внутренней логике ПЛИС (используются только внутренние ресурсы). В зависимости от скорости кристалла частота такого генератора может быть порядка 100 - 200 МГц.
Ага. И "плавать" в этих же пределах от температуры, напряжения питания и фазы Луны.
DmitryR
Mar 9 2005, 07:14
Послушайте, а почему не поставить дешевый резонатор? Это один трехвыводной корпус (резонатор + два согласованных кондюка), стоит он пять рублей в розницу. А внутри синтезите инвертор и все, дальше - внутренняя PLL и нужная частота на ее выходе. Если надо, чтобы стабильно запускалось при разбросе температур - еще один резистор 1М параллельно резонатору.
А вот тут
http://www.xilinx.com/xlnx/xweb/xil_tx_dis..._ID=pa_six_easy есть схема, как получить надежную генерацию известной частоты на двух резисторах и одном кондюке - еще в пять раз дешевле, чем резонатор

.
Serega Doc
Mar 11 2005, 14:51
Почему все про Xilinx да про Xilinx для Altera это что не актуально.
У меня проект на MAX 3032. И как к нему подключить импульсы синхросиналов.
Я пробовал подключить кварц через инвертор. Но схема не за работала. Может что то не то?
Еще пробовал вот такой код
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity GEN is
port(
I1 : in STD_LOGIC;
RST : in STD_LOGIC;
OUT_CLK : out STD_LOGIC;
I2 : out STD_LOGIC
);
end GEN;
architecture GEN of GEN is
signal TMP : STD_LOGIC;
begin
process (I1, RST)
begin
if RST='0' then
TMP<='0';
elsif I1='1' and I1'event then
TMP<= not TMP;
end if;
end process;
I2<= TMP;
OUT_CLK<=not TMP;
end GEN;
На I1 и I2 подключен кварц с двумя емкостями.
И тоже не генерит .
Помогите кто может!!!
v_mirgorodsky
Mar 12 2005, 16:46
На www.xilinx.com есть раздел TechXclusives, там выступает дюже вумный дядька Peter Alfke. У него есть статья "Six Easy Pieces (Non-Synchronous Circuit Tricks)". Там описывается схема простого генератора на ПЛИС со стабильным запуском и без кварцевого резонатора.
Serega Doc
Mar 14 2005, 07:08
Я читал эту статью. Но приведенные генераторы не обеспечивают стабильность частоты. По моему в промышленное устройство уж лучше с кварцем
v_mirgorodsky
Mar 15 2005, 10:46
Сейчас нет времени проверять на практике, но в "Искусство схемотехники" есть схема типового генератора на кварце. Там кроме двух емкостей присутствуют еще два резистора. Эта схема проверена на практике, работает очень хорошо и стабильно. Теперь по Вашему описанию. Есть подозрение, что
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 может срывать генерацию.
USTASU OT ALEKSA.
Vernee ot leevv. ;-0
Spasibo SvtSvt i USTAS za zamechatel'nujy ideju. Mne davno v Xilinx ne hvataet vozmognosti generit' avtonomnyi clk.
Interesno by poprobovat' s Virtex4, u kotorogo est' tochnaja i upravljaemaja liniya zadergki "SyncChip" v kazdom IOB. Da i vremena tam pobystree.
Skoro poluchu V4 eval board i objazatelno poprobuju.
Pravda ne znaju, vozmogen li dostup k "SyncChip" na UPAD. No v ljybom sluchae odin real'nyj no neispolzuemyj pin vsegda v designe najdetsja, chtoby sdalat' clk gen.
A voobshe eto horoshij material dlja appnote for Xilinx. Ne proboval li kto nibud' is vas svjazat'sja s Xilinx korifejami, s tem ge Peter Alfke, naprimer?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.