Контроллеры на основе микросхем FPGA
Источник http://nauchebe.netПрограммируемые пользователем вентильные матрицы FPGA (Field Programmable Gate Array) представляют собой прекрасную основу для реализации систем на одной микросхеме. В отличие от контроллерных микросхем, предоставляющих конструктору набор готовых функциональных блоков, микросхемы FPGA предоставляют ему полную свободу разработки. В них легко включать определенные стандартные блоки и затем строить остальную часть системы по собственному усмотрению. Для того чтобы проиллюстрировать возможности этого подхода, мы опишем систему Excalibur от Altera Corporation.
Функциональные возможности FPGA растут с невероятной скоростью. Одна большая микросхема FPGA может содержать систему с сотнями и тысячами логических вентилей. Такие микросхемы достаточно вместительны для реализации типичных функций микроконтроллера и других схем, необходимых для создания встраиваемой системы.
Ключевым компонентом любой системы на одной микросхеме является процессорное ядро. Система Excalibur позволяет конструктору выбрать одно из двух альтернативных решений. Первое из них заключается в том, чтобы запрограммировать процессор на микросхеме с нуля, а другая — в том, чтобы использовать микросхему FPGA с готовым процессорным ядром на кристалле кремния, встроенным при ее производстве.
Программируемое процессорное ядро
В состав системы Excalibur входит программный модуль, созданный на языке описания аппаратного обеспечения Verilog и реализующий архитектуру процессора под названием Nios. Этот модуль позволяет конструктору либо выбрать для процессора один из библиотечных модулей на языке описания аппаратного обеспечения, таком как Verilog или VHDL, либо определить его самостоятельно в виде функционального блока путем интерактивного составления схемы. Конструктор может выбрать 32- либо 16-разрядную версию процессора, в зависимости от требований к производительности системы.
Модуль параллельного интерфейса, подобный приведенному на рис. 9.3.1, доступен в виде библиотечного модуля, для которого конструктор может задать параметры, соответствующие его собственным требованиям. Длина регистров выбирается в диапазоне от 1 до 32 разрядов. Конструктор может применить либо полный двунаправленный интерфейс, либо его более ограниченную версию. Например, можно задать только выходной порт, и тогда регистр выходных данных будет включен в состав схемы, а регистр входных данных нет. В результате ресурсы FPGA не станут тратиться на ненужные компоненты.
Последовательный интерфейс реализуется в форме схемы UART. Конструктор определяет необходимые параметры, такие как количество разрядов данных, количество стоповых битов и использование бита четности. Тактовая частота приема и передачи выбирается из предопределенного стандартного диапазона. Позднее ее можно будет изменить с помощью программного обеспечения контролера, если включить в схему регистр деления частоты (куда можно загружать значение, на которое следует разделить стандартную тактовую частоту). И снова конструктор может выбрать только необходимые функции, чтобы не выполнять ничего лишнего.
Модуль таймера позволяет реализовать функции таймера и счетчика, описанные в разделе 9.3.3. Его работа полностью управляется программным обеспечением контролера.
Большие микросхемы FPGA содержат много памяти. Входящие в их состав блоки памяти могут использоваться для реализации RAM и ROM встроенной системы, если, конечно, ее требования к памяти не слишком велики. Конструктор может задать объем необходимой памяти в виде количества слов и количества разрядов в слове. Если памяти на микросхеме недостаточно, можно добавить интерфейс для внешней памяти, в результате чего на контактах микросхемы FPGA будут реализованы сигналы шины памяти.
Средства автоматизированного проектирования, входящие в состав системы Excalibur, очень облегчают создание системы на основе микросхемы FPGA. В их состав входит мастер, предлагающий конструктору ввести желаемые параметры и затем самостоятельно генерирующий нужные схемы. Таким образом, процессор и модули ввода-вывода реализуются автоматически. Они соединяются с помощью структуры, реализующей шинный протокол Nios. Следует заметить, что шина на микросхеме FPGA основана не на повторителях с тремя состояниями, как рассказывалось в главе 7. FPGA — универсальное устройство, содержащее множество логических элементов, соединенных проводниками и ключами. Повторители с тремя состояниями полезны только для конкретных целей, поэтому в типичных FPGA они не используются. Их функции можно реализовать путем использования мультиплексорных схем. Вместо одного двунаправленного соединения для каждого направления используется свой мультиплексор. И хотя для реализации этого подхода требуется большое количество вентилей, это хорошее решение, поскольку необходимые логические элементы и соединения составляют очень маленькую часть общего количества ресурсов FPGA.
Процессор и подсистема интерфейса занимают относительно небольшую часть микросхемы FPGA. Остальная ее часть предоставляется для реализации схем, специфических для конкретного устройства. Эти схемы можно либо непосредственно соединить с шиной процессора, либо подключить к портам ввода-вывода. Если вся система расположена на одной микросхеме, порты ввода-вывода в подсистеме процессора не обязательно должны быть соединены с контактами ввода-вывода микросхемы FPGA. Конструктор может их использовать для подключения к процессору специфических для данной системы схем.
Процессор Nios имеет систему команд типа RISC. Его производительность может достигать 50 MIPS (Million Instructions Per Second), то есть миллионов команд в секунду. Конструктор может реализовать на одной микросхеме FPGA даже несколько процессоров, создав таким образом мультипроцессорную систему.
Аппаратное процессорное ядро
В качестве альтернативы программируемому процессорному ядру можно использовать кремниевый процессор на специализированной микросхеме FPGA. Система Excalibur предоставляет такие FPGA на основе разных процессоров. Примером может служить FPGA с процессорным ядром ARM, реализованным в одной части устройства. В дополнение к процессорным схемам реализованы шина процессора ARM, модуль RAM и последовательный модуль UART. Подобным образом можно создать значительно более мощную систему, и при этом как обычно запрограммировать остальные необходимые ресурсы, для которых в микросхеме оставлена стандартная FPGA-часть. Система с жестким процессорным ядром может достигать производительности в сотни MIPS.
С точки зрения конструктора
Конструктор встроенной системы, безусловно, ищет простейшее и самое дешевое решение. И самым лучшим выбором может оказаться микросхема микроконтроллера, содержащая ресурсы для реализации всей этой системы. Совсем иная ситуация получается в том случае, если для реализации системы необходимы дополнительные микросхемы. Тогда привлекательным решением становится использование микросхем FPGA, позволяющих создать систему с минимумом микросхем.
Еще одним важным фактором, от которого зависит выбор решения, является наличие готовых модулей. Микросхема микроконтроллера содержит множество разных модулей, но все те необходимые модули, которых она не включает, приходится реализовывать в виде дополнительных микросхем. Технология FPGA позволяет конструктору создавать любые логические схемы. Многие системы содержат схемы для выполнения достаточно типичных задач, как, например, интерфейсы ввода-вывода или схемы таймера. Такие схемы должны реализовываться в виде библиотечных модулей. Хорошо, если имеются и другие полезные модули. Скажем, для систем обработки сигналов библиотека может содержать типичные фильтры и быстрые умножители. Или же, если разрабатываемая система должна подключаться к другому компьютеру через стандартную шину, такую как PCI, задача конструктора будет проще, если интерфейс PCI уже реализован в виде готового модуля.