• Junior FPGA Design Engineer: как стать?

      Всем привет!

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

      Разработка под FPGA (ПЛИС) — это не просто какой-то язык. Это очень объемная область, с огромным количеством подводных камней и нюансов.

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

      Добро пожаловать под кат!
      Читать дальше →
    • Как я ошибся при написании хеш-таблицы и какие выводы из этого сделал

        Для ясности теоретического понимания нет лучшего пути, чем учиться на своих собственных ошибках, на собственном горьком опыте. (Фридрих Энгельс)

        Всем привет!


        Несколько недель назад мне в линкедине написал коллега и сообщил, что в моем проекте на гитхабе не совсем верно работает хеш-таблица.


        Мне прислали тесты и фикс, и действительно создавалась ситуация, где система "зависала". При расследовании проблемы я понял, что допустил несколько ошибок при верификации. На Хабре тема верификации RTL-кода не слишком подробна расписана, поэтому я и решил написать статью.


        Из статьи вы узнаете:


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

        Добро пожаловать под кат!

        Читать дальше →
        • +35
        • 22,9k
        • 9
      • Altera + OpenCL: вскрываем ядро



          Всем привет!

          В прошлой статье я запустил простой OpenCL пример на FPGA фирмы Altera:
          // ACL kernel for adding two input vectors
          __kernel void vector_add( __global const uint *restrict x,  
                                    __global const uint *restrict y,  
                                    __global       uint *restrict z )
          {
              // get index of the work item
              int index = get_global_id(0);
           
              // add the vector elements
              z[index] = x[index] + y[index];
          }
          

          Я намеренно не углублялся в детали и показал верхушку айсберга: процесс разработки, сборку проекта, запуск на системе.

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

          В этой статье мы попробуем вскрыть ядро и найти ответы на следующие вопросы:
          • Какая у него архитектура?
          • Как происходит его настройка? Как попадают данные на обработку?
          • На какой частоте он работает? Чем это определяется?
          • Можно ли просимулировать только ядро в RTL-симуляторах?
          • Какие блоки занимают больше всего ресурсов? Можно ли как-то это соптимизировать?

          Давайте взглянём на его внутренности! Добро пожаловать под кат!
          Читать дальше →
          • +25
          • 12,8k
          • 6
        • Altera + OpenCL: программируем под FPGA без знания VHDL/Verilog

            image

            Всем привет!

            Altera SDK for OpenCL — это набор библиотек и приложений, который позволяет компилировать код, написанный на OpenCL, в прошивку для ПЛИС фирмы Altera. Это даёт возможность программисту использовать FPGA как ускоритель высокопроизводительных вычислений без знания HDL-языков, а писать на том, что он привык, когда это делает под GPU.

            Я поигрался с этим инструментом на простом примере и хочу об этом вам рассказать.

            План:

            Добро пожаловать под кат! Осторожно, будут картинки!
            Читать дальше →
          • Ethernet + PCIe + FPGA = LOVE

              image

              Доступ по Ethernet невозможен без сетевых карточек (NIC). На небольших скоростях (до 1G) NIC встраивают в материнки, а на больших (10G/40G) NIC размещается на отдельной PCIe плате. Основным ядром такой платы является интегральный чип (ASIC), который занимается приемом/отправкой пакетов на самом низком уровне. Для большинства задач возможностей этого чипа хватит с лихвой.

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

              Какие задачи на них решают, что размещают, а так же самых интересных представителей вы увидите под катом!

              Осторожно, будут картинки!
              Читать дальше →
            • Как Python и Jinja могут облегчить жизнь FPGA разработчику

                Всем привет!

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

                Один из вариантов — использование автогенерации кода.

                В этой статье я расскажу:
                • как можно обойти одно из ограничений языка Verilog, применяемого при разработке ASIC/FPGA, используя автогенерацию кода с помощью Python и библиотеки Jinja.
                • как можно ускорить разработку IP-ядер, сгенерировав модуль контрольно-статусных регистров из их описания.


                Если интересно, добро пожаловать под кат!
                Читать дальше →
              • Делаем тетрис под FPGA

                  Всем привет!

                  imageНа этих долгих новогодних выходных я задался вопросом: насколько легко написать какую-то простенькую игрушку на FPGA с выводом на дисплей и управлением с клавиатуры. Так родилась еще одна реализация тетриса на ПЛИС: yafpgatetris.


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


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

                  Читать дальше →
                • Пару слов о конвейерах в FPGA

                    Всем привет!

                    Многим известно, что во всех современных процессорах есть вычислительный конвейер. Бытует заблуждение, что конвейер — это какая-то фишка процессоров, а в чипах для других приложений (к примеру, сетевых) этого нет. На самом деле конвейеризация (или pipelining) — это ключ к созданию высокопроизводительных приложений на базе ASIC/FPGA.

                    Очень часто для достижения высокой производительности выбирают такие алгоритмы, которые легко конвейеризируются в чипе. Если интересно узнать о низкоуровневых подробностях, добро пожаловать под кат!
                    Читать дальше →
                  • Взгляд на 10G Ethernet со стороны FPGA разработчика

                    Всем привет!

                    Многие специалисты знают, что топовое сетевое оборудование использует специальные чипы для обработки трафика. Я принимаю участие в разработке таких молотилок и хочу поделиться своим опытом в создании таких высокопроизводительных девайсов (со интерфейсами 10/40/100G Ethernet).

                    Для создания нового канала сетевики чаще всего берут оптику, пару SFP+ модулей, втыкают их в девайсы: лампочки радостно загораются, пакеты начинают приходить: чип начинает их передавать получателям. Но как чип получает пакеты из среды передачи? Если интересно, то добро пожаловать под кат.
                    Читать дальше →