Search
Write a publication
Pull to refresh
287
0.2
Владимир @32bit_me

Программист

Send message

SoC: поднимаем простой DMA на FPGA

Reading time14 min
Views55K


День добрый! В прошлой статье я описывал, как «поднять» с нуля SoC от Altera.
Мы остановились на том, что измерили пропускную способность между CPU и FPGA, когда копирование выполняется процессором.

В этом раз мы пойдем немного дальше и реализуем примитивный DMA в FPGA.
Кому интересно — добро пожаловать под кат.
Тут интересно

Как Python и Jinja могут облегчить жизнь FPGA разработчику

Reading time14 min
Views19K
Всем привет!

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

Один из вариантов — использование автогенерации кода.

В этой статье я расскажу:
  • как можно обойти одно из ограничений языка Verilog, применяемого при разработке ASIC/FPGA, используя автогенерацию кода с помощью Python и библиотеки Jinja.
  • как можно ускорить разработку IP-ядер, сгенерировав модуль контрольно-статусных регистров из их описания.


Если интересно, добро пожаловать под кат!
Читать дальше →

Открытый проект универсального микроконтроллерного модуля

Reading time4 min
Views17K


После беглого знакомства в прошлой статье с микроконтроллерами семейства Kinetis от фирмы Freescale я хотел бы представить проект микроконтроллерного модуля на этих чипах.
Читать дальше →

STM32, C++ и FreeRTOS. Разработка с нуля. Часть 3 (LCD и Экраны)

Reading time20 min
Views28K

Введение


В двух предыдущих частях STM32, C++ и FreeRTOS. Разработка с нуля. Часть 1 и STM32, C++ и FreeRTOS. Разработка с нуля. Часть 2 мною уже были реализованы требования SR0, SR7, SR4 и SR6. Опять нужно вспомнить, какие вообще требования есть.
SR0: Устройство должно измерять три параметра (иметь три переменных): Температуру микропроцессора, Напряжение VDDA, Напряжение с переменного резистора
SR1: Устройство должно выводить значение этих переменных на индикатор.
SR2: Единицы измерения для Температуры микропроцессора — градусы Цельсия, для остальных параметров — вольты.
SR3: При нажатии на кнопку 1, на индикаторе должен показываться экран со следующей измеряемой переменной,
SR4: При нажатии на кнопку 1 Светодиод 1 должен изменять свое состояние
SR5: При нажатии на кнопку 2, на индикаторе должен поменяться режим отображения переменных с постоянного показывания переменной на последовательное (менять экраны раз в 1.5 секунды) при следующем нажатии с последовательного на постоянное,
SR6: При нажатии на кнопку 2 светодиод 2 должен менять свое состояние.
SR7: Светодиод 3 должен моргать раз в 1 секунду.

Значит остались самые «вкусные» требования связанные c отображением всей измеренной информации на индикаторе: SR1, SR2, SR3, SR5. Ну что же начнем.
Читать дальше →

OpenCL. Как начать

Reading time7 min
Views113K

Тяжелый старт


Всем привет! Какое-то время назад я начал копать тему с OpenCL под C#. Но наткнулся на трудности, связанные с тем, что не то, что под C#, а вообще по этой теме очень мало материала. Какую-то вводную по OpenCL можно почерпнуть здесь. Так же простой, но работающей старт OpenCL описан вот тут. Ни на йоту не хочу обидеть авторов, но все статьи, что я находил на русском (и на хабре в том числе) страдают одной и той же проблемой — очень мало примеров. Документация есть, её много и как принято для хорошей документации читается сложно. В своей статье (а если всё будет нормально, то и в цикле статей), я постараюсь поподробней описать эту область, с точки зрения человека, который начал её копать с нуля. Думаю такой подход будет полезен тем кто хочет быстро стартовать в высоко производительных вычислениях.
Дальше

STM32, C++ и FreeRTOS. Разработка с нуля. Часть 1

Reading time14 min
Views128K

Введение


Не так давно мой отдел столкнулся с трудностями поиска новых инженеров программистов для разработки встроенного ПО. Опытным и умным не нравился уровень зарплаты, а молодых просто нет в нашем городе. Поэтому под патронажем нашей доблестной глобальной компании со штаб квартирой где-то в Сент Луисе, мы начали сначала набирать студентов в интернатуру, а потом, решили пойти другим путем и сделать целых два курса по разработке ПО, а уже там самим выбирать самых “толковых” если понадобятся вдруг новые сотрудники. Это намного дешевле и позволяет охватить максимальное количество претендентов.
Немного отступлю от темы, сам я программировал последний раз очень давно, и вообще больше на С#, а последний глобальный проект на микроконтроллере (PIC16 на зыке Си) был сделан в далеком 2007 году.
Поэтому мне предстояло разобраться с современными микроконроллерами, языком С++ и операционной системой реального времени.
Конечно все наши проекты уже сейчас используют ОСРВ и пишутся на С++, но как разработчик я в них не учувствую, а занимаюсь тунеядством управлением проектами разработки такого ПО.

