ENGINEER10X Telegram 16
Знакомство с FPGA для программиста

В торговлю заходил через острозаточенный С++, да и изначальный профиль - программирование, поэтому о железе познания были в основном теоретические. Но вот я здесь и, оказывается, самые скоростные части execution работают на FPGA, поэтому обязательно надо посмотреть что это за зверь. Сказано - сделано, учебная плата DE10-Lite куплена за $100 (сейчас стоит ~$150) и вот я уже продираюсь сквозь дебри Verilog. Железячники: прошу дальше не смеяться :).

Оказалось очень интересно, но в то же время совершенно другой мир и большие трудозатраты, ведь там с нуля нужно писать вообще всё (ну если библиотеки не покупать). То есть если хочешь например что-то вывести на экран через VGA, то нужно покурить стандарт VGA и написать свои модули для правильной генерации сигнала с точно подобранной вертикальной и горизонтальной частотой (подробнее например здесь). За что-то чуть более сложное, чем VGA, лучше вообще не браться, поэтому до чтения Ethernet пакетов дойти (пока?) не удалось :).

Открытий много. Это что же получается, в этом мире нельзя просто обратиться к памяти и взять значение, а нужно самостоятельно писать целый контроллер памяти?? Начинаешь его писать и сразу понимаешь почему L1 cache - это SRAM, а обычная память - DRAM. Вкратце, ячейка SRAM - это 6 транзисторов, а DRAM - транзистор и конденсатор. SRAM значительно быстрее, но больше размером и дороже из-за количества транзисторов. DRAM - меньше и дешевле, но тормознее, а ещё из-а того, что конденсатор "течёт", её надо регулярно перезаряжать. Вот реально - сидишь ты, значит, в контроллере памяти, схватился за сигнал от генератора тактовой частоты и раз в N периодов вешаешь на дверь табличку "обед", читаешь каждую ячейку памяти и тут же записываешь её обратно.

Если раньше технические подробности про память из WEPSKAM были чем-то абстрактным, то после работы со своим проектом для FPGA (и особенно после отладки) спинным мозгом начинаешь чувствовать как оно всё работает. Периодически вспоминалось изучение ассемблера для 8086 и становилось понятным почему в этом процессоре что-то было сделано именно так, а не иначе.

Часто учить FPGA начинают с реализации RISC-V процессора. Его преимущество в том, что спецификация открытая, инструкции простые и их немного, можно реализовывать подмножества стандарта, поэтому можно делать MVP на каждой итерации - всё как мы любим. Потом пишешь программу на С++, собираешь её gcc под получившийся процессор и voilà - она работает на твоём собственном процессоре, фантастика! Был бы студентом с бесконечным временем - обязательно бы занялся сейчас.

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

@engineer10x

P.S.

DE-Lite, кстати, хоть карточка дешёвая и учебная, но весьма функциональная ("the board utilizes the maximum capacity MAX 10 FPGA, which has around 50K logic elements(LEs) and on-die analog-to-digital converter (ADC). It features on-board USB-Blaster, SDRAM, accelerometer, VGA output, 2x20 GPIO expansion connector, and an Arduino UNO R3 expansion connector in a compact size"). Правда проекта для применения в домашнем хозяйстве ей придумать пока так не удалось, поэтому ограничился игрушечными проектами.



tgoop.com/engineer10x/16
Create:
Last Update:

Знакомство с FPGA для программиста

В торговлю заходил через острозаточенный С++, да и изначальный профиль - программирование, поэтому о железе познания были в основном теоретические. Но вот я здесь и, оказывается, самые скоростные части execution работают на FPGA, поэтому обязательно надо посмотреть что это за зверь. Сказано - сделано, учебная плата DE10-Lite куплена за $100 (сейчас стоит ~$150) и вот я уже продираюсь сквозь дебри Verilog. Железячники: прошу дальше не смеяться :).

Оказалось очень интересно, но в то же время совершенно другой мир и большие трудозатраты, ведь там с нуля нужно писать вообще всё (ну если библиотеки не покупать). То есть если хочешь например что-то вывести на экран через VGA, то нужно покурить стандарт VGA и написать свои модули для правильной генерации сигнала с точно подобранной вертикальной и горизонтальной частотой (подробнее например здесь). За что-то чуть более сложное, чем VGA, лучше вообще не браться, поэтому до чтения Ethernet пакетов дойти (пока?) не удалось :).

Открытий много. Это что же получается, в этом мире нельзя просто обратиться к памяти и взять значение, а нужно самостоятельно писать целый контроллер памяти?? Начинаешь его писать и сразу понимаешь почему L1 cache - это SRAM, а обычная память - DRAM. Вкратце, ячейка SRAM - это 6 транзисторов, а DRAM - транзистор и конденсатор. SRAM значительно быстрее, но больше размером и дороже из-за количества транзисторов. DRAM - меньше и дешевле, но тормознее, а ещё из-а того, что конденсатор "течёт", её надо регулярно перезаряжать. Вот реально - сидишь ты, значит, в контроллере памяти, схватился за сигнал от генератора тактовой частоты и раз в N периодов вешаешь на дверь табличку "обед", читаешь каждую ячейку памяти и тут же записываешь её обратно.

Если раньше технические подробности про память из WEPSKAM были чем-то абстрактным, то после работы со своим проектом для FPGA (и особенно после отладки) спинным мозгом начинаешь чувствовать как оно всё работает. Периодически вспоминалось изучение ассемблера для 8086 и становилось понятным почему в этом процессоре что-то было сделано именно так, а не иначе.

Часто учить FPGA начинают с реализации RISC-V процессора. Его преимущество в том, что спецификация открытая, инструкции простые и их немного, можно реализовывать подмножества стандарта, поэтому можно делать MVP на каждой итерации - всё как мы любим. Потом пишешь программу на С++, собираешь её gcc под получившийся процессор и voilà - она работает на твоём собственном процессоре, фантастика! Был бы студентом с бесконечным временем - обязательно бы занялся сейчас.

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

@engineer10x

P.S.

DE-Lite, кстати, хоть карточка дешёвая и учебная, но весьма функциональная ("the board utilizes the maximum capacity MAX 10 FPGA, which has around 50K logic elements(LEs) and on-die analog-to-digital converter (ADC). It features on-board USB-Blaster, SDRAM, accelerometer, VGA output, 2x20 GPIO expansion connector, and an Arduino UNO R3 expansion connector in a compact size"). Правда проекта для применения в домашнем хозяйстве ей придумать пока так не удалось, поэтому ограничился игрушечными проектами.

BY On the way to 10x engineering




Share with your friend now:
tgoop.com/engineer10x/16

View MORE
Open in Telegram


Telegram News

Date: |

The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said. The best encrypted messaging apps More>> Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn.
from us


Telegram On the way to 10x engineering
FROM American