Arnold Enginegger
699 subscribers
38 photos
4 videos
12 files
81 links
Тоже хочу в блогеры
Download Telegram
Рубрика "А что, так можно было?".
У верилятора есть опция —unused-regexp, которой можно задать шаблон имени неиспользуемых сигналов. По-умолчанию это *unused*. Т.е. если у вас в коде есть неиспользуемый сигнал с именем, включающем unused, то верилятор на него ругаться не будет, и не нужно будет вставлять lint_off UNUSEDSIGNAL.
👍9
В Yosys есть интересная фича, которой, похоже, нет в других синтезаторах - возможность вызова функций DPI для установки параметров и инициализации регистров.

Для этого достаточно подключить библиотеку .so командой plugin:

plugin -i my_lib.so


А затем импортировать функцию в код на SV и вызвать:

import "DPI-C" function integer my_func (integer);
localparam PARAM1 = my_func(PARAM0);


Т.к. библиотека подгружается один раз при старте yosys, можно использовать статические и глобальные переменные для сохранения контекста.

Фича может быть весьма полезной. Например, в ЦОСе часто нужно предвычислять всякие коэффициенты. Использовать для этого генерируемые внешними скриптами таблицы не очень прикольно, т.к. теряется возможность параметризации модуля. Рассчитывать силами SV тоже не сильно здорово, потому что обычно это работает медленно и синтезатор поддерживает далеко не все возможности языка (в Yosys, например, очень сложно полноценно использовать real - можно вычислять выражения с плавающей точкой, но нельзя создавать переменные).

А через DPI можно вызвать не только Си-функции, но и например Python (sic!), или мою любимую Scheme. Они достаточно просто эмбеддятся в Си.

Есть и ограничения:

1.  Поддерживаются только типы integer, real, shortreal и chandle. Жаль, что нельзя передавать строки, но если очень хочется, то можно воспользоваться костылём - передавать до 8 символов через аргумент типа chandle. Это указатель, и на 64-разрядных машинах его длина 8 байт.

2.  В качестве аргументов подходит не всё. Например, можно передать итератор цикла во время инициализации памяти (mem[n] = init_func(n)), но нельзя передать саму инициализируемую переменную (some_func(mem[n])), ругается на нестатический аргумент.

3.  Нельзя вызвать функцию, которая возвращает void, yosys почему-то путает этот вызов с вызовом таска и ругается, что такого таска нет. Если всё же нужно вызвать такую функцию, то нужно вызвать её с присвоением возврата чему нибудь - переменной в initial, или неиспользуемому параметру. Запостил issue по этому поводу (Под номером 4096 😊).

В качестве примера написал небольшой тестовый код.
🔥101
С Новым Годом, коллеги! Новых отладок вам и пусть в новом году светодиоды горят ещё ярче, слаки будут ещё положительней, а покрытия ещё шире!
🎉9🍾4🔥2
По поводу соблюдения стандартов. Не первый раз замечаю, что iverilog строже следует стандартам, чем другие симуляторы. Вот ещё один пример - присвоение значения enum'у.

Вот такой код не проходит компиляцию в iverilog, тогда как verilator и modelsim/questa не выдают ни ошибок ни предупреждений:

    typedef enum {
ST_ONE,
ST_ZERO
} state_t;

state_t state;
logic a;

always_comb
state = a ? ST_ONE : ST_ZERO;


Ошибка состоит в том, что переменной state потенциально может быть присвоено значение X, потому что тернарный оператор "пропускает" иксы из условия на выход (такое поведение называется X-pessimism). Но иксы не являются допустимым значением для типа state_t. Согласно стандарту (раздел 6.19.3) такая ситуация является ошибкой.

Есть два очевидных пути исправления:

1. Использовать if/else, т.к. это X-оптимистичный оператор
2. Явно привести тип тернарного выражения к state_t

Менее очевидное решение - использовать тип bit для сигнала a. Этот тип не может принимать неопределенного значения, по этому и нарушений при присвоении перечислению не будет.

