Полная версия этой страницы:
Какую ПЛИС выбрать
Shivers
Jun 20 2014, 12:25
Всем привет!
Есть вопрос. Нужна ПЛИС, у которой в LC есть возможность замкнуть LUT обратной связью. При этом, LUT должен быть минимум 3х3.
Уточню. На LC заходят два входа, идут в LUT. Выход LUT должен 1) с помощью мультиплексоров быть заведен на вход этого LUT, и 2) Иметь выход из LC, минуя триггеры/защелки.
Если в LC есть сразу два LUT, у которых выходы можно завести в обратную связь, в т.ч. и наперекрест, да еще и вывести наружу, было бы вообще шикарно.
Посмотрел наугад несколько зайлинксов и альтер -возможности обратной связи нигде нет. Почему такое не делают, в общем то понятно. Но, а вдруг кто такое видел
Спасибо!
Цитата(Shivers @ Jun 20 2014, 16:25)

Посмотрел наугад несколько зайлинксов и альтер -возможности обратной связи нигде нет.
Обратная связь возможна, но внешними (по отношению к LC) цепями.
Shivers
Jun 20 2014, 13:35
Цитата(rloc @ Jun 20 2014, 17:17)

Обратная связь возможна, но внешними (по отношению к LC) цепями.
Это понятно

Но я спрашивал - про связи внутри LC
Зачем? Это противоречит здравому смыслу с точки зрения производителя.
это для самосинхронных схем нужно, что-ли?
такой обратной связи в LC нет по определению - даже средства синтеза на такое ругается, то есть сама идея современного плисостроения считает такую связь порочной.
я использовал для самосинхронных схем актеловские проазики - там 3х входовые луты (вернее некая фигня, tile, которая может быть сконфигурена либо в триггер, либо в логику - реализовано на мультиплексорах) и можно сделать детерменированый путь быстрее чем остальные
Shivers
Jun 20 2014, 13:52
Цитата(yes @ Jun 20 2014, 17:45)

я использовал для самосинхронных схем актеловские проазики - там 3х входовые луты (вернее некая фигня, tile, которая может быть сконфигурена либо в триггер, либо в логику - реализовано на мультиплексорах) и можно сделать детерменированый путь быстрее чем остальные
Спасибо за совет!
Да, мне это нужно для экспериментов с нестандартными триггерами и латчами, и в частности - С-элемент хотелось бы тоже сделать.
Вопрос - тот же 2-входовой С-элемент сколько этих tile требует?
Вообще, tile это круто. Название, возможно, говорит о NOC-архитектуре. Надо присмотреться к актелям поближе
p.s. и подвопрос -сколько может потребоваться tile для простой RS защелки на, скажем, двух NAND2?
ну я давно этим занимался
введение вроде тут
http://www10.edacafe.com/book/ASIC/CH05/CH05.1.phpС по моему на одном можно (не уверен), я делал некий конвеер, без явного С элемента
RS - по-моему одна, но если explicit NAND2 то 2
в актелях проблемы - очень хреново сложная логика, скорость (задержка) от сложности, зависит как у студента финансы после степендии

