Telegram Group Search
Што не так с опцией -hier в командах get_ и почему паттерн с \ или / не вернет вам значений

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

Для некоторых команд get_ есть опция -heir или -hierarchical, которая предназначена для поиска объектов по всей иерархии вниз от текущего модуля (што такое текущий инстанс в иерархии я расскажу как-нибудь потом)

В общем. опция -hierarchical предполагает, что поиск объектов будет выполняться по уровню иерархии. И если в паттерне поиска будет стоять \ (или /) то с огромной долей вероятности вместо списка объектов вивада выдаст дулю.

Note: Разделитель иерархии, он же hierarchy separator может быть \ или / . Узнать какой он у вас можно с помощью команды
get_hierarchy_separator


Разберем пример
Откройте любой post-synthesis проект и в консоли напишите
llength [get_cells -hierarchical *]


Этак команда вернет вам число, которое скажет сколько элементов класса cell есть в нетлисте (в моем случае 5534)

теперь попробуем найти все GND элементы:
llength [get_cells -hierarchical GND]

В моем случае нашлось 244 элемента.

А теперь давайте найдем сколько элементов GND на каком нить уровне иерархии или определенном модуле. Найдите модуль, где есть GND и сделайте поиск с разделителем иерархии. Например вот так
llength [get_cells -hierarchical *mdm*/GND]

и вуаля - количество найденных элементов 0, хотя на самом деле GND в этом модуле есть. Почему так произошло, где GND Лебовски?
===
Продолжение следует
===
@fpgasystems
#tcl #vivado
На собесе после CDC, задавай вопрос про RDC

Когда речь заходит о метастабильности, CDC (Clock Domain Crossing) - первое, что приходит на ум. Но знаете ли вы, что асинхронные сбросы тоже могут быть весомым источником метастабильности?

Почему это неприятная вещь?

Ошибки, связанные с RDC (Reset Domain Crossing), трудно обнаружить. Они часто ускользают от верификатора при моделировании и могут проявляться только при определенных условиях в кремнии.

Отладка сбоев из-за RDC обходится дорого, как и всё в асиках, а в худшем случае это приведет респину микросхемы.


Поподробнее про RDC можно почитать по этим ссылкам:

https://www.synopsys.com/blogs/chip-design/what-is-reset-domain-crossing.html

https://semiengineering.com/reset-domain-crossing-verification/

https://besttechviews.com/reset-domain-crossing-asynchronous-resets-rdc/

PS: помните, што в FPGA не важно как ты зашел в сброс, важно синхронно из него выйти
===
@fpgasystems
#rdc #reset
в только што лет я узнал што есть супер кнопка в Tcl console в Vivado, которая группирует вывод stdout до выполняемых Tcl команд и процедур 😄
Please open Telegram to view this post
VIEW IN TELEGRAM
Отпускная телеграм детоксикация

Если будет известно што наш товарищ в отпуске и еще пишет по рабочим вопросам в чат, его ждет мьют до окончания его отпуска.
Миша, привет!

Хочу позвать спикеров на AiConf https://cfp.aiconf.ru/ выступить с докладом на тему около "железо + ML" (это может быть абсолютно любая тема, главное чтобы она совмещала две эти сущности).

Например: "как я запустил инференс модельки на FPGA/ASIC" или "как я оптимизировал обучение на CUDA".

Особенности:
1) конфа в Москве в сентябре
2) если спикеру нужен проезд по РФ и проживание — всё будет
3) доклад на 30-40 минут
4) можно оформить в формате панельной дискуссии / лекции / интерактива / демо и т.д.

Вдруг кто-то из FPGA-комьюнити или ты сам хочешь выступить.

Upd: подавать доклады тут — https://conf.ontico.ru/lectures/propose?conference=ai2025
Хочу себе такую темную тему для Vivado и Block Design / IP Integrator 😭
Forwarded from Wolverine
Общая задача: перенос существующей логики с процессора на ПЛИС.
Конкретно на первое время:
1. Считывание изображения
Получить изображение через интерфейс MIPI-CSI.
2. Расчёт углов
Выполнить определение углов на полученном изображении с использованием метода Shi-Tomasi.
3. Отслеживание движения точек
Применить метод Лукаса-Канаде для отслеживания движения выбранных точек между двумя кадрами.
4. Вывод данных
Сохранить полученные координаты точек в указанной области памяти.

