Как стать автором
Обновить
102
0
Иван @ishevchuk

Пользователь

Отправить сообщение
Если говорить в цифрах, то при использовании ethernet-протокола задержки идут порядка 20-30-40 миллисекунд, то в InfiniBand – задержка 1-2 миллсекунды.


А можно более подробно объяснить почему (с точки зрения протокола и интерфейса) задержка меньше в 20 раз?

Как она считалась — от юзерспейса до юзерспейса через 1 (или N) свитчей?
Данная мотивация может применяться, если сотрудник хочет полностью белую зарплату, но не на столько эффективно.

Мне показалось, или автор статьи говорит о том, что белая зарплата не у всех сотрудников в компании?
Рад, что мои статьи как-то влияют на то, что делают другие люди)

Вы заморочились (в хорошем смысле этого слова) с игрой намного больше, чем я, когда делал тетрис)

Удачи в освоении разработки под FPGA!
СЗОТ.
Не про Java и не C++.
Конечно, для FPGA разработки я использую или VHDL напрямую или пишу MATLAB, который после конверсии VHDL выбрасывает — суть остается та же.

Дмитрий, mezastel, два года назад Вы спрашивали про парсер FIX'a в FPGA и очень хотели не писать на VHDL этот парсер.
В итоге, Вы использовали MATLAB для парсинга или начали «перекладывать битики» с помощью «старого языка» VHDL?
Эта статья — это мой взгляд на позицию Junior FPGA Design Engineer, и в нем не входит умение пользоваться осциллографом. У Вас может быть другой взгляд и это вполне нормально :)

Конечно, это очень спорно, потому что многие в эту «должность» вкладывают еще и умение разводить платы (т.е. схемотехника) и пр.

Я считаю, что FPGA Design Engineer должен быть в первую очередь хорошим RTL-кодером. Конечно, умение пользоваться осциллографом никому не вредит, но я лично предпочту работать с человеком, который знает что такое констрейны и метастабильность и умеет быстро писать код, но не умеет тыкать в резисторы щупом для просмотра сигналов.
  • Есть ли (где) даташит на этот чип от Интела? Сколько там ресурсов у FPGA? Сколько там трансиверов, если есть?
  • Cокет не поменялся? Я могут этот чип просто взять и вставить себе в старый сервер?
  • Поставки идут для абстрактых кастомеров с инжерерными образцами, или реально пошел масспродакт?
  • Когда чип можно будет купить в США/Европе/России в «обычном» магазине? Можно ли как-то записаться в очередь на получение чипов?
Три года назад я сам был джуниором, сорри :)

SV симулировали в Modelsim, синтезировали родным Квартусом.

Какие синтезируемые конструкции не работали у Альтеры, а работали для ASIC-синтезатора?
Всё верно.

P.S. Рекомендую глянуть топик FEC на ПЛИС, где Денис Шехалев (des00) пиарит красоту SV :).
Да вопросы такие же на самом деле.

Про что еще можно спросить:
  • оптимизация (по ресурсам и частоте)
  • конвейеризация
  • нюансы САПР'а (его дополнительные возможности, галочки для оптимизаций, например)
  • внутренние интерфейсы (семейства Avalon, AXI)
  • верификация: UVM SVA, coverage, constrained random tests


Скрытый текст
Не факт, что я сам бы без проблем ответил на все вышеперечисленные темы, потому что кое-что не использую каждый день и знаю только «со словарём».

Плюс чисто RTL-дизайнеру скорее всего не будут задавать вопросы по advanced верификации.


Ну и разумеется, вопросы по сфере, для которой будет писаться прошивка FPGA.
Если ЦОС, то можно спросить про фильтры, если Ethernet, то про то как работает свитч или роутер.

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

Если команда разрабатывает для Ethernet'a на частоте 200 МГц на Stratix V, и приходит человек с годом опыта и он делал аналогичные задачи, то этот человек «опытнее», чем тот, который пять лет делал SPI-контроллеры на частоте 20 МГц на маленьких простеньких чипах.