А вот с верилятором "не всё так однозначно" - у него же в принципе нет иксов, по этому стандарт он как бы и не нарушает вовсе :)
🤔2
Оказывается несколько лет назад кто-то даже открыл issue на этот счёт и попутно предложил использовать case equality (===). Это, наверное, самое правильное решение, т.к. по стандарту этот оператор всегда возвращает 0 или 1, никаких иксов.
Друзья, уже всего через несколько дней - 11 марта, состоится запуск курсов!

«Практические навыки работы инженер-радиоэлектронщика» (схемотехника и трассировка печатных плат)
«Программирование микроконтроллеров»
«Основы проектирования устройств на базе ПЛИС»
«Практические навыки трассировки печатных плат»
«Программирование микроконтроллеров с использованием ОСРВ FreeRTOS»
«ПЛИС внутрисхемная отладка и оптимизация»

Сейчас самое время записаться на курс, т.к. набор уже почти завершен!

Чтобы узнать цену и записаться на курс, оставляйте заявку на сайте: записаться на обучение
🔥3💩2🤮1🖕1🤓1
Forwarded from позитивслэк (Bogdan)
1800-2023 - IEEE Standard for SystemVerilog

SV-2023 in da house! На этой неделе на DVCon 2024 презентовали новый стандарт.

Дейв отписался в блоге Siemens, что он свободно доступен через IEEE Get Program. Однако, нужна регистрация чтобы его скачать. Товарищи, может кто-то сможет помочь?

#system_verilog
@positiveslack
IEEE-1800-2023.pdf
9 MB
Условно-бесплатная копия стандарта SystemVerilog 2023. Без палева вотермарков.
👍7🔥31
Вот :) С 8 марта!
🎉5👎1🥰1
TANG_MEGA-138K-Pro_4072_Schematics.pdf
1.9 MB
Пост для опенсорс-скептиков. В приложении пример использования опенсорса (KiCAD) в коммерческой разработке. Конечно, устройство несложное, но тем не менеее.
❤‍🔥4🔥1🤮1💩1🖕1
mandelbrot.gif
1.8 MB
Ещё одна интересная реализация RISC-V. На этот раз разработчик задался целью сделать среднее между небезызвестным SERV и ядром обычной параллельной природы. Степень сериализации выбирается параметром, что даёт возможность гибко настраивать отношение площади к производительности.
На гифке нагладное сравнение скорости работы ядра при разных значениях параметра.
Разница в ресурсах между самым быстрым и самым медленным вариантом примерно два раза.
👍6🤮1💩1🖕1
Forwarded from Записки CPU designer'a (Николай)
ESP the open-source SoC platform

ESP - это открытая платформа для проектирования и создания гетерогенных System on a chip c возможностью прототипирования системы на FPGA. В будущем планируется также поддержка ASIC design flow.
ESP предоставляет гибкую tile-based архитектуру, построенную на multi-plane network-on-chip

Обзор проекта представлен авторами в статье Agile SoC Development with Open ESP.

В проекте вы найдете знакомые многим RISC-V энтузиастам названия открытых процессорных IP: Ariane (CVA6), ibex, LEON3 (на базе SPARC V8 32-bits ISA). Но самые внимательные увидят на изображении floorplan'а чипа в заголовке поста NVDLA —opensource Deep Learning Accelerator от Nvidia.

Как мы видим, ESP может служить платформой для интеграции сторонних IP-блоков, который может быть размещен на любом из тайлов ESP платформы.

Судя по домашней странице проекта, вся система спроектирована при помощи языка конструирования аппаратуры Chisel и High-Level Synthesis инструментов.
Исходники на HDL, доступные в репозитории проекта, либо относятся к сторонним IP-ядрам/ускорителям, либо созданы с использованием инструментов SoCGen и SocketGen.

