Корпорация altera начинает поставки интегральной схемы fpga семейства cyclone® v socs

Новости: Компания Altera начинает поставки ПЛИС Cyclone V

13.04.2012

Cyclone V – самые малопотребляющие и недорогие ПЛИС, выполненные по 28-нм технологии, доступные на сегодняшнем рынке. Обьединяя высокую функциональность и низкую стоимость в сочетании с малым потреблением энергии, данное семейство идеально подходит для применения в промышленности, проводных и беспроводных технологиях, военной и автомобильной промышленности.

Cyclone V обеспечивают снижение полной мощности до 40% и до 30% статической по сравнению с продуктами предыдущего поколения и предлагают последовательные приемопередатчики с потребляемой мощностью 88 мВт на канал при скорости 5 Гбит и производительностью обработки более 4000 MIPS при питании менее 1,8 Вт.

Дополнительно, семейство включает в себя большое изобилие аппаратных IP-блоков, таких как контроллеры памяти DDR3 (400 МГц) и PCI express 2-го поколения с многофункциональной поддержкой, что позволит инженеру сократить время разработки и уменьшить стоимость системы.

Для защиты интеллектуальной собственности семейство ПЛИС Cyclone V включает в себя комплексную защиту конструкции с такими функциями как стандарт шифрования Advanced Encryption Standard (AES) 256 бит с энергозависимыми и энергонезависимыми ключами.

О ПЛИС Cyclone V

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

  • только логика – Е;
  • 3,125 Гбит/с трансиверы – GX;
  • 5 Гбит/с трансивер – GT;
  • варианты ПЛИС SE, SX и ST со встроенными двумя ядрами системы HPS (Hard Processor System) на основе ARM®.

Разработаны для конкретных потребностей

Линейка 28-нм ПЛИС компании Altera продставляет собой комплексный набор устройств, специально разработанных для удовлетворения разнообразных требований разработчика. Вся линейка продукции предоставляет заказчикам чётко дифференцированные решения на основе семейств Arria V, Cyclone V, Stratix V и HardCopy ASIC V.

Делая упор на технологический процесс, архитектуру, технологии трансиверов и аппаратных IP блоков, данная линейка ПЛИС Altera позволяет разработчиками добиться уникальных характеристик по стоимости, производительности и низкому энергопотреблению с меньшими затратами времени и усилий. Более подробная информация о 28-нм продукции компании Altera: http:// www.altera.com/28nmportfolio

ООО “Виаком” является авторизованным дистрибьютором продукции компании Altera на территории Украины

Более подробную информацию о ПЛИС Altera Corporation можно получить у инженера-консультанта ООО “Виаком” по данному направлению, Игоря Ковриги, тел. +38-044-507-02-02 (добавочный № 130), e-mail: igor.kovryga@biakom.com или на сайте компании Altera: www.altera.com/28nmportfolio.

Каталог интегральных микросхем программируемой логики в интернет-магазине ООО “Виаком”: http://biakom.com/t/3814/

Источник: http://biakom.com/news/322/

Архитектура ПЛИС (FPGA)

ПодробностиКатегория: РазноеСоздано 20 Январь 2014Автор: Николай КовачПросмотров: 121277

FPGA – это сокращение от английского словосочетания Field Programmable Gate Array.

ПЛИС – это сокращение от словосочетания «Программируемая Логическая Интегральная Схема». Слово ПЛИС встречается в русскоязычных документациях и описаниях вместо слова FPGA. Далее по тексту в основном будет использоваться этот термин – ПЛИС. 

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

Логика работы ПЛИС определяется не на фабрике изготовителем микросхемы, а путем дополнительного программирования (в полевых условиях, field-programmable) с помощью специальных средств: программаторов и программного обеспечения.

Микросхемы ПЛИС – это не микропроцессоры, в которых пользовательская программа выполняется последовательно, команда за командой. В ПЛИС реализуется именно электронная схема, состоящая из логики и триггеров.

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

В любом случае, и графическое и текстовое описание проекта реализует цифровую электронную схему, которая в конечном счете будет «встроена» в ПЛИС.

Обычно, сама микросхема ПЛИС состоит из:

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

Строго говоря это не полный список. В современных ПЛИС часто бывают встроены дополнительно блоки памяти, блоки DSP или умножители, PLL и другие компоненты. Здесь, в этой статье я их рассматривать не буду.

Разработчик проекта для ПЛИС обычно абстрагируется от внутреннего устройства конкретной микросхемы. Он просто описывает желаемую логику работы «своей» будещей микросхемы в виде схемы или текста на Verilog/ VHDL.

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

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

Классификация ПЛИС по типу хранения конфигурации.

SRAM-Based.Это одна из самых распространенных разновидностей ПЛИС. Конфигурация ПЛИС хранится ячейках статической памяти, изготовленной по стандартной технологии CMOS.

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

Flash-based.
В таких микросхемах хранение конфигурации происходит во внутренней FLASH памяти или памяти типа EEPROM. Такие ПЛИС лучше тем, что при выключении питания прошивка не пропадает. После подачи питания микросхема опять готова к работе.

