Изучение уязвимостей электронных систем.
 
key programming immo tools emergency start device программаторы ключа заводилки Кодграббер штатных охранных систем, toyota, lexus, subaru.

Вернуться   Изучение уязвимостей электронных систем > Программирование микроконтроллеров > ARM

Ответ
 
Опции темы
Старый 11.11.2015, 08:50   #1
AliStark
Модератор
 
Аватар для AliStark
 
Регистрация: 16.08.2014
Адрес: Красное море
Сообщений: 255
Поблагодарил: 23
Поблагодарили 139 раз в 93 сообщениях
AliStark имеет захватывающую ауруAliStark имеет захватывающую ауруAliStark имеет захватывающую ауру
Лампочка FPGA vs MCU плюсы и минусы



Привет интересующимся людям ! =)
Итак, многие слышали про какие то FPGA / CPLD / ASIC / «чипсет», ака ПЛИС
Но что это такое мало кто знает (сам год назад не знал

Казалось бы чего мудрить, когда ARM Cortex-а валом и за копейки. куда ж мощнее ?!
Но почему же тогда FPGA не отмирают, а во всю используются н самых скоростных задачах, особенно по обработки входящих/управляющих сигналов . К примеру спутники связи, военные спутники ил хотя бы всем известный все клон Saleae Logic Analyzer .

Вот сейчас и постараюсь объяснить без глумных (с непривычки) «ПЛИС-овских» терминов.
Конкуренция инженеров FPGA высока и они так и норовят представить это чем-то сверхъестественным, даже не торкайтесь…..

Лан хуй на вступление ....
Разве что добавлю, что после знакомства с FPGA Altera (У Альтера простая и удобная среда Quartus-2) я продолжаю работать И НА STM (ARM Cortex-M) И НА FPGA Altera !
В зависимости от задачи. А то и сразу ARM+FPGA в одном проекте (как на зверской материнке)

================================================== ====

Все по честному, начну с минусов FPGA, причем капитальных минусов !

Минусы FPGA перед микроконтроллером :

1. Нут аппаратной цифровой периферии !!! Нет UART, SPI, i2C и.т.п
(Ее пишут, ту которая нужна и процессора под математику тоже кстати пишут !)
2. Нету НИ КАКОЙ аналоговой периферии ADC DAC, Comparator, и.т.п.
3. В большинстве нету энергонезависимой памяти !!! Не FLASH , не EEPROM
Конфигурационная прошивка заливается либо с JTAG либо с внешней FLASH
(обычно все уже подпаяно на любой отладочной / промышленной плате)
Загружается так же с внешней FLASH, а это значит о защите прошивки и речи быть не может 
Исключение линейки «Hard Copy» и CPLD (те же старые FPGA,сами по себе энергонезависимые)

Минусы MCU перед FPGA:

1. Все знают, что у микроконтроллера (да и у микропроцессора) ЕСТЬ ЕБАНЫЙ СТЕК,
А кто вдруг пока не знает – это простыми словами очередь на выполнение кода.
И хоть ты убейся, но НИ КАК ты не заставишь работать 2 или более задач ОДНОВРЕМЕННО !
Есть операционки RTOS, но это все обман, настоящей многозадачности там конечно нет!
Просто операционка распихивает задачи по кусочкам, благодаря чему появляется видимость
выполнения задачи (функций циклов, процедур) одновременно и параллельно, естественно
значительно медленней (хотя в сумме с той же скоростью, что и все эти задачи без операционки)
Так же в опреционке есть ф-ции обманки, к примеру OS-Delay(1000)
На деле это OS_Delay(2000) если задачи 2, OS-Delay(3000) если задачи 3 и.т.п.
Те же яйца что и задачи в очереди, но выполняемые как будто одновременно, но медленней, пропорциональной тактовой частоте MCU/CPU, ака DMIPS
( Минуса по-моему достаточно и одного, но все зависит от задачи !)

А теперь самое весёлое !!! 1 и та же задача выполненная на MCU и FPGA
На языках Си и Verilog

Допустим ногдрыг 2 светодиодов, для упрощения без задержек (постоянная смена состояний 1/0)
И немного пренебрегу синтаксисом.

Си под микроконтроллер

While (1)
{
PortA.1=1; // Врубили №1
PortA.2=1; // Врубили №2

PortA.1=0; // Вырубили №1
PortA.2=0; // Вырубили №1
}

Итого выходит 4 задачи ! глазом не заметны, но были бы там серьезные задачи, они бы выполнялись по очереди.

Теперь Verilog под FPGA

always@(posedge clk)
//Выполняется при каждом нарастающем фронте тактовой частоты, к примеру 50мгц
begin
PortA.1=1; // Врубили №1
PortA.1=1; // Врубили №1
End

always@(posedge clk)
//Выполняется при каждом нарастающем фронте тактовой частоты, к примеру 50мгц
Begin
PortA.2=0; // Вырубили №2
PortA.2=0; // Вырубили №2
end

Итого выходят 2 параллельные и абсолютно не зависимые задачи.
Т.е. PortA.1 и PortA.2 И врубаются и вырубаться в АБСОЛЮТНО ОДИН И ТОТ ЖЕ МОМЕНТ ВРЕМЕНИ !!!
А если бы их(светодиодов) была 1000 ?! А если бы миллион ?!
А если бы задачи были по паре страниц кода ?!
А если ДЕ-криптография ? например хороший распределенный или словарный брут ?! )))