Понять, насколько потенциальный кандидат успешно решал задачи, легко, если с ним поболтает час или два технический специалист (читай, другой FPGA разработчик), спрашивая простые вопросы:
  • Как делали? Какая была архитектура всего проекта?
  • Какие IP-ядра использовали готовые (покупные или из опенсорса)?
  • Какие модули конкретно ты разработал? Сколько времени это заняло?
  • Какие вылезли косяки/баги?
  • Какая самая сложная проблема была?
  • Как оптимизировали? Что помогло в оптимизации?
  • Какой интерфейс использовали?
  • Как настраивали [модули или IP-ядра]?
  • Как была построена верификация?
  • Как тестировали на железе?
Вы спрашиваете вопрос из традиционного холивара VHDL и Verilog :)

Мне приятнее SystemVerilog, я знаю, что благодаря ему я более производителен, чем если бы писал на VHDL.

Предлагаю сделать маленький эксперимент:
  • Зайдите в директорию, где у вас хранится Quartus, а затем в директорию ip/altera.
  • Посчитайте, сколько там Verilog, SystemVerilog и VHDL файлов.

У меня получилось вот так:
ish@xmr:~/altera/15.1/ip/altera$ find . -name *.v | wc -l
17006
ish@xmr:~/altera/15.1/ip/altera$ find . -name *.sv | wc -l
6012
ish@xmr:~/altera/15.1/ip/altera$ find . -name *.vhd | wc -l
1321

Если оставить только с уникальными названиями файлов, то получается вот так:
ish@xmr:~/altera/15.1/ip/altera$ find . -name *.v -printf "%f\n" | sort | uniq | wc -l
4952
ish@xmr:~/altera/15.1/ip/altera$ find . -name *.sv -printf "%f\n" | sort | uniq | wc -l
2152
ish@xmr:~/altera/15.1/ip/altera$ find . -name *.vhd -printf "%f\n" | sort | uniq | wc -l
1013
Вывод простой: если душа не лежит к электронике и к FPGA, то перспективнее выбирать другую сферу.

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

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

SoC designer, ASIC architector

Интересный выбор профессии.
Как мне кажется архитектором можно быть только пройдя весь стек от RTL-разработчика до ведущего разработчика и так далее.
Для корректного ответа на этот вопрос надо сначала написать что должен делать этот человек на работе (его обязанности). (Покажите вакансии, которые смотрели).

И почему все и везде лепят матлаб?

Чаще всего матлаб лепят те компании, которые занимаются ЦОС'ом.
Спасибо за подробный ответ.

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

ИМХО, большая часть кодинг стайла — субъективная, и обсуждать её я не вижу особого смысла.
Два примера с if:
1. if( a > b )
2. if (a > b)

Кому-то больше нравится первый вариант, вариант кому-то второй. Это абсолютно нормально: и я не вижу смысла тратить время на холивары.

Пробелы гарантируют одинаковое отображение исходного кода везде (при использовании monospace шрифта, разумеется), а табы — в зависимости от настроек, но это не значит, что табы должны быть запрещены: в linux kernel их используют, и я не имею права за это в них кинуть камень. У них есть свой CodingStyle, где это явно прописано.

Тот кодинг стайл, что я скинул, это компиляция опыта (~5-7 лет коммерческой разработки) и предпочтений небольшой команды FPGA-разработчиков. Этот стиль позволял быстро (за предсказуемое время), качественно разрабатывать новые модули (сам себя не похвалишь — никто не похвалит) и осуществлять дальнейшую поддержку и багфикс кода. Версия не самая полная, потому что оригинал находится в формате wiki/html, и я постепенно переношу это в markdown, причёсывая его структуру.

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

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

Коли спрашиваете, даю советы:
  • Прочитать «Совершенный код» Макконнелла.
  • Найти в интернете или взять какой-то готовый coding-style по Verilog'у. На правах рекламы показываю тот, которым руководствуюсь я. (Версия не самая полная, я еще кое-чего там буду дописывать).
  • Не путать блокирующие и неблокирующие присваивания.
  • Разобраться, какие файлы надо класть в систему контроля версий, а какие нет. Невооруженным взглядом видно, что много мусорных файлов (например, директория db) лежит в проекте.
  • Для описания констрейнов (например, значений частот у клоков в системе) не использовался sdc-файл. По отчету project_1.sta.rpt видно, что клоки clk:inst4|clock_out[17] и PS2_CLK взяты с частотой 1 ГГц, что на самом деле, конечно не так.