Задач в перспективе очень много по ПЛИСам)

Мы частная компания. Стараемся все делать in-house. Минимум бюрократии, работа на результат. Обеспечиваем всеми необходимыми продуктам и железкам для работы. Собираем вокруг себя таланливых самостоятельных специалистов. Условия обсуждаются индивидуально, своих ценим;)

Писать в тг @wolverus
Как вам новые сережки моей жены ? 😁

Присылайте ваши неработающие ПЛИС, будем делать ожерелье как у дольфа лунгрена
Практический пост

Доделал наконец-то скрипт на работе, все круто работает, но пора было собираться домой. Не стал делать коммит 🤦

В электричке пришла "отличная" идея и думаю дай-ка я сразу ее реализую. По итогу все сломалось. Хорошо контрол зетами смог откатиться до рабочего состояния. 🙈

Морали две:
1️⃣ Работает не трогай

2️⃣ Лучше сразу закомитить, а потом вносить правки.

У вас также ?
Forwarded from Eva
Please open Telegram to view this post
VIEW IN TELEGRAM
Новые горизонты опенсорсных плисовых тулов. Yosys замахнулся на 500 000 лутовые ПЛИСины

In collaboration with NanoXplore SAS and the European Space Agency - ESA we have created the first open-source toolchain for the NG-Ultra FPGA, a large and complex FPGA used in critical space applications.

Thanks to NanoXplore for collaborating with us, and to the European Space agency for funding the project.


For all the details read our final report here: https://nebula.esa.int/4000141380
===
@fpgasystems_events
Пятничный флешмоб от подписчика:

А как вы используете стикеры от любимого комьюнити? 😍
===
Отправлено через @fpgasystems_bot
В команду вызова скриптов source нельзя передать аргументы, но есть workaround

Привет мои дорогие любители Tcl (будем надеяться, что такие есть )

Вы прекрасно знаете, что для запуска Tcl скрипта в Vivado (да и вообще везде) надо использоваться команду source.

Но, в команду source нельзя передать аргументы вызова. И это печально, потому что в таком случае ни о каком варианте автоматизации не может идти речи, если мы пытаемся сделать более-менее универсальное приложение или функционал.

Однако, существует несколько вариантов обойти такое ограничение. Давайте последовательно пройдемся от самых очевидных до "А че так можно было? (о_0)"

Если хочите повторить этот мини туториал, то создайте где-нибудь файл ni_xrena_sebe.tcl. Именно его мы будем вызывать с разным набором параметров

Открываете ваши консольки, мы начинаем.


1. Самым простым вариантом будет такой: это определить переменные до вызова скрипта. Переменные, которые мы определяем перед вызовом скрипта буду уже известны перед их вызовом в скрипте. Это очевидно. Например запишите в ni_xrena_sebe.tcl следующие строки
    puts "foo is $foo"
puts "bar is $bar"
puts "grill is $grill"


и далее в консольке мы устанавливаем эти переменные и затем вызовем скрипт
    set foo 1
set bar 2
set grill 3
source ni_xrena_sebe.tcl


2. В Tcl, как и в остальных языках есть три столпа вызова: это arc, argv и argv0. Что они означают:
- argc - содержит информацию о количестве аргументов вызываемого скрипта
- argv - это передаваемые аргументы вызова (обычно список)
- argv0 - имя скрипта, который мы вызываем
Теперь все, что нам нужно, это перед вызовом ni_xrena_sebe.tcl проинициализировать эти три переменных. Давайте это сделаем

Для начала, давайте в самом скрипте просто сделаем вывод значений аргументов, но уже опираясь на argc и argv
if { $::argc > 0 } {
set i 1
foreach arg $::argv {
puts "argument $i is $arg"
incr i
}
} else {
puts "no command line argument passed"
}


Это обычный цикл, который выводит порядковый номер передаваемого аргумента и его значение.
Теперь определим сами переменные argc, argv и argv0
set argv [list "F P G A" Systems - "Support me on boosty"]
set argc [llength $argv]
set argv0 ni_xrena_sebe.tcl


Ну и последний штрих - это вызвать arv0 через команду source
source $argv0