- чем дальше, тем хуже.
Shivers
Jun 20 2014, 20:07
Редкий какой изврат они народили! Наверное, кто то пару докторских защитил, если авторы серьезно считают, что кучка мультиплексоров может заменить старый добрый LUT. Но, им виднее. К несчастью, обратные связи опять же отсутствуют внутри LC. Но судя по всему, ничего лучше я не наду.
Я так понимаю, мне из всего подходит только ACT1. Для RS триггера с прямым и инверсным выходом нужно два tile. Для С-элемента .. надо считать, но скорее всего так же два.
Проблема обратных связей в ПЛИС была и есть - их делают мало. Если передать сигнал от LC к другой LC занимает 1-2 задержки ключа, то роутинг в обратную связь - минимум в два раза больше, а то и в четыре. А что хуже всего, это ресурсы - на обратные связи линий не так много закладывается, ресурсы очень быстро сжираются. В Актеле, может ситуация обстоит лучше, буду пробовать. Еще раз, спасибо!
Shivers
Jun 23 2014, 06:06
Изучил доки на актель, RS триггер на двух ACT1 можно сделать. А С-элемент теоретически на одном, но работать почти наверняка не будет. Использовать две АСТ1 с перекрестными обратными связями - тоже сомнительно что будет работать. В общем, актель не подходит, видимо
Пожалуй, вопрос надо перефразировать:
Подскажите ПЛИС, в которой есть RS триггер в LC?
Иногда встречаются D-триггеры c асинхронным Set и Reset, но как правило эти сброс/установки являются региональными, т.е. много самостоятельных RS триггеров так не получишь.
Цитата(Shivers @ Jun 23 2014, 10:06)

много самостоятельных RS триггеров так не получишь.
В пределах одной структуры, например SLICE у Xilinx, больше одного RS-триггера нельзя.
Shivers
Jun 23 2014, 06:34
Цитата(rloc @ Jun 23 2014, 10:17)

И в Altera и в Xilinx нет ограничений. Один из входов set/reset приоритетный.
У Альтеры одновременно Set и Reset только в старых Flex/Apex сериях были, кажется. Циклоны и стратиксы я смотрел вроде все, не видел такого.
Не подскажете конкретную серию?
Триггер устанавливается в режиме "Latch", на вход D - "0" или "1", СK и SR - входы set/reset
Shivers
Jun 23 2014, 07:48
Цитата(rloc @ Jun 23 2014, 11:17)

Триггер устанавливается в режиме "Latch", на вход D - "0" или "1", СK и SR - входы set/reset
Скачал доку (
>link<) на CLB в 6м виртексе, про режим защелки почти ничего не сказано. Спасибо за инфу.
Проблема в том, что CK и RS - региональные, судя по доке. Меня даже компоновка в виде SLICE бы устроила, лишь бы Set и Reset задавались индивидуальными LUT. А в таком виде на один RS триггер нужно два SLICE: в одном функции сброса и установки с помощью LUT, а в другом одна защелка.
Спасибо за ответы
Видимо, ничего подходящего найти не удастся. Классика жанра, RS триггер, практически не реализуем в современных ПЛИС
Сложно понять что Вам хочется. На SR и CK могут подаваться и локальные сигналы. Один FF, даже без привлечения LUT, что может быть проще?
Shivers
Jun 23 2014, 08:54
Цитата(rloc @ Jun 23 2014, 12:22)

Сложно понять что Вам хочется. На SR и CK могут подаваться и локальные сигналы. Один FF, даже без привлечения LUT, что может быть проще?
FF не нужен.
Нужен асинхронный RS триггер типа latch (классический пример - два NAND2, с заведенными обратными связями крест накрест). Для этого триггера надо задавать Set и Reset таблично, поскольку это могут быть функции 2х и более переменных. И разместить это нужно в одной LC.
Цитата(Shivers @ Jun 23 2014, 12:54)

FF не нужен.
Нужен асинхронный RS триггер типа latch (классический пример - два NAND2, с заведенными обратными связями крест накрест). Для этого триггера надо задавать Set и Reset таблично, поскольку это могут быть функции 2х и более переменных. И разместить это нужно в одной LC.
Для Xilinx это возможно - один SLICE, из которого задействованы 2 LUT и один FF, но связи внешние (не внутри SLICE).
А вообще, на любой FPGA крайне не желательно делать асинхронные схемы. Подумайте на системном уровне о других вариантах решения.
Shivers
Jun 23 2014, 09:56
Цитата(rloc @ Jun 23 2014, 13:22)

