Search
Write a publication
Pull to refresh
-4
Эдуард Зиганшин @e-zigread⁠-⁠only

Разработка электроники

Send message

Разработка цифровой аппаратуры нетрадиционным методом: Yosys, SpinalHDL, VexRiscv (ч.1)

Level of difficultyHard
Reading time127 min
Views18K

Основная прелесть использования ПЛИС, на мой взгляд, состоит в том, что разработка аппаратуры превращается в программирование со всеми его свойствами: написание и отладка кода как текста на специализированных языках описания аппаратуры (HDL); код распространяется в виде параметризованных модулей (IP-блоков), что позволяет его легко переиспользовать в других проектах; распределенная разработка обширным коллективом разработчиков с системой контроля версий, такой же, как у программистов (Git); и, как и в программировании, ничтожно низкая стоимость ошибки.

Последнее очень важно, так как если при разработке устройства классическим методом разработчик несет вполне существенные затраты на сборку и производство изделия, и любая схемотехническая ошибка или ошибка трассировки печатной платы — это всегда выход на очередную итерацию и попадание на деньги, то при работе с ПЛИС ошибки ничтожны по своей стоимости и легко устранимы. И даже если в серийном изделии обнаруживается ошибка, то её во многих случаях можно устранить очередным апгрейдом прошивки «в поле» без замены изделия. Короче, с приходом ПЛИС разработка цифровой аппаратуры все больше и больше выглядит как программирование, а это, помимо всего прочего, существенно понижает порог вхождения в тему, и все больше программистов становятся разработчиками «железа». А новые люди, в свою очередь, приносят с собой в индустрию новые подходы и принципы.

В этой статье я хочу поделиться своим небольшим опытом «программирования» микросхем ПЛИС и тем, как я постепенно погружался в тему ПЛИСоводства. Изначально я собирался написать небольшую заметку про открытый тулчейн для синтеза Yosys. Потом — про язык SpinalHDL и синтезируемое микропроцессорное ядро VexRiscv, на нём написанное. Потом — про замену микроконтроллеров микросхемами ПЛИС на примере моей отладочной платы «Карно». Но в процессе я погрузился в историю появления Hardware Description Languages (HDL), и когда я начал писать, Остапа, как это часто бывает, понесло... В общем, получилось то, что получилось.

А еще эту статью можно рассматривать как глубокое погружение в то, что происходит вот на этом новогоднем видео.

Погрузиться сполна

Как я создал полностью автоматизированное онлайн радио с AI ведущими и музыкой

Level of difficultyMedium
Reading time5 min
Views25K

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

Это моя небольшая история, как я за месяц написал карманное медиа с полной автоматизацией, где роботы-ведущие заменили кожаных мешков и ведут подкасты, в которых шутят про AI

Читать далее

Если ваша карьера или бизнес не растут, значит вы так и не прошли ключевое испытание. О чем речь?

Level of difficultyEasy
Reading time6 min
Views40K

Слова про испытание могут показаться бредом, ведь современная работа — это просто работа. Это не «Матрица», не «Властелин колец» и не «Кунг-фу панда». Тут достаточно хорошо делать и хорошо будет, тут не надо голодать в пустыне и таскаться с кольцом по окрестностям, так ведь?

Читать далее

Лучшие бесплатные VPN для ПК и смартфона 2025 (которые работают)

Level of difficultyEasy
Reading time6 min
Views113K


Бесплатные VPN.

В последние несколько лет на территории РФ ужесточилась фильтрация интернет-трафика средствами ТСПУ. Сотни сайтов и интернет-сервисов внесены в чёрные списки и заблокированы. Получить доступ к ним можно только через VPN. Однако самые популярные VPN тоже подверглись блокировке.

Ограничения можно обойти через канал на собственном зарубежном сервере, купив там самый дешёвый хостинг за пару долларов или уже готовый VPS с установленным VPN (такие объявления есть на Авито). Если своего сервера нет, то остаётся только прибегнуть к услугам сторонних VPN-сервисов, которые ещё не заблокированы. Лучшие бесплатные VPN из выживших перечислены ниже.

Примечание. Эту статью Хабр наверняка заблокирует для пользователей из РФ, в исполнение запрета Роскомнадзора на информацию об обходе блокировок, так что лучше сразу после публикации сохранить её или подписаться на обновления в тг.
Читать дальше →