Выбор


Времени у меня на все про все было дано 1 месяц. С начала июня 2015 до начала июля 2015, потому что потом я собирался в отпуск, а после отпуска обычно полно работы. Надо было делать все быстро и четко.
Немного проконсультировавшись с коллегами, выяснил, что модное направление ARM Cortex различные ядра и из доступных отладочных плат можно заказать Olimex STM32P152 которые стоили 25 долларов. Они пришли очень быстро — 6 плат по цене примерно 2000 рублей. Стоит заметить, что эти платы были закуплены нами для университета, где собственно и будет проходить этот курс.
image
Читать дальше →

ПЛИС — мои первые шаги

Reading time11 min
Views155K
Недавно я все-таки сделал свой первый шаг к ПЛИС и призвал вас за собой. Мое фанатическое увлечение ПЛИС и идея о том, что ПЛИС является лучшей платформой для создания любых устройств приобрела религиозный характер. Моя секта ПЛИСоводов проповедует полный отказ от микроконтроллеров, а особо экстремистская ветвь проповедует отказ не только от софт процессоров, но и вообще от последовательных вычислений!

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

Эта статья для новичков. В ней я опишу типичные проблемы, вопросы, заблуждения, ошибки, которые могут появиться в самом начале обучения (потому что они появились у меня). Однако, контекст статьи ограничен тем, что разработка ведется на ПЛИС от Altera в среде Quartus на языке Verilog.

Подробности

Описание цифровых автоматов на VHDL

Reading time12 min
Views60K

Немного теории


Цифровой автомат (ЦА) — это устройство, которое осуществляет прием, хранение и преобразование дискретной информации по некоторому алгоритму и может находиться в одном из нескольких устойчивых состояний [7].



Рисунок 1 — Граф цифрового автомата
Читать дальше →

Обучение на STM32 в массы

Reading time6 min
Views151K

Небольшая предыстория


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

Мое обучение началось, когда я два года назад заинтересовался темой микроконтроллеров и инженер, у которого поинтересовался насчет них, выдал мне плату 300х200мм и сказал, что в ней стоит контроллер STM32F217ZGT6 и на этой плате есть все необходимое для обучения. «В общем, освоишь ее — все остальное покажется фигней» (он, правда, не сказал, что для моргания светодиодом надо настроить SPI, о котором на тот момент я даже не слышал). Спустя три не очень напряженных месяца бесплотных попыток, осознания слабости навыков программирования и огромного количества прочитанных статей пришлось все же раскошелится на STM32VLDISCOVERY и способом копирования программ и экспериментов с ними дело наконец-то пошло, но все равно медленно.

За полтора года успел поработать разработчиком, искал вакансии, где работают с STM32 (так как считаю, что сейчас это наиболее перспективные микроконтроллеры своего класса), нахватался опыта и когда дело дошло до диплома, вспомнил о своих наболевших мозолях. Идея с темой пришла мгновенно: «Отладочная плата на STM32 и (полноценный) обучающий курс (для самых маленьких) к ней».

Да, знаю, знаю, от многих инженеров слышал, что с темой «отладочная плата» «будь я преподавателем, я бы тебя завалил на защите», но все же считаю, любая идея имеет право на жизнь, так что всем, кому интересно, прошу читать далее.
Читать дальше →

«Дайте два!» или о пользе и вреде мультимониторной конфигурации

Reading time5 min
Views61K
Тема использования многомониторной конфигурации далеко не нова: про удобство разделения рабочих экранов уже успели написать как обычные пользователи, описывая свой опыт, так и производители. Последние даже приводят различные исследования с выходными данными, показывающими повышение продуктивности при переходе хотя бы на два монитора.



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

Обзор отладочного комплекта Radxa Rock 2 Square и SoM

Reading time4 min
Views9.6K
Обзор одной из самых производительных отладочных плат — Radxa Rock2 Square. Под катом фотографии, особенности конструкции, планируемые доработки и использование.
Читать дальше →

Дебаггинг в реальном времени через JTAG/SWJ-DP для микроконтроллеров на ядре ARM Cortex-M

Reading time4 min
Views40K

С некоторых пор фирма Segger предлагает технологию Real Time Terminal (RTT) для своих JTAG адаптеров J-Link. Суть ее в том, что программа на микроконтроллере может выводить и принимать отладочную информацию из JTAG/SWJ-DP порта, как это обычно делается через UART. И тогда нам больше не нужен реальный отладочный UART. Далее чуть подробнее о возможностях этой технологии.
Читать дальше →

Использование Arduino в качестве компонентов Wolfram SystemModeler

Reading time4 min
Views15K
Перевод поста Leonardo Laguna Ruiz и Johan Rhodin "Using Arduinos as SystemModeler Components".
Скачать файл с моделями, рассмотренными в посте, можно здесь здесь.
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.

С помощью новой бесплатной библиотеки ModelPlug library для Wolfram SystemModeler можно подключать Arduino для моделирования в SystemModeler. Arduino легко сопрягаются с компонентами входа и выхода, так что смело можно включать их в модели SystemModeler чтобы управлять, скажем, лампочками, датчиками, переключателями, запускать сервоприводы и тому подобное. С помощью библиотеки ModelPlug можно свободно совмещать программные и аппаратные компоненты в моделировании и использовать Arduino как плату для сбора данных.

Set of icons
Читать дальше →

Программируем микроконтроллеры в QtCreator

Reading time9 min
Views25K


Почему-то в интернете мало документации про qbs, и я решил немного исправить эту ситуацию. Попробую описать в виде повествования, что необходимо сделать, что бы в QtCreator можно было компилировать (и не только) что угодно под что угодно.
Читать дальше →

Андроиды в дельфинарии

Reading time6 min
Views13K
Приветствую всех любителей тех устройств, что помещаются в карман, а также тех, кто держит свой карман шире 7". Сейчас мы займемся искусством программирования кросс-платформенных графических приложений, то есть таких приложений, которые работают на мобильной платформе (смартфоны и планшеты Android) и под Windows (стационарные PC, ноутбуки, нетбуки, планшеты). При этом наши приложения будут графическими, графика основана на OpenGL (OGL) и его мобильном варианте OpenGL ES (GLES). Я использую Embarcadero Delphi XE7. Важная особенность – в этом проекте я не использую платформу FM (FireMonkey), мы будем писать все сами и с нуля, как в старые добрые времена.

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

LFS: Темная сторона силы. Часть 3

Reading time10 min
Views22K

Предисловие


Итак, пришло время расставить последние точки над «i» и рассказать о том, как из кучи исполняемых файлов и библиотек, которые мы героически собирали и настраивали в прошлой статье получить, наконец, Linux.

1. Подсистема инициализации Unix System V


Эта подсистема инициализации долгое время использовалась в Linux и была стандартом «де-факто». Однако время идёт, и нельзя в общем-то называть данный подход устаревшим. Гораздо точнее заметить что эта подсистема инициализации, в тренде развития систем семейства GNU/Linux, уступила свое место systemd, рожденной в недрах корпорации Red Hat. Существуют дистрибутивы до сих пор использующие скрипты инициализации. Однако все популярные линуксы практически поголовно пришли к использованию systemd, причем последним сдался консервативный Debian со своей дочкой Ubuntu.

Вообще-то я жалею, что сразу не стал собирать вариант LFS, использующий systemd. Просто, после первой неудачной попытки сборки не хотелось отклонятся от стабильной траектории. Возможно я ещё вернусь к этому вопросу, возможно так же что и не вернусь. Время покажет. А пока рассмотрим основные принципы работы скриптов инициализации System V.
Читать дальше →

Размещай и властвуй! Используем размещающий new для оптимизации кода на C++

Reading time14 min
Views49K


Создавая объект за объектом, мы часто не обращаем внимания на такую «мелочь», как динамическое выделение памяти. Наравне с копированием и сериализацией, выделение памяти из кучи через new постепенно сводит на нет преимущества C++ в скорости. Чем интенсивнее мы пользуемся заветным new, тем сложнее становится приложению, поскольку память кончается, фрагментируется и всячески стремится утекать. Эта участь уже постигла удобные, но неявно опасные для производительности контейнеры STL: vector, string, deque, map. Особенно обидно терять скорость на выделении небольших объектов в больших количествах. Но есть способ обработать размещение памяти таких объектов на стеке, при этом скрывая детали реализации в специальный класс данных. В этом нам поможет механизм размещающего new — непревзойденный способ оптимизации приложения, полного частых и мелких выделений памяти из кучи.
Читать дальше →

OpenHAB и домашний контроллер — делаем железо

Reading time4 min
Views42K
Удачно состыковав простое Modbus устройство с платформой OpenHAB, мне тут же захотелось сделать что-то полезное для дома. В ближайшем интернет магазине были закуплены проводки, макетка, модули и датчики для Arduino, и моток синей изоленты.

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

Решено, нужно спроектировать плату, к которой легко будет подключить все эти датчики и напихать в неё всё, что нужно для автоматизации. А если по той же шине навесить на OpenHAB другие устройства, то получится отличная система умного дома:


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

Мультиклеточный микропроцессор, «макроциклы» для работы с массивами

Reading time2 min
Views4K
Камнем преткновения для фон Неймановской архитектуры является работа с массивом данных: проверка значений, суммирование, произведение элементов. Данное действие требует организации цикла от первого элемента до последнего. В любом цикле обязательно присутствуют накладные расходы: вычисление адреса следующего элемента, изменение и проверка счётчика. Кроме того, если архитектура процессора не поддерживает циклы на микропрограммном уровне, то приходится каждую команду цикла считывать из памяти или кэша, декодировать и выполнять. КПД такого процесса может быть довольно низким. Единственный плюс — это длина кода программы. Всего несколько байт для любого размера массива.

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

Information

Rating
5,168-th
Date of birth
Registered
Activity