Однако, у этого типа ПЛИС есть и свои недостатки. Реализация FLASH памяти внутри CMOS микросхемы – это не очень просто. Требуется совместить два разных техпроцесса для производства таких микросхем. Значит они получаются дороже.

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

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

Недостаток – собственно программировать / прошивать чип можно только один раз. После этого исправить уже ничего нельзя. Сам процесс прошивки довольно не быстрый.

Зато есть масса достоинств у таких ПЛИС: они довольно быстрые (могут работать на больших частотах), меньше подвержены сбоям при радиации – все из-за того, что конфигурация получается в виде перемычек, а не в виде дополнительной логики, как у SRAM-based.

Конфигурируемые логические блоки.

В документации компании Альтера встречается выражение Logic Array Block (LAB) – массив логики. У компании Xilinx в микросхемах ПЛИС есть примерно такие же блоки – Configurable Logic Block (CLB). Конфигурируемый логический блок – это базовый элемент в ПЛИС, в нем может быть выполнена какая-то простая логическая функция или реализовано хранение результата вычисления в регистрах (триггерах).

Сложность и структура конфигурируемого логического блока (CLB) определяется производителем.

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

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

Источник: https://marsohod.org/index.php/ourblog/11-blog/265-fpga

Поднимаем SOC: ARM + FPGA

На днях ко мне в руки попала EBV SoCrates Evaluation Board. В двух словах — это плата с SoC от фирмы Altera, на борту которой есть двухъядерный ARM и FPGA Cyclone V.

ARM и FPGA на одном чипе — это должно быть очень интересно! Но для начала всё это добро нужно «поднять».

Об этом процессе я и поведаю в данной статье.

Восьмиядерный процессор Xeon Корпорация Intel планирует включить в состав своих чипов Xeon программируемую пользователем вентильную матрицу (FPGA).

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

Другими словами, это позволит каждому пользователю создавать на кристалле Xeon собственный сопроцессор, заточенный под конкретные задачи. Чип Xeon+FPGA будет использовать сокет LGA2011.<\p>

Если вам в руки попала такая или подобная плата и вы не до конца уверены, что же с ней нужно делать.

Если вы всегда думали, что FPGA — это что-то сложное и непонятно, как к этому подступиться. Или вы просто любопытный инженер. Тогда заходите. Мы всем рады.

А в качестве маленького бонуса измерим пропускную способность между CPU и FPGA.

Наш план состоит из следующих пунктов:

  • Получение прошивки FPGA
  • Сборка ядра
  • Сборка U-Boot и Preloader
  • Сборка rootfs
  • Написание тестовых программ
  • Создание SD-карты
  • Запуск платы и измерение пропускной способности

Поехали! Первым делом нам нужно получить прошивку FPGA. Из инструментов для этого понадобится САПР Quartus, скачать его можно на официальном сайте Описывать установку не буду — там всё достаточно очевидно. Создание проекта

Запускаем Quartus, идём в File -> New Project Wizard, жмём Next, заполняем директорию и название проекта:

Название проекта Следующую страницу пропускаем, потом идёт выбор семейства и типа ПЛИС.

Выбор ПЛИС

Остальные настройки для нас не важны, жмём Finish. Проект Qsys Qsys — отличный инструмент для начинающих. Позволяет получить прошивку, не написав ни строчки кода. Вместо этого разработчик собирает конструктор из заранее заданных кубиков (IP-корок). Требуется только правильно настроить каждую корку и соединить их должным образом.

Итак, Tools -> Qsys, в левом окне (IP Catalog) нам потребуются две IP-корки:

  • Processors and Peripherals -> Hard Processor Systems -> Arria V / Cyclone V Hard Processor System
  • Basic Functions -> On Chip Memory -> On Chip Memory (RAM or ROM)

Hard Processor System (HPS) — это наш ARM. С его настроек и начнем.

На первой вкладке нас интересует HPS-to-FPGA interface width, чтобы мы имели доступ из CPU ко внутренней памяти FPGA:

FPGA Interfaces Дальше идёт куча настроек для различных интерфейсов — в каких режимах работают, какие пины используются:

Peripheral Pins

Следующая вкладка — настройка клоков. В Inputs Clocks оставляем всё без изменений:
Input Clocks
В Output Clocks ставим галку на Enable HPS-to-FPGA user 0 clock:
Output clocks Потом идёт большой подраздел с различными настройками для DDR3 памяти.

DDR3 PHY Setting

DDR3 Memory Parameters
DDR3 Memory Timing
DDR3 Board Settings
С HPS мы разобрались, переходим к настройке On-Chip памяти. Это память, которая расположена непосредственно внутри ПЛИС. Настроек тут значительно меньше:

On-Chip Memory

Теперь нужно соединить блоки между собой. Всё достаточно интуитивно (обратите внимание на значение базового адреса напротив s1):
Qsys Connections
Готово. Сохраняем (File -> Save) под именем soc.

Осталось сгенерировать файлы. Кнопка Generate HDL, в появившемся окне опять жмём Generate, ждём, Finish.

Компиляция проекта Теперь нужно добавить сгенерённые файлы в проект:

Assignments -> Settings вкладка Files, добавляем файл soc/synthesis/soc.qip

Нужно применить настройки для DDR пинов. Но перед этим нужно выполнить первую стадию компиляции:

Processing -> Start -> Start Analysis & Synthesis

Запускаем скрипт для настройки пинов:

Tools -> Tcl Scripts. В появившемся окне выбираем Project -> soc -> synthesis -> submodules -> hps_sdram_p0_pin_assignments.tcl, Run.

Финальная компиляция проекта:

Processing -> Start Compilation

Мы получили файл soc.sof c прошивкой FPGA. Но мы хотим прошивать ПЛИС прямо из CPU, поэтому нам понадобится другой формат. Выполним конвертацию. Это можно делать и из GUI, но в консоле проще. Да и вообще, пора уже отвыкать от GUI :).

Для конвертации надо запустить терминал и перейти в директорию с нашим проектом. Далее перейти в output_files и выполнить команду (не забываем, что директория с утилитами Quartus дожна быть в переменной PATH):

quartus_cpf -c soc.sof soc.rbf Ура! Мы получили прошивку FPGA. Теперь соберём ядро для нашего ARM.

Из инструментов потребуется Altera SoC EDS. Отсюда мы будет брать компилятор arm-linux-gnueabihf- для кросс-компиляции.

Выкачиваем ядро: git clone https://github.com/coliby/terasic_MTL.git

Запускаем скрипт, который добавит в PATH директории с компилятором и запустит bash:

/opt/altera/quartus14.0/embedded/embedded_command_shell.sh Устанавливаем переменные окружения: export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf- export LOADADDR=0x8000 Переходим в директорию с ядром и выполняем конфигурацию: cd terasic_MTL/ make socfpga_defconfig

Cобираем образ ядра для U-Boot:

make -j 4 uImage

Теперь нам нужно получить так называемый .dtb (Device Tree Blob) файл. Это бинарный файл, содержащий информацию о платформе — интерфейсы, пины, тактовые сигналы, адресное пространство и т.д. Ядро читает этот файл во время инициализации и вносит в неё изменения. Это позволяет использовать одно собранное ядро на нескольких аппаратных платформах.

Итак, получаем .dtb файл: make socfpga_cyclone5.dtb

Но этот файл не для нашей платформы, поэтому нам придётся внести в него небольшие изменения. Для этого конвертируем файл в текстовый формат .dts (Device Tree Source):

./scripts/dtc/dtc -I dtb -O dts -o soc.dts arch/arm/boot/dts/socfpga_cyclone5.dtb

Теперь в soc.dts нужно удалить блок bridge@0xff200000. Это можно сделать либо руками, либо наложив патч:

patch soc.dts dts.patch

dts.patch942,966d941 < bridge@0xff200000 { < compatible = "altr,h2f_lw_bridge-1.0", "simple-bus"; < reg =

Источник: http://odnako.su/hi-tech/pc-hardware/-166672-podnimaem-soc-arm–fpga/

Сделай шаг к ПЛИС!

А зачем оно мне?

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

Ты берешь другой МК, более мощный из той же линейки, но опять мануалы, регистры флагов, биты… ад. Меняешь платформу: переходишь на другой МК и выкидываешь на помойку свои знания по прежней платформе. Что бы ты не делал — оно дается тяжело.

Ты находишь популярную платформу, в которой можно легко из компонентов собирать проект, но выше аппаратных ограничений данного МК все равно не удается прыгнуть… Где-то на краешке сознания иногда проскакивает мысль, что вот на ПЛИС это бы точно заработало быстро и параллельно, что это «именно та задача, которую бы надо решать на плис», но я стар/глуп/занят/etc чтобы суметь/начать такое делать.

Хочешь наконец вздохнуть свободно? Идем дальше!

Радость от разработки на ПЛИС

У меня был тяжелый рабочий день. С одной работы я приехал на вторую работу, потом на дачу, вечером домашние дела, уроки, потом семейный просмотр кино и только в 23 часа я оказался совершенно свободен! Сказать, что я был уставший — ничего не сказать.

Но в таком состоянии я сел за ноут с твердой целью: сделать генератор меандра на 440 Гц. Прошло 20 минут и я уже слышал его в наушниках. Я не верил своим ушам! Еще 15 минут мне потребовалось, чтобы сделать ШИМ и менять громкость.

К тому времени плата с ПЛИС у меня была всего с неделю и до этого я пролистал всего пару книг по Verilog.

В тот вечер я понял: ВОТ ОНО! Вот та платформа, в которой я быстро и легко могу превращать свои мысли в реально работающее железо!

Почему так?

Опишу плюсы, которые есть в изучении и применении ПЛИС, хотя их и так все знают:

  • Универсальность знаний — при смене модели МК нужно читать доки. При смене производителя МК нужно читать доки. Нужно постоянно читать доки, постоянно держать в голове кучу информации. При разработке на ПЛИС, если знаешь Verilog или VHDL, то можно не только программировать любой ПЛИС из линейки одного производителя, но и при желании перейти на другого (Altera, Xilinx). Хоть и будут моменты с освоением другой среды разработки, тонких аппаратных моментов, но сама суть подхода проектирования устройств на HDL от этого не изменится.
  • От идеи к железу — при разработке проекта, если тебе не хватает одного мк, то приходится выбирать другой. В принципе можно строить предположения справится или не справится этот МК с проектом. Либо есть какой-то конкретный МК и ты пытаешься туда вместить проект. Чаще всего именно так. Мне это чем-то напоминает подход моего деда, который делает лестницу из того, что есть в сарайке. Хотя можно спроектировать лестницу, купить досок, которые подойдут… От идеи к железу, а не наоборот.
  • Простота применения чужих разработок — можно взять чужой модуль и применить его в своем проекте. По коду сможете понять, как он работает. Даже, если он для xilinx, а вы делаете под altera. Иногда это получается не сарзу, но это проще, чем, например, добавлять двоичные библиотеки к проекту на c++/Qt
  • Независимость блоков. Блоки в HDL, как чистые фунции в ЯП. Зависят только от входных сигналов. Разработанный и отлаженный модуль в будет и дальше работать правильно, как бы не рос проект. Ничто снаружи не повлияет на правильность его работы изнутри. Да и вообще можно забыть, как он работает — это черный ящик. К тому же, блоки работают параллельно.

Проблема выбора

Сильно останавливают вопросы, что выбрать: Altera/Xilinx, Verilog/VHDL, какую отладочную плату взять. Но обо всем по порядку.

Производитель

Я выбрал Altera. Почему? Ну мы вот так с другом решили, хотя название Xilinx мне красивее. НО. Если ты сейчас не можешь выбрать, то я сделаю это за тебя. Тебе нужен Altera! Почему? Я не знаю. Сейчас важнее сделать шаг: сделать выбор. Я выбрал Altera и пока не пожалел.

Язык

Берем Verilogпотомучто… ну ты понял.

Отладочная плата

На выбор отладочной платы ушло больше всего времени. Понятно, что платы отличаются установленной микросхемой ПЛИС. А микросхемы ПЛИС отличаются друг от друга количеством элементов.

Но совершенно не понятно, сколько их потребуется для твоих тестовых проектов.

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

В семействе Altera, за разумные деньги мы можем купить платы с CPLD MAX II на 240, 570 и 1270 элементов, либо более старшие микросхемы FPGA, которые Cyclone 1, 2, 3, 4 с количеством до 10000 и более ячеек. Как же выбрать?

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

С другой стороны, существуют проекты, которые полностью программируются под аппаратную копию определенного ПК, включая процессор и всю логику вокруг него (NES, Speccy, Orion, ЮТ-88, etc). Для этого уже требуется пять, десять и более тысяч ячеек.

Плюс эти платы содержат дополнительные внешние устройства.

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

На отладочной плате лишние ячейки это не страшно, а если их не хватит — уже ничего не поделаешь.

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

То, чем действительно отличаются MAX от Cyclone'ов, кроме количества ячеек, это: 1) У серии MAX внутри нет PLL. На каждой отладочной плате есть генератор, как правило на 50 МГц. Основной массе проектов этого будет достаточно.

Все синхронизации будут происходить путем деления 50 МГц на какое-нибудь значение. Либо, можно взять внешний генератор и подать на отдельный вход ПЛИС. А что, если потребуется частота выше 50 МГц? Мне не удалось с ходу найти генераторы выше 50 МГц.

Но тут как раз на помощь и приходит PLL, который встроен в Циклоны. На нем можно умножить частоту, например, до 100 МГц.

2) В серии Cyclone встроены аппаратные блоки умножения. Их количество зависит от конкретной модели — тут как раз можно «всетаки заглянуть в инструкции», чтобы узнать сколько. Если предполагаете делать какой-то ЦОС, то они пригодятся: сэкономят ячейки, увеличат скорость. С другой стороны, если нет умножителей, их можно синтезировать, но у маленькой ПЛИС на это может не хватить ресурсов.

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

Сколько нужно денег?

Программатор
Я считаю, что у меня нет времени, чтобы паять программаторы на рассыпухе.

300 рублей. Я свой брал на ебее, выглядит так:

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

Начальный уровень 350 — 550 рублей. Это платы на MAX II (240 или 570 ячеек). Могут подойти для начального ознакомления и дальнейшего пристройства в конечные устройства. На плате есть генератор, пара кнопок, пара светодиодов, остальные 80 выводов на свое усмотрение.

Блок питания
Обязательно должен быть, но не всегда идет в комплекте. Потребуется БП на 5 вольт и ток 2А.

