Как стать автором
Обновить

Комментарии 17

Трудно не согласиться. Но у Варшавского не простых книг, где бы начиналось с «азов». Без серьезной математической подготовки Варшавский вообще не читабелен, на мой взгляд. А вот учебник, что я присоветовал в конце — весьма и весьма читабелен.
Можно еще это почитать:
Л. П. Плеханов Основы самосинхронных электронных схем.

Л. П. Плеханов- дядя мой.
Я тут одно время экспериментировал с самосинхронными схемами с их последующим синтезом в ПЛИС Altera. Первой целью было ввести к 1 и 0 еще одно состояние, которое ни то и ни другое. Например Z. Но в симуляции если это все и работает, то в железе нет. Очень много «зарубает» оптимизатор синтезатора. В итоге, пришлось выяснить особые команды для синтезатора, чтобы не зарубал. Можно насильно создавать асинхронные RS триггеры и на них строить все. После всяческих экспериментов пришел к своему решению, которое оказалось велосипедом. Велосипед называется NCL (null conversion logic). Реализована простейшая логика (и, или, не). Вот уже пару лет неспешно это прорабатываю. Может быть тоже статейку напишу.
Спасибо за статью
А как удалось организовать RS-триггеры на ПЛИС?
Я в свое время искал, и не нашел таких ПЛИС, у которых триггеры имеют асинхронный сброс и установку. Задействовать два LUT внутри одного LAB тоже не получается — внутри LAB нет роутинга в обратную сторону. В результате я пришел к тому, что RS триггер (или сразу С-элемент) можно построить только на двух LAB, что очень расточительно.

По поводу NCL, я лично отношусь к этой технике скептически, поскольку там каждый элемент логического базиса содержит в себе защелку. Т.е. размер схемы получается чудовщиный, а эффект тот же, что и у самосинхронных. Но это — на вкус и цвет
> внутри LAB нет роутинга в обратную сторону

Я может чего не понял, но разве вот это не оно:

The LAB local interconnect can drive LEs within the same LAB. The LAB
local interconnect is driven by column and row interconnects and LE
outputs within the same LAB.
В LAB делают обратную связь, но только с выхода D-триггера. А для создания RS триггера на двух LUT требуются обратные связи с выходов именно LUT, а не D-триггера.
Да нет же, на схеме LE сигнал на local routing выдаётся с выхода LUT или регистра через мультиплексор.
А-а, вы наверное имеете в виду register feedback. Он действительно идёт с выхода регистра на вход LUT только внутри того же LE. Но есть ещё local routing: с выхода регистра или LUT одного LE на вход любого LE в том же LAB.
Именно. Получается, что на одну самосинхронную защелку нужно 2 LAB (c использованием local interconnect), а для полноценного самосинхронного Flip-Flop триггера — уже 4 LAB. С-элемент тоже потребует 3-4 LAB с дополнительным local interconnect. Об этом я и писал выше.
В конечном счете, и триггеры и С-элементы — только маленькие винтики в схеме, и если так расточительно тратить local interconnect, то скольконибудь серьезная схема может не влезть в ПЛИС. В идеале хочется обойтись вообще без local interconnect, и это было бы возможно с D-триггером с асинхронным сбросом и установкой (который можно превратить в RS-защелку, подав на клоковый вход константу). Проблема в том, что асинхронные сброс/установка в ПЛИС как правило глобальные, а для асинхронных схем сигналы Set/Reset каждого триггера должна формировать локальная логика. Выходит, снова упираемся в ресурсы ПЛИС — глобальных линий сброса/установки очень мало. Но, надо поэкспериментировать.
Пардон, но здесь похоже путаница в терминологии. Давайте проясним, у Альтеры:
LE – логический элемент, содержит LUT и DFF,
LAB (logic array block) – группа из 10-16 LE,
local interconnect – интерконнект внутри LAB, его хватит чтобы завернуть на вход по одному выходу с каждого LE и он не является критичным ресурсом.
MultiTrack interconnect (Row and Column) – основной интерконнект внутри чипа. Это уже ограниченный ресурс.

В этой терминологии утверждение, что на защёлку нужно 2 LAB и т. п. является несколько преувеличенным. То же касается local interconnect – тратить его совсем не расточительно, раз уж используются LE.

Насчёт асинхронные сброс/установка глобальные, не совсем так. Опять же для Альтеры они просто общие для всех LE одного LAB. Сбросов обычно 2 на LAB.
Виноват, действительно запутался в терминах.
Забыл ещё вот это:

> не нашел таких ПЛИС, у которых триггеры имеют асинхронный сброс и установку

Ну MAXII имеет асинхронную загрузку, которая может использоваться как асинхронная установка. Но MAXII, вероятно, не то, что вам нужно.
Так там одна макроячейка все это и содержит: триггер с разными типами входов. Надо использовать lov level primitives. Я даже немного про это написал тут.

По поводу NCL, я лично отношусь к этой технике скептически

Надо на практике пробовать. Там видно будет. Но хотя бы в надежности есть какая-то уверенность, т.к. сигнал получается дифференциальный. А с одним сигналом — нет гарантии, что его значение верное, да плюс метастабильность…
Примитив может содержать все нужные входы, а вот аппаратная реализация – нет. Тогда синтез всё-равно делает регистр из нескольких LUT.
Тут надо глядеть отчет синтезатора и схему, которую создает синтезатор. Плюс, нужно обязательно задавать опции синтезатора, чтобы он не поудалял все. Он же стремится сократить и создать оптимальную синхронную схему, а нам нужно все наоборот
Если использовать примитив, синтезатор сделает всё как надо. Он знает где и как он делает регистры из LUT. Вот если попытаться описать такую логику вручную, тогда да.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории