Обновить
64K+

FPGA *

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

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

Школьники рассказывают на видео чему они научились за три сеанса работы с микросхемами малой степени интеграции

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

Некий комментатор скормил ИИ мои посты про обучение школьников цифре на макетке, и иишница в частности ответило: “Высокий порог входа для части школьников. Проект предполагает понимание базовых вещей: что такое бит, такт, сдвиговый регистр, перенос, семисегментный индикатор”.

Это конечно ерунда полная. Школьники знают про арифметический перенос из того что их учили складывать столбиком числа во втором классе. Такт - это просто период между миганиями лампочки на модуле тактового генератора. Сдвиговый регистр они понимают по движению лампочек которое отображает его содержимое. А семисегментный индикатор они могут прощупать втыканием провода в пины идущие к каждому из светодиодов.

Но предоставим слово самим школьникам. Я сделал видео, но которых попросил трех школьников показать что они выучили и смогли смастерить после двух-трех сессий на викенды. Некоторые проекты они делали при мне, некоторые дома. Младшему, Матвею, дома помогал отец, но на одном из видео Матвей паяет проект при мне, на видео - так что это довольно чистый эксперимент:

Читать далее

Новости

SPI-контроллер на FPGA: от идеи до сигналов на осциллографе

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

Откройте любой учебный материал по FPGA. С вероятностью девяносто процентов он закончится мигающим светодиодом, бегущей строкой на семисегментнике или, в лучшем случае, генератором VGA-сигнала с цветными полосами. Это нормальные учебные задачи, но у них есть общее свойство, о котором редко говорят вслух: они работают сразу или не работают совсем. Прошили — мигает. Не мигает — перепроверили три строчки кода, нашли опечатку, мигает.

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

Эта статья - следующий шаг в моем обучении и попытка показать полный путь: от фразы "нам нужен SPI-контроллер" до момента, когда логический анализатор показывает красивые пачки импульсов на ножках кристалла. Здесь будут не только архитектурные решения и листинги, но и все ошибки, которые были сделаны по дороге: testbench, который врал, потому что master и slave-модель содержали один и тот же баг; гонка на один такт, из-за которой тест прерываний падал при исправном железе; и финальный детектив — прошивка, в которой SPI-сигналы честно генерировались... на других ножках, потому что файл назначения пинов на диске оказался не тем, который мы правили. Каждая такая история — это методика: симптом, гипотеза, эксперимент, причина, фикс.

Читать далее

Проектируем с нуля калькулятор на FPGA. Часть 8: От платы разработки до реального устройства

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

← Седьмая часть

В предыдущем посте я писал о микрокоде и слое скриптинга. На этом этапе калькулятор почти полностью существовал только в ПО: в виде десктопного Qt-приложения, выполняющего симуляцию, или в виде страницы с WebAssembly в браузере. Это удобная среда для разработки и демонстрации, но это не калькулятор. Калькулятор должен лежать на столе, его можно взять и постучать по кнопкам.

Сегодня мы поговорим об этом этапе (за исключением издевательств над кнопками).

Читать далее

Запуск DOOM на собственном CPU

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

Doom — это выпущенная в 1993 году видеоигра, которую разработала id Software. Она совершила революцию в гейминге и стала определяющей для современных шутеров от первого лица. Благодаря её популярности возникла поговорка «Doom можно запустить на чём угодно». Чтобы доказать это, Doom портировали почти на все платформы, от микроконтроллеров до тостеров и даже бактерий.

Две недели назад мы успешно запустили Doom (тормозной) на созданном с нуля CPU (а потом опубликовали об этом видео, получившее несколько миллионов просмотров). Честно говоря, мне до сих пор в это не верится. Но что же мы создали на самом деле? Спроектировали собственный CPU на уровне логических вентилей, подключили его к периферии, адаптировали исходный код DOOM для запуска на этой машине и развернули всё это на FPGA для исполнения в реальном времени. До запуска Doom мы писали только простые программы, например, Pong и множества Мандельброта. Теперь мы можем запускать завершённые опубликованные игры, но путь к этому был довольно непростым.

Читать далее

От JTAG к IJTAG: зачем понадобился новый стандарт аппаратного тестирования

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

Приветствую! На связи Антон Осетров, DFT-разработчик SoC в компании YADRO. В этой статье я хочу рассказать о вызовах в тестировании SoC, о том, как они изменялись со временем и как с этим связан переход от аппаратного интерфейса JTAG к IJTAG.

Читать далее

Как защитить железку от Китайцев, если вы им передаете всю производственную документацию?

Уровень сложностиСложный
Время на прочтение15 мин
Охват и читатели28K

Отдавая контрактному производству полный комплект Gerber-файлов и оригинальных прошивок, разработчик часто рискует столкнуться с «атакой третьей смены» — бесконтрольным выпуском нелегальных клонов устройства. Есть ли варианты защиты? Казалось бы, нет, однако... Есть... физика кремния, физически неклонируемые микродефекты кремния (PUF) и неповторимость литографии внутри FPGA. И это можно использовать как уникальный отпечаток устройства.

В этой статье я расскажу, как заставить наноструктурные особенности FPGA работать на безопасность вашего бизнеса, построить отказоустойчивую схему «Кристалл — Сервер» и жестко наказывать "не честного" производителя с помощью отложенного аппаратного саботажа.

Читать далее

Как обучить школьников работать в группах проектирования с помощью многоплатных проектов

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

Во время Холодной Войны существовало клише что якобы в США все индивидуалисты, а в СССР - коллективисты. С клише была неувязочка: в тот же период американский гуру менеджмента Питер Друкер писал одну за одной толстые книги, как организовывать работу коллективов людей в больших корпорациях. Его книги подхватили японцы, которые быстро применили идеи Друкера в своих компаниях и вышибли американцев из рынков микросхем памяти, бытовой электроники и автомобилей. Даже менеджер моего менеджера, китаец в корейской компании, подарил мне книжку Друкера на позапрошлое рождество.

Коллектив разработки в электронной компании - это двухмерная структура. С одной стороны, есть отделы: архитектуры, моделирования, логического проектирования, верификации, физического проектирования, post-silicon отладки итд. С другой стороны, каждый компонент (процессор, графический процессор, сетевой чип) состоит из пары десятков блоков, и вокруг каждого блока есть небольшие группы по пять-семь человек из всех этих отделов.

Можно попробовать дать школьникам представление о том, как выглядит совместная разработка и отладка с помощью проекта на нескольких макетных платах с микросхемами малой степени интеграции. А потом перенести это на SystemVerilog и FPGA платы. Например вот такого: сделать сумматор чисел бесконечной разрядности:

Читать далее

Проектируем с нуля калькулятор на FPGA. Часть 7: микрокод для самодельного CPU

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

← Шестая часть

В предыдущем посте мы спроектировали CPU. Я определился с набором команд, написал ассемблер, проверил каждый опкод и создал процессор, работающий в кремнии (или, точнее, в FPGA Altera Cyclone II EP2C5T144C8, что тоже довольно близко). Но у нас пока нет осмысленного ПО (микрокода калькулятора) для запуска на «железе».

В этой части проекта оправдали себя все эксперименты с прототипами на C++, описанные в частях 2 и 3.

Когда я начал писать addsub.asm (самую первую команду, которую я портировал), то не смотрел на пустую страницу, задаваясь вопросом, как работает BCD-сложение. У меня уже имелась эталонная реализация на C++ (addsub.cpp в проекте Proto), верифицированная на тысячах тестовых векторов. Алгоритм был известен, пограничные случаи найдены и охарактеризованы. Я проработал поведение защитного разряда и бита фиксации. Оставалось лишь транслировать это всё на язык ассемблера; задача всё равно сложная, но совершенно иного уровня сложности, нежели изобретение алгоритма в процессе его написания.

Я хотел бы сделать упор на этот двухэтапный процесс, потому что может показаться, что без него можно обойтись. Написание кода прототипа на C++ с последующей ручной трансляцией на язык ассемблера кажется избыточной и долгой работой. Однако она перестанет казаться избыточной к моменту, когда вы будете отлаживать неочевидный пограничный случай округления в 16-ниббловом BCD-вычитании. Наличие золотого эталона, с которым можно выполнять сравнения, не избыточно: это единственное, что стоит между вами и неделями кропотливого труда или даже провалом проекта.

Читать далее

Легко ли сделать эмулятор ZX Spectrum для SEGA Mega Drive?

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

Казалось бы, что тут сложного? Берём 16-битную консоль Sega Mega Drive. Вспоминаем, что внутри неё уже трудится родной 8-битный процессор Zilog Z80 (он отвечает за звук и обратную совместимость с Master System). Берём легендарный компьютер ZX Spectrum, сердцем которого является... точно такой же Z80!

На первый взгляд, задача для инженера звучит как легкая прогулка на выходные: подкинуть BIOS, смапить кнопки геймпада на порт клавиатуры, и готово — запускай Dizzy или Elite.

Читать далее

Вторая попытка. Подключаем SDRAM к ПЛИС

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

В прошлой статье, к моему сожалению, код оказался не рабочий. Из-за недостатка опыта, я читал свои же данные на шине и воспринял это как работоспособность памяти. Исправляю это недоразумение в этой статье. Опытным разработчикам читать только из спортивного интереса :-).

Немного изменим аппаратную часть. Итак постановка задачи. Будем передавать по последовательному каналу (RS232) с компьютера маркер адреса 0x80, за которым ожидаются два байта содержащие адрес. Маркер данных 0x40, за которым ожидаются два байта данных. Команда 0x20 запись в память, команда 0x10 чтение из памяти (данные не требуются). Кроме этого будем отображать на семи сегментном индикаторе принятые адрес, данные (как переданные, так и прочитанные), и команды. Далее схемы. А так же имейте ввиду, так как я начинающий и опыта у меня мало, пожалуйста внимательно проверяйте всё, если будете повторять.

Читать далее

Zynq 7000. HDMI для платы Zynq Mini и Linux

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

Раз уж пошла такая песня, я решил добить вопрос с выводом изображения по HDMI на плате Zynq Mini. В предыдущей статье мы уже разобрали как это сделать в baremetal-сценарии, теперь пришла пора дополнить дизайн для возможности вывода системной консоли Linux, при том, что у Zynq-7000 нет своего видеоконтроллера и весь видеотракт (DMA, генератор таймингов, TDMS-кодер) должен быть построен внутри FPGA, а затем быть проброшен в Linux. 

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

Читать далее

Из обучения школьников цифре на макетке нужно выкинуть все резисторы и вставить микросхемы с FIFO

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

Раз уж я начал учить школьников как собирать на макетной плате цифровые схемы (в рамках подготовки демонстраций к мероприятию торговой палаты города Маунтин-Вью, Калифорния), то возникла необходимость написать для них инструкции. У меня тут же ожидаемо спросили, почему мне не подходят существующие инструкции от Make и других источников. Объясняю:

1. Все эти туториалы последние 55 лет переписывают друг от друга как использовать: 1) резисторы при светодиодах и 2) подтягивающие резисторы. У меня этого нет, потому что я использую LED толерантные к пяти вольтам, кнопки со встроенными подтягивающими резисторами, а также блок питания от USB которые генерит стабильные 5V вместо 9-вольтовой батарейки "Крона". То есть я удалил как кучу лишних резисторов на плате, так и необходимость объяснять законы Ома и Кирхгофа.

2. Эти туториалы часто описывают как строить генератор тактового сигнала из микросхемы 555, конденсатоов и резисторов. У меня этого нет, посколько я используют уже собранные генераторы тактового сигнала с AlExpress. Сборка такого блока самому не дает ничего полезного для обучения цифровому проектированию по направлении к микроархитектуре.

3. В мейкерских туториалах есть куча вещей, которые никогда не возникают в работе проектировщика современного чипа (JK-триггеры, SR-защелки), но нет того, что используется ежедневно (FIFO - микросхема CMOS 40105, приоритетный энкодер - CMOS 4532 итд).

Короче вот первые четыре страницы и фотки школьников с последней сессии:

Читать далее

Как шлёпанцы запоминают: глубокое понимание последовательных схем

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

Мы привыкли воспринимать триггеры и ячейки памяти как данность — удобные «чёрные ящики», которые просто работают. Интуитивно понятно, как выход комбинационной схемы зависит от её входа, но как именно схема, изначально лишенная памяти, вдруг обретает способность сохранять свое состояние?

В этой статье я объясню логическую суть последовательных схем и вместе препарируем работающую D-защёлку (D-latch) с нуля на уровне цифровой логики и булевой алгебры.

Читать далее

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

Обзор и схемотехническое ревью платы TZT RK-ZYNQ7020-F с FMC LPC разъемом

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

Я давно хотел купить плату с Zynq-7020, да такую, чтобы на ней был FMC LPC разъем на который, к примеру, можно было бы установить плату c AD9361 или множеством портов Ethernet, или еще какой-нибудь вариант. И на просторах китайского Aliexpress мне попалась одна такая - TZT RK-ZYNQ7020-F версии 1.1. Я не долго думая сразу ее прикупил и решил что это как раз то, что нужно. И в этой статье хотел бы поделиться своими впечатлениями и обзором того, что на этой плате любезно нам предоставил разработчик. Это будет обзор в несколько ином ключе, без пересказа schematic, а в виде подробного инженерного обзора по подсистемам. Сначала рассмотрим комплектацию, стоимость, затем архитектуру платы, ее внешний вид и что на ней есть. Потом заглянем в питание, reset, clocking и boot. Затем память: DDR3, QSPI, eMMC, microSD. Далее интерфейсы PS: UART, USB, Ethernet, I2C, интерфейсы PL и расширения: FMC, 40-pin, HDMI, MIPI, CAN, RS485, LCD. И в конце - общее впечатление, риски и выводы. Поехали!

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

Читать далее

Хроники занятий микросхемами с русскими школьниками не в замке во Франции, а в хакерском клубе в Калифорнии

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

Продолжаем хроники занятий со школьниками на Verilog Meetup в Hacker Dojo. Цель занятий - собрать за месяц несколько демонстраций и показать их на городском мероприятии Technology Showcase в Mountain View. Для тех кто не в курсе, Маунтин-Вью - это такой город, в котором я однажды увидел на улице Сергея Брина, выходящего из-за угла с озабоченным лицом.

Как я уже писал, на первое занятие, на которое я ожидал придет человека три - пришло двадцать, и их не было никакой возможности обслужить. На второе занятие пришло десять: трое русских мальчиков с предыдущего занятия, трое новых русских мальчиков и девочка, китайский мальчик и их родители. Также зашел соратник Виктор и один товарищ на пять минут посмотреть. Под конец зашел американец, который советуется со мной по поводу FPGA. Он раньше работал в NASA JPL в Пасадене и похвастался мне что снимки его трансляций с Марса до сих лежат на сайте Института космических исследований Российской академии наук.

В процессе дискуссии возникли три возможных проекта:

Читать далее

Проектируем с нуля калькулятор на FPGA. Часть 6: CPU

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

← Четвёртая и пятая части

Это самый длинный пост всей серии, потому что он посвящён главной части этого проекта — всё вращается вокруг CPU.

Почему бы просто не взять готовый CPU?

Кто-то может заявить: зачем заморачиваться проектированием собственного CPU? Есть куча маленьких хорошо задокументированных процессоров и дешёвых микроконтроллеров, способных исполнять прошивку калькулятора. Zilog Z80 не так сложно реализовать на FPGA, и я в этом уже убедился (проект A-Z80, находящийся у меня на GitHub). Подойдёт и 6502. Маленький встраиваемый RISC тоже прекрасно справится с этой работой.

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