Ссылки на проект ESP:
1) github репозиторий
2) сайт проекта
3) документация и туториалы
4) коллекция научных публикаций по тематике проекта ESP

p.s. если кто-то поймет что за Night Vision в правом нижнем углу флурплана чипа - отпишите в комментарии 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
🤮1💩1🖕1
Не стесняемся, заказываем 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from позитивслэк (Bogdan)
Цифровой синтез: RISC-V

Неожиданно затесался в приложение книги "Цифровой синтез: RISC-V".
Штош, теперь, хочешь не хочешь, надо брать. Спасибо Вождю!

P.s. кстати топовые каналы, рекомендую подписаться =)

#book
@postivelsack
🔥7👍21🤮1💩1🖕1
Возможно это глупый вопрос, но я рискну. Представьте, что у вас есть слейв, принимающий 32 бита по AXIS-подобной шине (хендшейк valid/ready) и выполняющий обработку данных побайтно. Возможны два варианта действий:

1. В режиме ожидания вы держите ready в единице. Как только приходит valid, защелкиваете все 32 бита в регистр, снимаете ready и начитаете побайтную обработку. По окончании поднимаете ready.

2. В режиме ожидания держите ready в нуле. По приходу valid начитаете побайтную обработку, снимая байты непоследственно с шины. По окончании дергаете ready.

В общем, оба варианта приемлемы, т.к. в спеке на AXI не требуется, чтобы ready был активен до прихода valid, а однажды выставленный valid не может быть снят до прихода ready. С другой стороны, второй вариант может порушить времянки, если данные от мастера формируются через комбинационные цепи. И возможны проблемы с арбитражем, если арбитр полагается на ready.

Что вы думаете по этому поводу? В комментах создам опрос, заходите.
🤮1💩1🖕1
Столкнулся с очередным багом Верилятора: функция $random$urandom тоже) с одинаковым начальным сидом генерит разные последовательности. Этого конечно не должно быть, и другие симы это подтверждают - проверил на Икарусе и Квесте. Однако, семейство функций $dist_* работает правильно. Так что если вам понадобится в одной программе генерить одинаковые случайные последовательности, пользуйтесь $dist_uniform вместо $random/$urandom.

Запостил issue.

PS: Ни слова про опенсорс. Уверен, что ошибку быстро исправят ;)

Дополнение. Такое поведение наблюдается только при seed == 0. Посмотрел исходники, там есть тест на равенство $random с одинаковым seed, но seed устанавливается в 10.
👍2
Мне сказали, чтобы я шел в жопу со своими issue 🙂

> Verilator follows C's seeding conventions where seed 0 means "pick a new seed". For compatibility reasons we are unlikely to change this. Don't use zero.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😱1🌚1
🔥112👍2🤔1
Вышел релиз 0.0.12 тула для конвертации системверилога в верилог - sv2v. В новой версии исправили множество ошибок и добавили некоторые полезные улучшения. Например, always_comb и always_latch, которые преобразуются в обычный always, теперь выполняются в нулевом времени, как этого требует стандарт. Список наиболее значимых изменений найдёте по ссылке и в списке закрытых issue.
Напомню, что проект sv2v изначально разрабатывался с целью обеспечить поддержку SV в синтезаторе Yosys. В связи с этим, преобразование несинтезируемого SV в нём на зачаточном уровне.
👍7
Doka запостил ссылку на список проектов на гитхабе, отсортированных по популярности. Список давно не обновлялся и не включал в себя SystemVerilog, по этому я сделал форк и обновил данные. Оставил только Verilog и VHDL, и добавил SystemVerilog и Bluespec. К сожалению, в списке поиска гитхаба больше нет HDL языков 🤷‍♀️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🎉1
Вышел второй номер журнала FPGA-Systems Magazine :: FSM :: № BETA (state_1)! Много интересного. От меня тоже есть небольшая заметка про быстрое вычисление медианы. Качайте, читайте. Вопросы и комменты можно оставлять в специальной группе.
3