YuriPanchul, вы как-то модерируете (ревьюите) проекты (и исходные коды), которые потом попадают к вам на гитхаб?
Возвращаясь к вопросу, что медленно идёт разработка:

PLDA предлагает использовать QuickPlay: http://www.quickplay.io/networking

QuickPlay enables the rapid development of FPGA based network processing applications. With QuickPlay, networking equipment manufacturers can securely open up their FPGA designs to end users. End users can modify and tune vendor’s designs or create their own networking designs without ever requiring hardware skills.

Демки, где в "удобной IDE" создается приложение с приёмом и отправкой данных на 10Gb интерфейс без Verilog'a:


Есть такая вещь как http://www.alterawiki.com/wiki/System_Console.
Если вставить в Qsys модуль "JTAG to Avalon Master Bridge", а затем написать tcl-cкрипты, которые дергают функции вида master_write/read_8/16/32, то можно писать/читать в FPGA через USB-Blaster (который в Вашем случае уже находится на плате). Дергание функций происходит "через" квартусовские программы, поэтому какого-то быстродействия не будет, но для отладки может сойти.

Так же есть In-System Memory Content Editor, который, как понятно из названия, позволяет редактировать значения памяти (указанных до компиляции FPGA, естественно) в реал-тайме через JTAG/USB-Blaster.

Если честно, не очень понял мотивацию делать парсер текста в FPGA, когда можно было бы эту задачу переложить на компьютер, с которого шьется эта прошивка (сделать скрипт/утилиту, который конвертит текст в бинарник).
Замера производительности я не делал.

Я модуль писал для себя, чтобы размять руки в свободное время, и в продакшене не планировал использовать.
Цели обогнать какие-то готовые библиотеки (С, C#, Java) я не ставил, потому что области применения немного разные ;)

Статья рассказывает о подходе к написанию RTL-кода и его верификации. Производительность в этом плане уходит на второй план.

По поводу производительности:

  1. Зависит от чипа (цены на них от 30$ до 20к$). Не на порядок, но в 3-7 раз точно.
  2. Сейчас неоптимимально сделан модуль empty_ptr_storage, и из-за этого просадится частота.
  3. Мне важно было сделать так, что если нет коллизий, то модуль готов принимать задание на поиск каждый такт. Грубо говоря, если тактовая частота модуля будет 100 МГц, то он сможет делать 100 миллионов поисков в секунду.
  4. Я сделал, что в одной ячейке data_table хранится только одно слово. Если происходят коллизии, то это слишком стопит операции. Если в одной ячейке разместить сразу четыре ключа, то тогда если в цепочке четыре ключа или меньше, можно сравнения делать в параллель и не делать дополнительных чтений.

У меня еще есть пара идей, что надо доделать и в проекте. Когда это сделаю, то может сделаю какое-то измерение производительности.

Про C#:
45 мкс = 45000 нc -> 0.045 нс = 45 ps на одну вставку. Если взять тактовую частоту 2.66 ГГц (я посмотрел на сайте Интела), что составляет период 376 ps, то как-то не верится, что можно сделать ~8 вставок за один такт :)
У любой компании, которая работает на импортозамещение и использует компоненты ведущих мировых производителей типа Marvell, Broadcom, будет зависимость от курса.
Спасибо за отзыв :)

Я не увидел сложного планировщика, когда ресурсов не хватило (я пробовал еще один дефолтный пример (перемножениее матриц)): в предварительном отчете перед запуском квартуса там фигурировали числа > 200%, и потом совершенно справедливо заругался Quartus. Возможно, когда числа очень близкие к 100% он проводит какие-то оптимизации, но я с этим не игрался.

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность