Логические элементы изнутри

Логические элементы изнутри

Цифровые микросхемы предназначены для обработки, преобразования и хранения цифровой информации. Выпускаются они сериями. Внутри каждой серии имеются объединенные по функциональному признаку группы устройств: логические элементы, триггеры, счетчики, элементы арифметических устройств (выполняющие различные математические операции) и т.д.

Чем шире функциональный состав серии, тем большими возможностями может обладать цифровое устройство, выполненный на базе микросхем данной серии. Микросхемы, входящие в состав каждой серии, имеют единое конструктивно-технологическое исполнение, единое напряжение питания, одинаковые уровни сигналов логического 0 и логической 1.

Все это делает микросхемы одной серии совместимыми.

Основой каждой серии цифровых микросхем является базовый логический элемент. Как правило, базовые логические элементы выполняют операции И-НЕ либо ИЛИ-НЕ и по принципу построения делятся на следующие основные типы: элементы диодно-транзисторной логики (ДТЛ).

резистивно-транзисторной логики (РТЛ), транзисторно-транзисторной логики (ТТЛ), эмиттерно-связанной транзисторной логики (ЭСТЛ), микросхемы на так называемых комплиментарных МДП структурах (КМДП).

Элементы КМДП цифровых микросхем используют пары МДП-транзисторов (со структурой металл – диэлектрик-полупроводник) – с каналами p- и n-типов. Базовые элементы остальных типов выполнены на биполярных транзисторах.

В радиолюбительской практике наибольшее распространение получили микросхемы ТТЛ серии и КМДП. На (рис. 1) показана схема базового логического элемента И-НЕ ТТЛ. На входе элемента включен многоэмиттерный транзистор VТ1.

Если на все его эмиттеры подать напряжения высокого уровня, то эмиттерный переход транзистора окажется закрытым. При этом ток. протекающий через резистор R1 и коллекторный переход транзистора VТ1, откроет транзистор VТ2. Падение напряжения на резисторе RЗ будет достаточным для открывания транзистора VТ5.

Напряжение на коллекторе транзистора VТ2 таково, что транзистор VТЗ закрыт, соответственно закрыт и транзистор VТ4. В результате на выходе элемента появится напряжение низкого уровня, соответствующее логическому 0.

Если же хоть на один из входов элемента подать напряжение низкого уровня, то эмиттерный переход транзистора VТ1 откроется, а транзисторы VТ2 и VТ5 будут закрыты. Транзистор VТЗ откроется за счет тока, протекающего через резистор R2, войдет в режим насыщения.

Соответственно откроется транзистор VТ4, и на выходе элемента появится напряжение высокого уровня, соответствующее логической 1. Следовательно, рассмотренный элемент выполняет функцию И-НЕ. В состав микросхем серий ТТЛ входит также логический элемент И-НЕ без коллекторной нагрузки в выходном каскаде.

Это так называемый элемент И-НЕ с открытым коллектором. Он предназначен для работы на внешнюю нагрузку, в качестве которой могут быть использованы электромагнитные реле, индикаторные приборы и т. д., ещё схемы с открытым коллектором применяются в шинах передачи данных в случаи когда две или более выходов подключены к одной физической линии рисунок 1.

Рисунок 1

Напомним, что структура КМДП является идеальным переключателем напряжения. Такой переключатель содержит два МДП транзистора с каналами p- и n-типов. При подаче на вход переключателя напряжения высокого уровня открывается n-канальный транзистор и закрывается p-канальный.

На рисунок 2 изображены схемы базовых элементов И-НЕ (а) и ИЛИ-НЕ (б) микросхем КМДП. Напряжение низкого уровня (логический 0) будет на выходе элемента И-НЕ только при одновременной подаче напряжений высокого уровня (логических 1) на все входы X1-ХЗ.

Если напряжение хотя бы на одном из входов (например, X1) будет низкого уровня то закроется n-канальный транзистор VТ6, и откроется p-канальный транзистор VТ1, через канал которого выход элемента подключается к источнику питания. Таким образом, на выходе будет напряжение высокого уровня, соответствующее логической 1.

Для реализации базового логического элемента ИЛИ-НЕ на КМДП структурах участки схемы, содержащие последовательно и параллельно включенные транзисторы, следует поменять местами рисунок 2,б.

Рисунок 2

Микросхемы ТТЛ рассчитаны на напряжение источника питания 5 В±10%. большая часть микросхем на КМДП структурах устойчиво работает при напряжении питания 3-15 В, некоторые – при напряжении 9 В±10%. Уровни логических 0 и 1 должны отличаться возможно больше.

Различают пороговое логической 1 U1пор – наименьшее напряжение высокого уровня на входе микросхемы, при котором напряжение на выходе изменяется от уровня логического 0 до уровня логической 1, а также пороговое напряжение логического 0 U0пор – наибольшее напряжение низкого уровня на входе микросхемы, при котором напряжение на выходе изменяется от уровня логической 1 до уровня логического 0.

Прежде чем перейти к детальному рассмотрению наиболее распространенных серий микросхем и цифровых устройств на их базе, остановимся на основных параметрах логических элементов. К ним относятся напряжение источника питания, уровни напряжений логического 0 и логической 1, нагрузочная способность, помехоустойчивость и быстродействие, потребляемая мощность.

Для микросхем ТТЛ серий U1пор =2,4 В; U0пор =0,4 В. Напряжение низкого и высокого уровней на выходе микросхем ТТЛ U1вых>=2,4В, U1вых0,7* Uпит, U0пор>0,3* Uпит то же время отклонения выходных напряжений U0вых и U1вых от нулевого значения и напряжения источника питания соответственно достигают всего нескольких десятков милливольт.

Способность элемента работать на определенное число входов других элементов без дополнительных устройств согласования характеризуется нагрузочной способностью. Чем выше нагрузочная способность, тем меньшее число элементов может понадобиться при реализации цифрового устройства.

Однако при повышении нагрузочной способности другие параметры микросхем ухудшаются: снижаются быстродействие и помехоустойчивость, возрастает потребляемая мощность. В связи с этим в составе различных серий микросхем есть так называемые буферные элементы с нагрузочной способностью, в несколько раз большей, чем у основных элементов.

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

Коэффициент разветвления по выходу для большинства логических элементов серий ТТЛ серии к155 составляет 10, для микросхем серий к561 КМДП – до 100. Помехоустойчивость базовых логических элементов оценивают в статическом и динамическом режимах.

При этом статическая помехоустойчивость определяется уровнем напряжения, подаваемого на вход элемента относительно уровней логических 0 и 1, при котором состояние на выходе схемы не изменяется.

Для элементов ТТЛ статическая помехоустойчивость составляет не менее 0,4 В, а для микросхем серий КМДП не менее 30% напряжения питания. Динамическая помехоустойчивость зависит от формы и амплитуды сигнала помехи, а также от скорости переключения логического элемента и его статической помехоустойчивости.

Динамические параметры базовых элементов оценивают, в первую очередь, быстродействием. Количественно быстродействие можно характеризовать предельной рабочей частотой, т. е. максимальной частотой переключения триггера, выполненного на этих базовых элементах.

Предельная рабочая частота микросхем ТТЛ серии к155 составляет 10 МГц. а микросхем серий к176 и к561 на КМДП структурах лишь 1 МГц. Быстродействие определяется так же, как среднее время задержки распространения сигнала.

Рисунок 3

tзд.р.ср.=0,5(t1,0зд.р+t0,1зд.р), где t1,0зд.р и t0,1зд.р – времена задержки распространения сигнала при включении и выключении рисунок 3.

Среднее время задержки распространения сигнала является более универсальным параметром микросхем, так как, зная его. можно рассчитать быстродействие любой сложной логической схемы суммированием tзд.р.ср для всех последовательно включенных микросхем. Для микросхем серии К155 tзд.р.

ср составляет около 20 нс, а для микросхем серии К176 – 200 нс. Потребляемая микросхемой мощность в статическом режиме оказывается различной при уровнях логического нуля (Р0) и логической единицы на выходе (Р1). В связи с этим измеряют среднюю мощность потребления Рср=(Р0+Р1)/2.

Статическая средняя мощность потребления базовых элементов серии К 155 составляет несколько десятков милливатт, а у элементов серий К176 и К561 она более чем в тысячу раз меньше.

Следовательно, при необходимости построення цифровых устройств с малым током потреблен нем целесообразно использовать микросхемы на КМДП структурах. Однако следует учитывать, что при работе в динамическом режиме мощность, потребляемая логическими элементами, возрастает.

Поэтому помимо Рср задаётся также мощность Рдин, измеряемая на максимальной частоте переключений. Необходимо иметь в виду. что с повышением быстродействия мощность, потребляемая микросхемой увеличивается

Источник: http://cxem.net/beginner/beginner13.php

Логические элементы

Любое цифровое устройство — персональный компьютер, или современная система автоматики состоит из цифровых интегральных микросхем (ИМС), которые выполняют определённые сложные функции.

Но для выполнения одной сложной функции необходимо выполнить несколько простейших функций.

Например, сложение двух двоичных чисел размером в один байт происходит внутри цифровой микросхемы называемой «процессор» и выполняется в несколько этапов большим количеством логических элементов находящихся внутри процессора.

Двоичные числа сначала запоминаются в буферной памяти процессора, потом переписываются в специальные «главные» регистры процессора, после выполняется их сложение, запоминание результата в другом регистре, и лишь после результат сложения выводится через буферную память из процессора на другие устройства компьютера.

Процессор состоит из функциональных узлов: интерфейсов ввода-вывода, ячеек памяти – буферных регистров и «аккумуляторов», сумматоров, регистров сдвига и т.д.

Эти функциональные узлы состоят из простейших логических элементов, которые, в свою очередь состоят из полупроводниковых транзисторов, диодов и резисторов.

При конструировании простых триггерных и других электронных импульсных схем, сложные процессоры не применить, а использовать транзисторные каскады – «прошлый век». Тут и приходят на помощь – логические элементы.

Логические элементы, это простейшие «кубики», составные части цифровой микросхемы, выполняющие определённые логические функции.

При этом, цифровая микросхема может содержать в себе от одного, до нескольких единиц, десятков, …и до нескольких сотен тысяч логических элементов в зависимости от степени интеграции.

Для того, чтобы разобраться, что такое логические элементы, мы будем рассматривать самые простейшие из них. А потом, наращивая знания, разберёмся и с более сложными цифровыми элементами.

Начнём с того, что единица цифровой информации это «один бит». Он может принимать два логических состояния – логический ноль «0», когда напряжение равно нулю (низкий уровень), и состояние логической единицы «1», когда напряжение равно напряжению питания микросхемы (высокий уровень).

Поскольку простейший логический элемент это электронное устройство, то это означает, что у него есть входы (входные выводы) и выходы (выходные выводы). И входов и выходов может быть один, а может быть и больше.

Для того, чтобы понять принципы работы простейших логических элементов используется «таблица истинности». Кроме того, для понимания принципов работы логических элементов, входы, в зависимости от их количества обозначают: Х1, Х2, … ХN, а выходы: Y1, Y2, … YN.

Функции, выполняемые простейшими логическими элементами, имеют названия. Как правило, впереди функции ставится цифра, обозначающая количество входов. Простейшие логические элементы всегда имеют лишь один выход.

«НЕ» (NOT) – функция отрицания (инверсии сигнала). Потому его чаще называют — «инвертор». Графически, инверсия обозначается пустым кружочком вокруг вывода элемента (микросхемы).

Обычно кружок инверсии ставится у выхода, но в более сложных логических элементах, он может стоять и на входе. Графическое обозначение элемента «НЕ» и его таблица истинности представлены на рисунке слева.

У элемента «НЕ» всегда один вход и один выход. По таблице истинности следует, что при наличии на входе элемента логического нуля, на выходе будет логическая единица.

И наоборот, при наличии на входе логической единицы, на выходе будет логический ноль.

Цифра «1» внутри прямоугольника обозначает функцию «ИЛИ», её принято рисовать и внутри прямоугольника элемента «НЕ», но это ровным счётом ничего абсолютно не значит.

Обозначение D1.1 означает, что D — цифровой логический элемент, 1 (первая) — номер микросхемы в общей схеме, 1 (вторая) — номер элемента в микросхеме. Точно также расшифровываются и другие логические элементы.

Читайте также:  Простой термостат на компараторе

Часто, чтобы отличить цифровые микросхемы от аналоговых микросхем, применяют обозначения из двух букв: DD – цифровая микросхема, DA – аналоговая микросхема. В последующем, мы не будем заострять внимание на это обозначение, а вернёмся лишь тогда, когда это будет необходимым.

Самой распространённой микросхемой «транзисторно-транзисторной логики» (ТТЛ), выполняющей функцию «НЕ», является интегральная микросхема (ИМС) К155ЛН1, внутри которой имеется шесть элементов «НЕ». Нумерация выводов этой микросхемы показана справа.

«И» (AND) – функция сложения (если на всех входах единица, то на выходе будет единица, в противном случае, если хотя бы на одном входе ноль, то и на выходе всегда будет ноль). В алгебре-логике элемент «И» называют «конъюнктор». Графическое обозначение элемента «2И» и его таблица истинности представлены слева.

Название элемента «2И» обозначает, что у него два входа, и он выполняет функцию «И». На схеме внутри прямоугольника микросхемы рисуется значок «&», что на английском языке означает «AND» (в переводе на русский — И).

По таблице истинности следует, что на выходе элемента «И» будет логическая единица только в одном случае — когда на обоих входах будет логическая единица. Если хотя бы на одном входе ноль, то и на выходе будет ноль.

Самой распространённой микросхемой «транзисторно-транзисторной логики» (ТТЛ), выполняющей функцию «2И», является интегральная микросхема (ИМС) К155ЛИ1, внутри которой имеется четыре элемента «2И». Нумерация выводов этой микросхемы показана справа.

      Для того, чтобы вам было понятнее что такое «2И», «3И», «4И», и т.д., приведу графическое обозначение и таблицу истинности элемента «3И».

По таблице истинности следует, что на выходе элемента «3И» будет логическая единица только в том случае — когда на всех трёх входах будет логическая единица.

Если хотя бы на одном входе будет логический ноль, то и на выходе элемента также будет логический ноль.

Самой распространённой микросхемой ТТЛ, выполняющей функцию «3И», является микросхема К555ЛИ3, внутри которой имеется три элемента «3И».

«И-НЕ» (NAND) – функция сложения с отрицанием (если на всех входах единица, то на выходе будет ноль, в противном случае на выходе всегда будет единица). Графическое обозначение элемента «2И-НЕ» и его таблица истинности приведены слева.

По таблице истинности следует, что на выходе элемента «2И-НЕ» будет логический ноль только в том случае, если на обоих входах будет логическая единица. Если хотя бы на одном входе ноль, то на выходе будет единица.

Самой распространённой микросхемой ТТЛ, выполняющей функцию «2И-НЕ», является ИМС К155ЛА3, а микросхемами КМОП (комплементарный металлооксидный полупроводник) – ИМС К561ЛА7 и К176ЛА7, внутри которых имеется четыре элемента «2И-НЕ». Нумерация выводов этих микросхем показана справа.

Сравнив таблицы истинности элемента «2И-НЕ» и элемента «2И» можно догадаться об эквивалентности схем:

Добавив к элементу «2И» элемент «НЕ» мы получили элемент «2И-НЕ». Так можно собрать схему, если нам необходим элемент «2И-НЕ», а у нас в распоряжении имеются только элементы «2И» и «НЕ».

И наоборот:

Добавив к элементу «2И-НЕ» элемент «НЕ» мы получили элемент «2И». Так можно собрать схему, если нам необходим элемент «2И», а у нас в распоряжении имеются только элементы «2И-НЕ» и «НЕ».

Аналогичным образом, путём соединения входов элемента «2И-НЕ» мы можем получить элемент «НЕ»:

Обратите внимание, что было введено новое в обозначении элементов – дефис, разделяющий правую и левую часть в названии «2И-НЕ». Этот дефис непременный атрибут при инверсии на выходе (функции «НЕ»).

«ИЛИ» (OR) – функция выбора (если хотя бы на одном из входов – единица, то на выходе – единица, в противном случае на выходе всегда будет ноль). В алгебре-логике, элемент «ИЛИ» называют «дизъюнктор». Графическое обозначение элемента «2ИЛИ» и его таблица истинности приведены слева.

Самой распространённой микросхемой ТТЛ, выполняющей функцию «2ИЛИ», является ИМС К155ЛЛ1, внутри которой имеется четыре элемента «2ИЛИ». Нумерация выводов этой микросхемы показана справа.

Предположим, что нам в схеме необходим элемент, выполняющий функцию «2ИЛИ», но у нас есть в распоряжении только элементы «НЕ» и «2И-НЕ», тогда можно собрать схему, которая будет выполнять функцию «2ИЛИ»:

«ИЛИ-НЕ» (NOR) – функция выбора (если хотя бы на одном из входов – единица, то на выходе – ноль, в противном случае на выходе всегда будет единица). Как вы поняли, элемент «ИЛИ-НЕ» выполняет функцию «ИЛИ», а потом инвертирует его функцией «НЕ».

Графическое обозначение элемента «2ИЛИ-НЕ» и его таблица истинности приведена слева.

Самой распространённой микросхемой ТТЛ, выполняющей функцию «2ИЛИ-НЕ», является ИМС К155ЛЕ1, а микросхемами КМОП – К561ЛЕ5 и К176ЛЕ5, внутри которых имеется четыре элемента «2ИЛИ-НЕ». Нумерация выводов этих микросхем показана справа.