Для Xilinx это возможно - один SLICE, из которого задействованы 2 LUT и один FF, но связи внешние (не внутри SLICE).
А вообще, на любой FPGA крайне не желательно делать асинхронные схемы. Подумайте на системном уровне о других вариантах решения.
Вариантов как бы всего два - либо FPGA (есть еще - PAL, но я как то не верю что на нем можно сделать что то больше пары счетчиков), либо кремний (БМК в расчет не беру - смешно). Других опций погонять асинхронные схемы в железе нет. Кремний дорог, ПЛИС .. выяснили. Ну что же, увы
А в чем проблема внешних связей то? PAR их разводит корректно, с учетом заданных таймингов. А вроде ничего более и не надо. Ведь работают же себе прототипы ИС, содержащие сотни латчей самых разных видов. Главное, чтобы разводчик понял, что от него хотят. А он, вроде, понимает.
Shivers
Jun 23 2014, 11:10
Цитата(SM @ Jun 23 2014, 15:02)

А в чем проблема внешних связей то? PAR их разводит корректно, с учетом заданных таймингов. А вроде ничего более и не надо. Ведь работают же себе прототипы ИС, содержащие сотни латчей самых разных видов. Главное, чтобы разводчик понял, что от него хотят. А он, вроде, понимает.
Проблема асинхронная - таймингов нет, они ведь к частоте привязываются. Т.е. синтезатор не работает. Единственный вариант сделать RS триггер под свои нужды - описать вручную вызов LC с привязкой к архитектуре. При этом очень бы хотелось не выводить наружу обратную связь, потому что обратная связь - узкое место в триггере. В лучшем случае быстродействие будет с мегагерц, в худшем - вообще работать не будет.
Цитата(Shivers @ Jun 23 2014, 15:10)

Проблема асинхронная - таймингов нет, они ведь к частоте привязываются. Т.е. синтезатор не работает.
В порядке бредовой идеи - а если к каждому триггеру для цепи ОС задать пару set_max_delay и set_min_delay ? Ну не руками, естественно, а скриптом каким нибудь.
Вроде предлагал без обратных связей. Да и описывать на уровне примитивов не надо, синтезатор сам выбирает "Latch" в качестве основы RS-триггера, правда использует входы CK и D в качестве set/reset, что впрочем лучше с точки зрения прямой связи LUT с триггером. Похоже топикстартер сам не знает, что нужно.
Делал элементарно:
Код
bit [15:0] adda; // address-data latch
always_latch
if (!PLS_N) adda <= ADB;
Shivers
Jun 23 2014, 14:25
Цитата(ViKo @ Jun 23 2014, 17:09)

Делал элементарно:
Код
bit [15:0] adda; // address-data latch
always_latch
if (!PLS_N) adda <= ADB;
Это защелка с разрешением, несколько другое.
Нашел свое счастье, кажется:
http://www.xilinx.com/support/documentatio...cs-pdf/lab5.pdf Мне нужна защелка с первой картинки, но с раздельными LUT на каждом входе. Видимо, это реализуемо.
Код
ViKo соответствует картинке на втором листе, это защелка с разрешением.
Метастабильного состояния не будет, один из входов обязательно приоритетный.
проблема во всем этом не "быстрая" обратная связь, а "медленная" прямая.
то есть так или иначе все самосинхронные схемы опираются на то, что в цепи req/ack задержка была дольше, чем в функциональной логике.
а в современных ПЛИС трассировка составляет 70% от задержки, а "логика" 30%
то есть: после синтеза нужно получить времянку (я это делал повставляв обычные тактируемые регистры вместо латчей), затем заменить их на латчи, а добавленную цепочку буферов в req/ack разбросать по кристаллу так, чтобы площадь была не меньше, чем у "логики"
после этого добыть времянку сложно - я ничего лучше не нашел, чем добавлять регистры в начало конец и вырезать из полного отчета слака по пути нужные мне куски (гемор еще тот), писал какие-то скрипты и т.п.
практически мне это понадобилось для одной платы (да и то, если честно, хотелось просто такую крутотень воплотить в реальности), в которой поставили такой генератор тактов, который требовал начальной загрузки - в конце концов я остановился на кольцевом генераторе и синхронной схеме - уж слишком геморно было делать на асинхронщине - там нужно было что-то типа задержек (диаграммы) и SPI
с асинхронщиной еще раньше было интересно повозится, "заради концепции", у меня на тот момент было полно разного железа (отходы производства) и альтеры и ксайлинцы, но актел ProASIC3 и его производные (при том что я их не особо люблю для практических задач) по-моему самое то
то что я дал ссылку на asic the book - то просто показать как из мультиплексоров строится логика, а из PA3 tile строится и защелка, и может даже триггер - две защелки (точно не помню уже) - то есть там есть обратные связи, просто там сложная картинка, много элементов. струмент (либеро) позволяет достаточно просто генерить размещения (то есть скриптами, а не руками), без чего, имхо, никак.
Shivers
Jun 25 2014, 10:22
Цитата(yes @ Jun 24 2014, 17:54)

