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

Имеется совет по развитию отладочная плата на базе EP4CE6E22C8N. При первом включении грузится красивый проект.

image

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

  1. Убедиться, что в поле Configuration scheme выбрано Active Serial. (Assigments -> Device -> Device and pin options -> Configuration)

    image
  2. Скомпилировать проект
  3. Сгенерировать jiс файл: File -> Convert Programming Files -> Output programming file type -> .jiс

    В том же окне выбрать тип флеш. Смотрим на схему платы, видим что у нас M25C16. Именно такой вариант Quartus не предлагает, но подойдёт вариант EPCS16.

    В том же окне ниже Input files to convert -> Flash Loader -> Add device -> Cyclone IV E -> EP4CE6
    SOF Data -> указать файл, полученный на этапе компиляции (тот, который мы хотим видеть при загрузке)

    image

    Жмём Generate.
  4. Зальём полученный jiс файл

    image

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

Комментарии (12)


  1. old_bear
    12.01.2019 08:42

    Этот факт вводит в ступор начинающего разработчика, имевшего ранее дело с микроконтроллерами.

    А что, уже появились микроконтроллеры, которым не требуется внешняя или внутренняя постоянная память, чтобы с неё загрузиться? И x86 процессоры нигде не хранят микрокод?


  1. VBKesha
    12.01.2019 10:43

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


  1. asmolenskiy
    12.01.2019 10:59

    Небо голубое, хурма вяжет…


    1. nerudo
      12.01.2019 11:34

      Это плохая хурма! Хорошая не вяжет.


      1. Disasm
        12.01.2019 12:54
        +1

        Хорошая хурма это iCE40HX8K, видимо. Там и встроенная память есть, и возможность загружаться с внешней SPI Flash, и даже опенсорсный тулчейн.


  1. DanilinS
    12.01.2019 11:38

    Этот факт вводит в ступор начинающего разработчика, имевшего ранее дело с микроконтроллерами.

    Не вводит. Если разработчик хотя-бы бегло глянул в документацию — такие вопросы не возникают. Программирование FPGA — настолько типовая, везде описанная операция, что ситуация «вводит в ступор» — это у разработчиков уровня «блондинка с последней стадией Альцгеймера».
    С нетерпением ждем статей типа «Разработчик был в шоке, когда узнал что для работы чипа нужно питание.»


  1. GennPen
    12.01.2019 14:04
    +1

    Автор открыл для себя, что если конфигурацию грузить не напрямую в FPGA, а в SPI Flash(на плате маленькая 8-ногая макросхема рядом с FPGA), то она не будет сбрасываться после перезагрузки.
    По-моему это в самом начале обучения рассказывают, когда пишешь первую программу с морганием светодиода.


  1. proton17
    12.01.2019 14:14
    +1

    Заголовок конечно хмм… ну да ладно. Скажу немного в защиту автора поста, тут проблема в том, что эта типичная плата с Ali, иногда веселые китайцы не отправляют к ней никакой документации, или только схему, иногда на китайском) Если такая плата попадет в руки начинающему разработчику/студенту/школьнику это может ввести в некоторое заблуждение. Очень часто на фирменных отладочных платах и соответственно примерах в сети рассмотрен вариант когда используется специальное загрузочное ПЗУ и оно включено в JTAG цепочку. Китайцы же любят сэкономить (это нормально) и ставят более дешевые SPI флэшки с которыми процесс загрузки чуть более нетривиальный. Так что надо просто заменить заголовок на «Как программировать ПЗУ на плате с Cyclone с Ali»


    1. Inanity
      12.01.2019 16:11

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

      … рассмотрен вариант когда используется специальное загрузочное ПЗУ и оно включено в JTAG цепочку
      Если вы о ПЗУ с встроенным JTAG интерфейсом, то оно лет 10-15 назад ещё кое-как в ходу было, сейчас это уже практически экзотика.


      1. proton17
        12.01.2019 16:32

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

        Спасибо конечно за совет, но ПЛИС-ами и ASIC я занимаюсь профессионально года с 2005, в том числе для космической аппаратуры. И статья мне смешной не кажется. Она не очень правильно преподнесена, но не более того. Я видел, в том числе и в институте, много начинающих, которых и более простые вопросы по ПЛИСам ставили в тупик. ПЛИС это не ардуина и не stm32, порог вхождения все же немного выше, не только в плане цены, но и в плане доступной информации. Так что не стоит быть столь категоричным.


        1. Inanity
          12.01.2019 17:40

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


  1. mmmmmike
    12.01.2019 21:01

    Побалуйтесь отладкой проекта с несколькими линиями тактирования в signaltap — очень пользительно.