Сборка проектов Си и Си++: от простого к сложному. Часть I. Библиотеки

Level of difficultyMedium
Reading time12 min
Views25K

Каждый раз, в течение многих лет, собирая пилотную версию мизерного проекта или простой утилиты, мне кажется, что уж в этот раз точно обойдусь обычным скриптом для сборки, и никакие сборщики проекта мне не понадобятся. Но суровая реальность приводит меня в чувство уже в течение первых нескольких минут работы. Сначала оказывается, что до невозможности простая программка нуждается в JSON-парсере, HTTP-запросах CURL и прочих библиотеках. А по мере возбуждения хотелок эти все зависимости нарастают как снежный ком. И все мечты быстро скомпилировать страничку кода встречают на каждом шаге всё новые и новые проблемы.

Вот сегодня и расскажу о том, какие бывают способы борьбы с зависимостями и сборки проекта из множества файлов на Си++. Заодно те, кто не любят Си++, смогут порадоваться «прелестям» этого процесса. И хоть тема очень важная для программистов, но я обратил внимание, что даже многолетний опыт не гарантирует понимания этих процессов. Но сразу предупреждаю — история длинная даже с учетом всех попыток не убегать на смежные темы.
Читать дальше →

Операционная система в 1 000 строках кода (часть 2)

Level of difficultyMedium
Reading time18 min
Views11K

Продолжаем серию статей, посвящённую написанию собственной минималистичной ОС. В прошлой части мы познакомились со всеми вводными компонентами проекта и поставили общие цели. В этой же мы реализуем загрузку ядра, вывод строки Hello World!, механизм паники ядра, а также некоторые функции управления памятью и работы со строками.

▍ Навигация по вышедшим частям


Читать дальше →

Документируем код эффективно при помощи Doxygen

Reading time18 min
Views387K


Данная статья входит в получившийся цикл статей о системе документирования Doxygen:

  1. Документируем код эффективно при помощи Doxygen
  2. Оформление документации в Doxygen
  3. Построение диаграмм и графов в Doxygen

Это первая и основная статья из упомянутого цикла и она представляет собой введение в систему документирования исходных текстов Doxygen, которая на сегодняшний день, по имеющему основания заявлению разработчиков, стала фактически стандартом для документирования программного обеспечения, написанного на языке C++, а также получила пусть и менее широкое распространение и среди ряда других языков.

В этой статье мы сначала познакомимся с самой системой и её возможностями, затем разберёмся с её установкой и базовыми принципами работы, и, наконец, завершим знакомство рассмотрением различных примеров документации, примеров того, как следует документировать те или иные части кода. Словом, познакомимся со всем тем, что позволит вам освоиться и начать работать с этой замечательной системой.
Читать дальше →

Установка Qt на Windows без регистрации и VPN. Часть 1. VisualStudio Community + Conan.io

Level of difficultyEasy
Reading time4 min
Views18K

До присоединения Qt Group к санкциям, для установки Qt Framework and Tools было достаточно скачать Qt Online Installer, ввести данные учетной записи и выбрать интересующие компоненты в меню. Ныне приходится выбирать из скольких вариантов установки: прибегнуть к помощи одного из пакетных менеджеров или собрать из исходников. У каждого варианта есть свои плюсы и минусы. В этой статье рассмотрим установку через один из наиболее популярных пакетных менеджеров для с++ Conan.

Целевая операционная система: Windows 10

Шаг 0. Установка компилятора

Скачиваем с официального сайта VisualStudio Community

https://visualstudio.microsoft.com/ru/downloads/

Запускаем инсталлятор, для работы понадобится набор «Разработка классических приложений С++»

Читать далее

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

Level of difficultyMedium
Reading time11 min
Views4.6K

Привет, Хабр! Эта статья посвящена тестированию точности библиотек математических функций (libm). Мы обсудим, где эти библиотеки используются, почему они должны быть не только высокопроизводительными, но и высокоточными. Поймем, откуда в корректных, на первый взгляд, вычислениях берутся ошибки и как их избежать. Узнаем, как устроено большинство тестов в стандартных математических библиотеках и почему они не всегда работают. И наконец, ответим на вопрос, как одним тестом полностью покрыть код математической функции. Без воды, регистрации и громоздких формул.