проблема во всем этом не "быстрая" обратная связь, а "медленная" прямая.
Интересно, спасибо. Я не собирался в хендшейки линии задержек встраивать, но с ПЛИСовыми костылями по другому и не выйдет. Вы ведь понимаете, что линии задержек - это не чистые асинхронные схемы, а скажем так - гибрид? Высчитывать величину задержек для каждого участка .. нее. Мне больше интересно было бы реализовать настоящие асинхронные автоматы, где переключение идет по цепочке и не зависит от задержек. Но такие автоматы сильно привязаны к архитектуре, и на ПЛИС один фиг сделать не получится, видимо. Но вообще, Ваш опыт очень интересен. И что, действительно, на задержках удалось пайплайн запустить? Пробовали греть/морозить микросхему?
Цитата(Shivers @ Jun 25 2014, 14:22)

Интересно, спасибо. Я не собирался в хендшейки линии задержек встраивать, но с ПЛИСовыми костылями по другому и не выйдет. Вы ведь понимаете, что линии задержек - это не чистые асинхронные схемы, а скажем так - гибрид? Высчитывать величину задержек для каждого участка .. нее. Мне больше интересно было бы реализовать настоящие асинхронные автоматы, где переключение идет по цепочке и не зависит от задержек. Но такие автоматы сильно привязаны к архитектуре, и на ПЛИС один фиг сделать не получится, видимо. Но вообще, Ваш опыт очень интересен. И что, действительно, на задержках удалось пайплайн запустить? Пробовали греть/морозить микросхему?
нет в температуре не проверял.
но нетлист с sdf-ом симулировал, там вроде как крайние температуры
ну и я хотел 8ми битный контроллер типа PIC-а запустить, но самое сложное, что осилил - сумматор с защелками по краям
потом устал

, возможно, я неправильно организовал процесс - статьей практических не нашел, может как-то проще можно было
для кольцевого генератора смотрели где-то -30 +70, визуально заметно на осциллографе, точно не помню, но раза в полтора быстрее на морозе.
Shivers
Jun 25 2014, 15:00
Цитата(yes @ Jun 25 2014, 17:51)

ну и я хотел 8ми битный контроллер типа PIC-а запустить, но самое сложное, что осилил - сумматор с защелками по краям
потом устал

,
Задача очень трудоемкая, согласен. В мире асинхронных чипов на задержках по пальцам одной руки можно пересчитать. Самое известное - Филипс в начале 00х сделала и запустила в серию два микроконтроллера по такой технологии: аналог
ARM-996 (32бит) и
8051. Остальное - только опытные образцы в исследовательских целях. А на ПЛИС -Вы были бы первым =)
Цитата(Shivers @ Jun 25 2014, 19:00)

А на ПЛИС -Вы были бы первым =)
это врядли
http://opencores.org/project,aspidaну и более простых имплементаций находил раньше, по универам и т.п.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.