Наш калькулятор построен на BCD (двоично-десятичном коде),в котором каждый десятичный разряд хранится в отдельном 4-битном полубайте (ниббле). Это правильный выбор для калькулятора, и он определяет всё дальнейшее. Z80 (и другие стандартные CPU) работает на уровне байтов. Для индексации регистра мантиссы из 16 нибблов с ориентированным на байты процессором пришлось бы постоянно жонглировать сдвигами, масками и двумя нибблами на байт. На каждом шаге режимы адресации вступают в конфликт со схемой данных.

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

Читать далее

Zynq 7000. Переносим I2C Master Controller. Работа над ошибками и утилиты userspace

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

В прошлой статье мы собрали готовый образ Linux и запустили I2C Master Controller который живет в ПЛИС и управляется драйвером предоставляющим в ОС доступ к нему как типовому I2C-контроллеру. В этой, заключительной части из общей серии статей, я хотел бы филигранно отшлифовать все мелкие недочеты и привести примеры утилит, которые могли бы отправлять нужные нам данные на I2C OLED-дисплей SSD1306, например температуру кристалла, время или что-нибудь еще. 

Всем кому интересна тема - го под кат! :)

Читать далее

Подключаем к ПЛИС оперативную память SDRAM

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

На страницах всевозможных статей было написано, что управление микросхемой памяти SDRAM это очень сложно. Отчасти это верно, есть масса тонкостей. Процесс освоения новичкам осложнён отсутствием примеров на русском языке. Вашему вниманию предлагается небольшой пример, как можно подключить оперативную память к ПЛИС. Эти заметки для новичков, таких как и я. А следовательно не торопитесь, проверяйте всё что будете использовать. Особенно реализацию платы, если она у вас самодельная. Опытным пользователям можно не читать (разве что из спортивного интереса). Не буду увлекаться теорией, кому нужно читайте литературу или хотя бы спросите искусственный интеллект (он неплохо может расписать что к чему).

В общих чертах, необходимо провести инициализацию микросхемы (см. документацию на микросхему) и в дальнейшем подавать команды (это сигналы CS, RAS, CAS, WE). Повторюсь, почитайте литературу. Для тех кто совсем не в теме краткое резюме по работе с SDRAM.

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

Дальше для чтения записи, выполняем активацию строки (память организованна в виде строк и столбцов), на шине адрес строки и команда активации. Далее команда (например) чтения столбца, на шине адрес столбца и команда чтения. Далее чтение данных и в завершении команда перезаряда (после доступа данные нужно перезаписать см. литературу). Естественно между командами выдерживаются заданные паузы (см. документацию).

Читать далее

Загружаем bitstream из Linux через FPGA Manager на Zynq-7000

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

Добрый день!
В прошлой статье мы подготовили кастомную плату на Zynq-7000 для загрузки Linux: Buildroot, U-Boot SPL, device tree и минимальная rootfs уже работают. Но PL-часть при этом оставалась почти пустой.

На первых этапах bring-up это нормально: bitstream обычно шьют через JTAG или кладут в BOOT.BIN, чтобы FPGA конфигурировалась ещё до старта Linux. Но для реального проекта такой подход быстро становится неудобным: иногда нужно менять PL-логику уже после загрузки системы.

В этой статье разберём, как загрузить bitstream в Zynq-7000 из Linux через FPGA Manager, какие параметры ядра для этого нужны, и как завернуть загрузку в небольшую C++ утилиту.

Читать далее

Zynq 7000. Переносим I²C Master Controller.  Linux + buildroot + kernel driver

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

Теперь пора переносить проект под управление ОС Linux. В этой статье мы подробно вопросы разберем как пройти весь путь от FSBL до вывода системной консоли на OLED SSD1306. Для этого нам потребуется собрать все необходимые загрузочные артефакты: FSBL c отладкой для информативной загрузки, DTS, out-of-tree драйвер для I2C Controller, ядро и rootfs, соберем uImage, потом слепим BOOT.BIN и загрузим его на SD-карту.

В общем, всем интересующимся добро пожаловать под кат!

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