Пока одни закрываются (ДКО Электронщик), другие открываются. Пришло письмо от Резонита:
Рады сообщить, что мы запустили онлайн сервис по закупке комплектации из наших складских запасов — магазин электронных компонентов shop.rezonit.ru. Номенклатура, представленная в магазине, формируется из компонентов, которые остаются от технологических запасов на нашем контрактном производстве и остатков складских программ. Это позволяет нам предложить инженерам-разработчикам и небольшим контрактным производителям электронные компоненты по цене значительно ниже среднерыночной — со скидками до 50%.
Рады сообщить, что мы запустили онлайн сервис по закупке комплектации из наших складских запасов — магазин электронных компонентов shop.rezonit.ru. Номенклатура, представленная в магазине, формируется из компонентов, которые остаются от технологических запасов на нашем контрактном производстве и остатков складских программ. Это позволяет нам предложить инженерам-разработчикам и небольшим контрактным производителям электронные компоненты по цене значительно ниже среднерыночной — со скидками до 50%.
Копался в своих исходниках и нашёл такую конструкцию в тестбенче:
Конструкция генерит последовательность по "временной диаграмме" в виде строки. Интересная идея. Я её где-то подсмотрел, но забыл где. Можно сделать более универсальный модуль, с какой нибудь умной генерацией, с условиями, остановками и пр. Для простых линейных тестбенчей было бы наверное полезно.
seq #("-__-_--____-__") seq0 (clock, s0);Конструкция генерит последовательность по "временной диаграмме" в виде строки. Интересная идея. Я её где-то подсмотрел, но забыл где. Можно сделать более универсальный модуль, с какой нибудь умной генерацией, с условиями, остановками и пр. Для простых линейных тестбенчей было бы наверное полезно.
Вышел Qucs-S 1.1.0, в который добавили возможность симуляции чисто цифровых схем при помощи Icarus Verilog или FreeHDL.
Кто тут хотел схемки мышевозить?
Кто тут хотел схемки мышевозить?
Запилил небольшой бенчмарк для HDL симуляторов. Пока минималистично, и скрипты для запуска только на Icarus, Verilator и ModelSim/QuestaSim. Надеюсь люди добавят запуск других симуляторов.
GitHub
GitHub - punzik/simbench: Simple HDL simulators benchmark
Simple HDL simulators benchmark. Contribute to punzik/simbench development by creating an account on GitHub.
Пока писал скрипт на баше, нашел классную штуку для линтинга shell-скриптов. За одно есть её онлайн версия, чтобы по-быстрому копипастом проверить скрипт.
Тул проверяет не только синтаксис, но и семантику. Например, предлагает более правильные конструкции, или предупреждает о deprecated.
Тул проверяет не только синтаксис, но и семантику. Например, предлагает более правильные конструкции, или предупреждает о deprecated.
GitHub
GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts
ShellCheck, a static analysis tool for shell scripts - koalaman/shellcheck
🔥4
Добавил в бенчмарк скрипты для запуска разных симуляторов и результаты тестов. К сожалению, у меня нет возможности запустить VCS и Xcelium локально, по этому пришлось обратиться к людям. К счастью, нашелся человек, прогнавший тесты на этих симуляторах, но по причине NDA попросил не раскрывать версии и железо, на которых они запускались. Как результат - табличка с относительным временем выполнения бенчмарка разными симуляторами.
Тест, конечно, немного однобокий, т.к. не использует высокоуровневые конструкции SV и несинтезируемое подмножество, но какое-никакое представление даёт.
Тест, конечно, немного однобокий, т.к. не использует высокоуровневые конструкции SV и несинтезируемое подмножество, но какое-никакое представление даёт.
Telegram
Arnold Enginegger
Запилил небольшой бенчмарк для HDL симуляторов. Пока минималистично, и скрипты для запуска только на Icarus, Verilator и ModelSim/QuestaSim. Надеюсь люди добавят запуск других симуляторов.
Очередная gotcha в SystemVerilog. По стандарту, как известно,
Но не все, Icarus и Verilator не ругаются.
Однако, следующий код для Modelsim и XSIM уже корректный (для VCS и Xcelium по-прежнему нет):
При этом, все синтезаторы, которые у меня есть (Yosys, Vivado и Quartus Std) оба этих примера кушают не давясь.
always_ff не разрешает multidrive. Я это давно знал, но не знал, что это касается и initial. Вот на такой код большинство симуляторов (Modelsim, XSIM, VCS, Xcelium) ругается:logic r;
initial r = 1'b1;
always_ff @(posedge clock) r <= ~r;
Но не все, Icarus и Verilator не ругаются.
Однако, следующий код для Modelsim и XSIM уже корректный (для VCS и Xcelium по-прежнему нет):
logic [7:0] ram[256];
initial $readmem("init.mem", ram);
always_ff @(posedge clock) ram <= ...;
При этом, все синтезаторы, которые у меня есть (Yosys, Vivado и Quartus Std) оба этих примера кушают не давясь.
Залипал на ютубе и наткнулся на интересный канал про электронику и радиосвязь. Рекомендую.
🔥1
В продолжение предыдущего поста. Кусочек кода из микрософтовского проекта cheriot-ibex с комментарием. Наверное тоже внезапно столкнулись с беспощадностью стандарта и необязательностью его исполнения 🙂
Снова поагитирую за sv2v. Он умеет преобразовывать в синтезируемый верилог параметризуемые функции, таски и структуры в виде статических шаблонных классов. Вещь весьма полезная в некоторых ситуациях и ещё один плюсик в пользу использования SV в т.ч. с Yosys :)
🔥4
Добавил в бенчмарк ещё один симулятор под названием CVC, точнее его открытую версию OSS CVC. Симулятор не поддерживает SV (только некоторые элементы, например типы logic и bit, и интерфейс DPI), но заявлена полная поддержка IEEE 1364 2005. Из-за этого пришлось использовать тул sv2v для конвертации исходников.
Симулятор компилирует верилог в исполняемый файл (через трансляцию в Си), но умеет работать и в режиме интерпретатора с соответствующей потерей в производительности. В отличие от верилятора в CVC сигналы 4-state, по этому иксы присутствуют. Умеет PLI и DPI, поддерживает specify и соответственно симуляцию с задержками, быстро симуляет примитивы, умеет собирать статистику переключений (toggle coverage). В описании написано, что "best solution for machine generated Verilog simulation", годен для "very large gate-level" симуляции. А ещё он умеет дампить память :)
В общем, в копилочку опенсорсных симов (лицензия, правда, какая-то своя).
Симулятор компилирует верилог в исполняемый файл (через трансляцию в Си), но умеет работать и в режиме интерпретатора с соответствующей потерей в производительности. В отличие от верилятора в CVC сигналы 4-state, по этому иксы присутствуют. Умеет PLI и DPI, поддерживает specify и соответственно симуляцию с задержками, быстро симуляет примитивы, умеет собирать статистику переключений (toggle coverage). В описании написано, что "best solution for machine generated Verilog simulation", годен для "very large gate-level" симуляции. А ещё он умеет дампить память :)
В общем, в копилочку опенсорсных симов (лицензия, правда, какая-то своя).
Telegram
Arnold Enginegger
Запилил небольшой бенчмарк для HDL симуляторов. Пока минималистично, и скрипты для запуска только на Icarus, Verilator и ModelSim/QuestaSim. Надеюсь люди добавят запуск других симуляторов.
👍1🔥1
Недавно в соседнем чатике интересовались возможностью разбора шин и протоколов внутри GTKWave с рисованием на временной диаграмме красивых цветных состояний. Так вот, это там есть. Фича называется "Transaction Filter" (там еще есть "Translation Filter", которая попроще и предназначена для простого переименования значений сигналов, например машинного кода в мнемонику).
Суть её в том, что вы пишете программу, которая в стандартный ввод получает сформированный GTKWave так называемый "упрощенный VCD" для выбранных пользователем сигналов, а в стандартный вывод выплёвывает новый сигнал/сигналы с именами состояний шины и цветовой маркировкойштанов. Т.е. ваша программа получает полный трек, по которому можно восстановить состояния шины с транзакциями. Писать можно на всём, что умеет принимать ввод и печатать вывод, в т.ч. на скриптовых языках.
Как всегда, не обошлось без подводных камней, для обхода которых даже пришлось запускать GTKWave в отладчике. Подробности описывать не буду, приведу только алгоритм на псевдо-С, который точно соответствует тому, чего ждёт GTKWave. Остальное можно прочитать в документации.
Чуть позже выложу либу на Scheme для парсинга VCD и работы с распарсенными сигналами.
PS: можно было написать более подробно, но не хочется тележный пост превращать в портянку. По этому спрашивайте в комментах.
Суть её в том, что вы пишете программу, которая в стандартный ввод получает сформированный GTKWave так называемый "упрощенный VCD" для выбранных пользователем сигналов, а в стандартный вывод выплёвывает новый сигнал/сигналы с именами состояний шины и цветовой маркировкой
Как всегда, не обошлось без подводных камней, для обхода которых даже пришлось запускать GTKWave в отладчике. Подробности описывать не буду, приведу только алгоритм на псевдо-С, который точно соответствует тому, чего ждёт GTKWave. Остальное можно прочитать в документации.
while (!eof) {
str = read_line();
if (str == "$comment data_end ...") {
println("$name ..."); flush();
...
println("$finish ..."); flush();
}
}
Скажу только, что нужно обязательно делать flush после каждой новой строки (о чём сказано в документации), и отвечать после каждого бандла VCD (о чём в документации не сказано).Чуть позже выложу либу на Scheme для парсинга VCD и работы с распарсенными сигналами.
PS: можно было написать более подробно, но не хочется тележный пост превращать в портянку. По этому спрашивайте в комментах.
🔥7
Я тут периодически ругаю VHDL (в шутку, конечно☺️), но вот интересный факт: несмотря на его многословность, библиотека примитивов для симуляции ПЛИС GoWin занимает всего на 18% больше места, чем то же самое на верилоге. А по строкам и того меньше - 13% (19070 строк на VHDL против 16767 на Verilog).
Позавчера в плисочате коллега предложил вычислять синусы с помощью широко известной в узких кругах формулы Марвина Минского, которую он (Минский), по собственному признанию, придумал случайно:
На картинках результат теста генератора Минского с разными параметрами: ширина переменной в битах, количество бит сдвига (эпсилон), значение коррекции постоянной составляющей и амплитуда шума дизеринга.
На графике сверху слева круг, построенный по значениям синуса и косинуса (несколько сотен периодов). Красным цветом обозначены значения из генератора, зеленым - референсные значения честных синуса и косинуса такой же разрядности. На графике сверху справа два периода синусоиды - референсная и полученная из генератора. Два графика ниже - спектры комплексных сигналов, полученных как (cos + isin). Зеленый - референсный, красный - из генератора.
В общем, вывод можно сделать следующий. Для рисования кругов метод годный, особенно если разрядность побольше - визуально разница между честным кругом и "нечестным" совсем не заметна. Применять в ЦОС - тут нужно хорошечно подумать. Наверное в чём-то не очень чувствительном к искажениям. Из графиков видно, что постоянную составляющую у меня получилось скомпенсировать, а вот фазовый сдвиг между синусом и косинусом нет (сдвиг проявляется в виде диагонально сплюснутого круга и в виде зеркальной палки на отрицательной части спектра). Даже небольшой имбаланс фаз, в одну выборку длиной, вызывает заметное отражение на спектре. Хотя, и здесь могут быть варианты, например использовать синус и косинус по отдельности.
PS: на уровни не смотрите, ибо окно, fft processing gain и пр.
sin = sin + (cos >> shift)Придумал случайно, но способ получился весьма годный, т.к. простой и нересурсоёмкий, особенно в железе. Однако, за простоту приходится платить точностью, по этому я решил проверить, насколько целесообразно применять это в более серьезных применениях, нежели рисование кругов.
cos = cos - (sin >> shift)
На картинках результат теста генератора Минского с разными параметрами: ширина переменной в битах, количество бит сдвига (эпсилон), значение коррекции постоянной составляющей и амплитуда шума дизеринга.
На графике сверху слева круг, построенный по значениям синуса и косинуса (несколько сотен периодов). Красным цветом обозначены значения из генератора, зеленым - референсные значения честных синуса и косинуса такой же разрядности. На графике сверху справа два периода синусоиды - референсная и полученная из генератора. Два графика ниже - спектры комплексных сигналов, полученных как (cos + isin). Зеленый - референсный, красный - из генератора.
В общем, вывод можно сделать следующий. Для рисования кругов метод годный, особенно если разрядность побольше - визуально разница между честным кругом и "нечестным" совсем не заметна. Применять в ЦОС - тут нужно хорошечно подумать. Наверное в чём-то не очень чувствительном к искажениям. Из графиков видно, что постоянную составляющую у меня получилось скомпенсировать, а вот фазовый сдвиг между синусом и косинусом нет (сдвиг проявляется в виде диагонально сплюснутого круга и в виде зеркальной палки на отрицательной части спектра). Даже небольшой имбаланс фаз, в одну выборку длиной, вызывает заметное отражение на спектре. Хотя, и здесь могут быть варианты, например использовать синус и косинус по отдельности.
PS: на уровни не смотрите, ибо окно, fft processing gain и пр.
👍8🔥6🥱1🍌1