Читать далее

Chisel вместо Verilog, искажение тактового дерева и прототипирование ASIC: прокачиваем FPGA-скилы новыми темами

Level of difficultyMedium
Reading time3 min
Views2.9K

Осенью мы в YADRO совместно с сообществом FPGA Systems собрали FPGA-энтузиастов сразу в двух городах — Москве и Санкт-Петербурге. Получилось почти 12 часов докладов — по проектированию на FPGA и ASIC, альтернативным HDL, запуску GPU AMD на ПЛИС с RISC-V, искажению времени и другим фантастическим явлениям темам. Самые полезные, по мнению зрителей, — в этом посте.

Читать далее

Глубокое обучение: Алгоритм обратного распространения ошибки. Теория и реализация. С нуля

Level of difficultyEasy
Reading time10 min
Views11K

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

Содержание: архитектура простой нейросети и инициализация переменных, прямое распространение ручной расчет, вывод производных, вывод алгоритма, обратное распространение ручной расчет, реализация простой архитектуры нейросети и задача «логическое или», реализация класса для многослойной нейросети и изображения MNIST.

Читать далее

Чип, подёргай ножкой ¯\_(ツ)_/¯

Level of difficultyMedium
Reading time9 min
Views9K

Как быстро выяснить схему соединений, когда на плате 70 микросхем в BGA?
Как протестировать плату, начиная с проверки соединений и заканчивая функциональными испытаниями?

Что можно вытворять с помощью JTAG сканирования? Где применять?
Возьмите в свой арсенал этот действительно полезный и могучий инструмент!
Читать дальше →

Программируем SFP-модули на программаторе CH341A

Reading time2 min
Views9K

Прошло уже более года с момента моей публикации о программаторе для CH341A под Linux - IMSProg и у меня возникло желание избавиться от еще одной программы, не дающей навсегда забыть о существовании Windows. Мой прежний программатор SFP собран на чипе FT232RL и имел софт только под Windows.

Каждый SFP-модуль имеет с своем составе стандартную микросхему 24C04 или 24C02, что натолкнуло меня на мысль использования простейшего переходника для программатора CH341 с использованием четырех проводов - земли, питания, I2C сигналов SDA и SCL. После просмотра разработок различных фирм я добавил в переходник джамперы на сигналы питания для снятия защиты от записи медных модулей - J1, J2 и J3 (контакты SFP TxPWR, RxPWR и TxEN). В результате получилась такая схема:

Читать далее

Obsidian+Github вместо Notion: синхронизация, бекап и версионность (3-в-1)

Level of difficultyEasy
Reading time9 min
Views106K

О том, как сделать прозрачную синхронизацию заметок Obsidian между устройствами (Desktop, Android, iOS) через GitHub:

1. Без сторонних приложений (вроде iCloud, SyncThing, Termux и пр)
2. Бесплатно
3. Бонусом — резервная копия: как самих заметок, так и истории изменений.

В результате получается полноценная замена Notion: структурированные заметки с автоматической синхронизацией между устройствами.

Инструкция:

Бюджетный квадрокоптер на базе ESP32 своими руками

Level of difficultyMedium
Reading time5 min
Views44K
За последние годы дроны стремительно переросли из нишевых хобби-девайсов в гибкие инструменты, применяемые для множества всевозможных задач — от фотографии до сельского хозяйства и даже военной сферы. В зависимости от назначения, характеристик и способности нести полезную нагрузку подобные устройства могут стоить от нескольких тысяч до миллионов.

И хотя основной принцип, лежащий в их основе, может казаться простым, для правильного функционирования дронов и реализации ими нужных задач применяются сложные технологии и вычислительные системы. Например, для сохранения стабильности в полёте необходимы прецизионные датчики вроде гироскопа, а также эффективная обработка считываемых ими данных. Нашим же проектом станет сборка небольшого дрона, управляемого с помощью смартфона.
Читать дальше →

Приключения серотонина в бесконечном цикле боли, или опиатная ломка у неторчка — ч.1

Level of difficultyMedium
Reading time9 min
Views16K

Всем привет. Меня зовут, Александр, и я айтишник. Нет, я не торчок, но уже несколько лет живу с постоянной болью, как Morphiumsüchtig на ломке (хотя не так страшно). В течение этого времени у меня сложилось субъективное понимание, как работает регуляция боли, последствия ее нарушения, и почему это может коснуться каждого. Даже тебя, Анон.

Читать далее

C и C++: межъязыковые интерфейсы

Reading time11 min
Views16K
Как известно, C и C++ — это родственные языки между которыми есть много общего. Но их пути, с годами, расходятся всё сильнее. В общих чертах дело обстоит так: код, написанный на одном из этих языков, не может быть скомпилирован под видом кода, написанного на другом. Этому мешает множество больших и маленьких различий между языками. Причём, речь идёт не только о синтаксических различиях. Некоторые общие синтаксические конструкции могут иметь разную семантику. Поэтому обычно нет никакого смысла в том, чтобы компилировать код, написанный на C, с помощью C++-компилятора. Не стоит доверять тем, кто утверждает обратное.

Правда, есть одна сфера, где обычно наблюдается согласие между C и C++. Это — ABI (Application Binary Interface, двоичный интерфейс приложений). Структуры данных и функции одного языка могут быть, в той или иной мере, использованы в другом языке. C и C++, кроме того, достаточно сильно пересекаются в области спецификаций интерфейсов, вследствие чего один и тот же заголовочный файл можно использовать из кода, написанного на обоих языках.



В этом материале я постараюсь собрать то общее, что есть у C и C++ и предложу некоторые рекомендации, которые позволят достаточно хорошо сочетать эти языки. Это, правда, будет всего лишь рассказ, иллюстрирующий точку зрения C-программиста, который хочет создавать интерфейсы для C++.
Читать дальше →

Законы программирования

Reading time20 min
Views60K

Законы, теории, принципы и закономерности, полезные для разработчиков


Введение


Перевод репозитория github.com/dwmkerr/hacker-laws

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

Здесь содержатся объяснения некоторых законов, принципов и закономерностей, но нет никакой агитации в их пользу. Применять их или нет – это всегда вопрос спорный, и всё зависит от того, над чем вы работаете.

Законы


Закон Амдала


Закон Амдала — это формула, демонстрирующая потенциал ускорения вычислительной задачи, которого можно достичь при увеличении количества ресурсов системы. Обычно он используется в параллельных вычислениях, и может предсказать наличие реальных преимуществ от увеличения количества процессоров с учётом ограничений параллелизуемости программы.
Читать дальше →

Подключаем WiFi вручную

Reading time6 min
Views7.2K

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

ifconfig eth0 add inet 192.168.1.10 netmask 255.255.255.0 up

Или, ежели админ сети сподобился, да настроил сервер DHCP - то так:

ifconfig eth0 up

dhclient eth0

Да еще не забыть указать адрес сервера DNS:

echo "nameserver 8.8.8.8" > /etc/resolv.conf

А ежели надобность была чтобы оно при перезагрузке сохранялось - то записать эти заклинания в файл типа /etc/rc.local на память долгую.

Теперь-то другое дело: воткнул шнурок в разъем - сеть и появилась, как по щучьему велению.

И даже WiFi - нажал мышкой на иконку, выбрал название сети, ввел пароль - она и подключилась.

Красота, лепота какая! Но есть нюанс...

Читать далее

Почему джуны путаются в асинхронном коде (и как научиться с ним работать)

Level of difficultyEasy
Reading time8 min
Views44K

Асинхронный код часто становится камнем преткновения для начинающих разработчиков. Почему функции выполняются не в том порядке, зачем нужны промисы, и что делает async/await? В статье я простыми словами объясняю:

Как работает Event Loop и почему это важно.
Какие ошибки чаще всего допускают джуны при работе с асинхронностью.
Как научиться писать понятный и предсказуемый асинхронный код.

Если асинхронность вызывает больше вопросов, чем ответов, загляните в статью - там всё по шагам. 🙂

Читать далее

Information

Rating
Does not participate
Location
Мытищи, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

System Software Engineer, Hardware Engineer
Senior
From 225,000 ₽
C++
Qt
Verilog HDL
VHDL
C
Git
Linux