tgoop.com/engineer10x/16
Last Update:
Знакомство с FPGA для программиста
В торговлю заходил через острозаточенный С++, да и изначальный профиль - программирование, поэтому о железе познания были в основном теоретические. Но вот я здесь и, оказывается, самые скоростные части execution работают на FPGA, поэтому обязательно надо посмотреть что это за зверь. Сказано - сделано, учебная плата DE10-Lite куплена за $100 (
Оказалось очень интересно, но в то же время совершенно другой мир и большие трудозатраты, ведь там с нуля нужно писать вообще всё (ну если библиотеки не покупать). То есть если хочешь например что-то вывести на экран через 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, кстати, хоть карточка дешёвая и учебная, но весьма функциональная (
BY On the way to 10x engineering
![](https://photo2.tgoop.com/u/cdn4.cdn-telegram.org/file/o6Ow-7HqpQktC29U4UNurjKX9z1YFAvxNWK8sXOhibFLnZiV7Cf71M3Ol69JxnWf1GRp2wYeySLOvEN4C0jFcKzohV5QVK71eJuyS3ZF4LzjK8dOEr4yTMub31KFx5bKY5VtFH4fIKwhaQHcdkg8EN6d3bqb-rEV1SnE64tRzilx_D4EqdT2TNpe8aE_-Po8ICIioO8WGfosbrFomb087ZF6a_9jr8e2BrXOvAe74NlForxUnyh8uOOJ2SnOpu56DbCeX1ugGTaP3YCNka5nBNTvmN5OHqqGI7HZRP6oHGqSg2K-eNDPD14xvxBj7gzafzhnwqNa4rhSZJjZ-zHloQ.jpg)
Share with your friend now:
tgoop.com/engineer10x/16