Делаем таймер или первый проект на ПЛИС

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

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

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

    ПЛИС (Программируемая логическая интегральная схема) – один из видов электронных устройств, применяемый для реализации различных логических устройств самой разной сложности, от двоичных счетчиков, несложных логических схем (замены стандартных интегральных схем — рассыпухе) до специализированных процессоров и нейрочипов.

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

    CPLD (complex programmable logic device — сложные программируемые логические устройства) — ПЛИС, базовыми элементами которой являются макроячейки и простые логические вентили (И(-НЕ)/ИЛИ(-НЕ)). Обычно содержит меньше базовых элементов, чем FPGA, но является более быстродействующей. Также обычно содержит энергонезависимую конфигурационную память прямо на кристалле, но имеет ограниченное число циклов конфигурирования.

    FPGA (field-programmable gate array — Программируемая пользователем вентильная матрица) – ПЛИС, которые обычно имеют целый букет видов базовых блоков, это и настраиваемые логические элементы (таблицами истинности) и блоки сложения-умножения (Digital signal processing — DSP) и PLL (Phase-Locked Loop) для деления и умножения частоты и некоторые другие в зависимости от модели. Обычно имеют энергозависимую внутреннюю память и функционал для загрузки конфигурации с внешней энергонезависимой памяти.

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

    Начнем с обсуждения инструментов. Я буду пользоваться стартовым набором разработчика Altera Cyclone II FPGA Starter Board, это готовая плата, на которой установлена FPGA серии Cyclone II – EP2C20F484C7N, а также различная периферия и интерфейсы. В этой статье мы используем светодиоды и семисегментные индикаторы. Мы не будем использовать никаких специальных блоков данной серии FPGA, поэтому при желании вы можете использовать почти любую другую ПЛИС (FPGA и CPLD).



    Сильно заинтересовавшиеся могут купить себе один из наборов разработчика или самим собрать устройство, что является достаточно сложной для новичка, но вполне выполнимой задачей. Схемы программаторов и схемы подключения самих ПЛИС легко гуглятся, к тому же, кто ранее занимался любительской прошивкой AVR, может обнаружить у себя подходящий программатор Altera Byte Blaster. В общем, схемную реализацию я предоставляю тебе хабраюзер (В конце статьи схема моей Starter Board). Кто хочет попробовать без денежных затрат и увидеть результат работы – можно использовать встроенный в Quartus II симулятор (в этой статье работа с ним не описана).

    Из ПО мы будем использовать Quartus II, free версию которого вы сможете найти на сайте производителя (Altera), как в Windows, так и в Linux вариантах.

    И вот мы подошли к практике вплотную! Запускаем наш САПР Quartus II и создаем проект. Первыми шагами визарда указываем имя проекта и его место дислокации, затем пропустим шаг добавления файлов (еще успеем). Закончим создание проекта на этапе выбора устройства, если делаем на железяке – точно знаем имя ПЛИС, его и выбираем. Если просто делаем проект для ПЛИС выберем что-нибудь помощней, например третий циклон. Я же выбираю FPGA которая установлена в моем стартер ките.

    1_proj_wizard_ch


    Жмем Finish – проект создан. Структура проекта в Quartus – иерархическая, нам необходимо выбрать верхушку иерархии (Top-Level Entity). Мы можем использовать для проектирования схемные файлы и файлы с описанием логики на одном из HDL (Hardware description language – язык описания аппаратуры). Мое мнение – наглядней всего в качестве верхушки иерархии использовать схемный файл с основными блоками логики, а сами блоки реализовывать на HDL. Мнения могут быть разными, пока выбирал, прочитал немало холиварных тем, но остановился пока на такой модели, вы можете сделать свой выбор. В качестве HDL языка проекта я выбрал VHDL ((Very high speed integrated circuits) Hardware Description Language), вы можете использовать любой другой, например Verilog или AHDL, все зависит от ваших предпочтений.

    Создаем наш первый файл проекта (File – New..) выбираем Block Diagram/Schematic File. Теперь давайте нарисуем простейшую схему, добавим один Input, один Output и соединим их (в реальной ПЛИС эта схема будет передавать сигнал с одной ножки на другую). Для этого Double Click на пустом месте схемы и в открывшемся диалоге Symbol выбираем необходимый элемент.

    2_add_inp_outp


    Соединяем просто так, линией. Дадим пинам имена (Double Click по элементам), input назову CLOCK_27[0], а output назову LEDR[0]. Имена выбраны не случайно – CLOCK_27[0] я затем ассоциирую с входом генератора 27Mhz, а LEDR[0] с нулевым красным светодиодом. Сохраняем файл, оставив галочку добавления в проект. Теперь установим полученный файл вершиной иерархии проекта. Для этого окне Project Navigator, во вкладке Files, в контекстном меню нашего файла выбираем Set as Top-Level Entity. Hello, world готов. Компилируем проект (Processing – Start Compilation), если видим Info: Quartus II Full Compilation was successful. – радуемся и считаем, что первый этап пройден.

    Теперь разберемся с нашими целями. Наше устройство будет при включении питания начинать отсчет минут и часов. Значит нам понадобится четыре семисегментных индикатора «ЧЧ: ММ». Для отсчета времени нам нужен более-менее точный сигнал 1Hz. Его мы получим путем деления частоты 27Mhz, затем мы будем отсчитывать его на 60 (секунды), потом еще раз на 60 (минуты), а потом на 24 (часы). С последних двух блоков двоичное число минут и часов будет поступать на декодер Bin -> BCD (binary-coded decimal) -> 7seg. Вот, в общем, и все устройство. Сразу оговорюсь, что схема будет асинхронная (Минуты заводятся от секунд, а часы от минут), для простоты и наглядности.

    3_block_shem


    Итак, создадим наш первый блок — блок деления частоты. Создадим новый файл, как мы уже умеем, только тип файла будет VHDL File. Вставим в него код:

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    entity Div_27Mhz_to_1Hz is
    port( clk:in std_logic; clk_out:out std_logic);
    end Div_27Mhz_to_1Hz;

    architecture div_behavior of Div_27Mhz_to_1Hz is
    begin
    process(clk)
    variable cnt : integer range 0 to 27000000;
    begin
    if(clk'event and clk = '1')
    then

    if(cnt >= 13500000)
    then
    clk_out <= '1';
    else
    clk_out <= '0';
    end if;

    if(cnt = 27000000)
    then
    cnt := 0;
    else
    cnt := cnt + 1;
    end if;

    end if;
    end process;
    end div_behavior;


    Пропущу служебные директивы (можно посмотреть в справочнике, ссылки в конце), уделю внимание только логике работы. Вначале мы объявляем сущность, т.е. сам блок. Указываем его входы и выходы, их типы и имена. Тип std_logic в простонародье значит бит. Далее мы описываем внутреннюю архитектуру этого блока. Архитектура состоит из параллельных процессов. Каждый процесс имеет свой список чувствительности, например единственный процесс в примере выше чувствителен к изменениям на входе clk. Для процесса можно объявить переменные, в нашем примере это переменная типа integer range 0 to 27000000. Далее в теле процесса задается элементарная логика: пока не прошла половина периода — пихаем в выход логический ноль, как половина прошла – пихаем единицу, при этом не забываем считать и обнулять счетчик по достижению 27000000. На идеальный код не претендую – пока учусь, буду рад поправкам :)

    Сохраняем файл с кодом и создаем символ (File – Create/Update – Create Symbol Files For Current Files), это необходимо для того чтобы вставить данный блок в нашу главную схему. Найти свои символы можно в папке Project в диалоге вставки символа. Теперь пробежимся по остальным блокам менее подробно.

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    -- For CONV_STD_LOGIC_VECTOR:
    use ieee.std_logic_arith.all;

    entity cnt_0_to_59 is
    port( clk:in std_logic; c59:out std_logic; vector:out std_logic_vector(5 downto 0));
    end cnt_0_to_59;

    architecture cnt_behavior of cnt_0_to_59 is
    begin
    process(clk)
    variable cnt : integer range 0 to 59;
    begin
    if(clk'event and clk = '1')
    then
    if(cnt = 59)
    then
    cnt := 0;
    c59 <= '1';
    vector <= CONV_STD_LOGIC_VECTOR(cnt, 6);
    else
    cnt := cnt + 1;
    c59 <= '0';
    vector <= CONV_STD_LOGIC_VECTOR(cnt, 6);
    end if;
    end if;
    end process;
    end cnt_behavior;


    Это блок счета от нуля до 59, который мы используем для счета минут и секунд. Из новинок тут тип выхода std_logic_vector(5 downto 0), который определяет группу битов (битовый вектор), а также функция CONV_STD_LOGIC_VECTOR(cnt, 6), которая преобразует переменную в битовый вектор указанной длины.

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    -- For CONV_STD_LOGIC_VECTOR:
    use ieee.std_logic_arith.all;

    entity cnt_0_to_23 is
    port( clk:in std_logic; vector:out std_logic_vector(4 downto 0));
    end cnt_0_to_23;

    architecture cnt_behavior of cnt_0_to_23 is
    begin
    process(clk)
    variable cnt : integer range 0 to 23;
    begin
    if(clk'event and clk = '1')
    then
    if(cnt = 23)
    then
    cnt := 0;
    vector <= CONV_STD_LOGIC_VECTOR(cnt, 5);
    else
    cnt := cnt + 1;
    vector <= CONV_STD_LOGIC_VECTOR(cnt, 5);
    end if;
    end if;
    end process;
    end cnt_behavior;


    Выше счетчик часов. Ничего нового.

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    -- For CONV_STD_LOGIC_VECTOR:
    use ieee.std_logic_arith.all;

    entity bin2bcd_5bit is
    port( bin:in std_logic_vector(4 downto 0);
    bcd1:out std_logic_vector(3 downto 0);
    bcd10:out std_logic_vector(3 downto 0)
    );

    end bin2bcd_5bit;

    architecture converter_behavior of bin2bcd_5bit is
    begin
    process(bin)
    variable i : integer range 0 to 23;
    variable i1 : integer range 0 to 9;
    begin
    i := conv_integer(bin);
    i1 := i / 10;
    bcd10 <= CONV_STD_LOGIC_VECTOR(i1, 4);
    i1 := i rem 10;
    bcd1 <= CONV_STD_LOGIC_VECTOR(i1, 4);
    end process;
    end converter_behavior;


    Преобразователь Binary в BCD, по сути, просто разбивает одно бинарное число на два, каждое из которых представляет разряд десятичного числа. Из новинок – оператор rem, остаток от деления. Аналогично написан и преобразователь для шести бит, его приводить не буду.

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    entity BCD_to_7seg is
    port(
    BCD:in std_logic_vector(3 downto 0);
    seg:out std_logic_vector(6 downto 0)
    );

    end BCD_to_7seg;

    architecture conv_behavior of BCD_to_7seg is
    begin
    process(BCD)
    begin
    if BCD = "0000" then seg <= "0000001";--0
    elsif BCD = "0001" then seg <= "1001111";--1
    elsif BCD = "0010" then seg <= "0010010";--2
    elsif BCD = "0011" then seg <= "0000110";--3
    elsif BCD = "0100" then seg <= "1001100";--4
    elsif BCD = "0101" then seg <= "0100100";--5
    elsif BCD = "0110" then seg <= "0100000";--6
    elsif BCD = "0111" then seg <= "0001111";--7
    elsif BCD = "1000" then seg <= "0000000";--8
    elsif BCD = "1001" then seg <= "0000100";--9
    else seg <= "1001001";--err
    end if;
    end process;
    end conv_behavior;


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

    image


    Вот и реализовали все блоки, осталось их соединить вместе. Приведу Главную схему и расшифровку символа bin2seg, который реализован также в виде схемы для экономии места.

    Главная схема:
    (клик-клик)

    (Как видно на схеме, я вывел счет секунд на зеленые светодиоды, опять же для наглядности)

    bin2seg:
    (клик-клик)


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

    Ассоциацию можно проводить после компиляции в меню Assignments – Pins. В появившемся окне вы увидите схемы расположения пинов на микросхеме и под ней список пинов проекта. Изменяя поле Location, сопоставляем внутренние входы реальным ножкам. В моем случае я смотрю имена пинов по схеме моей платы, а в случае своей разработки вы будете знать имена пинов. Последний шаг – прошивка, она осуществляется из меню Tools – Programmer, кнопкой старт (программатор должен быть подключен и драйвера установлены).

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



    Обещанные ссылки:
    www.altera.com — всевозможная документация и реклама продуктов
    www.bsuir.by/vhdl/reference — справочник VHDL
    altera.ru — наш представитель компании Altera, я там заказывал стартер-кит
    + я использовал книжку ДЖ.Р.Армстронга Моделирование цифровых систем на языке VHDL.
    Для тех, кто возьмется собирать сам, прикладываю схему моей платы. (кач)
    А также бонусом – проект таймера (кач-кач)
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 117
    • 0
      Студенты каких специальностей нынче программируют ПЛИС?
      • +2
        Ну вообще специальность:
        230100 Информатика и вычислительная техника

        Начали знакомиться на предмете «Теория автоматов» и делали курсовую по предмету «Схемотехника».
        Специальность на 90% программистская, предметов близких к железу всего ничего, в основном кому интересно сами осваивают :)
        • +2
          Все же название специальности предполагает изучение подобный технологий.
          Меня, собственно, другой вопрос беспокоит. Я сам обучался по специальности «автоматика» и в теме ПЛИС. А сейчас преподаю будущим прикладным программистам. Собственно вопрос хабравчанам:
          Насколько оправдано давать подобную технологию именно в железе «чистым» программистам?
          Вынес вопрос в ленту
          • +6
            ИМХО, для понимания того как работает та железяка, которую они программируют — весьма полезно.

            мне бы было интересно.
            • 0
              Прикладники у нас этого не изучают, им своих бизнес приложений хватает, типа MS Dynamics Axapta.
              Даже на нашей специальности почти все (студенты конеч) недовольны тем что у нас преподают хардварные предметы, чего уж там о прикладниках говорить.
              • 0
                210300 Радиотехника
                как выяснилось только в ЛЭТИ из вузов Питера на момент начала этого семестра была оборудована лаборатория, где мы вдоволь порезвились со вторыми циклонами
                и verilog и AHDL поизучали =)
                ну к сожалению про чистых программистов ничего сказать не могу потому как у самого специальность «Технология проектирования радиоэлектронных средств на основе САПР»
                • 0
                  как выяснилось только в ЛЭТИ из вузов Питера на момент начала этого семестра была оборудована лаборатория, где мы вдоволь порезвились со вторыми циклонами

                  Могу с вами поспорить, в Политехе, в этом семестре во всяком случае циклоны были, и я думаю что появились они еще раньше. У нас в программе Cyclone 3 и Max2.
                  • 0
                    Наглый гон. В Политехе на Альтере сидят уже лет 15. штук 5 лабораторий только на ФТК с разными китами как навороченными под Nios и DSP так и простенькие схемотехнику учить.
                    • 0
                      не обижайтесь, нам так сообщили) преподаватели тоже хотят потешить ЧСВ. А циклон 3 — это круто, дорогие они, у нас только двоечки…
                      • –1
                        циклон это отстой на самом деле. если аналогии проводить, то это Celeron. Вот Stratix IV уже поинтерестней.
                        • 0
                          может и отстой но
                          а) что есть такое в стратиксе, чего в качестве обучения и изучения не могли бы сделать на циклоне?
                          б) если при обучении мы вряд ли пишем нечто загружающее циклон на 100%, то зачем вместо 150 баксов платить 3к?
                          в) дев киты на стратиксе нифига не наглядны. У кита на втором циклоне куча возможностей подключение и можно различными способами проверять результаты работы, а у кита на стратиксе вижу только цифробуквенный двухстрочный дисплей.
                          • 0
                            я не для обучения имел в виду:) ежели чего-то интерестное делать, то стратиксы или виртексы поинтерестнее.
                  • +3
                    Думаю, не покатит.
                    Сейчас все студенты-программисты любят питон, пхп и с#. ПЛИС будет интересен только самым упоротым фанатам своего дела, а они, уверяю, смогут разобраться и без Вас.
                    • 0
                      Ну не все, всё таки есть отдельные уроды которые любят всякие lisp-ы, хаскели, м-эли, форты и прочие нераспространенные вещи… Мало, но есть.
                      • 0
                        Эээээ, а я что написал?
                        • 0
                          Эээ, питон, пхп и си#. А это далеко не то, что я перечислил.
                          • 0
                            Ну, я и говорю, что есть такие студенты, но они, как правило, большие любители своего дела, изучают такие вещи дома.
                            Если в группе 5 из 30 человек такие любители, то проще не «сложные и непонятные» пары для остальные делать, а специальный кружок/факультатив для этих самых 5-ти гуру.
                      • 0
                        google CatapultC
                        und google SystemC
                      • 0
                        Оправдано, чтоб не расслаблялись в своих сишарпах и аяксах :-D
                      • 0
                        гы. на той же специальности в ИТМО не то, что ПЛИС, а даже ассемблером не пахнет.
                        • 0
                          Да и у нас бы не было ПЛИС если бы преподаватель по схемотехнике не занимался бы этой темой (дисертация на сколько я знаю). Но я очень рад что так вышло :) А ассемблер(x86) отдельным предметом был.

                          Томский Политехнический Университет
                          • +1
                            Никит, у нас специальность 230201 вроде как была…
                            • +1
                              а, чорт, риальне так. прокосячил :(
                        • +1
                          210106 Промышленная электроника, если не ошибаюсь, тоже изучают.
                          • 0
                            Ах, только недавно закончился курс по узлам и устройствам, там были ПЛИС — в несколько другой степени, правда. ГЭТУ, ФКТИ, ВТ
                            • +2
                              У меня на 2201 «Вычислительные машины, системы, сети и комплексы» было такое…
                              • 0
                                в МТУСИ на такой же специальности было в теории, поиграться можно было только со всякими кр580, к1820 и огромными стендами с дискретными элементами
                                интересно другое, кто нибудь зарабатывает на жизнь программированием подобных штук?
                                • 0
                                  сочувствую вам, у нас то же самое
                                  • 0
                                    Да, ксилинксы во всю юзаются! вот например первая попавшаяся вакансия
                                    hh.ru/vacancy/2455643?query=VHDL

                                    а ваще много наших программеров в азию едут, там тыщ 5 баков без проблем…
                                • 0
                                  в КПИ в Украине не факультете электроники таким занимался… было дело даже лабы помогал преподу составлять…
                                  а так веселая это штука!
                                  • 0
                                    Робототехника и мехатроника.

                                    Кафедра Проблем Управления МИРЭА(ТУ).
                                    • 0
                                      МГТУ им. Баумана, я своё знакомство с VHDL начал с FPSlic)
                                      • +1
                                        230105 Программное обеспечение вычислительной техники и автоматизированных систем
                                        Предмет «Схемотехника».

                                        Но честно говоря, меня это все не впечатлило. Тяжеловесные IDE. Одна Libero IDE была гига на 2, вроде. И это без WaveFormer`а. В FPGA Advantage все «программирование» сводилось к щелканью мышкой. Quartus вообще адская прога. Даже на мощном компе компилирует безбожно долго самые простые проекты (или я в этом ничего не понимаю?). Более менее удобный MAX PLUS, но и тот уже древний. Из-за этого всего уже теряется какой-либо интерес. А еще удивила скорость прошивания 20кбайтовой программы: минут 5 — 7 на ProASIC plus с микросхемой APA075. Единственный плюс Actel`у, что предоставляет студенческую лицензию на год.
                                        • –1
                                          5 баллов!:) Разницу между timing simulation и functional simaulation cечете? Если нет — то в сад про тормознутость квартуса.
                                          Про ProASIC вообще не о чем разговаривать ежели вы MaxPlus удобным считаете (он так лет 7 уже не актуален и не обновляется поддерживается).
                                          • 0
                                            ох не дочитад ваш коммент до конца. вопрос по simulation не в тему.
                                            Что для вас простой проект в quartus? Потому как таймерок типа описанного в статье компилит секунд за 5. У него больше времени на вывод всех своих окошек и репортов уходит
                                        • 0
                                          230101 Вычислительные машины, комплексы, системы и сети.
                                          • 0
                                            То, что описано у автора в статье, нам обещали преподавать ближе к 5 курсу, а пока мы изучаем и строем логические схемы.
                                            На втором курсе моделировали светофор, и циферку от 0 до 9 (семи сегментный код).

                                            Все это делали на уровне логики в демо версии пакете EWB 5.12

                                            Вот хотел герлянду к новому году запрограммировать, но пока решил отложить на потом.
                                        • 0
                                          ВТ, ФИВТ, КПИ, Укрина.
                                          • 0
                                            Начали на Altera Max II plus, потом будет VHDL на Altera Quartus Pro.
                                          • +1
                                            Вот меня всегда интересовала идея, можно ли ПЛИС в реальном времени заставить изменять вшитую в него программу. Этакий железный полиморфизм
                                            • 0
                                              Не вижу в этом смыла, проще уже программу так написать чтоб ее не приходилось на ходу переписывать :-)
                                              • 0
                                                Почему же, я например вижу один сценарий: по аналогии с бутлоадером для МК, можно использовать определенную часть ресурсов самого кристалла под интерфейс загрузки конфигурации. В масштабах современных ПЛИС это может быть вполне жизнеспособно, хотя это все мои теории, проектов таких не встречал за свой недолгий опыт :)
                                                • 0
                                                  А если использовать на 1 железке 2 ПЛИСа, то в полне себе можно. С одним сильно сомневаюсь, что получится.
                                                  • 0
                                                    Почему же нет? Часть пинов выделяем под интерфейс программирования (даже USB можно), делаем блок который будет принимать и обрабатывать данные о конфигурации, далее он из закидывает в конфигурационную память по нужному протоколу (SPI обычно) и вызывает переконфигурацию. Я думаю вполне реально.
                                              • +1
                                                В «больших» ПЛИС конфигурация находится во внешней памяти и используется только на этапе конфигурации (обычно появление питания). Ничего не мешает прошить из ПЛИС свою же конфигурационную память и перезапустить процесс конфигурации.
                                                • 0
                                                  Несколько лет назад толи на мембране толи ещё где была заметка про эксперементы применения плис в космосе. Я так понял мечтали чтоб уже после запуска аппарата можно было менять логику, не просто меня программы, а именно загружая новые «железяки».

                                                  Интересно чем закончилось, тут бы такая идея пригодилась :)
                                                  • 0
                                                    для космоса существует отдельные FPGA, radiation hardened
                                                    точно не помню но наш шеф расказывал о своей превыдущей компании там толи спутник был полностью реконфигуряемый толи радар
                                                    • 0
                                                      Самое интересное, что обычные из магазина работают так же хорошо, а по цене выигрыш фантастический.
                                                      • 0
                                                        Прикол в том, что если сдохнет железка из магазина, то ты потеряешь лишь железку из магазина. Не более того.

                                                        А если случится косяк на орбите то мохнатым органом накроется оборудование на миллионы баксов. Потому и разница такая в цене.

                                                        Надежность превыше всего!
                                                  • 0
                                                    Да, конечно. ПЛИС может сама себя переконфигурировать. Условно говоря в ПЛИС задаются кординаты ячеек (прямоуголник XYнач-XYкон), для котых есть альтернативная прошивка. При необходимости плис засасывает из внешнего ПЗУ новую прошивку для этих ячеек.
                                                    Сразу оговорюсь что задача частичного реконфигурирования далеко не тривиальна и, как правило, ее стараются избегать.
                                                    • +1
                                                      Полное реконфигурирование проще и часто встречается, например, в тех же Дев-Китах от Xilinx, где на одной плате надо показать несколько примеров использования той кучи железа, что на нее напаяли.

                                                      Как правило несколько прошивок исползуют как «Dual BIOS» в современнных материнках.
                                                      Т.е. сначала грузится рабочая прошивка из 0-й страницы ПЗУ, а если CRC не сошлась или еще что-то помешало нормальной загрузке, то грузится запасная из 1-й страницы.
                                                    • 0
                                                      Можно =)
                                                      • 0
                                                        Подскажите в какой блог лучше поместить?
                                                        Может DIY или Сделай Сам?
                                                      • 0
                                                        Классная статья!
                                                        Напомнило студенческие годы и микроконтроллеры семейства PIC.
                                                        Вот только там конечно на ассемблере приходилось кодить. Компилятор
                                                        для них на С++ появился попозже.
                                                        • 0
                                                          Замечательная статья! Сам учусь на программиста по специальности 230105 (ПО выч. техн. и авт. систем), у нас на 5 курсе будут ПЛИСы на базе Xilinx-а. Баловался с мк AVR и думал перейти на что-то концептуально новое — подумывал купить Spartan Starter Kit(правда не знаю насколько это оправдано — если есть знающие хабравчане — подскажите!).
                                                          зы. если возможно — как нибудь оформите блоки кода(хотя бы табуляцией) — а то трудно разобраться…
                                                          • 0
                                                            Если подскажите как оформить — сделаю :) Табуляции есть, только тег их похоже съел
                                                          • 0
                                                            Если у вас есть большое желание дальше работать в этой сфере, то Spartan Starter Kit вам точно пригодится.
                                                            Я только недавно сдал лабораторные по ПЛИС-ам, которые на нем же и проверялись. Плата позволяет поиграться с кучей всего. А когда станет скучно, то можно воспользоваться многочисленными портами ввода-вывода и поработать с подключенными к ним устройствами =)

                                                            З.Ы. если бы не заградительная цена, я бы давно купил бы себе такую штуку =)
                                                          • +1
                                                            Прочитал я статью — и вспомнил, что через неделю по ПЛИС экзамен, черт;)
                                                            • 0
                                                              Во сколько весь кит обошелся и где конкретно заказывали (можно в личку, если не хотите рекламировать)? А то нашелся только один магаз с ценой почти в 9к
                                                              • +2
                                                                Покупал в ЭФО (спросил по e-mail который у них на сайте) отдали за $193,54 + $30 доставки.
                                                                Работает отлично, правда на защитном стекле (поверх платы, на видео видно) трещина, которая была явно до доставки. Пока они это мне никак не прокомментили, хотя я им написал. Но все таки праздники, так что не буду раньше времени ругать
                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                  • 0
                                                                    Просто на офсайте у них висит цена в 150 баксов, видимо, это оптовая. Ну 200 баксов это все равно не 8600р, как некоторые компании у нас предлагают.
                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                      • 0
                                                                        Да ладно, не утруждайтесь =)
                                                                        Мне это бы пригодилось как курсовой проект на следующий семестр — лучше посоветуйте ПЛИС попроще, чтобы не забивать гвозди микроскопом.
                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                • 0
                                                                  Заворожился бинарными секундами… эх наручные такие захотелось. самому делать — громоздко будет (да пока что и не дорос ещё), а покупать — слишком уж дорого возьмут
                                                                  За статью спасибо, действительно интересно получилось!
                                                                  • 0
                                                                    самому такое сложно сделать, да и не на плисах это делать лучше все таки… плюс однозначно самому плату разводить, причем двухстороннюю… вполне возможно что дешевле суммарно получится именно купить :)
                                                                  • +3
                                                                    такие железки для таймера использовать — как из пушки по воробьям.
                                                                    • 0
                                                                      Это называется обучение :) Нельзя сесть и сразу видео контроллер написать, даже простенький.
                                                                      • 0
                                                                        Может на микроконтролере и плис было бы боле изящно и показательнее? И безо всяких kit'ов(которые и ждать долго, да и недоступны они некоторым)?
                                                                    • +1
                                                                      У SUN-a есть интересный проект — OpenSPARC.

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

                                                                      Не помню сколько такие платы стоят, но в крупных университетах, которые сотрудничают с SUN (к примеру, у нас в КПИ) все это предоставляется бесплатно в обучающих целях.
                                                                      • 0
                                                                        Немного ошибся. Виндовс на архитектуре SPARC нельзя запустить :)
                                                                        Запускают OpenSolaris, FreeBSD, Linux и еще некоторые *nix.
                                                                        • 0
                                                                          есть еще такая вещь как LEON3, тоже спарк, GPL лицензия и по полной программе используется в космосе
                                                                          • 0
                                                                            Вы не подскажите, сколько та штука стоит? В смысле плата процессора плюс плата расширения. А то я на сайте нифига не нашел. Я про www.ORSoC.se говорю.
                                                                        • 0
                                                                          Большое спасибо за статью! В прошлом семестре столкнулся с программированием ПЛИС, очень интересно!
                                                                          Мы программировали и строили схемы переходов в XILINX.
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                            • 0
                                                                              это не процессор.
                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                            • 0
                                                                              делал такое же на 8-битном процессоре еще на 2м курсе, кажется он назывался at89c2051. к плисам тогда так руки и не дошли…
                                                                              хорошая статья, спасибо!
                                                                              • 0
                                                                                Дайте ваши результаты:
                                                                                Speed/Area Report.
                                                                                Device utilization summary в частности интересно.
                                                                                • 0
                                                                                  ну что сказать!? Автор — вы молодец! Очень качественная работа, вашу статью — да в учебник для начинающих.
                                                                                  • 0
                                                                                    а где у них можно почитать про стартовые наборы? нашел только на англоязычном сайте www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html
                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    • 0
                                                                                      КТиУ ВТ в ИТМО занимаются этим самым (не подумайте ничего, я про программирование на ПЛИС;)

                                                                                      На самом деле у нас там есть все, в частности стенты sdk разные и куча крутых железяк…
                                                                                      Загляните на embedded.ifmo.ru
                                                                                      • 0
                                                                                        Сколько циклов перезаписи у данной микрухи?
                                                                                        • 0
                                                                                          Перепрограммируется не FPGA, а конфигурационная память, в моем случае EPCS4.
                                                                                          Согласно даташиту:
                                                                                          Re-programmable memory with more than 100,000 erase/program cycles

                                                                                          После чего можно эту микруху заменить (не более 50 рублей она стоит)
                                                                                          • 0
                                                                                            Еще стоит написать, что для разработки я использую прошивку прямо в ПЛИС, минуя конфигурационную память. При этом функциональность аналогичная, но после падения питания прошивка слетает. Для разработки вполне хватает и не тратятся никакие ресурсы. Достигнув сколько-нибудь стабильной разработки можно записать её в память.
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                          • 0
                                                                                            а на пальцах рассказать, чем эти ПЛИС хуже или лучше atmega контроллеров?
                                                                                            • 0
                                                                                              Это другое :) Не путайте теплое с мягким :)
                                                                                              • 0
                                                                                                Докажите. Тот же таймер легко делается на AVR.
                                                                                                • 0
                                                                                                  Ох. Ну вы во-первых почитайте про что такое ПЛИС и что такое микропроцессоры.
                                                                                                  Ну а если «на пальцах» — программируя ПЛИС — вы создаете логические элементы, связи между ними. То же самое можно спаять на, к примеру, ИЛИ-НЕ логике.
                                                                                                  Выигрыш ПЛИС в том, что:
                                                                                                  1) они компактны
                                                                                                  2) перепрограммируемы
                                                                                                  3) быстры.

                                                                                                  Программируя же микропроцессор вы просто пишете программу — по сути инструкции процессору что делать.
                                                                                                  Вкратце: микропроцессор — интерпретатор программ, ПЛИС — устройство.
                                                                                                  Да, делать можно много похожего и на том и на том, нужно просто знать где и что стоит использовать.
                                                                                                  • 0
                                                                                                    Во. Спасибо. Я не тролль.
                                                                                                    Просто остро встал вопрос использования контроллеров в тюнинге. Начал изучать AVR.

                                                                                                    Как решен вопрос преобразования аналогово сигнала в цифровой в ПЛИС? Например, показания датчика давления масла и тп…
                                                                                                    • 0
                                                                                                      А никак, AFAIR :) ПЛИС — это всего лишь логика. Там нет перифирии. Нужно будет купить отдельную микросхему ADC (ЦАП) и использовать данные, которые она отдает.
                                                                                                      Для таких устройств я бы рекомендовал все же микропроцессоры использовать.
                                                                                            • 0
                                                                                              а вы сделаете на одном кристалле атмеги четырехпроцессорный компьютер с поднятой микро-осью и tcp с web интерфейсом?
                                                                                          • +1
                                                                                            Для будущего. Обычно логику отделяют от защелкивания в триггере. Например, в случае делителя, один блок вычисляет новое значение, а второй защелкивает его на триггере. Такое деление помогает избавиться от всяких забавных ошибок синтезаторов и использовать возможности триггеров на полную.
                                                                                            Если захотите попробовать verilog, то луший симулятор из доступных за так gplcver.sourceforge.net/ (ну и не за так тоже).
                                                                                            • +1
                                                                                              Спасибо за статью :) Давно хотел сам написать, да все руки не доходили.

                                                                                              Вот кстати, есть сайты с хреновой кучей всяких наработок. Готовые интерфейсы, опен сурсные проекты. В том числе и серьезные, вроде ОО или Java процессоров, и прочего. www.fpga4fun.com/ www.opencores.org
                                                                                            • 0
                                                                                              Автору пожелание — разобраться с понятиями CPLD и FPGA. То, что написано в статье мягко скажем немного не верно — не вводите людей в заблуждение.
                                                                                              Для примера, возьмите максимальные тактовые частоты достижимые на CPLD MAX II и FPGA Cyclone III — пойдет в разрез с вашими утверждениями что cpld быстрее.
                                                                                              • 0
                                                                                                Ключевое слово в статье — обычно. Разница между этими терминами очень размыта, во всех местах, где я про них читал — было слово ОБЫЧНО. К тому же быстродействие — это не только пиковая возможная чатсота. У близких по технологичности FPGA и CPLD однозначно можно сказать что задержка PtP (Pin-To-Pin) меньше у CPLD.

                                                                                                У Xilinx об этом можно прочитать тут: www.xilinx.com/support/answers/7598.htm

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

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

                                                                                                Ваш пример также не убедителен, MAXII разработан давным-давно по 0,18 мкм технологии. А CycloneIII недовно по TSMC 65 нм технологии. А заявленные частоты:
                                                                                                MAXII — 300MHz
                                                                                                CycII -315MHz

                                                                                                Если вы напишите свои определения для CPLD и FPGA, буду рад почитать.
                                                                                                • 0
                                                                                                  Обычно — не слово нормального железячника.

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

                                                                                                  2.cpld построены по технологии энергонезависимой flash памяти и сохраняют конфигурацию при сбросе питания.
                                                                                                  fpga построены по технологии sram — статической энергозависимой памяти. теряют конфигурацию при потере питания. нуждаются во внешнем конфигурирующем устройстве (не обязательно спец.микруха EPCS)

                                                                                                  3. 300MHz internal clock frequency rates не есть быстродействие изготовленного на cpld девайса. откомпилируйте ваш проект на максе (если влезет) и на cyclon-e в разделе timing analyser репорта компилятора будут реальные цифры. (хотя я могу вобщем-то и ошибаться. давно с cpld не работал, но традиционно считалось что максоподобные цплдшки тормознутые по сравнению даже с первыми flex-ами)

                                                                                                  плюс есть куча архитектурных особенностей у cpld и fpga (типа возможности синтеза чистых триггеров не на логике) которые важны при проектировании сложных устройств. Вобщем тщательно почитать что-то типа www.altera.com/literature/hb/cyc3/cyclone3_handbook.pdf и все проясниться:)
                                                                                                  • 0
                                                                                                    Т.е. ваши критерии точные и подходят для всех CPLD и FPGA? никаких обычно?

                                                                                                    FPGA XC3S50 == $8
                                                                                                    CPLD XC95108 == $31
                                                                                                    (с одного магазина Avent, офф. поставщик)
                                                                                                    Далее, про скорости вы ничего не ответили, задержка PtP у CPLD ОБЫЧНО меньше.

                                                                                                    Есть много разных параметров, заморачиваться этим, я считаю, не стоит. Производители сами решат- что CPLD, а что FPGA. А при выборе надо смотреть какие функции и характеристики, и также цены нужны.
                                                                                                    • 0
                                                                                                      еще раз.

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

                                                                                              • 0
                                                                                                Хехе, а мы на лабах делали синтезатор аналоговых сигналов на основе дельта-сигма модулятора :) На стратиксах правда, но думаю и циклон должен потянуть, главное чтоб на плате где-нибудь был RC-фильтр.
                                                                                                • 0
                                                                                                  Мы в нашем политехе (Чернигов, Украина) не только простые лабы и курсовые на чипках от Altera и Xilinx делаем, но и OpenSource проекты систем на кристалле с использованием OpenRISC и Wishbone — OpenRISC XSoC.

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

                                                                                                  Самое читаемое