Перейти к содержанию
    

nice_vladi

Свой
  • Постов

    383
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные nice_vladi


  1. 2 minutes ago, Tpeck said:

    А раньше каким образом вы проводили тестирование?

    В моих приложениях, по сути, один вход - один выход. Может по-этой причине мне не очевидны преимущества UVM.

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

    Пока решил следующим образом.

    В тесте:

    for (int i = 0; i < pN_PORTS; i++) begin
      eth_seq[i] = eth_sequence::type_id::create($sformatf("eth_seq[%0d]", i));
      eth_seq[i].randomize();
      eth_seq[i].dmac = pMAC_DST[i];
    end
    ...
    eth_seq[i].start(m_env.m_agent[idx].m_sqr);
    ...

    В sequence:

    virtual task body();
      frame_h = eth_frame_broad::type_id::create("frame_h");
      start_item(frame_h);
      assert(frame_h.randomize());
      frame_h.set_dmac(dmac);
      finish_item(frame_h);
    endtask : body

    И внутри самого uvm_sequnce_item:

    function set_dmac (bit [47:0] mac);
    	this.dmac = mac;
    	this.fcs_upd();
    endfunction : set_dmac

    На мой взгляд, достаточно коряво. Но, в целом, приемлемо. Все изменения будут сделаны в высокоуровневых файлах тестов, в глубь лезть не надо.

    В мануалах не нашел ничего интереснее. uvm_config_db более громоздко и менее производительно (основываясь на рекомендациях из док).

  2. 1 minute ago, Tpeck said:

    А в чём смысл использования UVM?

    Я буквально недавно начал серьезно погружаться. После того, как разрабатываемое тестовое окружение выросло до неприличных размеров и стало не управляемо и не масштабируемо. Здесь, конечно, есть проблема и кривых рук. Но отлаживать и, самое главное, верифицировать Н-портовый Ethernet коммутатор стало почти физически больно.

    От UVM ожидаю получить более-менее структурированное окружение, облегчение описания и проведения наборов тестов, упрощение работы с недетерминированным порядком передачи и задержками в данных. Плюс встроенные инструменты подсчета ошибок, репортов и т.д.

    Насколько это всё спасёт и упростит верификацию - пока не знаю, время покажет.

  3. Всем здравствуйте,

    Разбираюсь с UVM. В какой-то момент перешел к "боевому" проекту. Задача следующая:

    Нужно передать в GMII порт(-ы) набор Ethernet пакетов. В каждом пакете существуют поля mac destination и mac source. Поле mac source допускается задавать статично на этапе сборки, с этим проблем нет. Я хочу динамически менять поле mac destination. На текущем этапе в классе uvm_sequence_item я состряпал функцию set_dmac (bit [47:0] mac).

    Не уверен, что это правильный способ. Да и не слишком удобно - приходится вызывать эту функцию в uvm_sequence, куда, в свою очередь, опять нужно динамически передавать нужный MAC адрес.

    Собственно, вопрос: как, с точки зрения UVM, правильно изменять значения в uvm_sequence во время runtime?

    ЗЫ. Открыл для себя `uvm_do_with, поэтому часть вопроса снимается)

    ЗЗЫ. Пока писал, немного посветлело в голове. Пришел к выводу, что под каждый порт должны создаваться несколько sequence со статичными MAC source. И уже в них передавать MAC destination. Выглядит логично, хотя и очень громоздко

  4. Цели и задачи всегда важны. Смотрите:

    Хотите ускорители на ПЛИС реализовать? Тогда hdl/hls.

    Хотите на видеокартах считать? Тогда python/C + CUDA и иже с ними.

    Хотите на серверах что-то делать? Там python массово распространён.

    В общем, на чем хотите - на том и пишите. Хоть на Deplhi, никто же не ограничивает.

    Сделать-то что надо?)

  5. 3 hours ago, Digi said:

    ... вручную удается выставить необходимые задержки, чтобы это всё работало...

     

    Тоже руками крутил delay в IO портах. И тоже *иногда* собиралось так, что паттерн передавался без ошибок. После кучи убитого времени пришел к тому, что всё это самообман, и "рабочие" сборки - просто удачно разложенные регистры, чисто случайно. Но, может быть, у вас получится чего-то добиться. Будет интересно прочесть про рабочий вариант.

    ЗЫ. А тестовый паттерн сколько времени проверяли? Сколько бит тестового паттерна принимается подряд без ошибок? 10^5? 10^9?

  6. 12 hours ago, Digi said:

    ...

    Помогите правильно прописать констрейны, чтобы при перекомпиляции не слетали времянки.

    ...

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

    Кстати, а тестовый паттерн верно принимается? Нет ошибок?

  7. 9 hours ago, yes said:

    хочется к ней прикрутить симуляцию. не то что там что-то сложное, но тест в программе, классы и т.п.../

    ...

     

    Есть неплохая статейка от ребят fpga-systems.ru:

    https://fpga-systems.ru/publ/jazyki/systemverilog/uvm_test_tablicy_sin_cos/13-1-0-120

    Там на пальцах создание tb + UVM как раз для вивадовского симулятора, мб что-то почерпнете оттуда. В конце есть ссылка на репозиторий, можно качнуть и запустить. У меня на Vivado 2020.1 проект запустился сразу, без проблем.

  8. В генераторе IP ядра на последней вкладке можно поставить галочку, которая отвечает за генерацию .bsf/.bdf файла, который и будет блоком-символом

  9. 2 hours ago, radiolabs said:

    Целевая поисковая лаборатория прорывных технологий радиосвязи Фонда перспективных исследований

    Дикий оффтоп, но меня, почему-то, очень восхищают такие названия. "Целевая, прорывная, перспективная". Как это придумывают?!

  10. 2 hours ago, new123 said:

    ... например i3 2 ядра против Xeon 14 ядер с одинаковой примерно тактовой 3Gz, и прирост на 14 ядрах ~10 мин на сборке, которая занимает 50мин.
    i9 10 ядер с тактовой 4.5Ghz на таком проекте снимает еще 10 мин

    Ну да, так и есть. Поэтому новые Ryzen достаточно уверенно лидируют на такой задаче. Интересно было бы еще новый Threadripper погонять.

    2 hours ago, new123 said:

    Modelsim тоже не утруждает себя по ядрам раскидывать. Читал статью, как его распараллелить, но так руки и не дошли

    По-моему, параллелиться умеет только Questasim. При это там надо не просто ключик какой-то передать симулятору, а именно писать тестбенч в несколько потоков, в общем, не тривиально.

  11. Как-то проводил опыты на разных процессорах/ОС.

    За референс берется ПК с windows 7, 8 Gb RAM 1600MHz, i3 8го поколения, HDD 7200 rpm. Проект в Quartus 13.1, Cyclone III, 50 тысяч логики. забит на 90+ процентов.


    Начинаем тестировать:

    Перекладываем квартус и проект на SSD (~400Mbit/s) получаем -7-8% от времени сборки проекта.

    Берем вместо windows 7 ставим Ubuntu 18.04 получаем еще -7-8% от времени сборки.

    Это чисто относительные величины, в абсолютном времени на референсном ПК проект собирался около 2 часов, точно уже не помню.

    Выводы: нужен linux+SSD. Как минимум SSD, если к linux испытываете отвращение, либо в конторе не принято с ним работать.
     

    Так же совсем недавно проверял компиляцию на разных процах. Были Intel i5 9600KF, Intel Xeon Gold 6256, взял себе 16 ядер из 48, AMD Ryzen 5900х. Везде SSD. Референсный дизайн уже был другой, Intel MAX10, 50 логики, забитый на 95+ процентов.

    Время сборки: Ryzen 50 мин, i5 1 час 20 минут, Xeon 1 час 8 минут.

    Есть правда нюанс в отличии тактовой частоты RAM. В i5 и Xeon память была 2600 и 2934 MHz соответственно, а у Ryzen 3600 MHz.

     

    Выводы для себя сделал такие: частота всё, ядра ничто. Тем более, Quartus, Libero SoC и, вроде, Vivado не умеют больше чем с 8 ядрами работать. Да и place&route очень плохо параллелится. Даже при 16 ядрах можно видеть, что одновременно загружены только 1-2..-5.

     

    Так что, злой комп для разработки под ПЛИС на сегодня это:

    AMD Ryzen либо Intel i9 с топовыми в семействе частотами, число ядер не важно.

    32+ Гб RAM предельной частоты, поддерживаемой процессором

    SSD >400 Mbit/s

    Linux

    Ну и видюшка какая-то, что бы встроенная не воровала у проца время

     

    Всё это, конечно, моё ИМХО, на истину не претендую.

    ЗЫ. Ну и, конечно, стоит отталкиваться от чипов, с которыми будете работать. Если там max10/CycloneIII по 10-20 тысяч логики, то вышеперечисленную конфигурацию можно смело делить на 2, а то и на 4)

    ЗЗЫ. А еще под Linux QuestaSim умеет в параллельную симуляцию) Правда для этого надо очень правильно писать тестбенчи.

  12. 12 minutes ago, Александр77 said:

    - если один или несколько каналов поднять на середину и выше, то сигналы странным образом обрезаются (см рисунки)

    С учетом того, что данные бинарные, очень похоже, что где-то с разрядностью промахнулись. И случилось переполнение.

  13. Я бы попытался найти отладку от производителя и на ней попробовал бы получить характеристики. А потом уже разбирался со своим железом. Такой подход позволит исключить ошибки при разводке своей платы, в своем софте и т.д.

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

  14. Диплом, который подкреплен работающей железкой - это 100% защита на 5. Во-первых. Во-вторых, собирая даже такую дорогую, и чего уж тут, неоптимальную и кривоватую (относительно промышленных образцов) железку вы получите уникальный, колоссальный и полезный опыт, который 100% пригодится вам в дальнейшем.

    А пытаться соревноваться с промышленными, серийными образцами не стоит. В них залиты годы человеко-часов.

    ЗЫ. Трансиверы от АД тоже нормальная тема. Если осилить схемотехнику и настройки, то это будет подешевле дискретного тракта.

  15. 14 minutes ago, des00 said:

    кстати, сейчас же идет FPGA хакатон, там пиарят отечественный софт для ПЛИС, можно попробовать его, в целях эксперимента)

    Они SystemVerilog не поддерживают. Фтопку.

  16. 1 hour ago, _sda said:

    Нет, конечно, не только еop. Дело в том что при записи второго фрейма выскакивает ошибка source_error, и как следствие результат FFT на выход не выдаётся. Т.е. нормальный результат я получаю только в первом фрейме после ресета.

    А какое количество отсчетов данных передаете в корку? Попробуйте параллельно с valid запустить счетчик. Или в этом режиме без разницы количество отсчетов на входе?

  17. А почему именно альтеровский blaster? Чем не устраивает FT2232H, один порт которой настроен на JTAG? Или родной бластер/клон дают какие-то плюшки, которые не доступны через ту же FTDIку?

    ЗЫ.

    Quote

     Крупным производителям плат это как-то удается.

    Неоднократно видел на отладках обычные FTDI или Cypress USB контроллеры, которые были настроены на JTAG и подключены к ПЛИС,

  18. 3 hours ago, _sda said:

     С какого перепуга eop выскакивает?

    Не пользовал, но:

    587726073_.thumb.png.c6bf80bd9f044223c5cc6455612e9247.png

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

  19. 3 minutes ago, des00 said:

    и в оригинальном посте про дом не сказано

    Интересно, по именам перечислят?

    Quote

    Provide official resources and home to several open-source FPGA tools related to FPGA hardware and software, maintaining an online repository of associated documentation.

    Да, справедливости ради, про сами чипы я ни слова не нашел(

  20. 1 minute ago, des00 said:

    Мне не понятно что они будут разрабатывать. Синтезаторы, симуляторы? Ну они и так есть, разного качества. Маппер и роутер, без вендора не решить. Саму плис они делать не планируют. В комментах там правильно отметили

     

    Там есть фраза "дать дом и пристанище различным open-source проектам для FPGA". Может быть, и синтезатор/placer будут развивать.

×
×
  • Создать...