# FPGA — Field Programmable Gate Array

Не всё по силам ASIC'ам. Всё, что касается минимального интеллекта и возможности повлиять на поведение чипа — это к FPGA.

![](/files/-LMaZLrCFlQmETGiDL-c)

Это программируемая микросхема, в которую заливается прошивка, определяющая её роль в оборудовании.\
Как и ASIC, FPGA изначально нацелен на решение какой-то задачи.\
То есть FPGA для пакетной сети и для управления подачей топлива в инжектор двигателя — вещи разные и прошивкой одно в другое не превратишь.\
Итак, имеем специализированный чип с возможностью управлять его поведением и модернизировать алгоритмы.

FPGA может использоваться для маршрутизации пакетов, перемаркировки, полисинга, зеркалирования.\
Например, извне мы можем сообщить чипу, что нужно отлавливать все BGP и LDP пакеты, отправляемые на CPU, в .pcap файл.

Зачем здесь гибкость и возможность программирования? Примеров много:

* ситуация выше, где нужно заложить в него новое правило полисинга, зеркалирования, маркировки
* внедрения нового функционала
* активация лицензируемой опции
* модернизация существующих алгоритмов
* добавление нового правила для анализа полей заголовков, например, для обработки нового протокола.

Получается без разработки новых чипов, перепайки транзисторов, выбраковывания целых партий, просто новой прошивкой можно сделать всё вышеприведённое и больше.

Опять же, если обнаружена неисправность, то можно написать патч для ПО, который сможет её починить, и при этом обновить только конкретно данный чип, без влияния на всю остальную систему.

FPGA значительно дороже в разработке и производстве, главным образом из-за заранее заложенной гибкости.

> Из-за гибкости возможностей FPGA иногда используются для обкатки какой-либо новой технологии, когда с помощью прошивки можно менять поведение компонента. И когда логика обкатана, можно запускать в производство ASIC, реализующий её.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://linkmeup.gitbook.io/sdsm/14.-packet-life/3.-tipov-chipov/6-fpga-field-programmable-gate-array.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
