Разработка архитектуры софт-процессора
Прежде чем приступить к разработке процессора, которым можно будет пользоваться на практике, необходимо определиться с его структурой и ресурсами. Нет ничего необычного в «технических фантазиях» вида «надо поставить 256 кб ПЗУ, 128 кб кэш-памяти, 256 МБ DDR» и тому подобных перечислениях ресурсов, которые было бы желательно подключить к новому процессору. Однако следует еще раз напомнить, что ядро и периферия – вещи совершенно разные, и от того, что рядом с ПЛИС не будет запаяно большого количества памяти, характеристики самого процессора никак не ухудшатся. Гораздо более важно определиться с взаимным распределением нагрузки между ПЛИС и внешними устройствами, после чего станет ясно, что именно требуется поставить для нормальной работы будущей системы, а что является факультативным.
Есть совершенно очевидная группа устройств, которая просто не имеет другого варианта, кроме как быть реализованной внутри ПЛИС. Это арифметико-логические устройства, система управления и прочие составляющие процессора, которые было бы несколько странно искать среди готовых микросхем (раз уж мы заняты проектированием своего ядра). Сюда же относятся регистры для регистровых архитектур. Со стековыми архитектурами все несколько неоднозначно, о чем ниже. Ко второй группе относятся ресурсоемкие устройства: память кода и данных (поскольку рассматривается более эффективная гарвардская архитектура, это два физически отдельных блока памяти), а также стек. Более привычным является наличие единого адресного пространства памяти, где код, данные и содержимое стека располагаются просто в различных участках. Однако возможности ПЛИС таковы, что использование гарвардской архитектуры в сочетании с выделением аппаратного стека возвратов позволит использовать ресурсы ПЛИС наиболее полно и к тому же существенно выиграть в производительности.
Что касается разделения адресных пространств кода и данных, то с этим, видимо, понятно. Во-первых, память довольно дешева, и укомплектовать процессорный модуль лишними 64 кб не представляет особых проблем. Во-вторых, ПЛИС также не имеют особенных ограничений по количеству устройств, с которыми ведется одновременный обмен. Для памяти будет критично в основном количество доступных выводов ПЛИС. В конечном итоге, две отдельные микросхемы памяти подключатся без особых проблем и позволят реализовать самые разнообразные схемы управления памятью – вплоть до объединения их в один логический блок для фон-неймановской архитектуры.
Более интересно то, что современные ПЛИС представляют еще одну возможность организовать память небольшого объема. Речь идет о блочной памяти, которая размещается в современных ПЛИС в объеме от 4 кб до 1 Мб. Задействовав эту память, можно думать о различных вариантах. По меньшей мере, можно использовать ее в качестве памяти кода для небольших систем микроконтроллерного типа. В ПЛИС небольшого на сегодняшний день объема можно ожидать 16-32 кб, которых вполне достаточно для реализации не слишком сложных проектов. Здесь можно добавить, что плотность кода специализированных процессоров как правило выше, чем у процессоров общего назначения. Поэтому тот же самый по функциональности код займет меньше места, и указанные 16-32 кб на самом деле будут значить несколько больше.
Накристальная
двупортовая память обладает рядом преимуществ.
Во-первых, это очевидно более высокие надежность и помехоустойчивость,
поскольку и память, и система обработки расположены на одном кристалле.
Печатные проводники, доставляющие код на обработку процессорному ядру, при этом
просто отсутствуют, а средства САПР достаточно точно определяют максимальные
рабочие частоты, и на их оценку можно полагаться. Особенно хорошо такое
положение дел для разработчика – при работе с внешней памятью всегда существует
вероятность того, что из-за помехи или затянутого фронта произойдет
непредсказуемый сбой в работе процессора. Пока процессорное ядро не отлажено,
довольно трудно с уверенностью сказать, произошел этот сбой по вине неудачно
разведенной печатной платы или разработчика HDL-описания. Если же память находится на кристалле, то
некорректная работа почти наверняка является следствием ошибки в HDL-описании. Далее, только
что упомянутые средства САПР, ориентируясь на полное описание всего проекта,
могут произвести более глубокую оптимизацию, включающую в себя не только
процессорное ядро, но и накристальную память. Внешняя
же память является для них «черным ящиком» с непредсказуемыми задержками
распространения сигнала, к тому же эти задержки, как правило, существенно выше.
Наконец, два независимых порта позволяют использовать один порт для выборки из
памяти команд, а другой – для модификации программы средствами процессора или
внешнего коммуникационного порта, перезагружающего программу без всяких
ограничений.
Что касается памяти данных, то здесь существует два подхода. Если говорить о микроконтроллерных системах, то в них часто применяется подход «большая память кода + немного памяти данных». В этом случае память данных используется для хранения небольшого числа переменных, определяемых пользователем, и служебных переменных, необходимых для работы системных библиотек. Такую память вполне можно реализовать на базе встроенных блоков. При этом ПЛИС рассматривается уже как «система на кристалле» (System-On-Chip, SoC), так как она содержит все устройство, включая процессор, память и периферию. Конечно, аналоговые и силовые цепи на программируемом кристалле в настоящее время не реализуются, но такая поправка обычно подразумевается сама по себе. Чтобы разделить устройства, реализованные путем конфигурирования ПЛИС, и системы на кристалле, созданные на базе жестких соединений (например, с целью минимизации числа микросхем в мобильном телефоне), используется термин SoPC (System-on-Programmable Chip, система на программируемом кристалле). В данном случае наличие или отсутствие аналоговых устройств не так важно, как важен факт использования для организации магистралей данных только накристальных соединений ПЛИС, что полностью снимает все вопросы, связанные с разводкой печатной платы для высокочастотных цифровых схем.
Однако требования к системе могут
и не исчерпываться несколькими
килобайтами памяти данных. Более того, нет ничего удивительного в системах с
теми же 16–32 килобайтами памяти программ и сотнями мегабайт, отведенных под
данные (например, системы сбора данных, мониторинга, мультимедийные
устройства). Большой объем памяти программ здесь не требуется – алгоритмы
зачастую сводятся именно к тем однообразным операциям с большими входными
потоками, которые так хорошо реализуются в ПЛИС. Кстати говоря, аппаратный
декодер mp3 был
реализован на базе ПЛИС еще 5 лет назад (фирма Celoxica, на тот
момент носившая название Embedded Solutions)
и обеспечивал декодирование при тактовой частоте проекта всего 5 МГц (правда,
при использовании кристалла в миллион вентилей, но на сегодняшний день это уже
не представляет серьезную проблему). Для подобного подхода требуется внешняя
микросхема ОЗУ. Надо сказать, что с точки зрения архитектуры процессора
меняется лишь способ выполнения операций с памятью. Нужно сделать поправку на принцип
ее функционирования, задержки при выполнении основных операций, необходимость
подготовительных действий, и т.п. С точки зрения ядра это может означать ввод
дополнительных состояний внутреннего автомата, и не более того.
Еще один тип памяти (с точки
зрения программиста, а не разработчика), который может быть подвержен
пристальному рассмотрению – это память стека. Речь пока не идет о стековых архитектурах, необходимо лишь вспомнить,
что вызовы подпрограмм и возвраты из них требуют запоминания адресов на стеке.
Больше глубина вызовов – больше стек. Собственно говоря, профилирование может
помочь выявить максимальную вложенность вызовов, но для проектов указанного
объема в 16-32 кб это максимум десятки. Процессоры x86 имеют отдельный сегмент стека,
который с аппаратной точки зрения располагается все в той же памяти. Поможет ли
чем-нибудь его вынесение в отдельное адресное пространство? Разумеется, да. Как
с точки зрения получения всех преимуществ от накристальной
реализации, так и точки зрения распараллеливания операций. Представляем себе, к
примеру, завершение некоей процедуры. Вычисленное значение заносится в память и
выполняется возврат. Для этого требуется доступ одновременно и к той части
памяти, где хранятся данные, и к памяти стека. Можно ли выполнить эти операции одновременно?
Из общих соображений – безусловно, если в процессоре предусмотрено нечто
подобное (поскольку процессор проектируется заново, почему бы и не
предусмотреть). Что этому мешает? В первую очередь именно совмещение памяти
данных и стека, поскольку магистраль связи с памятью всего одна, и все
транзакции по ней необходимо выполнять последовательно. ПЛИС же, имея
независимые связи с памятью данных и стека, может выполнить запись в переменную
и выборку адреса для возврата одновременно (к тому же по третьей магистрали
непрерывно считываются команды, за что надо благодарить уже гарвардскую
архитектуру). Таким образом, отдельный стек – это тот вопрос, который требует
тщательной оценки. В конце концов, аппаратные затраты на него не так уж велики,
а преимущества могут быть весьма значительные.
Теперь несколько слов стоит сказать о самих ПЛИС, на которые имеет смысл ориентироваться при разработке. Естественно, существует понятие «любима фирма-производитель». Естественно, ситуация на рынке меняется. Так же естественно, что между производителями имеет место конкурентная борьба разной степени тяжести.
Итак, начать необходимо с того, что ПЛИС делятся на два класса – с архитектурой CPLD и FPGA (на самом деле архитектур гораздо больше, но не все представляют интерес). Первые – как правило на базе флеш-памяти, и это устройства начального уровня. Потому разговор в основном идет не о них, а как раз о втором классе – с архитектурой FPGA. Это микросхемы, где конфигурация хранится в обычном статическом ОЗУ, но отличие не только и не столько в этом, сколько в ином балансе ресурсов и способах организации связей между ними. Вчерне – CPLD предназначены для реализации заменителей рассыпной логики, и очень плохо подходят для проектов с большим числом триггеров (а значит, и регистров, счетчиков, и т.п. – то есть всего, что так положительно влияет на характеристики процессора). FPGA же – гораздо более гибкая система, с триггерами там гораздо лучше (и их удельная стоимость гораздо ниже), к тому же именно FPGA содержат блочную память, умножители, и пр. Суммируя: проекты выше начального уровня имеет смысл делать именно на FPGA.
Ведущими производителями FPGA в настоящий момент являются Xilinx и Altera (в порядке убывания рыночной доли). Вообще говоря, программируемая логика выпускается и такими фирмами, как Actel, Lattice, Triscend, Atmel и Cypress, но на фоне двух ведущих производителей объемы выпуска и их внимание к ПЛИС относительно невелики (Atmel, к примеру, широко известен как производитель микроконтроллеров и лидерство в области ПЛИС для него не критично). Отдельно стоит продукция Actel, представляющая собой устройства с архитектурой, близкой к FPGA (т.е. подходящие для создания процессоров и систем на кристалле), но хранящие конфигурацию в флеш-памяти или даже однократно программируемые. Эти устройства характеризуются повышенной устойчивостью к радиации и предназначаются в основном для аэрокосмических применений.
Мифы о ПЛИС:
Миф 1. Продукция фирмы <XXX> – наиболее передовая.
Выбор элементной базы – крайне сложный вопрос. Рекламная и техническая информация зачастую так сильно переплетены, что делать выводы на основании только рекомендаций самих производителей зачастую просто нереально. Нередки ситуации, когда в одних и тех же технических журналах присутствуют упоминания о «самых быстрых» и «самых дешевых» ПЛИС двух-трех производителей одновременно. Естественно, рекламодатели при этом имеют в виду абсолютные показатели. Если подходить хоть сколько-нибудь объективно, то по большому счету указать абсолютного лидера в области ПЛИС нельзя. Тем не менее, по ряду показателей лидируют Xilinx и Altera.
Миф 2. У Altera самые быстрые кристаллы и ее продукция
распространена наиболее широко.
Отчасти это так. Однако
подоплекой такого мнения является то, что первой большой волной распространения
ПЛИС в России стало появление кристаллов и САПР именно этой фирмы. Естественно,
что разработчики, привыкшие к определенным микросхемам и средствам разработки,
защищают знакомые и привычные инструменты. Однако стоит упомянуть, что
«фирменной» продукцией Altera является CPLD, в то время как архитектура FPGA была сильной стороной Xilinx.
Еще 10-15 лет назад функциональные возможности устройств этих двух архитектур
были примерно схожи, и речь шла о разных подходах к решению в целом одинаковых
задач. В то время для широкого применения лучше выглядели именно CPLD, которые хорошо знакомы
разработчикам хотя бы по семействам MAX, выпущенным Altera. Однако когда емкость
устройств FPGA стала на
порядок выше, оба производителя приступили к выпуску устройств и с той, и с
другой архитектурой. Просто констатация факта: объемы продаж показывают, что
лидером является фирма Xilinx.
Миф 3. Все же по всем тестам ПЛИС Altera быстрее.
Это самый распространенный камень преткновения при сравнительном анализе ПЛИС разных производителей. В действительности для каждого семейства можно подобрать такие условия тестирования, что оно будет выглядеть привлекательнее, чем аналогичная продукция конкурента. По информации Altera лидерство принадлежит ее продукции. Однако по сведениям, приводимым Xilinx, дело может обстоять иначе. Как бы то ни было, не существует «серебряной пули», и ПЛИС какой-то фирмы не может быть лучше во ВСЕХ приложениях.
Миф 4. Следовательно, нужно скорее переходить от Altera к Xilinx (или наоборот).
Чтобы избежать долгих споров, можно сойтись на том, что обе фирмы выпускают примерно паритетную по основным характеристикам продукцию. Конкурентная борьба в сфере ПЛИС достаточно жесткая, да и примерно 55% у Xilinx против 40% Altera – гораздо меньший разрыв по сравнению с соотношением между Intel и AMD, а ведь никто не назовет процессоры этих фирм кардинально отличающимися по характеристикам? В действительности не так уж сложно отслеживать технические характеристики продукции обеих фирм, и выбирать то, что наиболее подходит для конкретного проекта.
Миф 5. Фирма Actel утверждает, что ее архитектура объединяет
преимущества CPLD и FPGA, а ПЛИС
обладают максимальной на сегодняшний день производительностью, дешевые и к тому
же радиационно-стойкие.
Вкратце: рекламный ход. Не буду
вдаваться в подробности, но политика представительства Actel выглядит со стороны довольно агрессивной, что
несколько не соответствует реальной рыночной доле этой фирмы. Пожалуй,
радиационная стойкость – единственный повод реализовывать что-то на ПЛИС Actel,
но в качестве стартового устройства или серийной продукции для обычных условий
эксплуатации это неудачный выбор. Что касается производительности – см. миф №3.
Собственно, всегда можно почитать техническую документацию (и посмотреть,
например, на производительность последних семейств Virtex от Xilinx
и Stratix
от Altera).
Что касается цены: что можно купить у Actel за 10 у.е. (и можно ли купить что-то вообще)? У Xilinx или Altera – ПЛИС объемом несколько
сотен тысяч вентилей…
Миф 6. Работа по проектированию возможна только с HDL, для чего надо использовать ActiveHDL или Mentor.
Первая часть утверждения, хотя и чересчур категорична, в целом верна. Однако начинать с трансляторов HDL сторонних производителей (а не самих фирм, выпускающих ПЛИС) настоятельно не рекомендуется. По различным оценкам, наиболее современные трансляторы того же Mentor могут обеспечить 5-10% выигрыша (это просто значение, показывающее порядок величины, а не абсолютное утверждение), в случае, если тонкой настройкой займется разработчик с большим опытом. Не меньшей глубины контроля можно добиться и с помощью «штатных» САПР. Кроме того, не имея опыта реализации хотя бы десятка проектов, лучше всего работать с реальной ПЛИС и проверять работоспособность проекта осциллографом, а не симулятором. Можно ли написать и отладить программу, ни разу не компилируя ее, а лишь пользуясь различными средствами тестирования и проверки исходного текста? Почти наверняка в ней накопится масса логических ошибок. Ситуация с ПЛИС в точности такая же. Поэтому настоятельно рекомендуется на начальных и средних этапах (вобщем, до получения 2+ летнего опыта и разработки пары десятков проектов) пользоваться связкой «отладочная плата + САПР фирмы-производителя».
Миф 7. Нас вполне устраивает семейство Spartan (или ACEX) и переходить к чему-то еще нет большого смысла.
Имеет ли смысл переходить на Pentium-4 с Pentium-II? Разница в техпроцессах примерно такая же. Новые семейства, будучи выпущенными с меньшими допусками, имеют меньшую площадь кристалла, меньшее потребление, большую тактовую частоту и меньшую цену – на то есть вполне объективные причины. Поэтому тщательно изучить характеристики Spartan-3 (или Cyclone-II) очень и очень рекомендуется. Кроме того, проекты, созданные для старых семейств, хорошо переносятся на новые.
Миф 8. Для новых семейств нужен новый САПР, а Xilinx Foundation Series (или MaxPlus) нас вполне устраивает. К тому же переход
на современные САПР сложен и долог.
Современные САПР – это ISE для
Xilinx
и Quartus для Altera. Обе программы поддерживают все семейства ПЛИС
соответствующих фирм, включая самые
современные, и имеют совершенно бесплатные версии с ограничением только по
объему кристалла. Однако это объемы в сотни тысяч вентилей – если хватит денег
на ПЛИС, которая не поддерживается бесплатной САПР, то
скорее всего хватит денег и на лицензионную версию без ограничений. Процесс
освоения новой САПР вполне можно уложить в одно-двухнедельный
срок. Чисто субъективно – новые САПР удобнее.
Единственное препятствие – для работы требуется ОС Windows 2000/XP, под Win 98 запустятся только старые версии.
С другой стороны, самые последние версии САПР у обоих
фирм работают и под управлением Linux
(Red Hat Enterprise, если быть
точным).
ПЛИС и архитектура системы: сочетается
ли несочетаемое?
Может быть, это и неочевидно, но эффективность реализуемых процессоров и систем на кристалле зависит от выбранной элементной базы. Как в пределах продукции одного производителя, так и при переходе между различными фирмами может оказаться так, что производительность и аппаратные ресурсы, требуемые для проекта, будут различаться (и иногда очень существенно).
Реализация памяти в ПЛИС
Память и ее характеристики – один из наиболее важных пунктов, который рассматривается в комплексе с характеристиками процессорного ядра. Чтобы наглядно представить взаимоотношения между отдельными составляющими процессора (пока в наиболее простом двухтактном варианте), рассмотрим следующий рисунок.

Фактически здесь показан один из ракурсов автомата Мили. Блоки, расположенные в левой части, являются разновидностями переменных состояния. Это и регистры процессора (все разновидности, включая счетчик команд, указатель стека и проч.), и память данных, и, как вариант, отдельный стек. Отдельно стоит память кода, поскольку в наиболее простом случае она не изменяется в процессе работы программы. Остальные переменные вполне могут измениться в процессе работы.
|
Тип |
Триггеры |
Распределенная |
Блочная |
Статическая |
Динамическая |
|
Тактовая частота |
200-500 |
150+ |
150+ |
10-100-200 |
100, 133, 166, 200 |
|
Задержка при доступе, тактов |
0 |
0-1 |
0-1 |
0-2 |
До 10 |
|
Объем |
До 100 байт |
До 1 кб |
4-64 кб (до 1 Мб) |
64-256 кб |
32 Мб и более |
|
Размещение |
Ячейки ПЛИС |
Ячейки ПЛИС (только Xilinx) |
Выделенные блоки ПЛИС |
Внешняя микросхема |
Внешняя микросхема или модуль DRAM |
|
Регистры |
! |
? |
x |
x |
|
|
Код |
x |
x |
! |
? |
x |
|
Данные |
x |
? |
! |
? |
! |
|
Стек |
? |
! |
! |
? |
x |
Легенда
|
|
Устройство располагается на кристалле ПЛИС |
|
|
Внешняя микросхема |
|
|
Плохой показатель |
|
|
Применение требует дополнительного внимания |
|
|
Хороший показатель |
|
ü |
Рекомендуется применение в этом качестве |
|
û |
Крайне не рекомендуется применение в этом качестве |
|
? |
Применение возможно в зависимости от обстоятельств |
Данную таблицу можно прокомментировать. Во-первых, она разделена на две группы колонок, которые представляют устройства, расположенные на кристалле, и внешние микросхемы. Очевидно, что характеристики внешних микросхем могут быть самыми разными, но в таблице приводятся сведения о более менее «разумных» вариантах, которые реализуются без существенных усилий и необходимости решения сложных технических проблем. К статической памяти можно отнести также и NAND-флеш, которые, хотя и являются энергонезависимыми, имеют схожий с микросхемами ОЗУ интерфейс. По крайней мере, тактовые частоты и объем примерно совпадают.
Итак, рассмотрим таблицу «по вертикали». В первой колонке располагаются триггеры логических ячеек ПЛИС, представляющие собой самый быстрый и самый дефицитный программируемый ресурс. Именно триггеры позволяют достичь очень высоких тактовых частот, к тому же все регистровые устройства (в том числе и регистры процессора) реализуются на них крайне удобно. Существеннейшим недостатком является то, что в каждой логической секции ПЛИС расположен только один триггер. Следовательно, при слишком активном их использовании ресурсы ПЛИС исчерпаются очень скоро, а проект будет крайне «однобоким» (поскольку масса других программируемых ресурсов окажется просто незадействованной). В ПЛИС начального уровня имеется несколько тысяч триггеров, поэтому в таблице указана цифра «до 100 байт». Сочетание такого маленького объема с крайне высокой скоростью напрашивается на вывод о том, что триггеры крайне удобны для реализации на их базе регистров процессора… и вобщем-то все. Правда, если требуемый объем стека невелик, то можно реализовать на триггерах и его. Прочие применения (хранение кода или данных) – крайнее расточительство, которое совершенно не оправдывает себя.
Следующий имеющийся в ПЛИС ресурс – распределенная память логических ячеек (правда, кристаллы Altera такую возможность не предоставляют). Эта память в действительности является просто-напросто фрагментом конфигурационного ОЗУ самой ПЛИС, в которой хранятся в том числе и таблицы истинности логических генераторов. В каждой секции ПЛИС, кроме триггера, имеется 4-входовый логический генератор, который программируется путем занесения в него таблицы истинности. Для 4 входов требуется описать 16 возможных состояний, т.е. поставить память 16x1, а путем введения небольшого количества дополнительных соединений эта память становится доступной разработчику. Таким образом, на каждый триггер приходится 16 бит памяти, организованной, правда, единственным образом – те самые упомянутые 16x1. Память также достаточно быстрая, и в принципе может объединяться для образования более крупных блоков. Однако на практике с крупными блоками возникают проблемы – для соединения мелких кусочков ОЗУ требуется слишком много трассировочных линий, трассировка становится запутанной, и в ПЛИС возрастают задержки распространения сигналов. Поэтому блоки памяти желательно делать некрупные, и почти идеальным вариантом является стек. Регистры процессора в этом отношении хуже тем, что у памяти может быть максимум два порта, и вместо «действительных» регистров получается конструкция под названием «регистровый файл». То есть в каждом такте можно обращаться к произвольным регистрам, но только к каким-то определенным (максимум двум). Для стека это оптимально, для регистров – предмет отдельного рассмотрения. Наконец, в таблице знаком вопроса помечен пункт «данные». Действительно, мелкие блоки данных также можно реализовывать на распределенной памяти. Это может быть как память общего назначения (для хранения переменных программы), так и такая нестандартная вещь, как буфер для обмена с внешним устройством. Ранее уже упоминалось о том, что конфигурируемые процессоры вполне могут иметь множество адресных пространств, поскольку аппаратный состав системы уже примерно известен. Хорошим примером может служить организация вспомогательного программируемого автомата для вывода на LCD – современные LCD имеют достаточно неторопливый интерфейс, поэтому в качестве буферного элемента можно использовать двупортовую распределенную память. Процессор записывает символы по первому порту, а управляющий автомат считывает их по другому, обновляя данные на дисплее с соблюдением требуемых временных характеристик. Для дисплея 16x2 символа распределенная память прекрасно подходит по объему (требуется 16*2*8=256 байт; для триггеров этого слишком много, а для блочной памяти – слишком мало).
Следующий ресурс (последний среди
накристальных) – блочная
память. Следует заметить, что блочная память ПЛИС на протяжении последних
нескольких лет эволюционировала очень бурно. Естественно, в первую очередь это
относится к ее объему. Например, ПЛИС начального уровня Spartan-3 с 200 тыс. эквивалентных
вентилей имеет 12 встроенных блоков, каждый из которых представляет собой двупортовую память с организацией 1kx18. Надо сказать,
что с учетом высокой плотности кода это достаточно много. Конечно, микроконтроллеры
имеют на кристалле гораздо больше памяти, но ПЛИС все же имеют свою специфику.
К тому же в старших (правда, очень
дорогих кристаллах) объем памяти исчисляется уже мегабайтами. В силу своей
специфики (относительно крупные блоки, удобный интерфейс, высокая
производительность) эта память подходит практически для чего угодно, исключая,
возможно, регистры. Регистров получится слишком уж много (блоки нельзя «делить»,
используя часть для одной цели, а часть для другой). Хотя регистровый файл с
организацией 512x32 или
256x64 вполне может
быть рассмотрен как вариант.
Далее идут варианты внешних устройств, которые условно можно поделить на статическую и динамическую память. Условность состоит в том, что в действительности среди внешней памяти можно найти как ОЗУ, так и флеш-память, и оба этих типа могут иметь как простой интерфейс (асинхронное ОЗУ или NOR-флеш), так и достаточно сложный порядок доступа к произвольной ячейке (DRAM или NAND-флеш). В первом случае главным козырем является простота обращения к устройству, во втором – очень большие объемы. Исходя из этого и произведено деление.
Итак, статическая память появляется в системе тогда, когда ресурсов самой ПЛИС явно не хватает. Ее объем в целом больше, чем у накристальной памяти ПЛИС, но вот время доступа (не в тактах, а в наносекундах) уже существенно выше. Главный момент, который возникает в этом случае – адресные линии необходимо вывести наружу. Проект выпадает из «поля зрения» САПР, сигналы распространяются уже не только по кристаллу ПЛИС, где можно учесть многие факторы и добиться частот до 100 МГц, а частично уже и по внешним печатным проводникам. Поэтому в таблице практически везде поставлены знаки вопроса – внешняя память не имеет каких-либо особенных недостатков. Исключая, разве что, тот факт, что регистры размещать в ней совершенно не стоит – для этого есть гораздо более быстрые программируемые ресурсы ПЛИС, которые прекрасно годятся для реализации небольших объемов памяти. Во внешней же памяти можно поместить как данные, так и код. В последнем случае он может размещаться и во флеш-памяти.
Наконец, динамическая память имеет исключительно большие объемы (см. любые
линейки SDR/DDR), но требует к себе
повышенного внимания. Причем внимание необходимо уделить сразу двум моментам:
контроллеру такой памяти, размещаемому в ПЛИС (это не совсем тривиальная
задача), и печатной плате, способной обеспечить целостность сигналов на
частотах в районе 100 МГц. Подобные решения для HDL существуют (см.,
например, свободно распространяемую утилиту Memory Generator, которую можно взять на сайте Xilinx), но
трассировка печатной платы для динамической памяти (и особенно для модулей) –
весьма ответственное занятие. Важно то, что доступ к произвольной ячейке может
потребовать больше одного такта, поэтому кроме как для хранения огромного
количества данных, динамическая память вобщем-то ни к
чему более не пригодна.
Варианты процессорных систем на базе ПЛИС
1) «Система на кристалле»
В данном варианте ПЛИС реализует как ядро процессора, так и оба типа памяти: кода и данных. Наиболее естественным решением было бы использовать для этого блочную память ПЛИС, поделив ее между кодом и данными в некоторой пропорции, выбираемой исходя из решаемой задачи. Это прекрасный стартовый вариант, впрочем, пригодный и для множества реальных применений.