Средний уровень от 900 до 1500 рублей. Это платы Cyclone 1, 2, 3, 4 отличающиеся в основном количеством ячеек. Маркируются примерно так:

EP2C5T144 — Cyclone 2 примерно 5к ячеек

EP4CE6E22C8N — Cyclone 4 примерно 6к ячеек
EP2C8Q208C8N — Cyclone 2 примерно 8к ячеек

Можно заметить, что Cyclone 3 может иметь больше ячеек, чем Cyclone 4.

Вот несколько вариантов:

835 рублей.
ALTERA FPGA CycloneII EP2C5T144 Minimum System Board for Learn good

880 рублей
Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081

1265 рублей
EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Evaluation Development Core Board

Платы с расширенными возможностями. Это платы, на которых установлены дополнительные модули (UTP, USB, AUDIO), разъемы (SD, VGA), кнопки, переключатели, светодиоды, семисегментные индикаторы и т.д. Либо может идти базовая плата, а к ней могут прилагаться платы расширения отдельно.

У меня трудится такой комплект — плата + плата расширения:
Altrea EP4CE10E22 FPGA CORE Board+ Device Board USB/Sound/Ethernet/SD Card/VGA
2760 рублей

Вот основная плата. На ней есть 2 светодиода, 2 кнопки, 4 переключателя, семисегментный интикатор и микросхема оперативной памяти.

Плата расширения. На ней распаяны SD, VGA, а так же контроллеры USB(High Speed USB2.0 Chip: CY7C68013A), AUDIO(Sound Card up to 96kHz/32bit ADC/DAC: WM8731S), UTP(100M Ethernet interface: DM9000A):

Эти платы просто вставляются одна в другую, но у меня она пока лежит в ящике. Для своих поделок у меня макетка, с которой я соединяюсь шлейфом, который идет в комплекте. Еще в комплекте идет блок питания на 5 вольт.

Еще варианты:

Altera Cyclone NIOS II SOPC FPGA Development Learning Board EP2C8Q208C8N+LCD1602 — 2670 рублей

Terasic Altera FPGA DE0-Nano Cyclone IV Development and Education Board — 4600 рублей

Широкий выбор альтеровских плат и расширений к ним
Проект Марсоход

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

Заказал, ждем

Пока идут платы, можно начать себя морально и технически готовить: — Установить Quartus II v.11.1 Почитать: — Книга: А.К. Поляков Языки VHDL и Verilog в проектировании цифровой аппаратуры 2003

— www.kit-e.ru/articles/circuit/2008_3_161.php — Краткий курс HDL

— Уроки на марсоходе по верилогу, архитектура, простые советы по стилю.
— VERILOG как образ жизни
— Хорошие примеры (EN)

ВСЕ!

Мы ждем от тебя интересных проектов на ПЛИС!

PS. Обращаясь к тебе на «ты», я обращаюсь, как к равному, личности, а не части толпы. Если обращение на «ты» оскорбило, прошу меня извинить.

Источник: http://www.pvsm.ru/fpga/69778

Плата разработчика DE1-SoC. Обзор

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

На сей раз мой взор упал на плату DE1-SoC от Terasic Technologies.

Помимо того что это более новое поколение плис — Cyclone V (ну ладно не такая уж и большая разница между CycloneIV на DE0-nano, и Cyclone V, но явно круче чем Cyclone II на платах с ибэй) чип имеет важное преимущество – встроенный ARM процессор(Harware Processor System в терминологии Altera или HPS ). Что собственно и отражено в названии платы SoC-system on chip.

Конечно, во многих случаях можно обойтись FSM или тем же NIOS II, но полноценный dual core ARM с запущенным на нем Linux звучит солидно. Ну и не маловажный факт, в том что Academical Price -$175, таким образом с доставкой мне плата обошлась в $230 (летом цена на плату была еще $150).

Плата находиться довольно большой коробке, разделенной на два отделения.

В первом находится сама плата хорошо защищенная от повреждений паралоновой формой. А под ней находятся: кабель USB (A to B), кабель USB (A to Mini-Usb), блок питания 12V 3.5А (штекер у него под американские розетки, так что понадобится переходник), Quick Start Guide и не много рекламной мукулатуры. Дисков с ПО также нет, придется качать с оффсайта.

Чего мне не хватало для старта, так это кабеля Ethernet хотя бы метр и microSD карточки, стоит это не много так что могли бы и вложить. Отдельно стоит упомянуть сюрприз в виде дополнительных вложений:Назначение мелкого пакета я не понял до сих пор :-). Ну а в крупном находилась демо-плата DC934A — ЦАП и АЦП от Linear Technology, толку с нее не много но об этому чуть позже.

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

FPGA

Cyclone V SoC 5CSEMA5F31C6 Device, 85K Programmable Logic Elements, 4,450 Kbits embedded memory, 6 Fractional PLLs ,2 Hard Memory Controllers;

Пожалуй тут надо остановится на цифре 85K LE. Каково же было мое удивление, когда после компиляции примера, Quartus выдал что то вроде used 8000 from 31000 LE.

Воу-воу, а где остальное? Все дело в том что в новых чипах Altera перешли с 4-входовых LE объединенных в блоки LAB, к 6-входовым LE (объединенных в так называемые ALM), которая если можно так сказать является совмещением 2 4-входовых LE.

В процессе разработки на это внимание обращать не стоит – Quartus сам все разрулит.

Но если речь идет о высокопроизводительных схемах, где много мультиплексоров или сложений, то про архитектуру все же необходимо помнить, подробнее в Altera Recommended HDL Coding Styles страница 12-44.

Dual-core ARM Cortex-A9 (HPS)

Описание процессора в даташите занимает и овер 500 страниц, так что к картинке могу добавить разве что то, что это полноценный ARM процессор, и помимо 2 ядер и развитой периферии имеет матрицу коммутации. Так что выводы периферийных устройств с некоторыми ограничениями можно подключить как к разным выводам самого HPS, так и к логике FPGA.

Для работы с FPGA процессоры HPS также имеют специально выделенные мосты: HPS-to-FPGA: configurable 32, 64, or 128 bit AMBA AXI interface FPGA-to-HPS: configurable 32, 64, or 128 bit AMBA AXI interface Используются для высокоскоростных приложений (например передача данных из памяти HPS в FPGA с помощью DMA).

Удобной же особенностью моста FPGA-to-HPS является то, что устройства из FPGA могут напрямую обращаться к периферии HPS. Для управления же более простыми и низкоскоростными устройствами предназначена шина Lightweight HPS-to-FPGA имеет 32 разряда и удобна для управления периферией FPGA (например настройка какого то IP блока ).

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

Конфигурация

Quad Serial Configuration device – EPCQ256 on FPGA On-Board USB Blaster II (Normal type B USB connector)
Память 64MB (32Mx16) SDRAM on FPGA 1GB (2x256Mx16) DDR3 SDRAM on HPS

Micro SD Card Socket on HPS

Периферия

Two Port USB 2.0 Host (ULPI interface with USB type A connector) Полноценный USB хост, особенно порадовало, что поддерживает usb-хаб (например у меня клава и мышь включенные через хаб нормально заработали).

USB to UART (micro USB type B connector)

Применительно к системе крайне полезная вещь, выполненная на базе FT232.

10/100/1000 Ethernet
PS/2 mouse/keyboard

Последняя штука тут явно лишняя и перекочевала с платы DE1. Зачем, спрашивается, на плате устаревший интерфейс, если клавиатуру к тому же HPS через него без плясок с бубном не подключишь.

IR Emitter/Receiver

Two 40-pin Expansion Headers (voltage levels: 3.3V) Бесспорный вин, два IDC 40 коннектора (36 GPIO доступно на каждом), кроме того имеют тогоограничительные резисторы и защитные диоды по каждому входу. Во многом склонили меня к этой плате.

One 10-pin ADC Input Header
One LTC connector (One Serial Peripheral Interface (SPI) Master ,one I2C and one GPIO interface )

Про этот конектор ничего хорошого сказать не могу, мало того что он имеет не шибко распостроненный шаг в 2мм, так еще гляньте на его схему:Зачем эти все навороты с отдельным коммутатором линий (понятно что это спецификация demo board от Linear Technologies), но лучше бы просто вывели GPIO от HPS.

Аудио и Видео
24-bit VGA DAC, 24-bit CODEC, Line-in, line-out, and microphone-in jacks, TV Decoder (NTSC/PAL/SECAM) and TV-in connector

АЦП Up to 1 MSPS, 8 channel, 12bit DAC.

Кнопки, переключатели, индикаторы: 4 User Keys (FPGA x4), 10 User switches (FPGA x10), 11 User LEDs (FPGA x10; HPS x 1)

2 HPS Reset Buttons (HPS_RST_n and HPS_WARM_RST_n)

За эту часть можно смело ставить 5. Кнопки и переключатели большие и удобные.

Six 7-segment displays

Хм, не однозначное решение. 42 два пина на семисигментник, зато десятичные точки подключить забыли: (.

Сенсоры: G-Sensor on HPS
Питание: 12V DC input

Прежде чем перейти далее, еще пару слов о питании. Жаль, но на этой плате, в отличие от DE0-nano, не предусмотрено никаких средств по измерению потребляемого тока. Ну и схема включения на полевике почему то не внушает мне доверия. Можно разделить на две части для FPGA и для HPS.

Для FPGA все более менее традиционно используем Quartus II. При этом первичная настройка матрицы коммутации HPS, тактирование и работа с SDRAM также происходит в Quartus II посредством Qsys. Быстрый старт есть как в мануалах Терасика, так и от любителей в интернете, например: https://www.youtube.

com/watch?v=2WUkEt4-Q7Q

Единственное что следует упомянуть, так это следующую надпись на странице спецификаций платы:64-bit OS and Quartus II 64-bit are required to compile projects for DE1-SoCВ чем ее смысл я так и не понял, так как все демопроекты при первом открытии сообщали, что они разработаны в 32-х разрядной версии квартуса.

Но поскольку следующие версии Quartus II (начиная с 14.0) будут поддерживать только 64 разрядную ОС, сделать апдейт винды все же пришлось. При этом часть из представленных демопроектов не хотели собираться под последним (на данный момент версии 14.1) Quartus –ом, так что я вернулся на версию 13.1, хотя в 14.1 есть разные улучшения.

Для HPS выбор довольно большой. Но в первую очередь необходимо поставить SoC Embedded Design Suite ) основанный на ARM Development Studio 5 (DS-5) Altera Community Edition Toolkit даже если ей не пользоваться к ней в нагрузку идет тулчейн для работы c АРМ от Альтеры.

А кроме того так называемый Embedded Command Shell, позволяющий выполнять UNIX приложения под Windows. Подробная инструкция по установке дается Terasic.

И так для разработки приложений HPS применимы следующие способы:

  1. Путь тру суровых нердов: блокнот-мейк файл-плата(основной способ предлагаемый в мануалах terasica) при этом на плате должен быть установлен Линукс.
  2. Разработка под Altera University Program. Почти тоже, но имеет предсобранный образ системы, позволяет проводить отладку по ассемблерному коду, а также имеет ряд примеров и бесплатных IP для конфигурации платы и обработки видео. Работает только до версии 13.1 Квартуса (включительно).
  3. Уже упомянутая ARM Development Studio 5 (DS-5), мощный инструмент позволяющий делать все от написания «голых» приложений(не знаю, есть ли у нас термин для Bare Metal), так и написания и отладку драйверов под Linux, сборку системы и еще кучу плюшек.Но увы, в бесплатной версии доступно лишь написание программ под Linux.
  4. Ну и для тех кто хочет не только светодиодиком помигать, но и вдарить ГУЙем по консоли возможна разработка приложений в Qt на С++. Подробно как это сделать также расписано в мануале от Terasic. Правда там они предлагают разрабатывать под Ubuntu 12.0 в виртуальной машине. Я не очень разбирался, но у меня Ubuntu 14 имея в безраздельном владении (если верить VMware Player) гиг оперативы, одно ядро и по факту отдельный физический диск все равно тормозит. Так что если бы установка дуал бута не была сопряжена с возможными проблемами с виндой, то я бы установил такую конфигурацию.

Как можно понять, из вышеприведенного текста, написание программ для платы, без покупки лицензий, возможно лишь под линукс. И тут нам везет, так как не надо ничего компилировать и собирать, потому как Terasic предлагает уже готовый образ системы, только на флешку записать, да в слот на плате вставить. Но есть и обратная сторона медали. Из всех холиваров про Линукс я понял только одно, система не хорошая и не плохая ее готовить уметь надо. И Terasic постарались и выкатили аж целых 4 образа (уже 5), хотя лучше бы один… Дело в том что образы основаны на ядре версии 3.12, в котором толи специально выпилены, толи на момент выхода ветви отсутствовали драйвера для работы с внешней периферией, и потому например упомянутая в начале демо плата DC934A не работает, так как требует наличия /sys/class/gpio которого нет, но который есть в версии ядра 3.13 поставляемой с DS-5 Studio. Вообщем имеем следующие образы:

  • Linux Console – тут все просто базовые функции и консольный ввод/вывод. Требует флешки 4ГБ.
  • Linux Console with framebuffer – тоже самое, но с фреймбуфером идеально подходит для приложений на Qt, размер тот же.
  • Linux LXDE Desktop – поддерживает графическую систему LXDE, требует уже 8ГБ флеши.
  • Linux Ubuntu Desktop – да на плату можно поставить Ubuntu 12, тоже не менее 8ГБ флеши.
  • DE1-SoC OpenCL BSP – вышла совсем не давно — это линукс для использования при разработке OpenCL приложений. Попробовать еще не успел, потому что за зверь не знаю.

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

Источник: http://we.easyelectronics.ru/plis/plata-razrabotchika-de1-soc-obzor.html

Altera: SoC FPGA — Система на кристалле: ПЛИС + двухъядерный процессор ARM Cortex-A9

Системы-на-Кристалле SoC FPGA компании Altera интегрируют аппаратно-реализованную процессорную систему на базе двухъядерного процессора ARM® Cortex™-A9, обширную периферию, мультипортовый контроллер памяти и программируемую логическую схему ПЛИС FPGA семейства Cyclone V® или ArriaV®.

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

Системы-на-кристалле SoC FPGA семейств Cyclone V и Arria V выполнены по 28-нанометровому технологическому процессу с малым током утечки компании TSMC.

Блок программируемой логической матрицы FPGA также включает аппаратно-реализованные контроллер интерфейса PCI Express® Gen2, высокоскоростные последовательные приемопередатчики и дополнительные мультипортовые контроллеры памяти.

