Судя по твоему другому вопросу, ты парень из Xilinx. Поэтому я настоятельно рекомендую получить спецификацию вашего чипа Xilinx и перейти к главе «Описание функций». Для чипа Spartan 3, который я использую, это 42 страницы забавного чтения. Он подробно описывает, какие компоненты находятся внутри FPGA - IOB, CLB, срезы, LUT, блочное ОЗУ, множители, диспетчер цифровых часов, сеть синхронизации, межсоединение, а также некоторую базовую информацию о конфигурации. Вы должны понимать эту информацию, если хотите знать, как выглядит «скомпилированный HDL».
Когда вы ознакомитесь с архитектурой вашей FPGA, вы сможете понять этот процесс. Во-первых, ваш дизайн HDL проходит через механизм синтеза, который превращает ваш HDL в RTL. Затем Mapper обрабатывает результаты Synthesis, «сопоставляя» их с доступными частями архитектуры FPGA. Затем Маршрутизатор делает Place And Route (PAR), который выясняет, куда эти части идут и как их соединить. Наконец, результаты из PAR превращаются в BIT-файл. Обычно этот BIT-файл затем каким-то образом преобразуется, чтобы его можно было загрузить в микросхему Flash, чтобы FPGA можно было запрограммировать автоматически при включении.
Этот битовый файл описывает всю программу FPGA. Например, CLB в Спартанце 3 состоят из секций, которые состоят из LUT, которые являются просто 16-адресными 1-битными SRAM. Итак, одна вещь, которую будет содержать BIT-файл, - это то, какие именно данные поступают в каждый адрес SRAM. Другая вещь, которую содержит файл BIT, - это то, как каждый вход LUT подключен к матрице соединений. Файл BIT также будет содержать начальные значения, которые находятся внутри оперативной памяти блока. Он опишет, что связано с установкой и сбросом контактов каждого триггера в каждом слайсе. Он опишет, как соединена цепь переноса. Он будет описывать логический интерфейс для каждого IOB (LVTTL, LVCMOS, LVDS и т. Д.). Он будет описывать любые встроенные подтягивающие или понижающие резисторы. В основном все.
Для Xilinx память FPGA очищается при запуске конфигурации (т. Е. Утверждается PROG_B). Как только память очистится, INIT_B поднимется до высокого уровня, чтобы указать, что фаза завершена. BIT-файл затем загружается либо через JTAG, либо через интерфейс Flash-чипа. Как только программа загружена, происходит глобальная установка / сброс (GSR), сбрасывая все триггеры в исходное состояние. Вывод DONE затем становится высоким, чтобы показать, что конфигурация завершена. Ровно через один тактовый цикл высвобождается глобальный сигнал трех состояний (GTS), позволяющий управлять выходами. Ровно через один тактовый цикл освобождается глобальное разрешение записи (GWE), позволяя триггерам начать изменение состояния в ответ на их входные данные. Обратите внимание, что даже этот окончательный процесс конфигурации может быть слегка переупорядочен в зависимости от флагов, установленных в файле BIT.
РЕДАКТИРОВАТЬ:
Я также должен добавить, что причина, по которой программа FPGA не является постоянной, заключается в том, что логическая структура состоит из энергозависимой памяти (например, SRAM). Поэтому, когда ПЛИС теряет мощность, программа забывается. Вот почему они нуждаются, например, в микросхемах флэш-памяти в качестве энергонезависимой памяти для программы FPGA, чтобы ее можно было загружать, когда устройство включено.