Про асинхронный сброс и Verilator.
Вот типичный код асинхронного сброса:
Обычно, код работает так же, как в железе. Однако, если в начале симуляции нет клока, то сброс может не сработать. Так выйдет, если
Очевидное решение - в объявлении
Или так:
Однако, и здесь есть нюанс: Verilator не захотел регистрировать это событие, и не выполнил код процесса. Раньше такого в Вериляторе быть не могло, потому что до недавнего времени он был чисто clock-accurate симулятором. А раз клок всегда был, то события
В связи со всем вышесказанным думаю самым правильным решением было бы присвоение
Запилил issue
Вот типичный код асинхронного сброса:
always_ff @(posedge clk or negedge rst_n) begin
if (!rst_n) ...
else ...
end
Обычно, код работает так же, как в железе. Однако, если в начале симуляции нет клока, то сброс может не сработать. Так выйдет, если
rst_n
присвоить 0 в нулевом времени через инициализацию в объявлении. Как можно догадаться, в этом случае события negedge rst_n
не случится, т.к. по стандарту присвоение в объявлении выполняется раньше присвоения в процессах.Очевидное решение - в объявлении
rst_n
присвоить 1 (или вообще ничего не присваивать, X->0 тоже считается за negedge
), а в initial
- 0:logic rst_n = 1'b1;
initial rst_n = 1'b0;
Или так:
logic rst_n;
initial begin
rst_n = 1'b1;
rst_n = 1'b0;
end
Однако, и здесь есть нюанс: Verilator не захотел регистрировать это событие, и не выполнил код процесса. Раньше такого в Вериляторе быть не могло, потому что до недавнего времени он был чисто clock-accurate симулятором. А раз клок всегда был, то события
negedge rst_n
можно было не дожидаться, процесс вызвался бы при первом posedge clk
. Но сейчас он стал фактически полноценным event-driven, по этому наверное дожен справляться с такими вещами.В связи со всем вышесказанным думаю самым правильным решением было бы присвоение
rst_n
единицы, а как минимум в следующем цикле симуляции сбрасывать его в ноль:logic rst_n = 1'b1;
initial #1 rst_n = 1'b0;
Запилил issue
GitHub
Fix reaction to the edge event at zero time · Issue #5499 · verilator/verilator
The always @(posedge a) block does not triggered on change of a in zero time. The SV standard says that the "initial value of a static variable as part of the variable declaration (including s...
В комментах товарищ @Xtyll спросил, не упала ли скорость симуляции в Вериляторе после добавления событийного шедулинга. Сообщаю: не упала.
Добавил тест Верилятора 4-й версии в свой бенчмарк - разница в результатах с версией 5 на уровне погрешности. Для надежности сделал ещё тест на реальном проекте. Там тоже разницы нет. Вот как-то так.
Добавил тест Верилятора 4-й версии в свой бенчмарк - разница в результатах с версией 5 на уровне погрешности. Для надежности сделал ещё тест на реальном проекте. Там тоже разницы нет. Вот как-то так.
Telegram
Arnold Enginegger
Запилил небольшой бенчмарк для HDL симуляторов. Пока минималистично, и скрипты для запуска только на Icarus, Verilator и ModelSim/QuestaSim. Надеюсь люди добавят запуск других симуляторов.
В "соседнем чатике" стырил ссылку на интересный канал. Коллега исследует возможности опенсорса для электромагнитной симуляции печатных плат. SI, PI, вот это вот всё на открытых тулах. Интересно, и картинки красивые, стоит посмотреть 😍
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
panire
Your Friendly Engineering Colleague
My main interests are low-voltage electronics (under 75V) and electromagnetic compatibility (EMC).
Contact E-Mail: [email protected]
My main interests are low-voltage electronics (under 75V) and electromagnetic compatibility (EMC).
Contact E-Mail: [email protected]
Завёл себе ноду Radicle, и поставил на сервер веб-интерфейс. Интересная штука, попробую поюзать.
Если кто не знает, Radicle - это распределенный хостинг гитовых реп. Типа GitHub, только без центрального хранилища. Работает на таком же принципе, как BitTorrent - человек клонирует репу и становится её сидером. Что интересно, "социальные артефакты" - issue, пулл-реквесты (и потенциально другое, т.к. система расширяемая) - хранятся в той же репе, что и код, но не пересекаются с ним. Radicle использует гитовые неймспейсы для хранения этих вещей.
Интересующимся рекомендую зайти на сайт и почитать юзер мануал и инфу по протоколу. Познавательно.
Если кто не знает, Radicle - это распределенный хостинг гитовых реп. Типа GitHub, только без центрального хранилища. Работает на таком же принципе, как BitTorrent - человек клонирует репу и становится её сидером. Что интересно, "социальные артефакты" - issue, пулл-реквесты (и потенциально другое, т.к. система расширяемая) - хранятся в той же репе, что и код, но не пересекаются с ним. Radicle использует гитовые неймспейсы для хранения этих вещей.
Интересующимся рекомендую зайти на сайт и почитать юзер мануал и инфу по протоколу. Познавательно.
radicle.xyz
Sovereign code infrastructure.
Возвращаясь
к напечатанному. Как известно, Verilator не поддерживает неблокирующие присваивания в initial
, и даже превращает их в блокирующие, если проигнорировать предупреждение. Это наследие cycle-accurate природы симулятора и в современных реалиях, когда он стал по сути event-driven, может приводить к гонкам.Есть несколько способов обхода этой особенности, таких как присвоение сигналам значения на обратном фронте клока, использование единичной задержки, и даже вот такого финта, предложенного автором Верилятора.
К сожалению, первые два не сильно пригодны, когда у вас уже написаны таски, которые не хочется переписывать. А последний, авторский, теперь и вовсе не работает. Раньше работал, но потом Верилятор стал лучше соответствовать стандартам
В общем, в результате небольшого эксперимента, опытным путём был выработан следующий способ, одинаково работающий на всех имеющихся в моём распоряжении симуляторах:
logic start_trigger;
initial begin
start_trigger = 1'b0;
#0;
start_trigger = 1'b1;
end
always @(start_trigger) begin
// Здесь делаем то, что обычно делаем в initial
end
Такой квази-initial работает так же, как обычный, за исключением того, что выполняется после всех настоящих
initial
. При этом, внутри него можно использовать неблокирующие присваивания и задержки.Надеюсь, что Верилятор больше не поломают, и способ будет годен до тех пор, пока не появится настоящая поддержка неблокирующих присваиваний в
initial
.P.S.: Это третий вариант (после авторского). Второй недавно сломали
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Arnold Enginegger
Запомните это хорошо! 😖
Коллега в комментарии к предыдущему посту навел меня на ещё один вариант квази-initial с поддержкой неблокирующих присваиваний:
Во-первых тут не нужна дополнительная переменная, во-вторых последовательность запусков теперь такая же, как у обычного initial. Блок always выполнится один раз и остановится на строчке
P.S.: В предыдущем посте я в спешке обозвал неблокирующие блокирующими. Надеюсь, никто не заметил😭
always begin
// Здесь вставлять код
@(0);
end
Во-первых тут не нужна дополнительная переменная, во-вторых последовательность запусков теперь такая же, как у обычного initial. Блок always выполнится один раз и остановится на строчке
@(0)
- это ожидание события, которое никогда не произойдёт. Проверил, работает. Можно пользоваться.P.S.: В предыдущем посте я в спешке обозвал неблокирующие блокирующими. Надеюсь, никто не заметил
Please open Telegram to view this post
VIEW IN TELEGRAM
По совету друзей взялся попробовать новый язык Veryl - более лучший верилог для синтеза. Решил переписать на нём маленький код для маленькой ПЛИС, и сразу же столкнулся с неразрешимой проблемой: нельзя задать начальное значение регистру. На гитхабе есть закрытая issue по этому поводу, в которой автор "в грубой форме" рекомендовал использовать сброс. Для асиков это конечно правильно, но в плисах начальная инициализация - это допустимо, и используется достаточно часто, например когда сброса вообще нет.
Вот такая боль на старте. Придется этот код выносить в модуль на верилоге😑
Вот такая боль на старте. Придется этот код выносить в модуль на верилоге
Please open Telegram to view this post
VIEW IN TELEGRAM
veryl-lang.org
Veryl: A Modern Hardware Description Language
Veryl is a hardware description language which is designed as a SystemVerilog alternative.
Коллега любезно поделился ссылкой на занятную статью про то, как всё плохо с безопасностью в открытых EDA. Ну как занятную. Такое мнение всё чаще появляется в публичном пространстве. Однако, я думаю, что дело не только и не столько в открывшихся фактах саботажа в СПО, а в осознании неспособности коммерческих разработчиков сохранить лидерство в обозримом будущем. Они просто бесятся, и со мной согласен Олоф (ну или я с ним 😊).
Semiconductor Engineering
Security Concerns Weigh Down Open-Source EDA
Issues vary by application and how and where it's used, but many tools already contain some open-source code.
This media is not supported in your browser
VIEW IN TELEGRAM
Запилил энкодер PAL/NTSC на плисе для ретрокопьютинга. На выходе 8-битный r-2r ЦАП и эмиттерный повторитель. Хорошо видна интермодуляция цветности и яркости, у буржуев называемая Dot Crawl.
Давно хочу переделать на S-Video (это когда яркость и цветность по отдельным проводам), да всё времени нет. Но обязательно сделаю.
Давно хочу переделать на S-Video (это когда яркость и цветность по отдельным проводам), да всё времени нет. Но обязательно сделаю.
Хорошее замечание и ещё один аргумент в срачах спорах про сбросы. Получается (без учёта других аргументов), что тотальный сброс можно делать любым - синхронным или асинхронным, а частичный (только control path, например) лучше синхронным, чтобы в случае чего синтезатор смог сымитировать его на логике.
Telegram
Сергей Кривченко in icDesignCommunity
Нет, я именно про корректно написанный код) Приведу тогда пример:
Сигналы синхронного "сброса" и "загрузки" общие для целого LAB-а (у Cyclone IV в 1 LAB-е содержится 16 LE). Допустим, есть сигнал 'valid' и шина данных 8 битная. Если мы заведем синхронный…
Сигналы синхронного "сброса" и "загрузки" общие для целого LAB-а (у Cyclone IV в 1 LAB-е содержится 16 LE). Допустим, есть сигнал 'valid' и шина данных 8 битная. Если мы заведем синхронный…
30 ноября, заключительная FPGA-Systems совместно с YADRO, онлайн.
Встречаемся в последнюю субботу ноября на трансляции — регистрируйтесь, чтобы получить ссылку на стрим на одной из популярных платформ (Youtube, Rutube, VK).
В программе:
• Запуск AMDGPU и работа с HDMI на ПЛИСе.
• Опыт применения Chisel/Scala для проектирования сложных систем.
• Чем прототипирование отличается от разработки на ПЛИС.
• Обзор обновления линейки BMTI.
• Индустриальные подходы к верификации RISC-V ядер, доступные каждому.
• Советы по применению Extended Useful Skew и не только!
Участие бесплатное, регистрация обязательна.
До встречи!
Встречаемся в последнюю субботу ноября на трансляции — регистрируйтесь, чтобы получить ссылку на стрим на одной из популярных платформ (Youtube, Rutube, VK).
В программе:
• Запуск AMDGPU и работа с HDMI на ПЛИСе.
• Опыт применения Chisel/Scala для проектирования сложных систем.
• Чем прототипирование отличается от разработки на ПЛИС.
• Обзор обновления линейки BMTI.
• Индустриальные подходы к верификации RISC-V ядер, доступные каждому.
• Советы по применению Extended Useful Skew и не только!
Участие бесплатное, регистрация обязательна.
До встречи!
Если вы не сможете прийти, не успели зарегистрироваться или встретите субботу не в Москве, подключайтесь к трансляции заключительной в этом году FPGA-Systems на Youtube, Rutube или VK.
В программе:
11:10 - Введение в проектирование RTL цифровых систем средствами Chisel/Scala
11:50 - Генерация преднамеренных ошибок в UVM-тесте
12:30 - Проектирование интегральной схемотехники в российских САПР
14:00 - Как мы AMD GPU на ПЛИС с RISC-V Linux запускали
14:40 - Open Source Step-and-Compare: делаем индустриальный подход к верификации RISC-V доступным каждому
15:20 - Увеличиваем производительность, искажая время: Extended Useful Skew
16:20 - Работаем с HDMI на ПЛИС
17:00 - Что нового у BMTI? Смотрим на обновление линейки коммунистических ПЛИС
Пишите вопросы докладчикам - если не успеем задать их сразу после доклада, выступающих попросим зайти в комментарии в трансляциях и ответить вам там.
p.s. Записи автоматически останутся доступны по тем же ссылкам, что и трансляции. Нарезка отдельных докладов появится на тех же каналах в течение 2 недель после мероприятия.
p.p.s. Слайды с мероприятия появятся в течение недели после митапа на его сайте.
В программе:
11:10 - Введение в проектирование RTL цифровых систем средствами Chisel/Scala
11:50 - Генерация преднамеренных ошибок в UVM-тесте
12:30 - Проектирование интегральной схемотехники в российских САПР
14:00 - Как мы AMD GPU на ПЛИС с RISC-V Linux запускали
14:40 - Open Source Step-and-Compare: делаем индустриальный подход к верификации RISC-V доступным каждому
15:20 - Увеличиваем производительность, искажая время: Extended Useful Skew
16:20 - Работаем с HDMI на ПЛИС
17:00 - Что нового у BMTI? Смотрим на обновление линейки коммунистических ПЛИС
Пишите вопросы докладчикам - если не успеем задать их сразу после доклада, выступающих попросим зайти в комментарии в трансляциях и ответить вам там.
p.s. Записи автоматически останутся доступны по тем же ссылкам, что и трансляции. Нарезка отдельных докладов появится на тех же каналах в течение 2 недель после мероприятия.
p.p.s. Слайды с мероприятия появятся в течение недели после митапа на его сайте.
YouTube
FPGA-Systems: индустриальный подход к верификации, производительности, Scala, UVM-тесты, BMTI и т.д.
30 ноября в Москве и онлайн состоялась вторая в 2024 осенняя встреча сообщества FPGA-Systems. Мероприятие прошло при поддержке YADRO — ведущего российского разработчика оборудования для ЦОД и телеком-операторов. Тайминги:
00:00 — Можно проматывать
17:20…
00:00 — Можно проматывать
17:20…
Немного поигравшись с Veryl пишу отзыв. Если кратко: потенциал есть, но пока не готов.
Не буду лить воду, пойду по фактам. Плюсы языка:
➡️ Полярность сброса и клока можно выбрать при сборке. Очень полезная фича, но есть некоторые проблемы с передачей этих знаний в подключаемые модули на верилоге. Есть автоматическая инверсия сброса, если в вериложном модуле сброс не той полярности. Но пока нет инверсии клока и никак не передать информацию о типе сброса - синхронный он или асинхронный.
➡️ Фигурные скобки в качестве операторных скобок конечно выглядят гораздо приятней многословных
➡️ Нет разделения на блокирующее и неблокирующее присваивание. Язык предназначен для написания только синтезируемого кода, по этому синхронные присваивания - неблокирующие, асинхронные - блокирующие.
➡️
➡️ Дженерики! Наконец-то шаг в сторону метапрограммирования. Шаг скромный, но в верилоге этого очень не хватает.
➡️ Есть поддержка аннотации CDC. Если вдруг вы небезопасно передаёте данные из домена в домен, транслятор даст вам по рукам.
➡️ Какая-никакая стандартная библиотека с FIFO и некоторыми полезными модулями (кое кто из чата FPGA Systemc был бы очень рад).
Теперь минусы:
➡️ Нет приведения ширины. Есть приведение к типу, и как бы можно объявить новый тип с нужной шириной и к нему приводить. Но это лишняя писанина, и результирующий верилог не поддерживается парсером Yosys'а. Такая вот шляпа.
➡️ В конструкции вида
➡️ Нельзя объявить несколько переменных одного типа с одной декларации. Для каждой переменной надо писать
➡️ Невозможно задать начальное значение регистру или памяти. ROM в принципе можно описать в виде
По инфраструктуре. В отличие от верилога, у которого только стандарт, Veryl "из коробки" имеет форматтер, линтер и language server. Это очень удобно. Например, на добавление полноценной поддержки языка с в Emacs у меня ушли сутки. А это форматирование с отступами, подсветка синтаксиса, подсветка ошибок в реальном времени, автодополнение, хождение по коду и попапы.
Кроме перечисленного, в комплекте с транслятором есть система документирования с поддержкой markdown и wavedrom, система юнит-тестирования с интегрированными тестбенчами на верилоге, и система сборки, которая умеет подгружать зависимости.
Есть и недостатки:
➡️ Нет настроек форматирования, есть только настройка длины таба.
➡️ У линтера есть только настройки стиля, языковых настроек нет. Например, нет предупреждения о неявном приведении ширины.
➡️ При касте сброса транслятор может менять имя сигнала, добавляя к нему префикс или суффикс (настраиваемо). При этом он это делает и для портов вериложных модулей. По этому, если включена эта опция, при имплементации вериложного модуля к именам портов клока и сброса надо прибавлять префикс
➡️ Часто неправильно указывает положение ошибки, особенно если забыли или лишняя точка с запятой.
В общем, впечатления от языка двойственные. С одной стороны линтер, language server и дженерики. С другой - ощущение, что пишешь на верилоге с новым синтаксисом и старыми проблемами. А зачем мне старые проблемы?Мне нужны новые 😄
PS: Дописывая пост заглянул в репозиторий. Две недели назад вышла новая версия, в которой добавили приведение ширины. Вот так может и допишут до продакшена.
Не буду лить воду, пойду по фактам. Плюсы языка:
begin/end
и module/endmodule
.if/else
как выражение (expression). Как бы реверанс в сторону функциональных языков, но по сути синтаксический сахар над тернарным оператором.Теперь минусы:
a = {b, '1}
единица не расширяется до размера a
, и код в неизменном виде попадает в верилог. Т.е. это ошибка и в верилоге и в вериле, что несколько расстраивает. Выражение как бы очевидное, но авторы решили сохранить совместимость с верилогом. А ещё линтер на это не ругается (а Верилятор ругается).var бла_бла: тип;
.const
(которое транслируется в localparam
), но RAM только через readmem. Авторы говорят, что для асиков это не нужно, а проблемы плисоводов их не волнуют. Конструкция initial
поддерживает только вывод сообщений.По инфраструктуре. В отличие от верилога, у которого только стандарт, Veryl "из коробки" имеет форматтер, линтер и language server. Это очень удобно. Например, на добавление полноценной поддержки языка с в Emacs у меня ушли сутки. А это форматирование с отступами, подсветка синтаксиса, подсветка ошибок в реальном времени, автодополнение, хождение по коду и попапы.
Кроме перечисленного, в комплекте с транслятором есть система документирования с поддержкой markdown и wavedrom, система юнит-тестирования с интегрированными тестбенчами на верилоге, и система сборки, которая умеет подгружать зависимости.
Есть и недостатки:
r#
. Но это скорее ошибка, которую нужно исправлять.В общем, впечатления от языка двойственные. С одной стороны линтер, language server и дженерики. С другой - ощущение, что пишешь на верилоге с новым синтаксисом и старыми проблемами. А зачем мне старые проблемы?
PS: Дописывая пост заглянул в репозиторий. Две недели назад вышла новая версия, в которой добавили приведение ширины. Вот так может и допишут до продакшена.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Arnold Enginegger
По совету друзей взялся попробовать новый язык Veryl - более лучший верилог для синтеза. Решил переписать на нём маленький код для маленькой ПЛИС, и сразу же столкнулся с неразрешимой проблемой: нельзя задать начальное значение регистру. На гитхабе есть закрытая…
В очередной раз пригодился мой китайский фрезер CNC-3018. Выпилил втулки, чтобы уменьшить диаметр отверстий в печатной плате с 1мм до 0.8мм. Заготовка - текстолит толщиной 2мм. На фото видно, что втулки выпилены не до конца, а до фольги на обратной стороне - это чтобы они не вывалились во время фрезерования и не сломались об фрезу. Потом я их вырезал канцелярским ножом.
Диаметр втулок я сделал чуть больше 1мм, чтобы входили с натягом. Несмотря на толщину стенки, получилось достаточно прочно, при запрессовке пока ни одна не сломалась.
Заусенцы на фото - это остатки стружек. На самом деле поверхность чистая и гладкая ☺️
Фреза - кукуруза 0.8мм, горизонтальная подача - 2мм/с, вертикальная 0.5мм/с.
Диаметр втулок я сделал чуть больше 1мм, чтобы входили с натягом. Несмотря на толщину стенки, получилось достаточно прочно, при запрессовке пока ни одна не сломалась.
Заусенцы на фото - это остатки стружек. На самом деле поверхность чистая и гладкая ☺️
Фреза - кукуруза 0.8мм, горизонтальная подача - 2мм/с, вертикальная 0.5мм/с.
Нашел забавную ошибку в Вериляторе. При иерархической передаче строки в параметре модуля через два и более модуля строка может не дойти до конечного потребителя. Зависит это от того, указан ли, и где конкретно, тип параметра. Если во всей цепочке тип параметра отсутствует (выводится из дефолтного значения), то строка проходит. Если тип везде указан, то тоже проходит. А если во втором модуле тип не указать, то туда приходит строка той же длины, только заполненная пробелами. Причём, если её передать дальше, то она совсем обнулится.
Вот пример кода с багом:
Вывод такой:
Если добавить тип параметра в первый модуль или убрать тип из второго, то вывод будет корректным:
Вот пример кода с багом:
module string_param_0 #(parameter S = "");
initial $display("S = '%s'", S);
endmodule
module string_param_1 #(parameter string S = "");
string_param_0 #(.S(S)) u_sp0();
endmodule
module test;
string_param_1 #(.S("Greetings from the old shoes")) u_sp1();
initial #1 $finish;
endmodule
Вывод такой:
S = ' '
Если добавить тип параметра в первый модуль или убрать тип из второго, то вывод будет корректным:
S = 'Greetings from the old shoes'
По просьбе коллеги добавил в бенчмарк симуляторов запуск Квесты с параметром "-O5" и без параметра "+acc". Прирост скорости составил ровно 10 раз, но есть мнение, что могут быть проблемы с доступом к внутренним сигналам (через VPI/DPI или даже из верилога). Сам не проверял.
Ещё добавил запуск VCS (честно взятый "во временное пользование" на всем известном ftp) на своём компе и перезапустил все тесты. Можно заметить, что скорость работы большинства симуляторов значительно возросла - это от того, что я выключил HyperThreading. А ещё верилятор стал заметно быстрее компилировать, особенно для многопоточного варианта симуляции.
Ещё добавил запуск VCS (честно взятый "во временное пользование" на всем известном ftp) на своём компе и перезапустил все тесты. Можно заметить, что скорость работы большинства симуляторов значительно возросла - это от того, что я выключил HyperThreading. А ещё верилятор стал заметно быстрее компилировать, особенно для многопоточного варианта симуляции.
Telegram
Arnold Enginegger
Запилил небольшой бенчмарк для HDL симуляторов. Пока минималистично, и скрипты для запуска только на Icarus, Verilator и ModelSim/QuestaSim. Надеюсь люди добавят запуск других симуляторов.
This media is not supported in your browser
VIEW IN TELEGRAM
Дошли руки до переделки PAL-энкодера на раздельный вывод сигнала яркости и цветности. Спортивный интерес был в том, чтобы использовать один разъём PMOD и минимум внешних компонентов. Была сделана плата с 3-битным R2R ЦАП для сигнала цветности, 4-битным - для яркости, и одним сигналом для синхронизации, который роняет выход яркости на -300мВ. В качестве выходных буферов ЦАП - эмиттерные повторители на КТ368А. Ключ для сигнала синхронизации на КТ230А9 с диодом Шоттки для ускорения переключения.
Как и ожидалось, цветные границы сталимягкими и шелковистыми ровными и чёткими - полностью отсутствует dot crawl, тонкие цветные линии не превращаются в серые. Однако, есть и особенности: 4 бит для яркости маловато, если цвет пересчитывается из RGB в YUV вычислением, а не таблицей. Вычисления могут дать разницу в яркости меньше уровня квантования, и яркость двух объектов на экране окажется одинаковой. В таблицу же можно внести значения, некорректные математически, но более приемлемые визуально. Позже попробую ещё раз переделать плату для использования 5 бит для яркости без отдельного сигнала синхронизации. Тогда на яркость останется 24 значения (4.5 бита), что должно положительно сказаться на качестве картинки в градациях серого.
На видео стандартные цветные полосы. Используется 3 бита на каждый компонент цвета RGB. Использовать больше 4 бит на компонент смысла нет, т.к. разницу в оттенке глаз не заметит, а для яркости не хватит битности АЦП.
В комментах выложу видео цветных линий шириной в 2 "пикселя" на частоте 24МГц и фотки платы.
Как и ожидалось, цветные границы стали
На видео стандартные цветные полосы. Используется 3 бита на каждый компонент цвета RGB. Использовать больше 4 бит на компонент смысла нет, т.к. разницу в оттенке глаз не заметит, а для яркости не хватит битности АЦП.
В комментах выложу видео цветных линий шириной в 2 "пикселя" на частоте 24МГц и фотки платы.
This media is not supported in your browser
VIEW IN TELEGRAM
Вышла девятая версия САПР KiCAD. Очень много полезных изменений, среди которых хочется отметить:
- Редактирование дифпар. "Я джва года ждал". На видео в шапке показана как раз эта фича, как частный случай трассировки/редактирования набора треков. Раньше было практически невозможно перетащить дифпару без нарушения зазора между линиями, из-за чего приходилось полностью перетрассировать редактируемый участок.
- Задание параметров площадок отверстий на разных слоях. Раньше можно было только убрать неиспользуемые площадки, а теперь можно индивидуально задать форму, размер площадки и размер антипада для каждого слоя. Это очень полезно при проектировании скоростных плат.
- Экспорт 3D моделей отдельных цепей. Теперь гораздо проще выполнить моделирование в каком нибудь OpenEMS, потому что не надо вручную выковыривать модель дорожки из модели всей платы. Потенциально это дело теперь можно даже автоматизировать.
И много других изменений, про которые можно почитать например здесь.
KiCAD по возможностям всё больше приближается к профессиональным САПРам. Теперь его можно использовать не только с болью, но и с удовольствием☕️
- Редактирование дифпар. "Я джва года ждал". На видео в шапке показана как раз эта фича, как частный случай трассировки/редактирования набора треков. Раньше было практически невозможно перетащить дифпару без нарушения зазора между линиями, из-за чего приходилось полностью перетрассировать редактируемый участок.
- Задание параметров площадок отверстий на разных слоях. Раньше можно было только убрать неиспользуемые площадки, а теперь можно индивидуально задать форму, размер площадки и размер антипада для каждого слоя. Это очень полезно при проектировании скоростных плат.
- Экспорт 3D моделей отдельных цепей. Теперь гораздо проще выполнить моделирование в каком нибудь OpenEMS, потому что не надо вручную выковыривать модель дорожки из модели всей платы. Потенциально это дело теперь можно даже автоматизировать.
И много других изменений, про которые можно почитать например здесь.
KiCAD по возможностям всё больше приближается к профессиональным САПРам. Теперь его можно использовать не только с болью, но и с удовольствием
Please open Telegram to view this post
VIEW IN TELEGRAM