2) «Контроллер»
В данном варианте к ПЛИС добавляется внешняя микросхема памяти, что существенно увеличивает либо объем программы, либо объем данных. В первом случае внешняя флеш используется для хранения кода, а блочная память ПЛИС хранит данные, во втором напротив, блочная память хранит выполняемую программу, которая оперирует с относительно большими массивами, расположенными во внешней статической памяти.

3) «Компьютер»
Дальнейшее наращивание функциональности всей платы позволяет получить систему «компьютерного» класса. В этом случае внешние микросхемы используются и для хранения кода, и для хранения данных. Блочная память ПЛИС может быть использована разными способами – например, в качестве кэша или как независимый фрагмент кода, расположенный в том же адресном пространстве, что и одна из внешних микросхем (или обе – например, часть блочной памяти может хранить наиболее часто используемые блоки кода, а часть – важнейшие системные переменные). Память, исчисляемая мегабайтами, позволяет реализовать полноценную вычислительную систему, поддерживающую богатый набор периферийных устройств.

Разумеется, возможные архитектуры не исчерпываются перечисленными вариантами. В действительности, приведенные примеры лишь дают информацию к размышлению, но не претендуют на какие-либо исчерпывающие практические рекомендации. Интерес представляет лишь первый вариант, который настоятельно рекомендуется в качестве базового – до получения разработчиком собственного практического опыта разработки нескольких конфигурируемых процессоров разных типов и работы с ними.
Отладочный комплект
Дальнейшие учебные примеры будут
ориентированы на использование «чистой» (т.е. без внешних микросхем памяти) ПЛИС
начального уровня, связанной с PC через порт RS-232.
Такому условию удовлетворяет практически любая плата или устройство на базе
ПЛИС (поскольку даже внешний модуль RS-232 требует всего двух цифровых линий). Очень хорошо подходит Starter Kit от
Xilinx
на базе ПЛИС Spartan-3.
Кроме самой ПЛИС и RS-232, на плате имеется 1 Мб быстрой статической памяти, разъемы
VGA, PS/2, а также богатый набор индикаторов,
светодиодов, переключателей, кнопок и разъемов общего назначения. (За
предоставленную плату отдельное спасибо компании InlineGroup).
При стоимости около 130 у.е.
это прекрасный вариант для самостоятельного освоения, с учетом того, что в
комплекте с платой имеется программатор, диски с САПР и документацией и адаптер
питания. Остается найти свободный параллельный порт и кабель с разъемами DB-9 для связи с платой.