# Память

## Защелки

Чтобы создать один бит памяти, нужна схема, которая будет запоминать предыдущие входные значения. Такую схему можно сконструировать из двух вентилей НЕ-ИЛИ(рисунок (а)) и называется она **SR - защелкой**. Выходные сигналы данной схемы не определяются входными.

* S - setting(установка)
* R - resetting(сброс)

![Защелка НЕ-ИЛИ в состоянии 0 (а); защелка НЕ-ИЛИ в состоянии 1 (б ); таблица истинности для функции НЕ-ИЛИ (в](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2Fb4ed8068f1c8f4970ebae6cf50ff34bff54be516.png?generation=1605188662667124\&alt=media)

Дальше идет объяснение как все работает, какие выходы при каких входах, по схеме итак все понятно, думаю можно не описывать.

Главное - установка значения $$S=1$$, не вызовет изменений, если состояние защелки - 1, т.е. $$Q=1$$, если $$R$$ изменить на $$1$$, происходит изменение. То есть, если $$S$$ принимает значение $$1$$, то $$Q=1$$ независимо от предыдущего значения. таким же образом $$R=1$$, $$Q=0$$. То есть схема запоминает какой сигнал был последним.

### Синхронные SR - защелки

Часто бывает удобно, чтобы состояние защелки могло изменяться только в определенные моменты. Чтобы достичь этой цели, немного изменим основную схему и получим **синхронную SR-защелку**

![Синхронная SR - защелка](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F6b3aea54dd967cc07845b0d9a588a3179fff2687.png?generation=1605188661651510\&alt=media)

Эта схема имеет дополнительный синхронизирующий вход, который по большей части равен $$0$$. Если этот вход равен $$0$$, то оба выхода вентилей И равны $$0$$. Когда значение синхронизирующего входа равно $$1$$, действие вентилей И прекращается, и состояние защелки становится зависимым от S и R. Для обозначения факта появления единицы на синхронизирующем входе часто используются термины включение и стробирование.

До сих пор мы не выясняли, что происходит, когда $$S = R = 1$$. И по понятным причинам: когда и $$R$$, и $$S$$ в конце концов возвращаются к $$0$$, схема становится недетерминированной. Единственное приемлемое состояние при $$S=R=1$$ — это $$Q =\overline Q= 0$$, но как только оба входа возвращаются к $$0$$, защелка должна перейти в одно из двух устойчивых состояний. Если один из входов принимает значение $$0$$ раньше, чем другой, оставшийся в состоянии $$1$$ «побеждает», потому что именно единичный вход управляет состоянием защелки. Если оба входа переходят к $$0$$ одновременно (что очень маловероятно), защелка выбирает одно из своих устойчивых состояний произвольным образом.

### Синхронные D - защелки

Чтобы разрешить ситуацию с неопределенностью SR-защелки (неопределенность возникает в случае, если $$S = R = 1$$), нужно предотвратить ее возникновение.

![Синхронная D - защелка](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F7a458500f496125203510451be460b98275dc31a.png?generation=1605188661302508\&alt=media)

Поскольку вместо второго вход у нас инвертор, ситуация когда оба входа равны 1 не произойдет. Защелка запоминат значение входа $$D$$. Если $$D = 1$$, $$Q = 1$$, если $$D = 0$$, $$Q = 0$$, при условии, что $$Синхронизирующий Вход = 1$$. Схема, представляет собой память объемом один бит. Схема требует $$11$$ транзисторов.

## Триггеры

Многие схемы при необходимости выбирают значение на определенной линии в заданный момент времени и запоминают его. В такой схеме, которая называется триггером (flip-flop), смена состояния происходит не тогда, когда синхронизирующий сигнал равен $$1$$, а при переходе синхронизирующего сигнала с $$0$$ на $$1$$ (подъем) или с $$1$$ на $$0$$ (спад). Следовательно, длина синхронизирующего импульса не имеет значения, поскольку переходы происходят быстро.

Подчеркнем еще раз отличие между триггером и защелкой. Триггер запускается перепадом сигнала, а защелка запускается уровнем сигнала.

![Генератор импульса (а); временна я диаграмма для четырех точек на схеме (б)](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F14ef4bd5bb3c06daaae72e61accc032824ed6d06.png?generation=1605188661795636\&alt=media)

Данная схема генерирует короткий импульс. Как? Вначале $$a=0$$, участок $$b=1$$, $$c=0$$. Меняем $$а=1$$, $$c=1$$, а для того чтобы импульс $$a$$ прошел через инвертор и изменил значеие $$d$$, нужно намного больше времени, чем для того, чтобы значение $$c$$ изменилось, поэтому возникают небольшой промежуток времени когда $$ВыходВентиляИ=1$$. Этот временной сдвиг означает, что D - защелка активизируется с определенной задержкой после подъема синхронизирующего импульса.

![D - триггер](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F1938fe3e1a5a3fdf488a35ad9c15da32bd3fea8c.png?generation=1605188663095277\&alt=media)

* Рисунок (а) - защелка, состояние которой загружается тогда, когда синхронизирующий сигнал CK (от слова clock) равен 1
* Рисунок (б) - защелка, синхронизирующий сигнал обычно равен 1, но который переходит на 0, чтобы загрузить состояние из линии D.&#x20;
* Рисунок (в) - триггер, изменяет состояние на фронте синхронизирующего импульса (переход от 0 к 1), тогда как триггер на&#x20;
* Рисунок (г) - триггер, изменяет состояние на спаде (переход от 0 к 1).&#x20;

Многие (хотя не все) защелки и триггеры также имеют выход $$\overline Q$$, а у некоторых есть два дополнительных входа: Set (установка) или Preset (предварительная установка) и Reset (сброс) или Clear (очистка). Первый вход (Set или Preset) устанавливает Q = 1, а второй (Reset или Clear) — Q = 0.

Триггеры похожи на защелки, но на синхронизирующем входе есть уголок.

![D-защелки и D-триггеры](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2Fe02e2d012c42ffc35f3a46c42475a35b02df1235.png?generation=1605188662554385\&alt=media)

## Регистры

Регистр получает 8-разрядное входное значение ($$I\_0-I\_7$$) при изменении синхронизирующего сигнала CK. Все синхронизирующие линии связаны с одним входным сигналом CK, чтобы при изменении состояния CK регистр получал новое 8-разрядное значение данных с входной шины. Инвертирующие входы аннулируются инвертором, связанным с CK, поэтому триггеры запускаются при переходе от 0 к 1. Все восемь сигналов очистки тоже объединены, поэтому когда сигнал сброса CLR переходит в состояние 0, все триггеры переходят в состояние 0. Если вам не понятно, почему синхронизирующий сигнал CK инвертируется на входе, а затем инвертируется снова в каждом триггере, то ответ прост: входной сигнал не имеет достаточной мощности, чтобы запустить все восемь триггеров; входной инвертор на самом деле используется в качестве усилителя.

![8-разрядный регистр, построенный из одноразрядных триггеров](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F7c0882ac71b414148d3e30aa96de019c3988489b.png?generation=1605188662107894\&alt=media)

8-разрядный регистр может использоваться в качестве структурного элемента для построения регистров большей разрядности. Например, 32-разрядный регистр может быть построен из двух 16-разрядных регистров, для чего следует связать их синхронизирующие линии CK и линии сброса CLR.

## Оргаизация памяти

Микросхема содержит 8 входных линий, в частности 3 входа для данных — $$I\_0$$, $$I\_1$$ и $$I\_2$$; $$2$$ входа для адресов — $$A\_0$$ и $$A\_1$$; $$3$$ входа для управления — CS (Chip Select — выбор элемента памяти), RD (ReaD — чтение, этот сигнал позволяет отличать считывание от записи) и OE (Output Enable — разрешение выдачи выходных сигналов), а также 3 выходные линии для данных — $$O\_0$$, $$O\_1$$ и $$O\_2$$.

![Логическая блок-схема для памяти 4 x 3. Каждый ряд представляет одно из 3-разрядных слов. При считывании и записи всегда считывается или записывается целое слово](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F59517f156055fc0ac68bfc04433624a99fec0092.png?generation=1605188662595421\&alt=media)

Такая 12-разрядная память требует меньшего количества выводов, чем 8-разрядный регистр, поскольку в отличие от регистра 4 бита памяти совместно используют один выходной сигнал. Состояние адресного входа определяет, каким четырем битам памяти разрешается ввод или вывод значения.

Чтобы выбрать этот блок памяти, внешняя логика должна установить сигнал CS в $$1$$, а также установить сигнал RD в $$1$$ для чтения и в $$0$$ для записи. Две адресные линии должны указывать, какое из четырех 3-разрядных слов нужно считывать или записывать. При считывании входные линии для данных не используются, а выбранное слово подается на выходные линии для данных. При записи биты, находящиеся на входных линиях для данных, загружаются в выбранное слово памяти; выходные линии при этом не используются.

Как работает память? Четыре вентиля И для выбора слов в левой части схемы формируют декодер. Входные инверторы расположены так, что каждый вентиль запускается определенным адресом. Каждый вентиль приводит в действие линию выбора слов (для слов $$0$$, $$1$$, $$2$$ и $$3$$). Когда микросхема должна производить запись, вертикальная линия $$CS\*\overline RD$$ получает значение $$1$$, запуская один из четырех вентилей записи. Выбор вентиля зависит от того, какая именно линия выбора слов равна $$1$$. Выходной сигнал вентиля записи приводит в действие все сигналы CK для выбранного слова, загружая входные данные в триггеры для этого слова. Запись производится только в том случае, если сигнал CS равен $$1$$, а RD — $$0$$, при этом записывается только слово, выбранное адресами $$А\_0$$ и $$А\_1$$; остальные слова не меняются.

Процесс считывания сходен с процессом записи. Декодирование адреса происходит точно так же, как и при записи. Но в данном случае линия $$CS\*\overline RD$$ принимает значение $$0$$, поэтому все вентили записи блокируются, и ни один из триггеров не меняется. Вместо этого линия выбора слов запускает вентили И, связанные с битами Q выбранного слова. Таким образом, выбранное слово передает свои данные в 4-входовые вентили ИЛИ, расположенные в нижней части схемы, а остальные три слова выдают $$0$$. Следовательно, выход вентилей ИЛИ идентичен значению, сохраненному в данном слове. Остальные три слова никак не влияют на выходные данные.

Мы могли бы разработать схему, в которой три вентиля ИЛИ соединялись бы с тремя линиями вывода данных, но это вызвало бы некоторые проблемы. Мы рассматривали линии ввода данных и линии вывода данных как разные линии. На практике же используются одни и те же линии. Если бы мы связали вентили ИЛИ с линиями вывода данных, микросхема пыталась бы выводить данные (то есть задавать каждой линии определенную величину) даже в процессе записи, мешая нормальному вводу данных. По этой причине желательно каким-то образом соединять вентили ИЛИ с линиями вывода данных при считывании и полностью разъединять их при записи. Для этого существует **буферный элемент без инферсии**.

Буфер содержит входную линию для данных, выходную линию для данных и входную линию для управления. Когда управляющий вход $$= 1$$, буферный элемент работает как проводник. Когда управляющий вход$$= 0$$, буферный элемент работает как изолятор, как будто кто-то отрезает выход для данных от остальной части схемы кусачками. Соединение может быть восстановлено за несколько наносекунд, если сделать сигнал управления $$= 1$$.

**Буферный элемент с инверсией** действует как обычный инвертор, когда сигнал управления $$= 1$$, и отделяет выход от остальной части схемы, когда сигнал управления $$= 0$$. Оба буферных элемента представляют собой устройства с тремя состояниями, поскольку могут выдавать нулевой сигнал, единичный сигнал или вообще не выдавать никакого сигнала (случай разомкнутой цепи). Буферные элементы, кроме того, усиливают сигналы, поэтому они могут справляться с большим количеством сигналов одновременно. Иногда они используются в схемах именно в качестве усилителей, при этом их способность переключения не используется.

![Буферный элемент без инверсии (а); представление буферного элемента без инверсии, когда сигнал управления равен 1 (б); представление буферного элемента без инверсии, когда сигнал управления равен 0 (в); буферный элемент с инверсией (г)](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F88c87fdeee330188a44ce7f0d1ea7b2179b96da9.png?generation=1605188663202726\&alt=media)

Когда сигналы CS, RD и OE равны 1, то сигнал разрешения выдачи выходных данных также равен 1, в результате запускаются буферные элементы, и слово помещается на выходные линии. Когда один из сигналов CS, RD и OE равен 0, выходы отсоединяются от остальной части схемы.

## Микросхемы памяти

Большие микросхемы памяти часто производятся в виде матриц размером $$m\times n$$, обращение к которым происходит по строкам и столбцам. Чтобы обратиться к микросхеме, сначала нужно выбрать строку. Для этого 11-разрядный номер этой строки подается на адресные выводы. Затем устанавливается сигнал $$\overline{RAS}$$ (Row Address Strobe — строб адреса строки). После этого на адресные выводы подается номер столбца и устанавливается сигнал $$\overline{CAS}$$ (Column Address Strobe — строб адреса столбца). Микросхема реагирует на сигнал, принимая или выдавая один бит данных. Такая организация памяти сокращает число необходимых выводов, но замедляет обращение к микросхеме, поскольку требуется два цикла адресации(строка, столбец). Потеря скорости отчасти компенсируется тем, что в некоторых микросхемах возможна передача адреса строки с последующей передачей нескольких адресов столбцов для обращения к последовательным битам строки.

Примеры современных микросхем:

![Два способа организации микросхемы памяти объемом 512 Мбит](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2F700a98adaa45a05a3d9334c201c5efb2484e40e4.png?generation=1605188663335107\&alt=media)

Сигнал $$CS$$ — это единица, сигнал $$\overline{CS}$$ — ноль.

Поскольку обычно компьютер содержит много микросхем памяти, нужен такой сигнал, чтобы нужная микросхема реагировала на вызов, а остальные нет. Сигнал $$\overline{CS}$$ (Chip Select — выбор элемента памяти) устанавливается, чтобы запустить микросхему. Кроме того, нужен способ, чтобы отличать считывания от записи. Сигнал $$\overline{WE}$$ (Write Enable — разрешение записи) указывает на то, что данные должны записываться, а не считываться. Наконец, сигнал $$\overline{OE}$$ (Output Enable — разрешение вывода) устанавливается для выдачи выходных сигналов. Когда этого сигнала нет, выход отсоединяется от остальной части схемы.

В каждой такой микросхеме содержится четыре внутренних банка памяти по 128 Мбит; соответственно, для определения банка требуются две линии выбора банка. На микросхеме $$32 М\times16$$, $$13$$ линий выделено для сигналов $$\overline{RAS}$$, $$10$$ для сигналов $$\overline{CAS}$$ и $$2$$ линии для выбора банка. Взятые в целом, $$25$$ сигналов обеспечивают возможность адресации $$225$$ внутренних $$16$$-разрядных ячеек.

На микросхеме $$128 М\times4$$, для сигналов $$\overline{RAS}$$ выделено $$13$$ линий, для $$\overline{CAS}$$ — $$12$$ линий, для выбора банка — $$2$$ линии. Таким образом, $$27$$ сигналов делают возможной адресацию любой из $$227$$ внутренних 4-разрядных ячеек. Количества строк и столбцов в микросхемах определяются на основании инженерных факторов. Матрица не обязательно должна быть квадратной.

Итого:

* Приконструкирование микросхем нужно учитывать два несвязанных аспекта
* * Первый аспект - ширина выхода (в битах) — иначе говоря, количества битов ($$1$$, $$4$$, $$8$$, $$16$$...) в выходном сигнале.
* * Второй аспект - способ представления битов адресса
* * * Биты адресов могу быть представлены одновременно на разных выводах
* * * Может быть последовательное представление строк и столбцов

## ОЗУ и ПЗУ

### Энергозависимая память

Существует два типа ОЗУ(RAM Random Access Memory — оперативная память):

* Статическое ОЗУ (Static RAM, SRAM) конструируется с использованием D-триггеров. Информация в ОЗУ сохраняется на протяжении всего времени, пока к нему подается питание. Статическое ОЗУ работает очень быстро. Обычно время доступа составляет несколько наносекунд. По этой причине статическое ОЗУ часто используется в качестве кэш-памяти второго уровня. Требуется в лучшем случае 6 транзисторов на бит.
* Динамическое ОЗУ(Dynamic RAM, DRAM) представляет собой массив ячеек, каждая из которых содержит один транзистор и один крошечный конденсатор(из-за этого имеет очень высокую плотность записи(много битов на одну микросхему)). Конденсаторы могут быть заряженными и разряженными, что позволяет хранить нули и единицы. Поскольку электрический заряд имеет тенденцию исчезать, каждый бит в динамическом ОЗУ должен обновляться (перезаряжаться) каждые несколько миллисекунд, чтобы предотвратить утечку данных. Поскольку об обновлении должна заботиться внешняя логика, динамическое ОЗУ требует более сложного сопряжения, чем статическое, хотя этот недостаток компенсируется большим объемом.  Работает очень медленно.

Существует несколько типов DRAM.

* FPM(Fast Page Mode — быстрый постраничный режим, самый древний тип, который еще используется). Это ОЗУ представляет собой матрицу битов. Аппаратное обеспечение представляет адрес строки, а затем — адреса столбцов. Благодаря явно передаваемым сигналам память работает асинхронно по отношению к главному тактовому генератору системы.&#x20;
* EDO(Extended Data Output — память с расширенными возможностями вывода, постопенно заменяет FPM), которая позволяет обращаться к памяти еще до того, как закончилось предыдущее обращение. Такой конвейерный режим, хотя и не ускоряет доступ к памяти, повышает пропускную способность, позволяя получить больше слов в секунду. Память типа FPM и EDO сохраняла актуальность в те времена, когда продолжительность цикла работы микросхем памяти не превышала $$12 нс$$. Впоследствии, с увеличением быстродействия процессоров, сформировалась потребность в более быстрых микросхемах памяти
* Синхронное динамическое ОЗУ(SDRAM, заменила асинхронный тип памяти) Синхронное динамическое ОЗУ управляется от главного системного тактового генератора. Данное устройство представляет собой гибрид статического и динамического ОЗУ. Основное преимущество синхронного динамического ОЗУ состоит в том, что оно исключает зависимость микросхемы памяти от управляющих сигналов. ЦП сообщает памяти, сколько циклов следует выполнить, а затем запускает ее. Каждый цикл на выходе дает $$4$$, $$8$$ или $$16$$ бит в зависимости от количества выходных строк. Устранение зависимости от управляющих сигналов приводит к ускорению передачи данных между ЦП и памятью.
* DDR(Double Data Rate — передача данных с двойной скоростью). Эта технология предусматривает вывод данных как на подъеме, так и на спаде импульса, вследствие чего скорость передачи увеличивается вдвое. Например, 8-разрядная микросхема такого типа, работающая с частотой $$200 МГц$$, дает на выходе два 8-разрядных значения $$200$$ миллионов раз в секунду (разумеется, такая скорость удерживается в течение небольшого периода времени); таким образом, теоретически, кратковременная скорость может достигать $$3,2 Гбайт/с$$. Интерфейсы памяти DDR2 и DDR3 обеспечивают дополнительный прирост производительности по сравнению с DDR за счет повышения скорости шины памяти до $$533 МГц$$ и $$1067 МГц$$ соответственно.

### Энергонезависимая память

ПЗУ(ROM Read-Only Memory — постоянная память). ПЗУ не позволяют изменять и стирать хранящуюся в них информацию (ни умышленно, ни случайно). Данные записываются в ПЗУ в процессе производства. Для этого изготавливается трафарет с определенным набором битов, который накладывается на фоточувствительный материал, а затем открытые (или закрытые) части поверхности вытравливаются. Единственный способ изменить программу в ПЗУ — поменять всю микросхему.

* PROM(программируемые ПЗУ, programmable ROM) - можно программировать в условиях эксплуатации. Многие программируемые ПЗУ содержат массив крошечных плавких перемычек. Чтобы пережечь определенную перемычку, нужно выбрать требуемые строку и столбец, а затем приложить высокое напряжение к определенному выводу микросхемы.
* EPROM(стираемое программируемое ПЗУ, ERasable PROM) - можно не только программировать в условиях эксплуатации, но и стирать с него информацию. Если кварцевое окно в данном ПЗУ подвергать воздействию сильного ультрафиолетового света в течение 15 минут, все биты установятся в 1. Если нужно сделать много изменений во время одного этапа проектирования, стираемые ПЗУ гораздо экономичнее, чем обычные программируемые ПЗУ, поскольку их можно использовать многократно. Стираемые программируемые ПЗУ обычно устроены так же, как статические ОЗУ.
* EEPROM(электронно перепрограммируемое ПЗУ, Electronically ERROM) - не нужно помещать в специальную камеру, чтобы подвергнуть воздействию ультрафиолетовых лучей — для стирания информации достаточно подать соответствующие импульсы. Чтобы перепрограммировать данное устройство, его не нужно вставлять в специальный аппарат для программирования, в отличие от EPROM. В то же время самые большие EEPROM в 64 раза меньше обычных EPROM, и работают они в два раза медленнее. EEPROM не могут конкурировать с динамическими и статическими ОЗУ, поскольку работают в $$10$$ раз медленнее, их емкость в $$100$$ раз меньше, и они стоят гораздо дороже. Они используются только в тех ситуациях, когда необходимо сохранять информацию при выключении питания.
* Флэш-память - стирается и записывается блоками. Многие изготовители производят небольшие печатные платы, содержащие до $$64$$ Гбайт флэш-памяти. Они используются для хранения изображений в цифровых камерах и для других целей. Флэш-память обеспечивает лучшее время доступа при более низком энергопотреблении, но стоимость одного бита флэш-памяти существенно выше, чем у дисков.

**Краткое описание различных типов памяти**

| Тип запоминающего устройства | Категория              | Стирание информации   | Изменение информации по байтам | Необходимость питания | Применение                      |
| ---------------------------- | ---------------------- | --------------------- | ------------------------------ | --------------------- | ------------------------------- |
| RAM                          | Чтение и запись        | Электрическое         | Да                             | Да                    | Кэш-память второго уровня       |
| DRAM                         | Чтение и запись        | Электрическое         | Да                             | Да                    | Основная память(старые модели)  |
| SDRAM                        | Чтение и запись        | Электрическое         | Да                             | Да                    | Основная память(новые модели)   |
| ROM                          | Только чтение          | Невозможно            | Нет                            | Нет                   | Устройства большого объема      |
| PROM                         | Только чтение          | Невозможно            | Нет                            | Нет                   | Устройства нбольшого объема     |
| EPROM                        | Преимущественно чтение | Ультрафиолетовый свет | Нет                            | Нет                   | Построение прототипов устройств |
| EEPROM                       | Преимущественно чтение | Электрическое         | Да                             | Нет                   | Построение прототипов устройств |
| Флэш-память                  | Чтение и запись        | Электрическое         | Нет                            | Нет                   | Цифровые камеры                 |

### FPGA

FPGA - программируемые вентильные матрицы - микросхемы с программируемой логикой, загрузив в FPGA подходящие конфигурационные данные, можно получить произвольную логическую схему. Главное преимущество FPGA — возможность построения новых аппаратных схем за считанные часы (вместо месяцев, уходящих на производство микросхем).

Микросхема FPGA состоит из двух основных компонентов, многократно повторяемых в ее архитектуре: таблиц преобразования LUT (LookUp Table) и программируемых связей.

![Таблица преобразования FPGA (a); конфигурация LUT для создания 3-разрядного счетчика со сбросом (б)](https://2997537489-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHlGytXJgp5s5oJT0tl%2Fsync%2Ff6671caff209c432e8cc85e51506086cfa04bec1.png?generation=1605188661828956\&alt=media)
