vak: (Улыбка)
[personal profile] vak
Почему-то считается, что асинхронную логику нельзя засунуть в традиционную FPGA. Я решил поисследовать этот вопрос. Чем дольше разбираюсь, тем яснее становится, что это просто предубеждение. Я взял популярную плату Digilent Basys3 на основе чипа Xilinx Virtex-7, и стал смотреть, что тут можно сделать.

Основа асинхронной логики - несколько базовых примитивов: C-элемент, арбитр, S-элемент, T-элемент. Все их удалось реализовать на имеющейся FPGA. Вот, к примеру, как выглядит двухвходовый С-элемент Мюллера:


Это трёхвходовый С-элемент:


Арбитр штука более сложная. К счастью, нынешние чипы FPGA, так называемое семейство Xilinx 7 Series, в качестве базового элемента имеют логическую таблицу LUT6_2 с двумя независимыми выходами. Это даёт возможность построить асинхронный арбитр со стабильными характеристиками:


S-элемент и T-элемент представляют собой кирпичики для построения так называемых секвенсеров, блоков управления другими компонентами. В принципе, их можно собирать из С-элементов и базовой логики, но через LUT6_2 получается заметно компактнее:


Т-элемент вообще помещается в одну ячейку LUT6_2:

Date: 2016-09-12 07:06 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Что делает MUTEX_13.f?

Date: 2016-09-12 07:07 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
А вот насчёт арбитра позволю задать вопрос. Вот как я всегда себе арбитр представлял - это устройство, обеспечивающее совместный доступ нескольким абонентам к одному общему ресурсу. Например, арбитр доступа к памяти. Представляет собой мультиплексор(ы), коммутирующий абонентов в зависимости от сигнала управления и state-machine, которая эти сигналы формирует в зависимости от приоритета каналов. Вполне возможно, что в классическом понятии арбитр - это совсем другая конструкция. Но не суть.

Так вот а как в асинхронной логике с коммутацией шин данных? Там же по разным битам будут совсем разные задержки ведь. И чего тогда будет? Эти задержки нужно учитывать и анализировать, или же там концепция работы совсем другая?

Ну и да. Вы ссылочки часто даёте весьма полезные. Нет ли где-нибудь какого не шибко сложного Reference Design, что бы посмотреть на практическое применение асинхронной логики?

Date: 2016-09-12 07:26 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Логично. Интересно, что Xilinx-овские тулы говорят о таком бешеном количестве комбинационных циклов.

Date: 2016-09-12 09:03 (UTC)
From: [identity profile] vit-r.livejournal.com
Схема - это хорошо, а на какой тактовой частоте это сможет реально работать?

Date: 2016-09-12 14:01 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Если LUT equation не зависит от какого-то входа, зачем его вообще заводить? Проще GND к нему присоединить.

Date: 2016-09-12 19:16 (UTC)
From: [identity profile] vit-r.livejournal.com
Я имел ввиду, с какой максимальной частотой смогут идти сигналы, чтобы это всё ещё работало правильно? Потому как кроме скорости переключения могут быть и другие эффекты.

Date: 2016-09-12 19:20 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Похоже, что инстансы с именами примитивов синтезатор вообще не трогает, и константа превращается в ничто. Значит, нужно явно к GND подключать.

Date: 2016-09-12 19:28 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Ну как: делаешь асинхронную схему, которая, скажем, считает сумму квадратов чисел от 1 до 65535, и рядом счетчик 100 МГц тактов. Как вычисление закончилось, показываешь количество тактов N. Эффективная "тактовая" частота будет 100 МГц*65535/N.
Альтернативно, синтезируешь ту же фунциональность синхронно (без DSP, чтобы честно сравнивать) и смотришь, на какой частоте Xilinx скажет, что оно будет работать.

Date: 2016-09-12 20:22 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Выходит, наоборот, если пин не используется, то его вообще отключить надо? В каждой версии у них свои заморочки, бардак какой-то.