Pull to refresh

Comments 9

Бесплатный альтеровский модельсим каверыдж ведь не считает?

Вообще нужно студентов учить разработке на FPGA вот так:

  1. для всех лаб, кроме последней, даем какую-нибудь маленькую и дешевую платку, и пусть хоть чипскопом, хоть методом тыка в нее тычут.
  2. для последней лабы припасаем плату, которй у студентов нет. Даем ее описание и задание на лабу. Студент пишет и верифицирует, как может. После этого даем ему одну попытку продемонстрировать работоспособность на реальном железе. Заработало — молодец, за экзамен пятерка. Не заработало — двойка. Сурово, зато как в жизни.
Красиво, но абсолютно бессмысленно. 5 только за счет дикого везения кто-то получит. Даже для опытных разработчиков задача непростая.
Вообще в больших проектах то, что ты наваял, верифицирует другой человек. Поэтому у нас, например, ни один синьор стафф архитект ничего никаким UVM-ом не верифицирует, а пишет сам себе какие-то маленькие тестбенчи, после чего шлет специально обученому индусу, который уже облепляет модуль всякими Verification IP и дальше по тестплану гоняет его и шлет гневные письма дизайнеру, когда все в очередной раз сломалось.
Простите но что это за язык на котором вы писали? Конструкции вроде begin — end и C+ конструкции в одном флаконе смущают. Как правило, когда речь идет об алгоритмах, указывают язык и платформу. Спасибо за то, что сегодня я узнал новую аббревиатуру FPGA.
как можно организовать хеш-таблицу на FPGA

В качестве HDL-языка использовался SystemVerilog и корпоративный кодинг стайл.
Обычно язык указывается до листингов… Делали ли вы замер производительности? В C# Dictionary делает миллион вставок за ~45 микросекунд(core i7 920). Мне интересно как быстро это делает FPGA?
  1. Вы задаёте вопрос не автору статьи.
  2. Если не затруднит, можно ссылку на описание измерений с C#? Честно говоря, не очень верится.
Замера производительности я не делал.

Я модуль писал для себя, чтобы размять руки в свободное время, и в продакшене не планировал использовать.
Цели обогнать какие-то готовые библиотеки (С, 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 вставок за один такт :)
[Ехидно] Вот, даже у обычных людей вызывает вопросы c++ с бегинами и ендами! ;-)
Sign up to leave a comment.

Articles