Предположим, что нам в схеме необходим элемент, выполняющий функцию «2ИЛИ-НЕ», но у нас есть в распоряжении только элементы «НЕ» и «2И-НЕ», тогда можно собрать следующую схему, которая будет выполнять функцию «2ИЛИ-НЕ»:

По аналогии с элементом «2И-НЕ», путём соединения входов элемента «2ИЛИ-НЕ» мы можем получить элемент «НЕ»:

«Исключающее ИЛИ» (XOR) — функция неравенства двух входов (если на обоих входах элемента одинаковые сигналы, то на выходе – ноль, в противном случае на выходе всегда будет единица). Операция, которую он выполняет, часто называют «сложение по модулю 2».

Графическое обозначение элемента «Исключающее ИЛИ» и его таблица истинности приведены слева.

Самой распространённой микросхемой ТТЛ, выполняющей функцию «Исключающее ИЛИ», является ИМС К155ЛП5, а микросхемами КМОП – К561ЛП2 и К176ЛП2, внутри которых имеется четыре элемента «Исключающее ИЛИ». Нумерация выводов этих микросхем показана справа.

Предположим, что нам в схеме необходим элемент, выполняющий функцию «Исключающее ИЛИ», но у нас есть в распоряжении только элементы «2И-НЕ», тогда можно собрать следующую схему, которая будет выполнять функцию «Исключающее ИЛИ»:

В цифровой схемотехнике процессоров главная функция — «Суммирование двоичных чисел», поэтому сложный логический элемент – «Сумматор» является неотъемлемой частью арифметико-логического устройства любого, без исключения процессора.

Составной частью сумматора является набор логических элементов, выполняющих функцию «Исключающее ИЛИ с переносом остатка».

Что это такое? В соответствии с наукой «Информатика», результатом сложения двух двоичных чисел, две единицы одного разряда дают ноль, при этом формируется «единица переноса» в следующий старший разряд, который участвует в операции суммирования в старшем разряде. Для этого в схему добавляется ещё один вывод «переноса» — «Р».

Графическое обозначение элемента «Исключающее ИЛИ с переносом» и его таблица истинности представлена слева.

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

По причине слабого спроса, промышленность таких логических элементов не выпускает.

Поэтому, в случае необходимости, функцию «Исключающее ИЛИ с переносом» можно собрать по следующей схеме из элементов «2И-НЕ» и «2ИЛИ-НЕ», которая активно применяется как внутри простых сумматоров, так и во всех сложных процессорах (в том числе Pentium, Intel-Core, AMD и других, которые появятся в будущем):

Вышеперечисленные логические элементы выполняют статические функции, а на основе них строятся более сложные статические и динамические элементы (устройства): триггеры, регистры, счётчики, шифраторы, дешифраторы, сумматоры, мультиплексоры.

Источник: https://meanders.ru/logicheskie_elementy.shtml

Архитектура ПЛИС. Часть 1. Логический элемент

Шауэрман Александр А. shamrel@yandex.ru

Для многих начинающих разработчиков ПЛИС представляется неким волшебным черным ящиком, который по мановению компилятора превращает исходный код в реально действующую схему. И кажется думать не нужно, что там внутри, пиши и пиши себе абстрактный код, особенно, если используется высокоуровневый язык, такой как Verilog.

Но первое отрезвление приходит, когда выясняется, что в том же Veriloge есть синтезируемое и не синтезируемое подмножество. Оказывается, не все возможности языка могут быть реализованы в железе. Второе отрезвление наступает, когда выясняется, что комбинация некоторых синтезируемых по отдельности выражений отказывается работать вместе.

Я помню свою по-детски наивную обиду, когда выяснилось, что одному регистру нельзя присвоить значение в различных блоках always. Или когда не удалось заставить always работать от положительного и от отрицательного фронта одного тактового сигнала. Хотя и то, и другое языком не запрещено и многие симуляторы запустят такой код.

Потому рано или поздно разработчик должен отказаться от концепции черного ящика и изучить аппаратные возможности и структуру ПЛИС.

Каждое семейство ПЛИС обладает своими особенностями архитектуры, однако нас в первую очередь будет интересовать семейство Cyclone IV, так как на нем выполнен отладочная плата LESO2.

В ПЛИС для конфигурации используется оперативная память CRAM (Configuration RAM). Эта память распределена по всему кристаллу, значения, записанные в нее, управляют внутренним коммутационным полем, определяя структуру синтезируемого цифрового устройства.

Как правило, в ПЛИС архитектуры FPGA эта память энергозависимая и при подаче питания на устройство требуется загрузить в нее значения из какого-либо внешнего (по отношению к кристаллу ПЛИС) носителя, часто для этих целей используется микросхема ПЗУ (Постоянное Запоминающее Устройство), либо микроконтроллер, а в случае стенда LESO2, загрузка осуществляется из компьютера.

Одной из важнейших характеристик ПЛИС является ее логическая емкость. Емкость определяет насколько сложные цифровые устройства можно синтезировать. Другими словами, логическая емкость показывает сколько всего поместится в кристалле.

Если вам уже доводилось компилировать в Quartus II проект для ПЛИС, то должны были обратить внимание на итоговый отчет, где указывается какие ресурсы и в каком количестве использованы в проекте, а также указывается процентное соотношение от максимального. Основной ресурс ПЛИС – это логические элементы (Logic Elements).

В ПЛИС EP4CE6E22C8, а именно такая использована в учебном стенде, таких элементов 6272. Это много или мало? Для того, чтобы ответить на это вопрос, следует рассмотреть, что же из себя представляет этот логический элемент.

Базовый логический элемент

Из булевой алгебры известно, что используя некий элементный базис, например элемент И-НЕ или ИЛИ-НЕ, можно реализовать любую логическую функцию.

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

Поэтому в ПЛИС структуры FPGA в качестве простейшего логического элемента используют более сложную структуру, представляющей собой соединение программируемого комбинационного устройства и D-триггера. На рисунке 1 показана упрощенная структура такого элемента.

Рисунок 1 – Обобщенная структура логического элемента (LE) ПЛИС

Ячейка имеет три логических входа DATAA, DATAB и DATAC, вход тактовых импульсов CLK и один выход LEOUT.

В случае если от ячейки требуется работа в качестве только комбинационного устройства, то выходной мультиплексор коммутирует выход элемента LUT на выход всей ячейки, если выход должен быть регистровым, то сигнал с LUT защелкивается по сигналу синхронизации в D-триггер, выход которого через мультиплексор соединяется с LEOUT. Управляющий вход мультиплексора (на рисунке не показан) подключен к соответствующему биту конфигурационной памяти CRAM.

Если ни у кого не вызывает вопросов как работает триггер и мультиплексор, то с элементом, обозначенным на схеме как LUT, все несколько сложнее.

Аббревиатура LUT расшифровывается как Look-Up Table или просто Lookup Table, что дословно можно перевести как “справочная таблица” или “таблица поиска”.

LUT – это больше, чем таблица, LUT – это скорее метод реализации функции, в котором непосредственное вычисление заменяется поиском по таблице готовых решений.

Применительно к ПЛИС это позволяет реализовать любую логическую функцию в виде памяти SRAM, где адрес – это аргумент, а содержимое ячейки – значение.

Таким образом, для того, чтобы описать логическую функцию трех переменных (в приведенном примере именно три переменные: DATAA, DATAB и DATAC) достаточно памяти на 8 ячеек. Требуемая таблица истинности хранится в виде маски (LUT-mask) в соответствущей ячейке CRAM. С помощью мультиплексоров выбирается нужное значение. Мультиплексорами управляют сигналы входных портов для построения k-входовой LUT (k-LUT), которая реализует любую логическую функцию из k переменных, требуется 2k бит SRAM и 2k-1 мультиплексоров. На рисунке ниже показана трехвходовая LUT.

Рисунок 2 – Устройство LUT

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

Хорошо! Используя логический элемент, показанный на рисунке 1, можно получить любую логическую функцию трех переменных и ее регистровый вариант.

А как быть, если нам понадобится реализовать какой-либо триггер, отличный от D-триггера? Для реализации некоторых типов достаточно имеющегося комбинационного устройства (LUT) на входе D-триггера, но для реализации всех известных триггеров нам все же придется внести некоторые изменения в базовую схему.

Во-первых, необходимо ввести обратную связь: для этого с выхода D-триггера подадим сигнал на один из входов LUT. Для того, чтобы достигнутый ранее функционал не пострадал, мы не имеем право занимать уже имеющиеся входа, заменим LUT на 4-х входовый.

Во-вторых, увеличим функциональность самого D-триггера, добавим дополнительные линии управления: вход разрешения ENA (от английского “Enable” – “Включить”) и вход асинхронного сброса ACLR (от английского “Asynchronous Clear” – “Асинхронная Очистка”). В результате получим схему пригодную для синтеза любых триггеров:

Рисунок 3 – Структура логического элемента (LE) с обратной связью

Существует особый широко распространенный класс логических функций, который подразумевает наличие двух выводов. Речь идет о сумматорах.

На вход полного двоичного сумматора поступает два операнда и флаг переноса из младшего разряда, а на выходе сумма и перенос в следующий двоичный разряд.

Так как арифметические задачи типичны для ПЛИС, для работы с переносом в базовом логическом элементе предусмотрен специальный канал.

Рисунок 4 – Структура логического элемента (LE) с каналом переноса

Фактически для переноса требуется ввести дополнительную LUT, как показано на рисунке 4, но для простоты восприятия комбинацию LUT будем рассматривать как один целый модуль.

Используя канал переноса, легко объединить ячейки для получения многоразрядного сумматора. На рисунке 5 показана схема 4-разрядного сумматора с последовательным переносом, построенная на четырех базовых логических элементах.

Рисунок 5 – Четырехразрядный сумматор

При разработке базовой логической ячейки решались две задачи: во-первых, синтезируемые устройства должны обладать максимальным быстродействием, во-вторых, использование ресурсов должно быть как можно более полным.

В предыдущем примере, если требуется работа сумматора исключительно как комбинационной схемы, выходные мультиплексоры сигнал возьмут с выходов LUT, а вся цепочка триггеров окажется неиспользованной.

В противоположность этому, при синтезе последовательного или параллельного регистра, все LUT будут по сути выполнять функцию проводника: соединять вход LE с входом D-триггера.

Небольшое дополнение к схеме, даст возможность при необходимости использовать комбинационное устройство и триггер элемента раздельно для синтеза независимых модулей. Мультиплексор на входе триггера позволит выбирать источник сигнала: либо с входа DATAC, либо с выхода LUT.

Кроме того, появляется возможность организовать дополнительный канал соединения триггеров соседних LE для увеличения быстродействия при построении последовательных регистров. На рисунке 6 показана схема получившегося логического элемента. Вход REGIN и выход REGOUT образуют выделенный канал для соединения триггеров, вход SLOAD (от английского “Synchronous Loading” – “Синхронная загрузка”) управляет выбором источника сигнала для входа триггера.

Рисунок 6 – Структура логического элемента (LE) с возможностью разделения LUT и триггера

Базовый логический ПЛИС Cyclone IV

Рассмотренный элемент LE в том или ином виде присутствует в различных семействах ПЛИС, в нем может быть увеличено количество входов и сложность LUT, добавлены дополнительные соединения внутри LE и порты для интеграции в глобальную коммутационную сеть ПЛИС.

Так, например, в топовом семействе Stratix IV в один элемент входит две шестивходовые LUT, два выделенных полных сумматора и четыре триггера! Однако, с практической точки зрения, для эффективной работы со стендом LESO2 нам целесообразно рассмотреть более подробно реализацию LE в семействах Cyclone, в частности в Cyclone IV.

На рисунке 7 показана схема логического элемента ПЛИС Cyclone IV.

Рисунок 7 – Логический элемента (LE) Cyclone IV

Также, как и в базовом логическом элементе, каждый триггер имеет вход данных, вход тактовых импульсов CLK, вход разрешения ENA и вход асинхронного сброса (очистки) ACLR.

Добавился сигнал синхронной очистки SCLR (от английского “Synchronous Clear” – “Асинхронная Очистка”): если на этом входе появится логическая единица, то следующим тактовым импульсом в триггер будет записал логический ноль.

Все это позволяет настроить программируемый триггер каждой LE на работу в режиме D, T, JK или RS триггера.

Комбинационное устройство по сравнению с базовой схемой получило некоторое усложнение. На входе C LUT мультиплексор выбирает источник сигнала, благодаря чему LUT может реализовывать логическую функцию четырех переменных, кроме того, в качестве переменной может быть использован флаг переноса или выход собственного триггера.

В Cyclone IV LUT может работать в двух режимах: нормальном и арифметическом. Quartus II при компиляции автоматически выберет оптимальный режим для реализации требуемой функции. Нормальный режим предназначен для реализации основной логики и различных комбинационных функций.

В этом режиме четыре входа LE (DATAA, DATAB, DATAC, DATAD) поступают на четыре входа LUT. Компилятор автоматически выбирает вход переноса CIN, вход DATAC или выход триггера (цепь обратной связи) в качестве одного из входов LUT.

Арифметический режим подходит для синтеза сумматоров, счетчиков, аккумуляторов и компараторов (цепей сравнения). В этом режиме LUT представляет собой полный одноразрядный сумматор, включающий обработчик логики флага переполнения.

Компилятор сам создает цепи переноса во время синтеза многоразрадных арифметических устройств.

Можно обратить внимание, что на рисунке логического элемента Cyclone IV отсутствует выходной мультиплексор, на самом деле он есть и не один. Но для того, чтобы понять логику их работы, нужно рассмотреть LE в контексте общей архитектуры ПЛИС.

Логические элементы LE объединяются в логические блоки LAB (Logic array blocks). В Cyclone IV каждый LAB содержит:

  • 16 логических ячеек;
  • сигналы управления LAB;
  • цепи флага переноса LE;
  • цепи каскадного объединения регистров;
  • цепи локальных соединений.

Цепи локальных соединений передают сигналы между ячейками LE в одном LAB. Цепи объединения регистров соединяют выход регистра одного LE с входами регистров прилегающих ячеек LE. Компилятор Quartus II размещает связанную логику в LAB или в соседних LAB, позволяя использовать локальные цепи связи и связи регистров для увеличения производительности и эффективности размещения.

На цепи локальных соединений поступают сигналы со строк и столбцов глобального коммуникационного поля и с выходов ячеек LE, принадлежащих этому же блоку LAB.

Соседние логические блоки, блок генератора с фазовой автоподстройкой частоты (PLL), ячейки памяти M9K RAM, встроенные умножители, расположенные с правой или левой стороны через специальные соединители, могут быть напрямую подключены к цепям локальных соединений LAB.

Таким образом, любая ячейка LE может иметь соединение с шестнадшатью LE из своего блока (включая саму себя) и тридцатью двумя LE из LAB, расположенных слева или справа.

Всего до 48-ми соединений! Такие непосредственные прямые соединения минимизируют использование глобальных маршрутов, обеспечивают большую гибкость при синтезе схемы и увеличивают общее быстродействие.

На рисунке 8 показана интеграция блока LAB в глобальную коммуникационную сеть ПЛИС.

Рисунок 8 – Структура соединений LAB в коммутационном поле ПЛИС

Каждый LE имеет три выхода, которые обеспечивают соединение с коммутационным полем ПЛИС. Эти выходы поступают на строки и столбцы глобальных соединительных трасс и на маршруты локальных соединений. Как и в базовом логическом элементе, LUT или триггер могут независимо управлять этими выходами.

Для того, чтобы можно было управлять всеми ячейками LE в пределах одного LAB одновременно, в логический блок встроена специальная логика и выделены особые линии – каналы управления. По таким каналам распространяются широковещательные (в пределах одного LAB) сигналы управления. Архитектура позволяет одновременно использовать до восьми управляющих сигналов:

  • два тактовых сигнала (labclk1 и labclk2);
  • два сигнала разрешения (labclkena1 и labclkena2);
  • два сигнала асинхронного сброса (labclr1 и labclr2);
  • сигнал синхронного сброса/очистки (synclr);
  • сигнал синхронной загрузки (syncload).

Сигналы синхронной загрузки и сброса удобно использовать для синтеза различных счетчиков и регистров. Эти сигналы оказывают воздействие на все триггеры LE в пределах одного LAB.

На рисунке 9 показано подключение управляющих сигналов LAB и цепей локальных соединений к логической ячейке. Выводы LE соответствуют рисунку 7.

Рисунок 9 – Структура взаимодействия LE с сигналами управления

Каждый LAB имеет два тактовых сигнала и два сигнала разрешения. На уровне логического элемента выбирается какой сигнал будет подан на триггер, но тактовый сигнал связан с сигналом разрешения.

Поэтому, хотя для любого LE в конкретной LAB можно выбрать какой тактовый сигнал использовать: labclk1 или labclk2, вместе с ним должен использоваться соответствующий сигнал разрешения. Например, если используется labclk1, вместе с ним будет использоваться только labcken1.

Если LAB использует оба фронта (нарастающий и падающий) тактового сигнала, то будут задействованы оба канала тактирования, при этом логика выбора усложнится.

Chip Planer

После компиляции в окне Flow Summary можно посмотреть, какие ресурсы были использованы. После небольшого экскурса в архитектуру ПЛИС становился понятно, что значит Total logic elements и почему Total combinational function вынесено отдельной графой. Безусловно информация полезная, но для того, чтобы держать руку на пульсе этого явно недостаточно.

Рисунок 10 – Отчет компиляции

Для визуального контроля используемых ресурсов в Quartus II применяется утилита Chip Planer. Она показывает расположение и использование элементарных блоков в общей архитектуре целевой ПЛИС. Запустить Chip Planer можно из среды Quartus: меню Tools -> Chip Planer.

На карте кристалла (рисунок 11) показаны все ресурсы ПЛИС: LE, объединенные в LAB, аппаратные умножители (DSP block), ячейки памяти, буферы ввода вывода, генераторы PLL. Цветом показана степень использования: светлым – неиспользуемые блоки, темным – максимально загруженные.

Если увеличить масштаб (соответствующий инструмент на панел или ctrl+колесико мышки), то доступна детализация на уровне LE, здесь синим показан LUT, темно красным – триггер.

Большую детализацию можно получить если на панели Layers Settings сменить Basic на Detailed. В этом режиме при приближении видны локальные и глобальные цепи соединений, глобальные линии управления и управляющие сигналы LAB.

Рисунок 11 – Карта ресурсов ПЛИС

Если в LE выделить LUT или триггер, то на панели Node Properties можно увидеть схему LE и описание свойств и режимов работы. Двойной клик мыши по LUT или триггеру запустит в новом окне инструмент Resource Property Editor, в котором можно исследовать соединения внутри логического элемента. Синим выделены используемые цепи.

Рисунок 12 – Логический элемент в Resource Property Editor

Вместо заключения

Это далеко не полное описание архитектуры ПЛИС, за кадром остались такие важнейшие элементы как DSP блоки (умножители), блоки оперативной памяти, генератор PLL, буферы ввода-вывода, в последующих статьях цикла я постараюсь уделить им должное внимание. Однако следующий материал будет посвящен применению знаний о структуре логического элемента LE и об их объединении при проектировании простейших цифровых устройств.

Вторая статья цикла: Архитектура ПЛИС. Часть 2. Мультиплексор

Литература

Cyclone IV Device Handbook

White Paper: FPGA Architecture

Источник: http://www.labfor.ru/articles/fpga_arch_le

Простейшие логические элементы

Логические элементы

Рассматриваются принципы работы, характеристики и типовые схемы включения простейших логических элементов — инверторов, буферов, элементов И и ИЛИ, а также приводятся схемотехнические решения, позволяющие реализовать на их основе часто встречающиеся функции.

Простейшие логические элементы

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

Логические элементы (или, как их еще называют, вентили, “gates”) — это наиболее простые цифровые микросхемы. Именно в этой простоте и состоит их отличие от других микросхем. Как правило, в одном корпусе микросхемы может располагаться от одного до шести одинаковых логических элементов. Иногда в одном корпусе могут располагаться и разные логические элементы.

Обычно каждый логический элемент имеет несколько входов (от одного до двенадцати) и один выход. Все входы равноправны. При этом связь между выходным сигналом и входными сигналами (таблица истинности) предельно проста. Каждой комбинации входных сигналов элемента соответствует уровень нуля или единицы на его выходе.

Никакой внутренней памяти у логических элементов нет, поэтому они относятся к группе так называемых комбинационных микросхем.

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

Главные достоинства логических элементов, по сравнению с другими цифровыми микросхемами, — это их высокое быстродействие (малые времена задержек), а также малая потребляемая мощность (малый ток потребления).

Поэтому в тех случаях, когда требуемую функцию можно реализовать исключительно на логических элементах, всегда имеет смысл проанализировать этот вариант. Недостаток же их состоит в том, что на их основе довольно трудно реализовать сколько-нибудь сложные функции.

Поэтому чаще всего логические элементы используются только в качестве дополнения к более сложным, к более “умным” микросхемам. И любой разработчик обычно стремится использовать их как можно меньше и как можно реже.

Существует даже мнение, что мастерство разработчика обратно пропорционально количеству используемых им логических элементов. Однако это верно далеко не всегда.

Инверторы

Самый простой логический элемент — это инвертор (логический элемент НЕ, “inverter”), уже упоминавшийся ранее.

Инвертор выполняет простейшую логическую функцию — инвертирование, то есть изменение уровня входного сигнала на противоположный. Он имеет всего один вход и один выход. Выход инвертора может быть типа 2С или типа ОК. На рис. 3.

1 показаны условные обозначения инвертора, принятые у нас и за рубежом, а в табл. 3.1 представлена таблица истинности инвертора.

Рис. 3.1. Условные обозначения инверторов: зарубежные (слева) и отечественные (справа)

В одном корпусе микросхемы обычно бывает шесть инверторов. Отечественное обозначение микросхем инверторов — “ЛН”. Примеры: КР1533ЛН1 (SN74ALS04) — шесть инверторов с выходом 2С, КР1533ЛН2 (SN74ALS05) — шесть инверторов с выходом ОК.

Существуют также инверторы с выходом ОК и с повышенным выходным током (ЛН4), а также с повышенным выходным напряжением (ЛН3, ЛН5). Для инверторов с выходом ОК необходимо включение выходного нагрузочного резистора pull-up.

Его минимальную величину можно рассчитать очень просто: R

Таблица 3.1. Таблица истинности инвертора
Вход Выход

Две основные области применения инверторов — это изменение полярности сигнала и изменение полярности фронта сигнала (рис. 3.2).

То есть из положительного входного сигнала инвертор делает отрицательный выходной сигнал и наоборот, а из положительного фронта входного сигнала — отрицательный фронт выходного сигнала и наоборот.

Еще одно важное применение инвертора — буферирование сигнала (с инверсией), то есть увеличение нагрузочной способности сигнала. Это бывает нужно в том случае, когда какой-то сигнал надо подать на много входов, а выходной ток источника сигнала недостаточен.

Рис. 3.2. Инверсия полярности сигнала и инверсия полярности фронта сигнала

Именно инвертор, как наиболее простой элемент, чаще других элементов используется в нестандартных включениях. Например, инверторы обычно применяются в схемах генераторов прямоугольных импульсов (рис. 3.3), выходной сигнал которых периодически меняется с нулевого уровня на единичный и обратно.

Все приведенные схемы, кроме схемы д, выполнены на элементах К155ЛН1, но могут быть реализованы и на инверторах других серий при соответствующем изменении номиналов резисторов. Например, для серии К555 номиналы резисторов увеличиваются примерно втрое.

Схема д выполнена на элементах КР531ЛН1, так как она требует высокого быстродействия инверторов.

Рис. 3.3. Схемы генераторов импульсов на инверторах

Схемы а, б и в представляют собой обычные RC-генераторы, характеристики которых (выходную частоту, длительность импульса) можно рассчитать только приблизительно. Для схем а и б при указанных номиналах резистора и конденсатора частота генерации составит порядка 100 кГц, для схемы в — около 1 МГц.

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

Схема г используется для кварцевого резонатора, работающего на первой (основной) гармонике. Величину емкости можно оценить по формуле:

C>1/(2RF)

где F — частота генерации. Схема д применяется для гармониковых кварцевых резонаторов, которые работают на частоте, большей основной в 3, 5, 7 раз (это бывает нужно для частот генерации выше 20 МГц).

Рис. 3.4. Использование инверторов для задержки сигнала

Инверторы также применяются в тех случаях, когда необходимо получить задержку сигнала, правда, незначительную (от 5 до 100 нс). Для получения такой задержки последовательно включается нужное количество инверторов (рис. 3.4, вверху). Суммарное время задержки, например, для четырех инверторов, можно оценить по формуле

tЗ = 2tPHL + 2tPLH

Правда, надо учитывать, что обычно реальные задержки элементов оказываются существенно ниже (иногда даже вдвое), чем табличные параметры tPHL и tPLH. То есть о точном значении получаемой задержки говорить не приходится, ее можно оценить только примерно.

Для задержки сигнала используются также конденсаторы (рис. 3.4, внизу). При этом задержка возникает из-за медленного заряда и разряда конденсатора (напряжение на конденсаторе — UC). Схема без резистора (слева на рисунке) дает задержку около 100 нс.

В схеме с резистором (справа на рисунке) номинал резистора должен быть порядка сотен Ом. Но при выборе таких схем с конденсаторами надо учитывать, что некоторые серии микросхем (например, КР1533) плохо работают с затянутыми фронтами входных сигналов.

Кроме того, надо учитывать, что количество времязадающих конденсаторов в схеме обратно пропорционально уровню мастерства разработчика схемы.

Наконец, еще одно применение инверторов, но только с выходом ОК, состоит в построении на их основе так называемых элементов “Проводного ИЛИ”.

Для этого выходы нескольких инверторов с выходами ОК объединяются, и через резистор присоединяются к источнику питания (рис. 3.5). Выходом схемы является объединенный выход всех элементов.

Такая конструкция выполняет логическую функцию ИЛИ-НЕ, то есть на выходе будет сигнал логической единицы только при нулях на всех входах. Но о логических функциях подробнее будет рассказано далее.

Рис. 3.5. Объединение выходов инверторов с ОК для функции ИЛИ-НЕ

В заключение раздела надо отметить, что инверсия сигнала применяется и внутри более сложных логических элементов, а также внутри цифровых микросхем, выполняющих сложные функции.

Дата добавления: 2017-06-13; просмотров: 1307;

Источник: https://poznayka.org/s92907t1.html

Логические элементы

  • Алгебра логики
  • Логические элементы
  • Построение комбинационных схем
  • Арифметико-логическое устройство
  • Моделирование памяти.

    Триггер

  • Вопросы и упражнения
  •     Логический элемент ИЛИ предназначен для “вычисления” значения логического сложения. Работа этого логического элемента эквивалентна проверке составного условия со служебным словом “или”.

    Алгоритм работы логического элемента “или” записывается следующим образом: “Если А=1 или В=1, то f(А,В)=1, иначе f(А,В)=0”.     Логический элемент И предназначен для “вычисления” значения логического умножения.

    Работа этого логического элемента эквивалентна проверке составного условия со служебным словом “и”. Алгоритм работы логического элемента “и” записывается следующим образом: “Если А=1 и В=1, то f(А,В)=1, иначе f(А,В)=0”.

        Изображение логических элементов И на функциональных и принципиальных схемах выглядит так:

        Логические элементы НЕ изображаются с кружком, который называется индикатором уровня сигнала.

        Итак, нам известны три основных логических элемента И, ИЛИ, НЕ. Сигналы, вырабатываемые одним логическим элементом, можно подавать на вход другого элемента – это даёт возможность образовывать цепочки из отдельных логических элементов.
        Например:

        Каждую такую цепочку называют логическим устройством, а соответствующую схему – функциональной схемой. Функциональную схему, которую полностью можно описать таблицей истинности, называют комбинационной схемой.

         Комбинационная схема – это схема, в которой значения входных переменных в текущий момент времени полностью определяют значения выходных переменных.
        Комбинационные схемы строятся из элементарных логических элементов И, ИЛИ, НЕ, и более сложных элементов И-НЕ, ИЛИ-НЕ и др.

    , соединяя их так, как это следует из логической функции. Рассмотрим элементы И-НЕ и ИЛИ-НЕ:

        Логическая функция И-НЕ, которая представляет собой отрицание логического умножения, называется операцией Шеффера и кратко может быть записана в следующем виде:

        Логическая функция ИЛИ-НЕ, т.е. отрицание логического сложения, носит название «стрелка Пирса» и обозначается так:

        Связь операций И-НЕ и ИЛИ-НЕ с основными операциями алгебры логики устанавливается законами, открытыми английским математиком Августусом де Морганом (1806-1871) и поэтому носящими его имя. Первый из них устанавливает, что отрицание логического умножения равносильно сумме отрицаний сомножителей:

        Второй закон показывает, что отрицание логического сложения равносильно произведению отрицаний слагаемых:

        Законы де Моргана сведены в таблицу законов алгебры логики.

    Источник: http://infolike.narod.ru/logic2.html

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}