Процессор (который в микроконтроллере) будет именно хуярить 1,2,3,4,5
А на FPGA будет хуярить в одном потоке always@(posedge clk)
0000001
0000010
0000011

В другом потоке always@(posedge clk)
0001000
0010000
0011000

В 100ом другая часть кода, в миллионном ……
И все эти задачи происходят ПАРАЛЛЕЛЬНО, т.к. ОДНОВРЕМЕННО а не по очереди как у процессора.
Границы, конечно, есть, но определяться размером-стоимостью кристалла.
Я писал большие автомобильные мозги, на Cyclone II мне так и не удалось забить его даже на 33%,
А если какой нибудь XILINX Vertex …… там просто пиздец ))

Пересчет от младшего с старшему я конечно упростил для понимания, на деле
Бомбится примерно так (RND FLOUD):
10101010110110110101001010100101101010011111101
10001101011100000101011010110101010110010101010
01011010111111010101100101001010101010101001001
Да хламом! , только таким хламом, где одна и так же комбинация хер когда повторяется
от того шанс ткнуть пальцем в небо несказанно возрастает!

И если распределить «исключающие словари» (что уже флудили, а что еще нет) по отдельным процессам по сути можно колнуть черта в ступе за пару сек. Майнфрейм на 1 чипе )
Хотя ничего не мешает напять 100ю Vertex-ов на 1 плату и запустить «мильярд процессов»


Забыл про ПЛЮСЫ, но об это подробно уже в продолжении.


Самый очевидный плюс FPGA показан на примере. (с след раз разберем что то по интересней)
Есть еще куча плюсов в языке. К примеру нет мук с инициализацией + мы работаем с битами как с массивами! Типа reg buf1 [0..4] и всегда можно обратиться на прямую к любому биту /пачке битов в какой то переменной buf1[2] = 1;

Так же процесс always@() не обязательно должен выполняться от (posedge clk) - захват тактовой частоты.
Можно захватывать ЛЮБОЕ ИЗМЕНЕНИЕ 2ичного сигнала / флага / переменной, или группы изменений.

Типа какой то флаг FLAG в одном из процессов сменил значение с 0 на 1 и в тот же момент, это дело запустит другой независимый процесс :
always@(posedge FLAG1)
begin
// ЗАДЧА, ПРЕДУСМОТРЕННАЯ ДЛЯ FLAG == 1.
end

================================================== ========

Ну а самый очевидный плюс MCU это конечно готовая периферия. Влепил mcu, да накатал проект на скорую руку (если проект не требует шальных скоростей)

В плане обработки огромной тучи сигналов по скажем по50-1000 ногам в один момент времени, конечно FPGA! Возьмите любой приличный логический анализатор, да раскрутите

О практической обработке сигналов в продолжении., так же более детальный разбор синтаксиса языка Verilog.

------------------------------------------------------------------------------------------
PS : Статью писал с просони, возможны дикие описки и копипасты
Миниатюры
Безымянный.jpg  


Если вас провцируют на НЕ содержательный разговор, сообщениями
НЕ несущими смысловой нагрузки, КОРМЯ провокационной

- НЕ ОТВЕЧАЙТЕ !, пишите нам !
тыкнуть "БАН" проще чем чистить грязь !


Хочется срача ? / Инет принимаете за реальную жизнь ?
- соц сети ваш выбор !
AliStark вне форума   Ответить с цитированием
Старый 21.06.2016, 16:36   #2
AlexanderA
случайно влез
 
Регистрация: 21.06.2016
Сообщений: 1
Поблагодарил: 0
Поблагодарили 0 раз в 0 сообщениях
AlexanderA стоит на развилке
По умолчанию

Написал ответ, но все пропало из-за запроса пароля.... Чего вдруг?
AlexanderA вне форума   Ответить с цитированием
Старый 23.10.2016, 22:24   #3
asdf5
случайно влез
 
Регистрация: 13.08.2016
Сообщений: 3
Поблагодарил: 0
Поблагодарили 0 раз в 0 сообщениях
asdf5 стоит на развилке
По умолчанию

Вы правильно написали, но позволю сделать некоторые уточнения.

"1. Нут аппаратной цифровой периферии"
это правда, но есть много готовых исходников, например на opencores.org. или если вы используете Альтеру, то там есть MegaWizard Plug-Ins и много готовых периферийных модулй.

"2. Нету НИ КАКОЙ аналоговой периферии ADC DAC, Comparator, и.т.п."
Посмотрите в сторону Altera Max 10
Кстати вот интересый проект -- клон Атмела AVR на FGPA
[Ссылки могут видеть только зарегистрированные пользователи. ]

"3. В большинстве нету энергонезависимой памяти !!! Не FLASH , не EEPROM"
Это правда для FPGA. Но память есть в CPLD. К тому же есть возможность писать из FPGA во внешнюю конфигурационную память (на это есть application notes и исхдники), я делал.

В целом конечно возни с FPGA больше, но возможностей куда больше.
Что бы я еще сказал, что трудно получить быстродействие больше 200 МГц даже на самых крутых FPGA. Но при этом тот же STM32F4 работает на 180 МГц.
asdf5 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плюсы и минусы Alfa Romeo 156 2.4JTD swox Автомобили 5 12.12.2008 18:26


Текущее время: 15:48. Часовой пояс GMT +4.


Перевод: zCarot