Мультипортовые контроллеры памяти могут совместно использоваться процессором и ПЛИС, поддерживают DDR2, DDR3 и LPDDR2 память с кодом коррекции ошибок (ECC), необходимым для высоконадежных критически важных приложений.

Проектирование аппаратной части может быть выполнена стандартными средствами среды разработки Quartus®II и системой интеграции QSYS.

Разработку и отладку прикладного кода можно выполнять как с помощью Eclipse-инструментов, поставляемых в пакете Quartus®II, так и с помощью среды проектирования компании ARM ARM® Development Studio 5 (DS-5).

Также разработчикам доступны различные сборки Linux, поддерживаемые новым семейством Систем-на-Кристалле, в том числе собственный дистрибутив Linux, разработанный компанией Altera на базе проекта Yocto Project.

Отличительные особенности:

  • Аппаратно-реализованная процессорная система (HPS)
    • Процессор: двухъядерный ARM Cortex™-A9, максимальной рабочей частотой 800 МГц, с поддержкой технологии отладки и трассировки ARM CoreSight™
    • Сопроцессор: медиапроцессор ARM Neon™ с поддержкой векторных вычислений с плавающей точкой (VFP) двойной точности
    • Кэш первого уровня L1: 32 Кбайт инструкций, 32 Кбайт данных
    • Кэш второго уровня L2: 512 Кбайт общего доступа
    • Внутренняя память: 64 Кбайт RAM и 64 Кбайт ROM памяти
    • Аппаратный контроллер памяти
      • Мультипортовый контроллер SDRAM с поддержкой DDR2, DDR3, DDR3L и LPDDR2 памяти с кодом коррекции ошибок (ECC)
      • Частота внешнего интерфейса 400 МГц / 800 Мбит/с (Cyclone V) и 533 МГц / 1066 Мбит/с (Arria V)
      • Конфигурируемая пользователем ширина шина: 8 бит, 16 бит, 16 бит + ECC, 32 бит, 32 бит + ECC
      • Адресуемое пространство до 4 Гбайт
    • Контроллер QSPI FLASH памяти: до четырех последовательных SPI устройств, до четырех линий обращения (Chip Select)
    • Контроллер SD/SDIO/MMC карт памяти: поддержка стандартов SD, eSD, SDIO, eSDIO, MMC, eMMC и CE-ATA
    • Контроллер NAND FLASH памяти: аппаратный программируемый блок кода коррекции ошибок (ECC) для устройств с одноуровневыми (SLC) и многоуровневыми (MLC) ячейками памяти
    • 8-канальный контроллер прямого доступа к памяти (DMA)
    • Два контроллера 10/100/1000 Ethernet с интерфейсом внешнего физического уровня RGMII, интегрированный контроллер прямого доступа к памяти (DMA)
    • Два контроллера USB 2.0 On-The-Go с интерфейсом внешнего физического уровня ULPI, интегрированный контроллер прямого доступа к памяти (DMA)
    • Два интерфейса UART
    • Четыре интерфейса SPI: два в режиме ведущий (master), два в режиме ведомый (slave)
    • Четыре интерфейса I2C
    • Два контроллера CAN 2.0 A/B (Cyclone V)
    • До 71 линии ввода/вывода общего назначения и 14 линий только ввода, поддержка цифрового подавления «дребезга» и конфигурируемого режима прерываний
  • Блок ПЛИС FPGA
    • Логических элементов (LE):
      • Cyclone V: до 110 тыс.
      • Arria V: до 462 тыс.
    • Адаптивных логических модулей (ALM):
      • Cyclone V: до 41509
      • Arria V: до 174340
    • Внутренняя RAM память
      • Cyclone V: до 5570 Кбит
      • Arria V: до 22820 Кбит
    • Умножителей 18х19:
      • Cyclone V: до 224
      • Arria V: до 2136
    • DSP-блоков:
      • Cyclone V: до 112
      • Arria V: до 1068
    • Последовательные приемопередатчики:
      • Cyclone V: до 9 каналов, максимальная скорость передачи данных до 6.144 Гбит/с
      • Arria V: 30 каналов, до 6.5536 Гбит/с, или 16 каналов, до 10.3125 Гбит/с (поддерживаются соединения только между собой)
    • Аппаратный контроллер интерфейса PCIe
      • Cyclone V: один
      • Arria V:два
    • Пользовательские линии ввода/вывода:
      • Cyclone V: до 288
      • Arria V: до 528
    • Линий LVDS интерфейса:
      • Cyclone V: до 144
      • Arria V: до 257
    • Схем PLL:
      • Cyclone V: до 6
      • Arria V: до 14
    • Контроллер внешней памяти:

Запросить образцы, средства разработки или техническую поддержку

Веб-страница Altera по Системам-на-Кристалле SoC FPGA Cyclone V
Веб-страница Altera по Системам-на-Кристалле SoC FPGA Arria V

  • Рубрика: Altera
  • Источник: http://www.ebvnews.ru/technical/altera/4510.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}