и вуаля, мы в консоли видим:
argument 1 is F P G A
argument 2 is Systems
argument 3 is -
argument 4 is Support me on boosty


Будем честны, такой способ кажется несколько геморойным.


3. Этот вариант мне показался самым лаконичным и заключается он в использовании Tcl массивов (дада в Tcl есть массивы, хотя многомерная их версия это просто чудо)

Для начала, занесём в скрипт следующее содержимое:
puts "foo is $arguments(-foo)"
puts "bar is $arguments(-bar)"
puts "grill is $arguments(-grill)"


Что он делает? да в целом просто выводит строку со значением элемента массива arguments. Создадим его
array set arguments {-foo 0 -bar 0 -grill 0}
set argv0 ni_xrena_sebe.tcl


И дальше добавим (UPD: пример 3 не удачный, и в целом он эквивалентен пункту 1)
array set arguments $::argv


Ну и последний штрих
tcl 
source $argv0


Вывод в консольке будет вот такой
foo is 0
bar is 0
grill is 0


В целом заменяя puts на set мы установим значения переменных.

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

4. Ну и в заключении. Кажется, что в подавляющем большинстве случаев проще обернуть функционал в процедуру proc чем делать такие извращения :)

На этом у меня пока всё.

UPD: уже после написания поста я понял, што как-то неверное понял смысл пункта 3, потому што он эквивалентен пункту 1. Мы задали массив значений перед вызовом скрипта. Надо будет разобраться с нюансом такого вызова, или нет
===
#tcl #tcl_tips_n_tricks
===
@fpgasystems | boosty.to/fpgasystems
Forwarded from Pavel Mazhar
РФ, Москва, гибрид

З/П: 350 000 руб

«Бифорком Тек» компания-разработчик сетевого оборудования. Вам предстоит участвовать в разработке нового оборудования с использованием технологий SDN/IoT/4G/5G/6LoWPAN и решений в области передачи данных.

Что делать:

☑️ Разрабатывать блоки цифровой обработки сигналов и интерфейсы ПЛИС на Verilog
☑️ Создавать функциональные модели, тестовые сценарии и проводить автоматизированную верификацию
☑️ Интегрировать IP-блоки сторонних разработчиков
☑️ Проводить аппаратную отладку кода и работать с измерительным оборудованием
☑️ Участвовать в разработке архитектуры систем и протоколов взаимодействия
☑️ Разрабатывать ТЗ для смежных разработчиков

Чего ожидаем:

⚡️ Знания и опыт написания прошивок на языке Verilog/VHDL под CPLD/FPGA Lattice semiconductor/Xilinx
⚡️ Опыт работы с Lattice Diamond/Xilinx Vivado
⚡️ Навыки работы с периферией ПЛИС (внешняя память NOR, NAND, блоками SMBUS, I2C, SPI, MDIO, блоками SerDes, PCIe)
⚡️ Навыки отладки FPGA-проектов, тестирования с использованием режима Boundary Scan JTAG (TAP)
⚡️ Умение работать с современной измерительной аппаратурой (источники питания, мультиметры, осциллографы, логические анализаторы и др.)

Будет супер плюсом:
Опыт работы с Embedded Linux (разработка драйверов)

Условия труда:

ИП, трудовые отношения
💰Достойная оплата труда
🏢 Гибридный график (офис в Москве 3–4 дня в неделю)
🤝 Работа в команде профессионалов с высокой инженерной культуройFPGA engineer

Если заинтересовала вакансия – пожалуйста, напишите, что ждёте от нового работодателя на старте?
Контакты: @mazhar_tqb
Вопрос опрос, знатоки!

Для чего эта схема или что она делает ? 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
Контент, который в последнее время выходит на канале вы считаете
Anonymous Poll
77%
Полезным
9%
Бесполезным
27%
Надо бы разбавить чем-то еще
0%
Напишу в комментарии под эти постом
FPGA-Systems Events pinned «Контент, который в последнее время выходит на канале вы считаете»
Знаете ли вы о существовании мега полезной стандартной команды в Tcl, которая называется history?
Anonymous Poll
10%
Да
37%
Нет
62%
Да откуда блин ты это берешь ?
2025/02/25 07:59:45
Back to Top
HTML Embed Code: