Обновить
128K+

FPGA *

Программируемые логические интегральные схемы

146,6
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Создаем I2C Master Controller на Verilog. Перенос на Zynq 7000 (bare‑metal)

Уровень сложностиСредний
Время на прочтение63 мин
Охват и читатели11K

После успешной отладки на плате с Cyclone IV пришла пора перенести наработки на плату Zynq Mini c XC7Z020. В этой статье я опишу, каким образом можно организовать вывод нужной нам информации из PS‑части Zynq на дисплей который подключен к EMIO на выводах PL. Сделаем обновленный модуль i2c_master_axi который добавляет сверху к уже разработанному ядру поддержку AXI4-Lite Slave, сделаем сборку проекта, подключим их к PS и проверим в bare‑metal сценарии. После того как это будет все работать — переходить к Linux уже будет гораздо проще.

Всем заинтересованным добро пожаловать под кат! 

Читать далее

Новости

Поднимаем Linux на плате Zynq RK-7020-F V1.1 c помощью Buildroot и U-Boot SPL

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели9.7K

Не так давно у меня на руках появилась плата RK-ZYNQ7020-F REV 1.1.

В данной статье я хочу поделиться своим опытом, связанным с подготовкой buildroot для данной платы. Здесь мы разберем этапы от формирования xsa файла до запуска платы и первых логов, с объяснением что происходит в железе на каждом этапе.
Также в рамках этой статьи я не буду использовать FSBL, мы попробуем обойтись U-Boot SPL.

Итак, приступим к рассмотрению!

Описание отладочной платы

Базовый набор периферии на данной плате, заявленный в документации:

Читать далее

64 прямоугольника хватит всем

Уровень сложностиСредний
Время на прочтение31 мин
Охват и читатели16K

«Студент-программист реализовал на FPGA полноценную игровую приставку с нуля за полтора месяца, не имея опыта цифрового проектирования». Для меня самого это звучит как фантастика или реклама очередных онлайн-курсов, но я расскажу эту историю. Реальную историю моего пути — студента четвертого курса направления «Программная инженерия». Приставка «Брус-16», о которой недавно писали в блоге YADRO, работает на FPGA-платах уровня Tang Nano 9K, поддерживает ввод с джойстиков DualShock 2 и выводит изображение на обычный HDMI-монитор. Статья будет интересна студентам, новичкам в области аппаратного проектирования и всем тем, кто хочет увидеть, как работают игры для «Брус-16» в «железе».

Читать далее

Четыре простых шага до изделия: использование проектирования на основе моделей для программно-определяемых радиосистем 4

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели12K

В предыдущих частях этой серии статей мы рассказали о платформе быстрого прототипирования Zynq SDR,1 представили этапы использования MATLAB и Simulink для разработки алгоритма, который может успешно обрабатывать и декодировать передачи ADS-B,2 а также показали, как проверить алгоритм как в симуляторе, так и с помощью реальных данных, полученных с платформы SDR.3 Конечная цель всех этапов — создать проверенную модель, которую можно преобразовать в код на языках C и HDL и интегрировать в программно-аппаратную инфраструктуру платформы SDR.

Читать далее

Четыре простых шага до изделия: использование проектирования на основе моделей для программно-определяемых радиосистем 3

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели11K

После реализации любого алгоритма обработки сигналов в MATLAB или Simulink® следующим логичным шагом будет проверка работоспособности алгоритма на реальных данных, полученных от аппаратной программно-определяемой радиосистемы, на которой он будет работать. На первом этапе алгоритм проверяется на различных наборах входных данных, полученных от системы. Это помогает проверить работоспособность алгоритма, но не гарантирует, что он будет работать должным образом в условиях, отличных от тех, в которых были получены исходные данные, а также что его поведение и производительность будут такими же при различных настройках аналогового входного каскада и цифровых блоков программно-определяемой радиосистемы. Чтобы проверить все эти аспекты, очень полезно иметь возможность запускать алгоритм в режиме реального времени, получая на вход данные в режиме реального времени и настраивая программно-определяемую радиосистему для достижения оптимальной производительности. В этой части серии статей рассматриваются программные инструменты, предоставляемые компанией Analog Devices для обеспечения прямого взаимодействия моделей MATLAB и Simulink с платформами FMCOMMSx SDR. В ней показано, как эти инструменты можно использовать для проверки моделей ADS-B, представленных во второй части серии статей.2

Читать далее

Четыре простых шага до изделия: использование проектирования на основе моделей для программно-определяемых радиосистем 2

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели11K

Беспроводные сигналы, которые можно обнаружить и расшифровать, окружают нас повсюду, и к ним легко получить доступ с помощью современного программно-определяемого радио (Software-Defined Radio, SDR), например, интегрированных радиочастотных приёмопередатчиков Analog Devices AD9361/AD9364.™1,2 Сигналы Automatic Dependent Surveillance Broadcast (ADS-B) с коммерческих самолётов — это легкодоступные беспроводные сигналы, и их можно использовать для демонстрации процесса быстрого прототипирования на основе AD9361, подключённого к программируемой однокристальной системе Xilinx® Zynq®-7000. Коммерческие воздушные суда используют передатчики ADS-B для передачи диспетчерам данных о своём местоположении, скорости, высоте и идентификационном номере воздушного судна.3 Формат полётных данных определён в спецификации Mode S Extended Squitter Международной организации гражданской авиации (ICAO).4 ADS-B внедряется по всему миру для модернизации систем управления воздушным движением и предотвращения столкновений. Она уже используется в Европе и постепенно внедряется в США.

Читать далее

Четыре простых шага до изделия: использование проектирования на основе моделей для программно-определяемых радиосистем 1

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели8.9K

Между концепцией беспроводной системы и ее практическим воплощением существует значительный разрыв. Для преодоления этого разрыва обычно привлекаются команды инженеров с самыми разными навыками (радиочастотные технологии, программное обеспечение, цифровые сигнальные процессоры, HDL и встраиваемые системы на базе Linux®), и во многих случаях проекты срываются на ранних этапах разработки из-за сложности координации усилий различных проектных групп.

В этой статье, состоящей из четырех частей, мы рассмотрим достижения в области платформ и инструментов, которые позволяют разработчикам быстро моделировать и создавать прототипы беспроводных систем, а также прокладывать путь к их внедрению в производство. В качестве реального примера мы создадим прототип беспроводной программно-определяемой радиосистемы, которая принимает и декодирует сигналы автоматической зависимой системы наблюдения (ADS-B), чтобы определять и сообщать о местоположении, высоте и скорости коммерческих самолетов, пролетающих поблизости. Для этого нам понадобятся MATLAB® и Simulink, а также навыки интеграции аппаратного и программного обеспечения. Аппаратной платформой станет система прототипирования программно-определяемых радиосистем (SDR) от Analog Devices/Xilinx®.

Читать далее

Подключаем к ПЛИС клавиатуру PS/2 и ПК по интерфейсу RS232

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.9K

Не большой пример для начинающих ПЛИСоводов, как подключить к ПЛИС (ALTERA Cyclon 4) клавиатуру с интерфейсом PS/2, а так же компьютер по интерфейсу RS232 (он же COM-порт).

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

Читать далее

QPSK HDL приёмопередатчик

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели10K

В этой статье описано, как создать QPSK передатчик и приёмник на HDL языке, интегрировать их в ПЛИС и передать данные через радиоканал. В одной из прошлых статей было рассказано, что нужно чтобы инициализировать ad9361 на PlutoSDR. Эта статья может считаться продолжением работы, которая была начата в той статье. Для создания HDL реализации QPSK приёмопередатчика использованы Matlab и Simulink c их возможностями генерации HDL кода из моделей. В качестве моделей использованы примеры, которые предоставляются с дополнительными пакетами, разработанные специально для демонстрации возможностей генерации HDL кода. Запустим этот код на плате из прошлой статьи, а также и на новой плате — ещё одном клоне PlutoSDR с более ресурсоёмкой ПЛИС Z7020. И посмотрим на график созвездия.

Читать далее

Насколько плох был Intel iAPX 432 — проверяем на практике

Уровень сложностиСредний
Время на прочтение30 мин
Охват и читатели16K

Был такой процессор в 80х - Intel iAPX 432. Он разрабатывался в качестве преемника 8080 и изначально даже имел кодовое обозначение 8800. Intel заложила в этот процессор очень много всего - абсолютно новая архитектура, совершенно не похожая на предшественников, и даже некоторые концепции ОС, реализованные прямо в кремнии - поддержка объектно-ориентированного программирования, сборщик мусора, планировщик процессов, асинхронные коммуникации, несколько уровней отказоустойчивости и многое другое.

Читать далее

Как ИИ портит резюме студентам

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели17K

Сейчас студенты поголовно пишут резюме с помощью ИИ, и ИИ поголовно делает им интересное западло: оно вставляет им среди рабочих навыков SVA, то есть SystemVerilog Assertions (ниже я расскажу что это). При виде SVA в резюме я тут же прошу кандидата написать некий простейший SVA на три строчки, и начинается извивание ужа на сковородке:

Читать далее

Разработка параметризируемого модуля CORDIC-алгоритма на System Verilog

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели14K

В далеком 2011 году автором была опубликована статья «Реализация CORDIC‑алгоритма на ПЛИС» [1]. В той статье приводится сначала математическое описание алгоритма, его суть. Показан пример расчета поворота вектора на плоскости сначала «на бумажке» согласно алгоритму, а затем сравнение результатов с расчетом «по калькулятору». Затем, показано создание структурной схемы проекта с rtl‑описанием CORDIC‑алгоритма и приведены листинги каждого модуля. Помимо этого были приведены основы создания проекта в среде ModelSim.

Автор считает, что эта статья оказалась полезной для новичков в области программирования ПЛИС, так как на протяжении долгого периода времени, после публикации статьи приходили письма с вопросами и уточнениями на данную тему. Даже сейчас я часто встречаю на различных форумах на тему ПЛИС ссылки на данную работу. Но! Если математическая часть алгоритма однозначно является полезной, а также основы создания и структурированного ведения проекта для новичка, то использовать данное rtl‑описание в различных проектах, адаптируя модули проекта по свои нужды крайне неудобно и неуклюже. По крайней мере, автор, когда заглядывает в это свое создание в прошлом, морщится и чувствует себя неловко.

Поэтому появилось желание представить тот модуль CORDICа (для генерации гармонического сигнала в сфере радиолокации и связи), который автор использует в данный момент в различных проектах. Весь алгоритм реализован в одном sv‑модуле, а, значит, его намного легче переносить из проекта в проект. Также он более прост в восприятии.

Читать далее

Проектируем с нуля калькулятор на FPGA. Части 4 и 5: Фреймворк и оборудование

Время на прочтение11 мин
Охват и читатели8.9K

← Третья часть

Сколько себя помню, я любил играть в LEGO. Больше всего меня восхищало то, что из одного и того же набора типов блоков можно построить что угодно: главными были не блоки, а воображение или план, показывающий, в каком порядке их соединять. Мой проект работает аналогичным образом: один набор исходников, хороший план и множество различных способов собирать и тестировать его.

В этой части я расскажу об окружениях и их взаимосвязи.

Главный принцип этого фреймворка заключается в том, что единственный набор файлов исходников на Verilog можно без изменений использовать в различных средах сборки:

ModelSim для потактово точной симуляции HDL с волновым выводом

Verilator для быстрой симуляции на C++, с тестовой обвязкой (calctest) и другими инструментами

Десктопное приложение на Qt для интерактивной работы с интегрированным отладчиком на уровне исходников

Qt WebAssembly для запуска калькулятора в браузере с попиксельной точностью

Quartus для синтеза и записи на физическую плату FPGA

Каждое из окружений позволило выявлять свой класс багов. ModelSim отлавливает проблемы таймингов на уровне сигналов. Verilator обладает достаточной скоростью для проверки тысяч тестовых векторов. Симулятор на Qt позволяет удобно пользоваться интерактивной отладкой. WebAssembly доказывает работоспособность кода в совершенно иной среде исполнения, в которой видением приложения можно поделиться со всем миром. Целевая платформа FPGA, реальная плата — это то, что можно потрогать, окончательная реализация идеи.

Читать далее

Ближайшие события

Проектируем с нуля калькулятор на FPGA. Часть 3: Практические численные методы

Время на прочтение11 мин
Охват и читатели11K

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

Когда я начинал этот проект в 2021 году, мне нужен был код на C++, который бы реализовывал алгоритмы на основе примитивов BCD и проверял результаты. Этот код превратился в подпроект Methods. Он заработал, но в нём возникли небольшие баги с шириной мантиссы, из-за которых тестовые результаты оказались ненадёжными в пределах одного-двух последних разрядов. Вместо того, чтобы патчить его, я в 2025 году переписал всё с нуля в рамках подпроекта Proto: более чистой архитектуры, правильного эталона и генератора тестовых векторов оборудования, относительно которого можно валидировать микрокод FPGA.

Читать далее

Проектируем с нуля калькулятор на FPGA, части 1 и 2

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели16K

Идея этого проекта пришла ко мне в феврале 2021 года, когда в Остине (штат Техас) произошёл сбой энергосистемы. К сожалению, нам надолго запомнилось то, как правительство справлялось с ситуацией. Когда единственным источником тепла и света остался только газовый камин, а единственным окном в мир — слабое телефонное Интернет-соединение, у меня было много времени поразмыслить о том, что бы новое и интересное мне хотелось разработать. Я взял калькулятор HP-41CV и начал нажимать на кнопки. Как обычно, ощущения от этого были самыми приятными. И мне захотелось самому создать нечто подобное!

В начальной школе мне представилась возможность поиграть с HP-41CV. Я наблюдал, как калькулятор загружает программу с магнитной ленты и запускает её. Жужжание считывателя карт и тонкая магнитная лента, втягиваемая в устройство с одной стороны и выходящая с другой, внезапно изменяли поведение калькулятора, что произвело на меня очень сильное впечатление. Я и не подозревал, что оно повлияет на всю мою жизнь. Спустя несколько лет у меня появился Sinclair ZX81, потом ZX Spectrum, на котором я при помощи дизассемблера HiSoft Devpac MONS взламывал разные игры. Эти два устройства (калькулятор HP и микрокомпьютеры Sinclair) подтолкнули меня к разработке, программному обеспечению и исследованию внутренностей разных машин. Во многом я стал разработчиком именно благодаря этому.

Когда-то я изучал сам чип Z80, воссоздав его в виде A-Z80 и написав визуальный инструмент Z80 Explorer, отображающий его список связей. В каком-то смысле это ощущалось как закрытие темы одержимости Sinclair. Проект калькулятора ощущался как закрытие темы HP. Это не клон, не эмуляция, а реализация с нуля на основе тех же принципов. Мне хотелось изнутри разобраться в том, почему эти машины работали именно так.

Как работает научный калькулятор? Не в общих чертах, а в подробностях. Как он хранит числа? Какой алгоритм вычисляет sin(x)? Как функционирует его очень простой CPU?

В серии моих статей мы получим ответы на эти вопросы: в конечном итоге мы получим полностью работающий научный калькулятор, спроектированный и изготовленный с нуля, на собственном CPU, созданном на FPGA, с написанным вручную микрокодом, эталонными реализациями на C++ и физическим «железом», которое лежит у меня на столе и может вычислять точные ответы. И всё это в опенсорсе: вы можете увидеть это и попробовать самостоятельно.

Насколько я понимаю, этот проект уникален: мне неизвестен ни один другой научный калькулятор (с тем же уровнем функциональности), реализованный на FPGA с собственным CPU и оригинальным рукописным ПО для его работы.

Читать далее

Создаем I²C Master Controller на Verilog. Burst‑транзакции и дисплей SSD1306

Время на прочтение117 мин
Охват и читатели12K

Продолжим совершенствование нашего I²C‑контроллера и расширение спектра применимости. В этот раз сделаем возможность burst‑транзакций и выведем картинку SSD1306. Для этого необходимо детально разобрать механизм функционирования OLED‑дисплея SSD1306 и сделать аппаратный контроллер с burst‑передачей по I²C, и в качестве примера сделать генерацию визуализацию 3D‑куба и текста. Получился ОЧЕНЬ объемный материал с объяснением всех механик примененных для решения данной задачи. И вся логика — сугубо в железе, без процессора, без микрокода и чисто в ПЛИС.

Всем кто интересуется кодингом под Verilog — добро пожаловать под кат!

Читать далее

Создаем I2C Master Controller на Verilog. Создаем контроллер ядра I2C

Уровень сложностиСредний
Время на прочтение33 мин
Охват и читатели12K

Я продолжаю описывать создание I2C-контроллера на Verilog. В предыдущих статьях мы протестировали ядро контроллера который выполняет атомарные функции работы с шиной в т.ч. в пограничных ситуациях типа clock stretching и пр. Теперь необходимо разработать управляющий контроллер для этого ядра, чтобы выполнять необходимые нам функции, но уже на следующем уровне абстракции и стать на шаг ближе к нашей цели - к рабочему коду I2C Controller который мы будем использовать с EEPROM и OLED SSD1306, а далее все это переиспользуем в Zynq и подключим к Linux. 

Всем заинтересовавшимся - добро пожаловать под кат!

Читать далее

Встреча FPGA-сообщества: онлайн, вечер, пять докладов

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели9.3K

Регулярный слет сообщества FPGA-инженеров и им причастных пройдет 26 мая в 19 часов в формате онлайн-трансляции. В программе вечера пять докладов: о Yosys, SystemRDL, Edge AI и анализе вейвформ с LLM. Подробности о темах и спикерах — под катом. А регистрация — по ссылке.

Читать далее

Запуск Vivado 2019.1 на Orange Pi 3 LTS  через QEMU

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели14K

Если вам интересно как выглядит работа Vivado на одноядерном ARM процессоре с частотой 1.8 ГГц, и 2 Гб ОЗУ, то я вам это покажу, и расскажу, как я запустил и успешно прошил плату (ДА! Собрал проект и прошил).

Читать далее

Перепрыгивание с языка на язык как тактика прохождения интервью

Время на прочтение3 мин
Охват и читатели28K

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

Я задал вопрос про язык описания и верификации аппаратуры SystemVerilog. На это кандидат сказал, что он еще не освоил SystemVerilog, вписал его в резюме на будущее, но вообще использовал Verilog-95 и немного Verilog-2001.

“Нет проблем”, - сказал я и задал вопрос по Verilog-95: “приведите примеры гонок (race conditions) при использовании верилога”.

На это кандидат сказал, что вообще его опыт был больше связан с VHDL. “Блин, как он выкрутился” - подумал я, ведь в VHDL нет гонок как в верилоге из-за дизайна языка.

Читать далее
1
23 ...