Текст
                    В. Ю. Зотов

В. Ю. Зотов Проектирование встраиваемых микроврвцессорных систем на основе ПЛИС фирмы Я XILINX’ Москва Горячая линия-Телеком 2006
ББК 32.852.3 3-88 Зотов В. Ю. 3-88 Проектирование встраиваемых микропроцессорных систем на основе ПЛИС фирмы XILINX®. - М.: Горячая линия - Телеком, 2006. - 520 с., ил. ISBN 5-93517-165-1. Книга предназначена для самостоятельного изучения методики сквозного проектиро- вания встраиваемых микропроцессорных систем на базе программируемых логических интегральных схем (ПЛИС) фирмы Xilinx “. Представлено подробное описание характе- ристик, архитектуры и системы команд микропроцессорных ядер семейств PicoBlaze™ и MicroBlaze™, применяемых в качестве основы встраиваемых систем. Рассмотрены эта- пы проектирования 8-разрядных микропроцессорных систем, реализуемых на базе ПЛИС с архитектурой FPGA, с использованием ядер семейства PicoBlaze, и их выполнение в рамках САПР серии Xilinx ISE™ (Integrated Sowtware Environment) версии 7.1 i. Дана раз- вернутая характеристика основных этапов разработки 32-разрядных встраиваемых сис- тем, выполняемых на основе микропроцессорных ядер семейства MicroBlaze. Рассмотрен процесс осуществления этих этапов с помощью комплекса средств автоматизированного проектирования встраиваемых микропроцессорных систем Xilinx Embedded Development Kit™ (EDK). Приведены исходные тексты VHDL-описаний микропроцессорных ядер се- мейств PicoBlaze. Материал, изложенный в книге, также может быть использован в процессе самостоя- тельного освоения средств проектирования 32-разрядных встраиваемых микропроцес- сорных систем Xilinx EDK версии 7.1i. Для инженерно-технических работников, может быть полезна студентам и аспиран- там, специализирующимся в области разработки микропроцессорных систем различного назначения. ББК 32.852.3 Адрес издательства в Интернет www.TECHBOOK.RU e-mail: radios_hl@mtu-net.ru Справочное издание Зотов Валерий Юрьевич ПРОЕКТИРОВАНИЕ ВСТРАИВАЕМЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ПЛИС ФИРМЫ XILINX® Компьютерная верстка Н. В. Ивановой Корректор Е. Н. Федоров Обложка художника В. Г. Ситникова ЛР № 071825 от 16 марта 1999 г. Подписано в печать 08.02.06. Формат 70x100/16. Усл. изд. л. 43,25. Тираж 2000 экз. Изд. № 6165. Заказ 2062. Отпечатано в ООО ПФ «Полиграфист». 160001, г. Вологда, ул. Челюскинцев, 3, тел.: (8172) 72-55-31, 72-60-72 ISBN 5-93517-165-1 © В. Ю. Зотов. 2006 © Оформление издательства «Горячая линия - Телеком». 2006
ПРЕДИСЛОВИЕ Современный этап развития цифровой техники характеризуется широким при- менением программно-аппаратных комплексов, которые строятся по принципу «сис- тема на кристалле» (System-on-Chip). При этом в качестве элементной базы для реа- лизации таких систем все чаще используются программируемые логические инте- гральные схемы (ПЛИС). Такая тенденция обусловлена тем, что современные семейства ПЛИС отличаются высоким быстродействием и значительным объемом логических и специальных ресурсов в сочетании с относительно невысокой стоимо- стью. Ведущими производителями кристаллов программируемой логики для под- держки данного направления разработаны микропроцессорные ядра, а также соот- ветствующие средства проектирования и отладки встраиваемых систем. Фирма Xilinx® предоставляет несколько семейств микропроцессорных ядер, широкий спектр IP-компонентов периферийных устройств, а также средства автоматизирован- ного проектирования, позволяющие в короткие сроки и с минимальными затратами создавать цифровые системы на кристалле, реализуемые на базе ПЛИС с различной архитектурой. Данное издание знакомит с технологией сквозного проектирования встраивае- мых микропроцессорных систем на основе ПЛИС фирмы Xilinx. Приводится описа- ние микропроцессорных ядер и соответствующих средств проектирования, позво- ляющих выполнить все этапы разработки, начиная с создания проекта и заканчивая программированием кристалла. Структура книги включает в себя 14 глав и 3 приложения. В гл. 1 дается краткая характеристика микропроцессорных ядер и систем автоматизированного проектиро- вания (САПР), предлагаемых фирмой Xilinx. В гл. 2 подробно рассматриваются ос- новные характеристики и архитектура базового варианта микропроцессорного ядра семейства PicoBlaze, реализуемого на основе ПЛИС серий Spartan™-!!, Spartan-IIE, Virtex™, Virtex-E. В гл. 3 описывается система команд этого варианта микропроцес- сорного ядра PicoBlaze. Гл. 4 знакомит с особенностями микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах систем, реализуемых на ос- нове ПЛИС семейства Virtex-II. В гл. 5 представлены отличия характеристик, архи- тектуры и системы команд микропроцессорного ядра PicoBlaze, реализуемого на ос- нове ПЛИС семейства CoolRunner-II, по сравнению с базовым вариантом. В гл. 6 рас- смотрены отличительные особенности микропроцессорного ядра PicoBlaze, предназначенного для реализации на основе ПЛИС семейств Spartan-3, Virtex-II, Virtex-II PRO и Virtex-4. Гл. 7 посвящена вопросам разработки и трансляции про- грамм на языке ассемблера микропроцессорных ядер семейства PicoBlaze. В гл. 8 представлены этапы проектирования встраиваемых систем на основе микропроцес- сорных ядер семейства PicoBlaze и процесс их выполнения в САПР серии Xilinx ISE™ (Integrated Synthesis Environment). Здесь же приведен пример разработки кон- троллера с использованием ядра PicoBlaze, реализуемого в ПЛИС семейства Spar- tan-3. Гл. 9 знакомит с характеристиками и архитектурой микропроцессорных ядер семейства MicroBlaze. Система команд данного семейства микропроцессорных ядер представлена в гл. 10. В гл. 11 приведено описание характеристик и пользовательско- го интерфейса комплекса средств автоматизированного проектирования встраивае- мых 32-разрядных микропроцессорных систем Xilinx Embedded Development Kit™
4 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС (EDK). В гл. 12 подробно рассмотрено поэтапное выполнение процесса разработки микропроцессорных систем на основе ядер семейства MicroBlaze в САПР Xilinx EDK. Гл. 13 представляет методику проектирования встраиваемых систем на основе микропроцессорных ядер семейства MicroBlaze, осуществляемого с помощью масте- ра Base System Builder Wizard™. Гл. 14 знакомит с аппаратными средствами, приме- няемыми для отладки встраиваемых микропроцессорных систем, разрабатываемых на основе ПЛИС фирмы Xilinx. В прил. 1-3 приведены VHDL-описания исполнительных модулей микропроцес- сорных ядер семейства PicoBlaze, реализуемых на базе ПЛИС семейств Spartan™-!!, Spartan-IIE, Virtex™, Virtex-E, CoolRunner-II, Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4. Представленные тексты VHDL-описаний могут использоваться в качестве образцов или шаблонов при создании собственных микропроцессорных ядер, пред- назначенных для разработки встраиваемых систем на основе ПЛИС различных се- мейств, выпускаемых фирмой Xilinx. При изучении материала рекомендуется воспользоваться бесплатными версиями рассматриваемых систем проектирования, которые можно заказать, обратившись на Web-страницу www.xilinx.com или к официальному дистрибьютору фирмы Xilinx. Автор выражает благодарность заместителю генерального директора фирмы InlineGROUP (официального дистрибьютора фирмы Xilinx) Д. А. Кнышеву и веду- щим сотрудникам М. О. Кузелину, М. Ю. Гетопанову, Г. И. Алексееву, Ю. В. Митя- кину, А. В. Перекресту за информационно-техническую поддержку в процессе рабо- ты над книгой.
1. ХАРАКТЕРИСТИКА МИКРОПРОЦЕССОРНЫХ ЯДЕР И СРЕДСТВ ПРОЕКТИРОВАНИЯ ВСТРАИВАЕМЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ПЛИС ФИРМЫ XILINX Постоянное внедрение передовых технологий в процесс производства кристал- лов программируемой логики привело к значительному расширению функциональ- ных возможностей современных семейств ПЛИС. В первую очередь эта тенденция проявляется в ПЛИС с архитектурой FPGA [2-4]. Следствием этого стало появление системного подхода в процессе проектирования цифровых устройств, реализуемых на их основе. При таком подходе кристалл рассматривается как некоторое микропро- цессорное ядро, окруженное свободными конфигурируемыми логическими ресурса- ми. На основе этих ресурсов реализуются все необходимые периферийные устройст- ва проектируемой системы. Фирма Xilinx, являясь ведущим мировым производителем ПЛИС, наряду с вы- пуском новых семейств кристаллов, отличающихся высокими техническими харак- теристиками, предоставляет разработчикам готовые отлаженные модули микропро- цессорных ядер с различной архитектурой. В настоящее время пользователям дос- тупны ядра с архитектурой широко применяемых микропроцессоров различных производителей, таких, как Z80 фирмы Zilog®, PIC семейств 125х, 1655х, 165х фир- мы Microchip®, 8051 и др. Кроме того, фирма Xilinx предлагает семейства ядер с оригинальной архитектурой, оптимизированной для реализации на основе ПЛИС различных серий. Кроме широкого спектра ПЛИС и IP-компонентов фирма Xilinx предоставляет современное программное обеспечение, необходимое для разработки проектов циф- ровых устройств с аппаратной реализацией операций и встраиваемых микропроцес- сорных систем, а также для последующего конфигурирования кристаллов. В настоящей главе дается классификация и краткая характеристика микропро- цессорных ядер, предлагаемых фирмой Xilinx. Здесь же приводится информация о системах проектирования, предназначенных для разработки встраиваемых микро- процессорных систем на основе ПЛИС фирма Xilinx. 1.1. Типы микропроцессорных ядер, предназначенных для разработки встраиваемых систем на основе ПЛИС фирмы Xilinx Микропроцессорные ядра, предназначенные для проектирования встраиваемых систем на основе ПЛИС фирмы Xilinx, по способу реализации подразделяются на две группы: конфигурируемые (Soft Processor) и аппаратные (Hard Processor). Первую группу составляют ядра, которые формируются на основе стандартных логических ресурсов кристаллов. Эти ядра могут применяться в ПЛИС различных серий. Данную группу образуют семейство 8-разрядных микропроцессорных ядер PicoBlaze™ и се- мейство 32-разрядных микропроцессорных ядер MicroBlaze™. Ко второй группе от- носятся микропроцессорные ядра, которые выполнены в виде соответствующих ин- тегрированных аппаратных блоков ПЛИС. Данная группа представлена семейством
6 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС микропроцессорных ядер PowerPC™ фирмы IBM®, которое присутствует в ПЛИС семейств Virtex™-II Pro и Virtex-4. Преимуществами конфигурируемых микропроцессорных ядер, предлагаемых фирмой Xilinx, по сравнению с аппаратными являются высокая гибкость, низкая се- бестоимость, относительно небольшой объем используемых ресурсов кристаллов, возможность применения в проектах, реализуемых на базе самых распространенных и доступных семейств ПЛИС. Таким образом, микропроцессорные ядра семейств PicoBlaze и MicroBlaze целесообразно использовать в качестве основы недорогих встраиваемых систем, требуемая производительность которых не должна превышать 70 и 166 D-MIPS соответственно. Главное преимущество аппаратных микропроцессорных ядер семейства PowerPC проявляется в возможности функционирования с высокими тактовыми частотами. Следствием этого является более высокая производительность по сравнению с кон- фигурируемыми микропроцессорными ядрами фирмы Xilinx. Недостатками аппарат- ных ядер являются ограниченное число кристаллов, в которых они применяются, и их высокая стоимость. Настоящее издание посвящено вопросам разработки встраи- ваемых микропроцессорных систем на основе конфигурируемых ядер фирмы Xilinx. Поэтому далее приводятся только краткие сведения об аппаратных микропроцессор- ных ядрах семейства PowerPC. 1.2. Краткая характеристика микропроцессорных ядер семейства PicoBiaze Элементы семейства PicoBlaze представляют собой конфигурируемые 8-разряд- ные микропроцессорные ядра с гарвардской архитектурой, которые предназначены для использования в проектах встраиваемых систем, реализуемых в ПЛИС фирмы Xilinx. Характерной особенностью гарвардской архитектуры является применение раздельных шин для передачи данных и команд В состав семейства PicoBlaze входят 4 варианта микропроцессорных ядер. Пер- вый, базовый, вариант ядра PicoBlaze предназначен для применения в ПЛИС се- мейств Spartan-II, Spartan-IIE, Virtex и Virtex-E. Второй вариант, отличающийся рас- ширенными возможностями и повышенной производительностью по сравнению с ба- зовым, разработан прежде всего для использования в кристаллах семейства Virtex-II, но также, при необходимости, может быть реализован в составе проектов, которые выполняются на основе ПЛИС серии Virtex-II Pro и Virtex-4. Третья модификация ядра, представляющая собой результат дальнейшего развития двух первых вариан- тов, предназначена в первую очередь для разработки встраиваемых микропроцессор- ных систем, реализуемых в ПЛИС семейства Spartan-З. Кроме того, эта версия мик- ропроцессорного ядра может использоваться также в составе проектов систем, вы- полняемых на основе ПЛИС семейств Virtex-II, Virtex-II Pro и Virtex-4. Наиболее компактная модификация микропроцессорного ядра PicoBlaze предназначена для применения в проектах, реализуемых на основе кристаллов семейства CoolRunner™- II, которое отличается от других серий ПЛИС CPLD, выпускаемых фирмой Xilinx, высоким быстродействием, низкой потребляемой мощностью и наличием микросхем с достаточно большим объемом логических ресурсов [2].
ГЛАВА 1 7 Все микропроцессорные ядра семейства PicoBlaze распространяются свободно (бесплатно) через Internet. Доступ к соответствующим ресурсам открывает Web- страница http://www.xilinx.com/ipcenter/processor_central/picoblaze/index.htm. Чтобы получить все необходимые материалы, относящиеся к конкретному ядру этого се- мейства, необходимо предварительно выполнить процедуру бесплатной регистрации. Каждый вариант ядра семейства PicoBlaze предоставляется пользователям в форме соответствующего архива, в котором содержится комплект файлов, вклю- чающий в себя необходимые модули VHDL-описаний, ассемблер, примеры, иллюст- рирующие использование компонентов ядра. Кроме того, в состав комплекта боль- шинства ядер входят дополнительные файлы описания универсального асинхронного приемопередатчика UART (Universal Asynchronous Receiver-Transmitter), которые могут быть использованы в составе разрабатываемых проектов встраиваемых микро- процессорных систем. Подробное описание архитектуры, основных характеристик и системы команд каждого варианта микропроцессорного ядра семейства PicoBlaze дается в последую- щих главах. Разработка встраиваемых микропроцессорных систем на основе ядер семейства PicoBlaze выполняется с помощью систем проектирования серии Xilinx ISE™ (Integrated Sowtware Environment). В качестве инструментов отладки разрабатывае- мых систем используются средства моделирования, входящие в состав соответст- вующей конфигурации САПР Xilinx ISE. 1.3. Краткая характеристика микропроцессорных ядер семейства MicroBlaze Семейство MicroBlaze включает в себя 32-разрядные микропроцессорные ядра с гарвардской архитектурой, предназначенные для реализации в ПЛИС семейств Spartan-II, Spartan-IIE, Spartan-3, Spartan-3E, Spartan-3L, Virtex-E, Virtex-II, Virtex-II Pro и Virtex-4. Генерация ядер этого семейства осуществляется с помощью комплекса средств автоматизированного проектирования встраиваемых микропроцессорных систем Xilinx Embedded Development Kit™ (EDK). Микропроцессорные ядра семейства MicroBlaze отличаются гибкой архитекту- рой, позволяющей оптимально использовать ресурсы ПЛИС соответствующих се- мейств, выбранных для их реализации. Ряд опций и архитектурных особенностей этих ядер, необходимость применения которых определяется разработчиком, позво- ляет провести дополнительную оптимизацию в соответствии с выбранным критери- ем. К числу таких опций относится, например, использование аппаратных умножите- лей, устройств циклического сдвига. В последних версиях микропроцессорных ядер семейства MicroBlaze в состав архитектуры включен прецизионный блок выполнения операций с плавающей запятой Floating-Point Unit, который соответствует специфи- кации стандарта IEEE-754. В табл. 1.1 в качестве примера приведены параметры, ха- рактеризующие максимальную производительность ядер семейства MicroBlaze, реа- лизуемых на основе ПЛИС различных семейств, которая достигается при использо- вании этих опций.
8 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Таблица 1.1. Максимальная производительность ядер семейства MicroBlaze, реализуемых на основе ПЛИС различных семейств Тип ПЛИС Число используемых таблиц преобразования Тактовая частота, МГц Производительность Virtex-4 (4VLX25-12) 1269 LUTs 180 166 DMIPS Virtex-II Pro (2VP20-7) 1225 LUTs 150 138 DMIPS Spartan-3 (3S1500-5) 1318 LUTs 100 92 DMIPS Когда требуется сократить объем используемых ресурсов кристалла и обеспе- чить максимально возможную тактовую частоту, микропроцессорные ядра семейства MicroBlaze могут использоваться в минимальной конфигурации. В табл. 1.2 приведе- ны значения максимальной тактовой частоты для ядер рассматриваемого семейства, реализуемых на основе ПЛИС различных семейств в минимальной конфигурации. Таблица 1.2. Предельные значения тактовой частоты микропроцессорных ядер семейства MicroBlaze, реализуемых на основе ПЛИС различных семейств Тип ПЛИС Число используемых таблиц преобразования Тактовая частота, МГц Virtex-4 (4VLX40-12) 988 LUTs 200 Virtex-II Pro (2VP20-7) 827 LUTs 170 Spartan-3 (3S1500-5) 983 LUTs 100 В составе архитектуры микропроцессорных ядер семейства MicroBlaze применя- ется ряд стандартных шинных интерфейсов, которые могут использоваться в различ- ных сочетаниях для подключения периферийных устройств и памяти, реализуемых как внутри, так и вне кристалла. Применение шины On-chip Peripheral Bus™ (ОРВ), соответствующей стандарту архитектуры IBM CoreConnect™, позволяет использо- вать в составе проектируемых систем широкий спектр IP-ядер периферийных компо- нентов, разработанных не только фирмой Xilinx, но и третьими производителями. Шинные интерфейсы Local Memory Bus™ (LMB) и Xilinx CacheLink™ (XCL) обес- печивают возможность высокоскоростного доступа к внутренней и внешней (по от- ношению к ПЛИС) памяти соответственно. Подробное описание архитектуры, пара- метров и системы команд микропроцессорных ядер семейства MicroBlaze приведено во второй части книги. Микропроцессорные системы, выполненные на основе ядер семейства MicroBlaze, способны поддерживать ряд операционных систем (ОС) реального времени (Real Time Operating Systems, RTOS). 1.4. Краткая характеристика микропроцессорных ядер семейства PowerPC Микропроцессорные ядра семейства PowerPC, применяемые в ПЛИС фирмы Xilinx, полностью соответствуют стандарту одноименных ядер фирмы IBM. Характерными особенностями микропроцессорных ядер семейства PowerPC 405, установленных в ПЛИС серий Virtex-II Pro и Virtex-4, являются: возможность работы в системах с тактовыми частотами до 400 МГц; высокая производительность, достигающая 600 DMIPS; • применение специальных аппаратных блоков для выполнения операций умноже- ния и деления;
ГЛАВА 1 9 блок регистров общего назначения, включающий 32 тридцатидвухразрядных ре- гистра; • наличие специального устройства управления памятью Memory Management Unit (MMU), обеспечивающего поддержку ОС реального времени; • применение усовершенствованного контроллера интерфейса встроенной блочной памяти ПЛИС On-Chip Memory Block RAM; • поддержка шинной архитектуры IBM CoreConnect™; возможность использования кеш-памяти данных и команд объемом 16 Кбит; наличие встроенных отладочных средств. Структурное представление архитектуры микропроцессорного блока PowerPC 405 показано на рис. 1.1. PLB Master Instruction Read Interface ОСМ Рис. 1.1. Обобщенная архитектура микропроцессорного ядра PowerPC 405 Основными элементами архитектуры являются: центральное процессорное устройство (ЦПУ); устройства управления памятью Memory Management Unit (MMU); кеш-память данных; кеш-память команд; отладочный модуль; таймер. Детальное описание ПЛИС, содержащих аппаратные микропроцессорные ядра семейства PowerPC, а также архитектуры, параметров и системы команд этих ядер можно найти в [6-10]. Разработка проектов встраиваемых микропроцессорных систем на основе аппа- ратных ядер семейства PowerPC выполняется средствами комплекса Xilinx EDK.
10 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 1.5. Краткий обзор основных средств проектирования, предоставляемых фирмой Xilinx Средства автоматизированного проектирования, предоставляемые фирмой Xilinx, можно разбить на две группы. Первую группу образуют основные системы разработки проектов и конфигурирования ПЛИС. Во вторую группу входят про- граммные средства специального назначения. Основными системами автоматизированного проектирования цифровых устройств на основе ПЛИС фирмы Xilinx являются САПР серии Xilinx ISE, которые заменили средства разработки предыдущего поколения Foundation Series™. Приме- нение программных средств серии Xilinx ISE позволило значительно сократить время разработки и повысить уровень эффективности результатов за счет применения усовершенствованных методов проектирования, алгоритмов синтеза, размещения и трассировки проекта в кристалле. Программные средства серии Xilinx ISE представляют собой систему сквозного проектирования, которая реализует полный цикл разработки цифровых устройств и систем на основе ПЛИС, включающий этапы создания исходных описаний проекта, синтеза, моделирования, размещения и трассировки, а также программирования кри- сталла. Отличительными особенностями систем автоматизированного проектирования серии Xilinx ISE являются: поддержка различных методов описания проектируемых устройств (графиче- ских, в форме принципиальных схем или диаграмм состояний, и текстовых, с ис- пользованием языков описания аппаратуры HDL (Hardware Description Language); возможность использования проектов, подготовленных в других системах проек- тирования; наличие схемотехнического редактора, укомплектованного набором обширных библиотек; интеллектуальные средства создания HDL-описаний, формирующие шаблоны на основании информации, предоставляемой пользователем, для языков описания аппаратуры VHDL™, Verilog™ и ABEL™ HDL; • высокоэффективные встроенные средства синтеза HDL-проектов, поддержи- вающие языки VHDL, Verilog и ABEL HDL; интегрированный интерфейс для средств синтеза третьих фирм, обеспечиваю- щий возможность применения, например, пакетов Synplicity Synplify™/Pro и LeonardoSpectrum™, поддерживающих языки VHDL и Verilog; развитые средства верификации проекта, позволяющие сократить полное время разработки устройства за счет обнаружения возможных ошибок на более ранних стадиях проектирования и сокращения длительности и количества возможных итераций; автоматические средства трассировки проекта в кристаллы различных семейств ПЛИС фирмы Xilinx с учетом оптимизации проекта по различным параметрам; единые средства программирования кристаллов всех семейств ПЛИС фирмы Xilinx, выполненных по различной технологии (CPLD и FPGA), и конфигураци- онных ППЗУ, поддерживающие несколько типов загрузочных кабелей JTAG- интерфейса;
ГЛАВА 1 11 встроенный комплект вспомогательных программных средств, позволяющих по- высить эффективность процесса проектирования, включающий анализатор ста- тических временных характеристик Timing Analyzer™, интерактивный графиче- ский редактор размещения Floorplanner™, модуль оценки потребляемой мощно- сти XPower™, мастер подготовки описаний блоков синхронизации, выполняемых на основе DCM, Architecture Wizard™, интерактивный графиче- ский редактор топологических ограничений РАСЕ™ (Pinout and Area Constraints Editor); доступный для разработчика пользовательский интерфейс и наличие в каждом модуле пакета справочной системы, сокращающие время освоения САПР; наличие интегрированного с пакетом САПР набора инструментов и утилит дру- гих фирм, предоставляющих дополнительные удобства в процессе проектирова- ния, включающего утилиту генерации тестовых сигналов HDL Bencher™, про- грамму моделирования ModelSim ХЕ III Starter™ и редактор диаграмм состояний StateCAD™. Средства проектирования серии Xilinx ISE выпускаются в трех конфигурациях: ISE Foundation™, ISE BaseX™ и ISE WebPACK™. Основное отличие между этими конфигурациями заключается в количестве поддерживаемых кристаллов и наборе дополнительных инструментов проектирования. Программные средства ISE Foundation представляют собой наиболее полную систему сквозного проектирования, которая поддерживает весь спектр ПЛИС, вы- пускаемых фирмой Xilinx. Экономичная конфигурация средств проектирования ISE BaseX имеет более низ- кую стоимость по сравнению с ISE Foundation, но поддерживает не все типы ПЛИС. Пакет ISE BaseX позволяет выполнять проекты на основе всех кристаллов семейств CPLD и ПЛИС серий FPGA с логической емкостью не более 600 тыс. системных вен- тилей. Кроме того, модуль программирования iMPACT™, входящий в состав пакета, может применяться для конфигурирования практически всех кристаллов, выпускае- мых фирмой Xilinx. Для создания конфигурационной последовательности при этом используются другие средства проектирования, предоставляемые фирмой Xilinx. Свободно распространяемая (бесплатная) модификация САПР ISE WebPACK поддерживает все кристаллы семейств CPLD и ПЛИС серий FPGA с логической ем- костью не более 300 тыс. системных вентилей. Кроме того, одно из главных отличий пакета ISE WebPACK от конфигурации ISE BaseX состоит в отсутствии генератора логических ядер CORE Generator и топологического редактора FPGA Editor. Все конфигурации средств проектирования серии Xilinx ISE имеют одинаковую структуру и пользовательский интерфейс. Поэтому переход от одной конфигурации САПР к другой, например от свободно распространяемой системы проектирования ISE WebPACK к полному пакету ISE Foundation, требует минимальных временных затрат. Методика проектирования цифровых устройств в САПР ISE WebPACK дос- таточно подробно отражена в [1]. К моменту подготовки данного материала последней версией средств проектиро- вания серии Xilinx ISE, доступной для разработчиков, являлась версия 7. И. Инфор- мация о семействах и типах ПЛИС, поддерживаемых различными конфигурациями систем проектирования серии Xilinx ISE, приведена в табл. 1.3.
12 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Таблица 1.3. Семейства и типы ПЛИС, поддерживаемые различными конфигурациями систем проектирования серии Xilinx ISE Семейство ПЛИС ISEWebPACK ISE BaseX ISE Foundation Virtex XCV50 -XCV600 Bee Virtex-E XCV50E-XCV300E XCV50E -XCV600E Bee Virtex-II XC2V40 - XC2V250 XC2V40-XC 2V500 Bee Virtex-II Pro XC2VP2 XC2VP2, XC2VP4, XC2VP7 Bee Virtex-4 XC4VLX15, XC4VLX25 LX:XC4VLX15, XC4VLX25; SX: XC4VSX25, FX: XC4VFX12 Bee Spartanll Bee Bee Bee SpartanllE XC2S50E - XC2S300E Bee Bee Spartan-3 XC3S50-XC3S1500 XC3S50-XC3S1500 Bee Spartan-3E XC3S100E-XC3S500E Bee Bee Spartan-3L XC3S1000L, XC3S1500L XC3S1000L, XC3S1500L Bee CoolRunnerXPLA3 Bee Bee Bee CoolRunner-ll Bee Bee Bee CoolRunner-IIA Bee Bee Bee XC9500 Bee Bee Bee XC9500 XL Bee Bee Bee XC9500 XV Bee Bee Bee Функциональные возможности всех конфигураций САПР серии Xilinx ISE вер- сии 7.1 i отражает табл. 1.4. Таблица 1.4. Функциональные возможности различных конфигураций САПР серии Xilinx ISE версии 7.1 i Возможности САПР ISE WebPACK ISE BaseX ISE Foundation Схемотехнический редактор + + + Редактор HDL-кода + + + Редактор диаграмм состояний State Diagram Editor + для MS Windows + для MS Windows + для MS Windows Генератор параметризированных модулей CORE Generator System - + + Графический редактор топологических ог- раничений РАСЕ (Pinout and Area Constraint Editor) + + + Мастер формирования описаний блоков синхронизации Architecture Wizard + + + Использование генератора системных IP- ядер Xilinx System Generator - + + Использование EDK для разработки встраиваемых микропроцессорных систем • + + Средства синтеза Xilinx Synthesis Technol- ogy (XST) + + + Интегрированный интерфейс для средств синтеза Synplicity Synplify/Pro + + + Интегрированный интерфейс для средств синтеза Leonardo Spectrum + + + EDIF интерфейс для Synopsys DC-FPGA Compiler + + + Средства синтеза ABEL Для CPLD MS Windows Для CPLD MS Windows Для CPLD MS Windows
ГЛАВА 1 13 Возможности САПР ISEWebPACK ISE BaseX ISE Foundation Интерактивный графический редактор раз- мещения Floorplanner + + + Редактор ограничений Constraints Editor + + + Средства программирования IMPACT, System АСЕ Configuration Manager, CableServer + + + Формирование моделей IBIS, STAMP, HSPICE и LMG SmartModels + + + Генератор тестовых сигналов HDL Bencher + для MS Windows + для MS Windows +для MS Windows Программа HDL-моделирования ModelSim XE III Starter + + + Анализатор статических временных харак- теристик Static Timing Analyzer + + + Поддержка средств ChipScope Pro + + + Топологический редактор FPGA Editor - + + Программа анализа потребляемой мощно- сти XPower + + + Модульное проектирование + + + Программа визуализациии топологии CPLD ChipViewer + + + Возможность использования средств моде- лирования ISE Simulator - - + Ограниченная версия средств моделирова- ния ISE Simulator Lite - + + Поддерживаемые платформы/ ОС PC (MS Windows 2000/MS Windows XP), Red Hat Enter- prise Linux 3 PC (MS Windows 2000/ MSWindows XP), Red Hat Enter- prise Linux 3 PC (MS Windows 2000/ MS WindowsXP), Sun Solaris, Red Hat Enterprise Linux 3 В качестве инструментов моделирования в САПР серии Xilinx ISE версии 7. li могут использоваться средства ISE Simulator™ или система ModelSim™, которая яв- ляется самостоятельным программным продуктом, выпускаемым корпорацией Model Technology® (одним из подразделений компании Mentor Graphics®). Полнофункциональная версия системы HDL-моделирования ISE Simulator может применяться только совместно со средствами проектирования ISE Foundation. При этом следует обратить внимание на то, что эта версия системы моделирования не входит в комплект ISE Foundation и поставляется отдельно. В состав средств разра- ботки проектов и программирования ПЛИС ISE Foundation и ISE BaseX включена только версия системы моделирования с ограниченными возможностями ISE Simulator Lite. В настоящее время ModelSim является одной из самых распространенных систем HDL-моделирования. Это обусловлено целым рядом уникальных характеристик это- го пакета. Пакет программных средств ModelSim предназначен для моделирования цифровых систем, которые представлены в виде HDL-описаний, выполненных с ис- пользованием языков высокого уровня VHDL и Verilog. Система моделирования ModelSim выпускается в двух основных редакциях: Special Edition (SE), функционирующей под управлением ОС UNIX™, Linux™, Windows™ 98, Windows ME, Windows 2000, Windows NT, Windows XP и Personal
14 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Edition (РЕ), предназначенной только для ОС семейства Windows. Кроме того, име- ются специализированные редакции, предназначенные для интеграции с пакетами САПР третьих фирм. Примером специализированной редакции является Modelsim Xilinx Edition (ХЕ), которая ориентирована на интеграцию с программным обеспече- нием фирмы Xilinx. Все конфигурации САПР серии Xilinx ISE комплектуются сво- бодно распространяемой версией ModelSim ХЕ III Starter. Эта версия имеет одно су- щественное ограничение - исходный текст описания не должен превышать фиксиро- ванное число исполняемых выражений. При несоблюдении этого условия программа моделирования сохраняет работоспособность, но функционирует с пониженной про- изводительностью. Версия средств моделирования - ModelSim Xilinx Edition, имею- щая ограничение 40 тыс. исполняемых выражений (примерно проект на 1 млн сис- темных вентилей), приобретается отдельно и устанавливается в режиме функциони- рования под управлением САПР серии Xilinx ISE. К группе средств проектирования специального назначения относятся: комплекс средств проектирования встраиваемых микропроцессорных систем Xilinx EDK, позволяющий выполнять совместное проектирование аппаратной части и программного обеспечения; программный комплекс внутрикристальных отладочных средств ChipScope Pro™ Software, включающий в себя, в частности, ядра логического анализатора, анализатора состояния шин; инструмент разработки устройств цифровой обработки сигналов System Generator™. Все перечисленные программные средства функционируют только в комплексе с соответствующей конфигурацией и версией систем проектирования серии Xilinx ISE. В настоящем издании будут подробно рассмотрены вопросы применения САПР серии Xilinx ISE и пакета Xilinx EDK в процессе разработки встраиваемых микро- процессорных систем, выполняемых на основе конфигурируемых ядер семейств PicoBlaze и MicroBlaze. Для практического освоения методов проектирования встраиваемых микропроцессорных систем, реализуемых на основе ПЛИС фирмы Xilinx, можно воспользоваться бесплатными 60-дневными версиями пакетов САПР Xilinx EDK и ISE Foundation. Чтобы получить данные версии указанных пакетов, следует обращаться к официальному дистрибьютору фирмы Xilinx в России, Белару- си и Украине, которым является центр поддержки и продаж InlineGROUP (http://www.plis.ru/).
2. МИКРОПРОЦЕССОРНОЕ ЯДРО PICOBLAZE, ПРЕДНАЗНАЧЕННОЕ ДЛЯ РАЗРАБОТКИ ВСТРАИВАЕМЫХ СИСТЕМ НА ОСНОВЕ ПЛИС ФИРМЫ XILINX СЕМЕЙСТВ SPARTAN-II, SPARTAN-IIE, VIRTEX, VIRTEX-E Настоящая глава знакомит с основными характеристиками и архитектурой мик- ропроцессорных ядер семейства PicoBlaze. Несмотря на то что приводимая здесь ин- формация относится в первую очередь к базовому варианту микропроцессорного яд- ра, предназначенному для применения в составе проектов, которые реализуются на базе ПЛИС серий Spartan-II, Spartan-IIE, Virtex, Virtex-E, большая часть ее справед- лива и для остальных представителей семейства PicoBlaze. Поэтому при рассмотре- нии других модификаций микропроцессорного ядра PicoBlaze в последующих главах основное внимание уделяется только их отличиям по сравнению с базовым вариантом. 2.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейства Spartan-II, Spartan-IIE, Virtex, Virtex-E) Отличительными особенностями микропроцессорного ядра PicoBlaze, предна- значенного для применения в ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, являются: гибкая архитектура с раздельными шинами данных и команд; разрядность шины данных - 8 бит; разрядность шины адреса - 8 бит; разрядность шины команд - 16 бит; 8-разрядное арифметическо-логическое устройство (АЛУ), реализующее логиче- ские функции, операции сложения, вычитания и сдвига; поддержка 49 команд; постоянное время выполнения всех команд - два машинных цикла; 16 регистров общего назначения; 15-уровневый стек; возможность поддержки до 256 входных и выходных портов; встроенное ППЗУ микропрограмм, выполненное на основе блочной памяти ПЛИС Block SelectRAM, объем которого составляет 256 х 16 разрядов; поддержка прямого, косвенного и непосредственного режимов адресации; реализация в виде модулей исходного описания на языке VHDL с учетом опти- мального размещения и трассировки в кристалле соответствующего семейства; минимальный объем ресурсов кристалла, используемых для реализации микро- процессорного ядра, позволяет без труда разместить в кристалле другие функ- циональные модули проектируемой системы, включая интерфейсы ввода/вывода (в ПЛИС семейства Spartan-IIE ядро PicoBlaze занимает всего лишь 76 секций (slices), что составляет 9 % от полного объема логических ресурсов кристалла XC2S50E и 2,5 % от логической емкости ПЛИС XC2S300E); гибкий интерфейс микропроцессорного ядра, обеспечивающий оптимальное его сопряжение с периферийными модулями, которые реализуются на основе сво- бодных логических ресурсов кристалла;
16 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС достаточно высокая производительность, достигающая 40 MIPS (в зависимости от типа используемого кристалла); наличие ассемблера, формирующего необходимые файлы различного формата, который обеспечивает высокую скорость и наглядность процесса разработки программ; наличие входа сброса (инициализации), позволяющего перевести микропроцес- сор в начальное состояние; • полная совместимость компонентов ядра со всей линией средств разработки проектов и программирования ПЛИС серии Xilinx ISE (ISE WebPACK [1], ISE BaseX, ISE Foundation); возможность моделирования ядра в составе разрабатываемых проектов с помо- щью системы ModelSim ХЕ [1], которая включена в состав пакетов САПР серии Xilinx ISE в ограниченной конфигурации ModelSim ХЕ Starter. 2.2. Архитектура микропроцессорного ядра PicoBlaze (семейства Spartan-II, Spartan-IIE, Virtex, Virtex-E) Архитектура микропроцессорного ядра PicoBlaze основана на концепции раз- дельных шин данных и команд (гарвардская архитектура). Такая организация маги- стралей процессора позволяет добиться высокой скорости выполнения операций. Структурное представление архитектуры микропроцессорного ядра PicoBlaze, пред- назначенного для применения в кристаллах семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, показано на рис. 2.1. Основными элементами архитектуры микропроцессорного ядра PicoBlaze, реали- зуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, являются: 8-разрядное АЛУ; блок регистров общего назначения; регистр статуса (флагов); • регистр фиксации флагов при выполнении обработки прерываний; программный счетчик (счетчик команд); блок управления вводом/выводом; стек; схема управления прерываниями; блок управления выбором адреса следующей команды; - блок дешифровки команд; память программ. Блок АЛУ выполняет логические и арифметические операции над 8-разрядными операндами. В качестве операндов может использоваться содержимое любого из 16 регистров общего назначения, а также константы, указанные непосредственно в коде команды. Результат выполнения операции заносится в тот же регистр, который являлся источником первого операнда. Регистр статуса содержит значения флагов (признаков), формируемых блоком АЛУ при выполнении арифметических и логических операций. Этот регистр содер- жит два разряда. В первый разряд записывается состояние флага нулевого результата ZERO Flag, а во второй - значение флага переноса/заема CARRY Flag. Флаг нулевого результата ZERO Flag переключается в установленное состояние (состояние высоко- го логического уровня) в случае, если результатом арифметической или логической
ГЛАВА 2 17 операции является нуль. При получении других результатов этот флаг сбрасывается в состояние низкого логического уровня. Флаг переноса/заема CARRY Flag устанавли- вается в том случае, если в результате операции сложения из самого старшего разря- да происходит перенос или образуется заем при выполнении операции вычитания. Анализ состояния флагов, записанных в соответствующие разряды регистра статуса, производится при выполнении условных команд. Кроме того, регистр статуса при- нимает участие в процессе выполнения операций сдвига. Рис. 2.1. Архитектура микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-ll, Spartan-IIE, Virtex, Virtex-E Регистр фиксации флагов предназначен для сохранения текущих значений при- знаков результата операции АЛУ, записанных в регистр статуса, перед выполнением процедуры обслуживания прерывания. Блок регистров общего назначения содержит 16 восьмиразрядных регистров, обозначаемых по порядку sO-sF . Эти регистры предназначены для хранения данных, поступающих из входных портов ввода/вывода, операндов и результатов выполнения операций. Все регистры имеют одинаковый статус (полностью равноправны). Любой из них может использоваться в качестве аккумулятора. Схема управления прерываниями формирует комбинацию управляющих сигна- лов, необходимых для выполнения процедуры обработки прерываний. Микропроцес-
18 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС сорное ядро PicoBlaze изначально содержит единственную цепь сигнала прерывания. Для создания комплексной системы прерываний, поддерживающей комбинацию не- скольких сигналов, следует использовать дополнительную логику, которая реализу- ется на основе свободных ресурсов кристалла. Блок управления вводом/выводом предназначен для формирования адреса вход- ного или выходного порта PORT_ID[7:0], к которому производится обращение, а также сигналов WRITE STROBE и READ STROBE, указывающих тип выполняе- мой операции (записи или чтения в указанный порт). Адрес порта ввода/вывода мо- жет задаваться в программе в виде абсолютного значения или в форме ссылки на один из регистров общего назначения, содержимое которого определяет номер порта. Во время выполнения операции ввода INPUT данные из входного порта, номер кото- рого определяет комбинация значений сигналов в шине адреса порта PORT_ID[7:0], могут быть загружены в любой из 16 регистров общего назначения. Эта процедура сопровождается формированием импульсного сигнала READSTROBE. При осуще- ствлении операции вывода OUTPUT информация из любого регистра общего назна- чения может быть передана в выходной порт, номер которого указывает комбинация значений сигналов в шине адреса порта PORT_ID[7:()]. Выполнение операции выво- да сопровождается стробом записи WRITEJSTROBE. Память программ представляет собой запоминающее устройство, реализуемое в виде однопортового ОЗУ на основе блочной памяти кристалла Block SelectRAM, в котором хранится последовательность выполняемых команд. Блок дешифровки команд на основании данных, поступающих с выходов про- граммной памяти, формирует совокупность управляющих сигналов, необходимых для выполнения соответствующей операции, которые подаются на все блоки микро- процессорного ядра. Управление последовательностью выполнения команд в составе программы осуществляется с помощью программного счетчика. Сигналы на его выходах обра- зуют адрес выборки следующей команды. Эти сигналы по шине адресов команд пе- редаются на адресные входы программной памяти. Режим работы программного счетчика (счет или загрузка) определяется состоянием сигналов, формируемых в блоке управления выбором следующего адреса команды. В основном режиме, при отсутствии прерываний, команд переходов, вызовов и возврата из подпрограмм, со- держимое программного счетчика автоматически увеличивается на единицу при ис- полнении текущей операции. Таким образом реализуется последовательная выборка и выполнение команд программы. В процессе выполнения команд перехода в программный счетчик производится загрузка значения, соответствующего адресу, по которому осуществляется передача управления в программе. После исполнения команды перехода программный счетчик продолжает работу в инкрементном режиме, но уже начиная с нового значения, ко- торое было записано при ее выполнении. При вызове подпрограмм также осуществляется принудительное изменение со- держимого программного счетчика. В него загружается значение, которое соответст- вует начальному адресу выполняемой подпрограммы. Перед этим прежнее содержи- мое программного счетчика заносится в стек (в регистр, адрес которого определяется
ГЛАВА 2 19 текущим значением указателя стека). В процессе выполнения команд подпрограммы производится последовательное инкрементирование нового содержимого программ- ного счетчика. После завершения подпрограммы при выполнении команды возврата в основную программу из стека извлекается последнее записанное значение адреса, которое увеличивается на единицу и загружается в программный счетчик. Тем самым осуществляется переход к выполнению очередной команды, следующей после вызо- ва подпрограммы. Так как глубина стека составляет 15 уровней, то он может хранить одновременно до 15 адресов возврата. Поэтому в процессе исполнения подпрограмм допускаются вложенные вызовы других подпрограмм. При очередном вложенном вызове подпрограммы содержимое программного счетчика заносится в следующий регистр стека. Процесс выполнения каждой вложенной подпрограммы завершается «выталкиванием» из стека последнего записанного значения, которое, увеличиваясь на единицу, заносится в программный счетчик. Процедура обработки прерывания выполняется подобно вызову подпрограммы, но имеются несколько отличий. Одно из них заключается в том, что при наличии ак- тивного уровня сигнала на входе прерывания в программный счетчик загружается адрес вектора соответствующей процедуры обработки. При этом, кроме записи в стек адреса текущей исполняемой команды, производится сохранение состояния призна- ков результата операции АЛУ (содержимого регистра статуса) на момент прерыва- ния в регистре фиксации флагов. После завершения процесса обработки прерывания происходит автоматическое восстановление значений флагов в регистре статуса. В начальный момент времени функционирования микропроцессорного ядра, а также при подаче внешнего сигнала сброса выходы программист > счетчика уста- навливаются в нулевое состояние (низкого логического уровня). Таким образом управление передается первой команде программы. 2.3. Структура проекта микропроцессорного ядра PicoBlaze (семейства Spartan-II, Spartan-IIE, Virtex, Virtex-E) Обобщенная структура микропроцессорного ядра PicoBlaze, предназначенного для применения в составе проектов, выполняемых на основе ПЛИС семейств Spartan- II, Spartan-IIE, Virtex, Virtex-E, показана на рис. 2.2. Она включает в себя програм- мную память и модуль центрального процессорного устройства (ЦПУ) (испол- нительного устройства) PicoBlaze. В качестве ППЗУ микропрограмм используется один модуль блочной памяти Block SelectRAM кристаллов указанных семейств, объ- ем которого составляет 4 Кбит. Этот модуль блочной памяти конфигурируется как однопортовое ОЗУ с организацией 256 х 16 разрядов. Микропроцессорное ядро PicoBlaze предоставляется пользователям в виде архива, в котором содержится комплект файлов, включающий в себя необходи- мые модули VHDL-описаний, ассемблер, тестовые примеры, иллюстрирующие использование компонентов ядра. Кроме того, в состав комплекта входят допол- нительные файлы, которые могут быть использованы для включения в состав проекта универсального асинхронного приемопередатчика UART (Universal Asynchronous Receiver-Transmitter).
20 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Модуль ЦПУ (исполнительный модуль) PicoBlaze о Входные данные —— Прерывание Сброс Память программ Тактовый сигнал -i -э IN_PORT[7:0] OUT_PORT[7:0] INTERRUPT PORTJD[7:0] RESET READ.STROBE > CLK WR1TE.STR0BE INSTRUCTIONS 5:0] ADDRESS[7:0] g —* Выходные данные 8 . Адрес порта ввода/вывода > Строб чтения > Строб записи INSTRUCTION[16:0] ADDRESS[7:0] >CLK 16, Шина команд Шина адреса 8/ Рис. 2.2. Обобщенная структура микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E Каждый элемент обобщенной структуры микропроцессорного ядра PicoBlaze (рис. 2.2) представлен в форме соответствующего компонента, выполненного в виде макроса с относительным размещением. Функции исполнительного модуля реализу- ет компонент KCPSM (Constant (k) Coded Programmable State Machine). Описание этого модуля на языке VHDL содержится в файле kcpsm.vhd. Для применения ком- понента KCPSM в качестве элемента проектируемой системы необходимо прежде всего включить в состав ее описания выражения декларации, которые выглядят сле- дующим образом: component kcpsm Port ( address: out std_logic_vector(7 downto 0); instruction: in stdjogic_vector(15 downto 0); portJd : out stdjogic_vector(7 downto 0); write_strobe: out stdjogic; out_port: out std_logic_vector(7 downto 0); read_strobe: out stdjogic; in_port: in stdjogic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic ); end component; В приведенных выражениях декларации используется следующая система обо- значений интерфейсных цепей компонента. Идентификаторы elk, reset и interrupt, описывают соответственно входы тактового сигнала, сброса и прерывания, a read_strobe и writestrobe соответствуют выходам сигналов, сопровождающих опе- рации чтения и записи данных в порты ввода/вывода. Векторы in_port и out_port представляют соответственно входную и выходную шины данных. Вектор address соответствует выходной шине адресов команд, instruction - входной шине команд, port_id соответствует выходной шине адресов портов ввода/вывода. Для создания одного экземпляра компонента kcpsm, представляющего модуль ЦПУ, необходимо в состав структурного описания архитектуры проектируемой сис- темы включить следующий оператор:
ГЛАВА 2 21 inst_name_processor: kcpsm port map( address => address_signal, instruction => instruction_signal, portjd => port_id_signal, write-Strobe => writG-Strobe„signal, ouLport => out-port-Signal, read-Strobe => read_strobe_signal, in_port => in_port_signal, interrupt => interrupt_signal, reset => reset-signal, elk => clk_signal ); Вместо идентификатора inst_name-processor следует задать метку, определяю- щую позиционное обозначение экземпляра компонента. Кроме того, названия сигна- лов, указанные в операторе, должны соответствовать именам сигналов, которые ис- пользуются в описании проектируемого устройства. Таким же способом, в виде компонента с названием prog_rom, описывается мо- дуль программной памяти в составе разрабатываемой системы. Вначале выполняется декларация этого компонента, которая выглядит следующим образом: component prog_rom Port ( address: in stdjogic_vector(7 downto 0); instruction : out std_logic_vector(15 downto 0); elk: in stdjogic end component; В описании интерфейса компонента prog_rom идентификатор elk соответствует входу тактового сигнала, address - входной шине адресов команд, instruction - вы- ходной шине команд. Создание экземпляра компонента, представляющего про- граммную память, выполняется следующим оператором: inst_name_program: prog_rom port map( address => address_signal, instruction => instruction_signal, elk => cik_signal ); При практическом использовании этого компонента следует учитывать, что его название должно совпадать с идентификатором файла, имеющего расширение PSM, в котором записан исходный текст микропроцессорной программы. Помимо отдельных компонентов, рассмотренных выше, пользователю также доступно VHDL-описание объекта EMBEDDEDKCPSM, который представляет встраиваемое микропроцессорное ядро PicoBlaze в целом, в виде подсистемы, со- стоящей из модуля ЦПУ и подключенной к нему программной памяти. Описание этого объекта является наглядной иллюстрацией практического применения компо- нентов микропроцессорного ядра, и поэтому далее полностью приводится его текст.
22 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - EMBEDDED_KCPSM.VHD -- Standard IEEE libraries library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity embedded_kcpsm is Port ( portjd: out std_logic_vector(7 downto 0); write_strobe: out stdjogic; read_strobe: out stdjogic; out_port: out std_logic_vector(7 downto 0); in_port: in std_logic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic); end embedded_kcpsm; -- Start of test achitecture architecture connectivity of embedded_kcpsm is -- declaration of KCPSM component kepsm Port ( address: out std_logic_vector(7 downto 0); instruction: in std_logic_vector(15 downto 0); portjd: out std_logic_vector(7 downto 0); write_strobe: out stdjogic; out_port: out std_logic_vector(7 downto 0); read_strobe: out stdjogic; in_port: in std_logic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic); end component: -- declaration of program ROM component prog_rom Port ( address: in std_logic_vector(7 downto 0); instruction : out std_logic_vector(15 downto 0);
ГЛАВА 2 23 elk: in stdjogic); end component; -- Signals used to connect KCPSM to program ROM signal address: stdjogic_vector(7 downto 0); signal instruction : stdjogic_vector(15 downto 0); ~ Start of test circuit description begin processor: kepsm port map( address => address, instruction => instruction, portjd => portjd, write_strobe => write_st robe, ouLport -> ouLport, read_strobe => read_strobe, in_port => in_port, interrupt => interrupt, reset => reset, elk => elk); program: prog_rom port map( address => address, instruction => instruction, elk => elk); end connectivity; - END OF FILE EMBEDDEDJ<CPSM.VHD Приведенное описание объекта EMBEDDED_KCPSM имеет стандартную струк- туру исходного модуля, выполненного с применением языка VHDL [19, 20]. В начале описания указаны ссылки на используемые стандартные библиотеки и пакеты. Затем следуют операторы, описывающие интерфейс объекта. Далее приводится структур- ное описание архитектуры объекта. Объект EMBEDDED KCPSM, описывающий микропроцессорное ядро PicoBlaze, может применяться как автономно, так и в виде модуля, входящего в состав разраба- тываемой системы. В последнем случае это встраиваемое ядро используется в форме одноименного компонента embedded_kcpsm. Для декларации компонента embedded _kcpsm в составе VHDL-описания проектируемой системы используется следующая конструкция: component embeddedJccpsm Port ( portjd: out stdjogic_vector(7 downto 0); write_strobe: out stdjogic;
24 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС read_strobe: out stdjogtc; out_port: out std_logic_vector(7 downto 0); in_port: in std_logic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic ); end embeddedJccpsm; В описании интерфейса компонента embeddedJkcpsm используется та же система обозначений, что и для компонента kepsm. Конкретный экземпляр компонента, пред- ставляющего микропроцессорное ядро PicoBlaze, создается в структурном описании проектируемой системы с помощью оператора, текст которого представлен ниже. При практическом использовании этого оператора следует заменить метку inst_name_embedded-processor идентификатором, который, как правило, соответству- ет позиционному обозначению экземпляра компонента в составе описания проекта. При описании внешних связей компонента embeddedJkopsm должны быть указаны названия соответствующих сигналов, используемых в проекте. inst_name_embedded_processor: embedded_kcpsm port map( port Jd => portJd_signal, write_strobe => write_strobe_signal, read_strobe => read_strobe_signal, ouLport => out_port_signal, in_port => in_port_signal, interrupt => interrupt- signal, reset => reseLsignal, elk => clk_signal ); Полный текст VHDL-описания исполнительного устройства kepsm приведен в прил. 1. Наличие исходного описания компонентов микропроцессорного ядра Pi- coBlaze открывает широкие возможности для его модификации в соответствии с тре- бованиями разработчика. Проанализировав текст исходных VHDL-описаний, пользо- ватель может достаточно легко добавить поддержку дополнительных команд. 2.4. Общая характеристика системы команд, поддерживаемых микропроцессорным ядром PicoBlaze (семейства Spartan-II, Spartan-IIE, Virtex, Virtex-E) Совокупность команд, поддерживаемых микропроцессорным ядром PicoBlaze, можно разбить по функциональному признаку на 6 групп. К первой группе относятся команды, управляющие последовательностью выполнения операций в программе, и команды обработки подпрограмм. В эту группу входят команды переходов JUMP, вызова подпрограмм CALL и возврата из подпрограмм RETURN. Каждая из перечис- ленных команд представлена как в безусловной форме, так и в условном формате (т. е. может исполняться только при выполнении определенного условия). Вторую группу образуют логические команды. Эти команды выполняют пораз- рядные операции «Логическое И» (поразрядное умножение) - AND, «Логическое ИЛИ» (поразрядное сложение) - OR, «Исключающее ИЛИ» - XOR. В качестве one-
ГЛАВА 2 25 рандов могут выступать содержимое любого регистра общего назначения и констан- та, указанная непосредственно в тексте инструкции, а также содержимое двух реги- стров блока РОН. К этой же группе относится команда загрузки значения в регистр общего назначения LOAD. С помощью этой команды в выбранный регистр может за- писываться константа, указанная в тексте команды, или содержимое другого регист- ра блока РОН. В третью группу входят арифметические команды. Команды ADD и ADDCY предназначены для получения суммы двух операндов без учета и с учетом входного переноса соответственно. Операция вычитания также может выполняться без учета и с учетом заема с помощью команд SUB и SUBCY соответственно. Значение одного из операндов, участвующих в арифметических операциях, содержится в регистре обще- го назначения, номер которого указан в виде параметра команды. В качестве второго операнда может употребляться значение, заданное непосредственно в коде команды, или содержимое другого регистра блока РОН. Четвертую группу составляют команды сдвига. Они позволяют реализовать опе- рации логического (арифметического) или циклического сдвига данных, записанных в регистре общего назначения, номер которого указан в тексте команды. В процессе выполнения одной команды сдвиг производится на один разряд. Сдвиг может осуще- ствляться как влево (в сторону младшего разряда), так и вправо (в сторону старшего разряда). Операции циклического сдвига могут выполняться с участием разряда пе- реноса регистра статуса. Пятая группа включает в себя команды ввода/вывода. Эти команды предназначе- ны для организации обмена данными между регистрами, входящими в блок РОН, и портами ввода/вывода. Выполнение операций чтения данных из входного порта в регистр общего назначения (INPUT) и записи информации из регистра в выходной порт (OUTPUT) рассмотрено выше, в разделе описания архитектуры микропроцес- сорного ядра PicoBlaze. Последняя группа объединяет команды, используемые для обслуживания преры- ваний. В нее входят команды разрешения ENABLE INTERRUPT и запрета прерыва- ний DISABLE INTERRUPT. Более подробно синтаксис и выполнение команд микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, будут рассмотрены в гл. 3.
3. СИСТЕМА КОМАНД МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, РЕАЛИЗУЕМОГО НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-II, SPARTAN-IIE, VIRTEX, VIRTEX-E Команды, рассматриваемые в данной главе, поддерживаются всеми вариантами микропроцессорных ядер семейства PicoBlaze. Процесс их исполнения инвариантен по отношению к версии микропроцессорного ядра. Различия в формате инструкций будут указаны в соответствующих главах при описании характеристик и архитекту- ры каждой конкретной модификации ядра PicoBlaze. 3.1. Команды управления последовательностью выполнения операций в программе Команды переходов JUMP позволяют осуществить передачу управления в про- грамме по указанному адресу. Эти команды обычно используются для организации ветвления и формирования циклов в ходе выполнения алгоритма программы. Мик- ропроцессорное ядро PicoBlaze поддерживает 5 модификаций инструкции переходов JUMP: Qjspy безусловную и 4 условных. Форматы различных вариантов команд пере- ходов JUMP представлены в табл. 3.1. Единственным параметром команд переходов является 1-байтовая константа, значение которой определяет адрес перехода. При мнемонической форме записи команд этот параметр задается в виде двух шестнадца- теричных символов. Таблица 3.1. Форматы команд переходов Поле кода операции Поле адреса перехода Мнемоника Выполняемая операция 1 0 0 0 X X 0 1 А А А А А А А А JUMPaa Безусловный переходII 1 0 0 1 0 0 0 1 А: А А А < А А А || JUMP Z,aa Переход при условии, что флаг ’ lag 'на^рдитря^ .в уйайрв- ленном состоянии | 1 0 0 1 0 1 0 1 А А А А А А || || JUMP NZ,aa Переход при условии, что флаг. • ZERO Flag находится в сброшен- ном состоянии 1 0 0 1 1 0 0 1 А А А А А А А А JUMP C,aa Переход при услози/, что срлаг ' CARRY Flag находится в установ- ленном состоянии 1 0 0 1 1 1 0 1 А: А А< А = А f| А || JUMP NC.aa Переход при условии, что флаг CABBY. Flag находится в сброшен- ном состоянии 15 14 13 12 11 10 9 8 7 6 ii 4: || и II III Номер разряда микрокоманды Процесс выполнения команд переходов иллюстрирует рис. 3.1. При исполнении операции безусловной передачи управления JUMP аа в программный счетчик запи- сывается значение адреса перехода аа. При условных переходах загрузка в про- граммный счетчик нового адреса, указанного в команде, производится только при выполнении соответствующего условия. Если заданное условие не выполнено, то программный счетчик продолжает работу в инкрементном режиме, т. е. его прежнее содержимое увеличивается на единицу. В процессе реализации команд безусловного и условных переходов состояние флагов регистра статуса не изменяется.
ГЛАВА 3 27 Старое значение Условие программного счетчика не выполнено Новое значение программного счетчика JUMP Z,aa JUMP NZ,aa JUMP C,aa JUMP NC,aa , --------- Адрес перехода |JUMPaa| Условие выполнено или безусловный переход Рис. 3.1. Выполнение команд безусловного и условных переходов Команда JUMP Z,aa инициирует переход к выполнению инструкции, располо- женной по указанному адресу, при условии, что флаг нулевого результата ZERO Flag находится в состоянии логической единицы. При исполнении команды JUMP NZ,aa управление передается инструкции с указанным адресом только в случае, если флаг нулевого результата ZERO Flag установлен в состояние логического нуля. Команда JUMP C,aa загружает новое значение адреса в программный счетчик при условии, что состояние флага переноса/заема CARRY Flag соответствует значению логиче- ской единицы. С помощью команды JUMP NC,aa осуществляется переход к выпол- нению инструкции с указанным адресом, если флаг переноса/заема CARRY Flag на- ходится в сброшенном состоянии (логического нуля). Команды вызова подпрограмм CALL позволяют передать управление по адресу, который соответствует первой инструкции вызываемой процедуры. Обращение к подпрограмме может происходить как в безусловном порядке, так и при выполнении заданного условия. Форматы безусловного и условных вариантов команд вызова подпрограмм CALL приведены в табл. 3.2. Адрес вызываемой процедуры задается в том же виде, в котором задается и адрес в командах перехода JUMP, Команды безус- ловного и условных обращений к подпрограммам не влияют на состояние флагов ре- гистра статуса. Таблица 3.2. Форматы команд вызова подпрограмм Лоле кода операции под ipo гран Мнемоника Выполняемая операция 1 0 0 0 X X 1 1 А< ж А/ is: А ЙУ At At CALL аа Безусловный вызов подпрограммы 1 0 0 1 0 0 1 1 А/ А/ II II А А‘ А CALLZ.aa Вызов подпрограммы при условии, Flag находится в ШЙШЙННЖсжоянии 1 0 0 1 0 1 1 1 1/ i й is А| А CALL NZ,aa Вызов подпрограммы при условии, что флаг ZERO Flag находится в сброшенном состоянии 1 0 0 1 1 0 1 1 А .11 А А А А А А CALLC.aa Вызов подпрограммы при условии, находится в установленном состояв и и 1 0 0 1 1 1 1 1 А| AS Й; й чи W CALL NC.aa Вызов подпрограммы при условии, :CARRY Flag находится в сброшенном состоянии 15 14 13 12 11 10 9 8 IS Й!! г 2 1 0 Номер разряда микрокоманды
28 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС На рис. 3.2 в наглядной форме отображена последовательность действий, кото- рые производятся при различных вызовах подпрограмм. Выполнение команды без- условного обращения к подпрограмме CALL aa начинается с записи в стек текущего содержимого программного счетчика (т. е. адреса исполняемой инструкции вызова процедуры). Сохраненное значение используется впоследствии при завершении под- программы и возврате в основную программу или подпрограмму, из которых вызы- валась текущая процедура. Затем в программный счетчик заносится значение адреса, указанное в команде. Это значение определяет начальный адрес блока памяти, в котором хранится вызываемая подпрограмма. Стек Условие не выполнено Старое значение программного счетчика CALLZ.aa CALL NZ,aa CALL C,aa CALL NC,aa Адрес подпрограммы Условие выполнено или безусловный вызов подпрограммы Рис. 3.2. Выполнение команд безусловного и условных вызовов подпрограмм Микропроцессорным ядром PicoBlaze поддерживается 4 варианта команд услов- ного обращения к подпрограмме. Исполнение команды условного вызова подпро- граммы начинается с проверки выполнения соответствующего условия. Если это ус- ловие выполнено, то далее производится последовательность операций, рассмотрен- ная выше для команды безусловного обращения к подпрограмме (рис. 3.2). В случае невыполнения заданного условия содержимое программного счетчика увеличивается на единицу, указывая тем самым адрес следующей команды основной программы. Команда CALL Z,aa передает управление подпрограмме, расположенной по указан- ному адресу, если флаг нулевого результата ZERO Flag установлен в состояние логи- ческой единицы. С помощью команды CALL NZ,aa осуществляется вызов подпро- граммы при условии, что флаг нулевого результата ZERO Flag находится в состоянии логического нуля. Команда CALL C,aa загружает в программный счетчик указанный адрес подпрограммы, если состояние флага переноса/заема CARRY Flag соответст- вует значению логической единицы. При исполнении команды CALL NC,aa обраще- ние к подпрограмме производится только при условии, что флаг переноса/заема CARRY Flag находится в сброшенном состоянии. Команды возврата из подпрограммы RETURN предназначены для передачи управления основной программе или подпрограмме, из которых вызывалась текущая процедура. Эта операция может осуществляться как в безусловной форме, так и в за- висимости от выполнения заданного условия. Табл. 3.3 представляет форматы безусловного и условных вариантов команд воз- врата из подпрограммы RETURN.
ГЛАВА 3 29 Таблица 3.3. Форматы команд безусловного и условных возвратов из подпрограммы Поле кода операции Поле адреса Мнемоника Выполняемая операция 1 0 0 0 X X 0 0 0 0 0 0 О' 0 0 0 RETURN Безусловный возврат из подпрограммы 1 0 0 1 0 0 0 0 о 0 0 0 0 0 0 0 RETURNZ Возврат из подпрограммы при ус- ловии, что флаг ZERO Flag нахо- дится в установленном состоянии 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 RETURN NZ Возврат из подпрограммы при ус- ловии, что флаг ZERO Flag нахо- дится в сброшенном состоянии 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 ; 0 RETURN C Возврат из подпрограммы при ус- ловии, что флаг CARRY Flag нахо- дится в установленном состоянии 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 RETURN NC Возврат из подпрограммы при ус- ловии, что флаг CARRY Flag нахо- дится в сброшенном состоянии 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Процесс выполнения команд возврата из подпрограмм в условной и безусловной форме показан на рис. 3.3. Безусловное завершение выполняемой подпрограммы и передача управления основной программе или подпрограмме, из которых производи- лось обращение к этой процедуре, осуществляется с помощью команды RETURN. При этом из стека извлекается последнее записанное значение, увеличивается на единицу и загружается в программный счетчик. Таким образом, в программный счетчик заносится адрес очередной команды основной программы (или подпрограм- мы при вложенном вызове процедуры), следующей после инструкции обращения к подпрограмме. Рис. 3.3. Выполнение команд безусловного и условного возвратов из подпрограммы При реализации команды условного возврата из подпрограммы прежде всего осуществляется контроль выполнения соответствующего условия. При получении положительного результата проверки далее выполняется та же последовательность действий, что и при безусловном возврате. Если условие не выполнено, то текущее содержимое программного счетчика увеличивается на единицу. Таким образом, но-
30 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС вое значение программного счетчика в этом случае соответствует адресу следующей команды текущей исполняемой подпрограммы. Команда RETURN Z возвращает управление вызывающей программе или под- программе в случае, если флаг нулевого результата ZERO Flag принимает значение логической единицы. С помощью команды RETURN NZ осуществляется возврат из подпрограммы при условии, что флаг нулевого результата ZERO Flag сброшен в со- стояние логического нуля. Команда RETURN С выполняет операцию возврата из подпрограммы, если состояние флага переноса/заема CARRY Flag соответствует зна- чению логической единицы. При исполнении команды RETURN NC управление пе- редается вызывающей программе или подпрограмме только при условии, что флаг переноса/заема CARRY Flag находится в сброшенном состоянии. При выполнении команд возврата из подпрограммы состояние флагов регистра статуса не изменяется. 3.2. Группа логических команд В командах, входящих в эту группу, используются два параметра, которые опре- деляют значения операндов. Первым операндом всегда является содержимое регист- ра общего назначения, номер которого N указан в тексте инструкции. В качестве но- мера регистра N может использоваться любое число в диапазоне от 0 до 15, которое при мнемонической записи команд задается в шестнадцатеричном формате (0 - F). В этот же регистр записывается результат выполненной операции. В качестве второ- го операнда используется либо константа, значение которой указывается непосредст- венно в коде команды, либо содержимое другого регистра общего назначения. При мнемонической форме записи команд значение константы задается в виде двух ше- стнадцатеричных символов. При выполнении поразрядных логических операций флаг переноса/заема CARRY Flag всегда сбрасывается в состояние логического нуля. Значение флага ZERO Flag определяется полученным результатом. Если все разряды результирую- щего слова принимают значение логического нуля, то флаг нулевого результата ZERO Flag устанавливается в состояние, соответствующее логической единице. В противном случае, если хотя бы в одном разряде результата присутствует единич- ное значение, флаг нулевого результата ZERO Flag переключается в сброшенное со- стояние. Форматы команд поразрядных операций «Логическое И» (поразрядное умноже- ние) AND представлены в табл. 3.4. Таблица 3.4. Форматы команд поразрядных операций «Логическое И» Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 1 П п п л К К К К К К К к AND sN, kk Поразрядное «Логическое И» содержимого регистра sN и константы kk Поле префикса ко- да операции Поле номера первого -i регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция 1 1 0 0 п п п п m m m m 0 0 0 1 AND sN.sM Поразрядное «Логическое И» содержимого регистров sN и sM 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 3 31 Команда AND sN,kk выполняет операцию «Логическое И» над соответствующи- ми разрядами содержимого регистра с номером N и константы кк. Для поразрядного умножения содержимого двух регистров общего назначения с номерами N и М пред- назначена команда AND sN,sM. Выполнение этих команд иллюстрирует рис. 3.4. Исходное содержимое регистра sN Константа, указанная в команде Регистр sN |AND sN,kk] I I I I I + I I .Ill CARRY ГТД Flag “i ZERO И Flag Результат^ L-----------1 Результат = О Исходное содержимое регистра sN Содержимое регистра sM Регистр sN |AND sN,sm] CARRY Flag ZERO pZTl Flag bi Результат^ 0^ L-----------1 Результат = 0 0 Рис. 3.4. Выполнение поразрядных операций «Логическое И» Операции поразрядного сложения двух операндов осуществляются с помощью инструкций OR, форматы которых определены в табл. 3.5. Таблица 3.5. Форматы команд поразрядных операций «Логическое ИЛИ» Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 0 п п - -п- п К К К К К К К К OR sN, kk Поразрядное «Логическое ИЛИ» содержимого регистра sN и константы kk Поле префик- са кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция 1 1 0 0 п п п п m m m m 0 0 1 0 ORsN.sM Поразрядное «Логическое ИЛИ» содержимого регистров sN nsM 15 14 13 12 11 10 9 ву 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда OR sN,kk выполняет поразрядную операцию «Логическое ИЛИ» содер- жимого регистра с номером N и константы кк. Поразрядное сложение содержимого двух регистров общего назначения с номерами N и М реализует команда OR sN,sM. Последовательность выполнения операций «Логическое ИЛИ» показана на рис. 3.5
32 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Исходное содержимое регистра sN Константа, указанная в команде Регистр sN |OR sN,kk| |к|к|к|к|к|к|к|к| 4 + I + 4 i 4 + Г"1 Tl. rt г~п CARRY Щ Flag 1И ZERO Flag В™ Результат И О u-----------1 Результат » О Исходное содержимое регистра sN Содержимое регистра sM Регистр sN CARRY Flag Результат # О U-----------1 Результат О Рис. 3.5. Выполнение поразрядных операций «Логическое ИЛИ» Форматы инструкций XOR, предназначенных для выполнения поразрядной опе- рации «Исключающее ИЛИ», представлены в табл. 3.6. Таблица 3.6. Форматы команд поразрядных операций «Исключающее ИЛИ» Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 1 п п п п К К К К К к К К XORsN.kk Поразрядное «Исключающее ИЛИ» содержимого регистра sN и константы kk Поле пре- фикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция 1 1 0 0 п п п п m m m m 0 0 1 1 XORsN,sM Поразрядное «Исключающее ИЛИ» содержимого регист- ров sN и sM 15 14 13 12 я 10 9 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Инструкция XOR sN,kk выполняет поразрядную операцию «Исключающее ИЛИ», в которой участвует содержимое регистра с номером W и константа kk, значе- ние которой указывается непосредственно в команде. Команда XOR sN,sM осуществ- ляет аналогичную операцию, операндами которой является содержимое двух регист- ров общего назначения с номерами /V и М. Выполнение поразрядных операций «Ис- ключающее ИЛИ» демонстрирует рис. 3.6.
ГЛАВА 3 33 Исходное содержимое регистра sN Константа, указанная в команде Регистр sN |XOR sN,kk] [к|к|к|к|к|к|к|к| Н + Н i н ZERO ива Flag Результат О u-----------л Результат “ О CARRY Flag Исходное содержимое регистра sN |xorsn,sm] ижжаззм ААААЛААА Содержимое регистра sM Регистр sN I I I I I I I Г~1 н н н н 1 ^-11 < ‘ ? ‘ Г <" ’ Jь ‘ ’р| ' I f' “ ' : j.. / . :Г: . \ 1"™'ч <г :: 1 CARRY Flag Результат И О ZERO ------------о Flag шИ -----------------j Результат = О Рис. 3.6. Выполнение поразрядных операций «Исключающее ИЛИ» Инструкция LOAD, которая также относится к группе логических команд, пред- назначена для загрузки данных в выбранный регистр общего назначения. Источни- ком данных может служить содержимое любого регистра общего назначения или константа, указанная непосредственно в коде команды. Форматы инструкции загруз- ки данных в регистр приведены в табл. 3.7. Таблица 3.7. Форматы инструкции загрузки данных в регистр общего назначения Поле кода операции Поле номера , регистра Поле константы Мнемоника Выполняемая операция 0 0 0 0 п п П : П 27 К К К К К К К К LOADsN.kk Загрузка константы kk в регистр sN Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция 1 1 0 0 п п п П : m m m m 0 0 0 0 LOAD sN.sM Загрузка содержимого регистра sM в регистр sN 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда LOAD sN,kk записывает значение константы kk, указанной в инструк- ции, в регистр общего назначения с номером /V. Команда LOAD sNfsM производит за- грузку данных из регистра с номером М в регистр с номером 7V. Операции загрузки данных в регистр не оказывают влияния на флаги регистра статуса. Рис. 3.7 отобра- жает процесс выполнения операции загрузки данных в регистр общего назначения. 2—2062
34 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Регистр sN |LOAD sN,kk| Константа, указанная в команде |к|к|К|К|К|К|К|К| Регистр sN | LOAD sN,sM| Регистр sM Рис. 3.7. Выполнение операций загрузки данных в регистр общего назначения 3.3. Группа арифметических команд Арифметические команды микропроцессорного ядра PicoBlaze обеспечивают выполнение операций сложения и вычитания над двумя 8-разрядными операндами. Первым параметром в арифметической команде всегда является номер одного из ре- гистров общего назначения, содержимое которого используется в качестве первого операнда. Этот же регистр используется для записи результата выполненной опера- ции. В роли второго операнда может выступать константа, значение которой задается непосредственно в коде команды, или содержимое любого регистра общего назначе- ния. При выполнении арифметических операций состояние флагов регистра статуса зависит от полученного результата. Форматы команд сложения двух операндов без учета переноса представлены в табл. 3.8. Таблица 3.8. Форматы команд сложения двух операндов без учета переноса Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 1 0 0 п п п п К К К К К К К К ADDsN, kk Сложение содержимого ре- гистра sN и константы kk Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция 1 1 0 0 п п п п m m m m 0 1 0 0 Сложение содержимого ре- гистров sN и sM 15 14 13 12 И 10 9 ? 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда ADD sN,kk выполняет сложение содержимого регистра с номером N и кон- станты kk. Для получения суммы содержимого двух регистров общего назначения с но- мерами /V и Л/ предназначена команда ADD sN,sM. На рис. 3.8 показана последователь- ность действий, выполняемых при сложении двух операндов без учета переноса. Регистр sN Регистр sN |ADD sN,kk| Исходное содержимое регистра sN Константа, указанная в команде +|к|к|к|к|к|к|к|к| |add sN,sM| Исходное содержимое Содержимое регистра sN регистра sM Результат^ О ZERO Гу| Ж--------------О Flag LU ---------------1 Результат = О CARRY Flag Результат FF --------------0 -r------------1 Результат >FF Рис. 3.8. Выполнение операций сложения двух операндов без учета переноса
ГЛАВА 3 35 Сложение двух операндов с учетом переноса, полученного при выполнении пре- дыдущей операции, производится с помощью инструкции ADDCY. Форматы двух ва- риантов этой команды приведены в табл. 3.9. Таблица 3.9. Форматы команд сложения двух операндов с учетом переноса Поле кода операции Поле номера регистра . Поле константы Мнемоника Выполняемая операция 0 1 0 1 п п п п К К К К К К К К ADDCY sN, kk Сложение содержимого регистра sN и константы kk с учетом пе- реноса Поле пре- фикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции ; Мнемоника Выполняемая операция 1 1 0 0 п п п п m m m m 0 1 0 1 ADDCY sN,sM Сложение содержимого регист- ров sN и sM с учетом переноса 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда ADDCY sN,kk суммирует содержимое регистра с номером N с констан- той кк с учетом состояния флага переноса перед выполнением этой операции. Сло- жение содержимого двух регистров общего назначения с учетом значения флага пе- реноса осуществляется с помощью команды ADDCY sN,sM. Рис. 3.9 поясняет выпол- нение операций сложения с учетом переноса. __________ Исходное содержимое Константа, указанная CARRY Регистр sN |ADDCY sN,kk| регистра sN в команде Flag I I I I I I «----------ИЖИМДВ + |к|к|к|к|к|к[кТк] + ------------ Исходное содержимое Содержимое CARRY Регистрам |ADDCYsN,sM| регистра sN регистраsM Flag Результат > FF Результат О Рис. 3.9. Осуществление операций сложения двух операндов с учетом переноса После исполнения команд сложения (с учетом и без учета переноса) флаг нуле- вого результата ZERO Flag переключается в установленное состояние, если сумма равна нулю. При получении результата, отличного от нулевого, флаг ZERO Flag сбрасывается в состояние логического нуля. Флаг переноса/заема CARRY Flag при- нимает значение логической единицы, если сумма операндов превышает значение 255 (FF). В противном случае этот флаг переключается в сброшенное состояние. Операция вычитания без учета заема выполняется с помощью инструкции SUB, форматы двух вариантов которой представлены в табл. 3.10.
36 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Таблица 3.10. Форматы команд вычитания без учета заема Поле кода операции Поле номе- ра регистра Поле константы Мнемоника Выполняемая операция 0 1 1 0 п п п п К К К К К К К К SUBsN, kk Вычитание из содержимого регист- ра sN константы kk Поле префик- са кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции Мнемоника Выполняемая операция 1 1 0 0 п п п п m m m m 0 1 1 0 SUB sN(sM; Вычитание содержимого регистра sM из содержимого регистра sN 15: 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда SUB $N,kk позволяет вычесть значение константы kk из содержимого регистра с номером N. Для вычисления разности содержимого двух регистров обще- го назначения с номерами N и М следует использовать команду SUB sN,sM. Процесс выполнения команд вычитания без учета заема отображен на рис. 3.10. Регистр sN Регистр sN Исходное содержимое Константа, указанная iSUBsN.kk , , .p7c;p.a,.s-l?_1_| , , -------—J — |к|к|к|к|к|к|к|к| |subsn,sm| Исходное содержимое Содержимое регистра sN регистра sM Результат ¥ О и ' ° Результат = 0 CARRY д Flag И Результат £ 0 г-------------О U-------------1 Результат < 0 Рис. 3.10. Вычисление разности двух операндов без учета заема Для вычисления разности двух операндов с учетом значения заема, образовавше- гося при выполнении предыдущей операции, предназначена инструкция SUBCY, форматы вариантов которой приведены в табл. 3.11. Таблица 3.11. Форматы инструкций вычитания с учетом заема Поле кода операции Поле номе- ра регистра Поле константы Мнемоника Выполняемая операция 0 1 1 1 п п п п К К К К К К К К SUBCY sN, kk Вычитание из содержимого регистра sN константы kk с учетом заема Поле префикса кода операции Поле номера первого регистра Поле номера второго регистра Поле кода операции > Мнемоника Выполняемая операция 1 1 0 0 п h п п m m m m 0 1 1 1 SUBCY sN.sM Вычитание содержимого ре- гистра sM из содержимого ре- гистра sN с учетом заема 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда SUBCY sN,kk выполняет вычитание значений константы kk и флага за- ема CARRY Flag из содержимого регистра с номером N. Вычисление разности со- держимого двух регистров общего назначения с номерами N и М с участием значения флага заема CARRY Flag производится с помощью команды SUBCY sN, sM. Рис. 3.11 иллюстрирует выполнение операций вычитания с учетом заема.
ГЛАВА 3 37 ___________ Исходное содержимое Константа, указанная CARRY Регистр sN |SUBCY sNtkk| регистра $N в команде Flag иаивя *-----------------------ивйиид - |к|к|к|к|к|к]к]~к] - g -------- Исходное содержимое Содержимое CARRY Регистр sN |SUBCYsN,sMj регистра sN регистраsM Flag |7»я»н -— иш -111111111 - н CARRY Flag Результат ? О г-------------О U-------------1 Результат < О ZERO Flag Результат^ г-----------О L----------->| Результат “О Рис. 3.11. Вычисление разности двух операндов с учетом заема После выполнения команд вычитания (с учетом и без учета заема) состояние флагов регистра статуса изменяется в зависимости от полученного результата. Флаг нулевого результата ZERO Flag переключается в установленное состояние, если раз- ность равна нулю. При получении результата, отличного от нулевого, флаг ZERO Flag сбрасывается в состояние логического нуля. Флаг переноса/заема CARRY Flag принимает значение логической единицы при отрицательном значении разности опе- рандов. В противном случае этот флаг переключается в сброшенное состояние. 3.4. Команды сдвига данных Команды этой группы предназначены для выполнения операций логического (арифметического) или циклического сдвига данных, хранящихся в регистре общего назначения с указанным номером, на один разряд. Форматы инструкций сдвига дан- ных представлены в табл. 3.12. Таблица 3.12. Форматы команд логического или циклического сдвига данных Поле кода операции номера Поле направле- ния сдвига Лоле/пи- ла сдвига Мнемони- ка ; ': ;; Выполняемая операция 1 1 0 1 л п п п 0 0 0 0 1 1 1 0 SRO sN Логический сдвиг содержимого регистра sN вправо на один разряд с записью 0 1 1 0 1 п п п п 0 0 0 0 1 1 1 1 SR1 sN Логический сдвиг содержимого регистра sN вправо на один разряд с записью 1 1 1 0 1 п п п л 0 0 0 0 1 0 1 0 SRX sN Логический сдвиг содержимого регистра sN вправо с сохранением последнего разряда 1 1 0 1 п п п п 0 0 0 0 1 0 0 0 SRAsN Циклический сдвиг содержимого регистра sN вправо через разряд переноса/заема 1 1 0 1 п п п п 0 0 0 0 1 1 0 0 RR sN Циклический сдвиг содержимого регистра sN вправо без участия бита переноса 1 1 0 1 п п о п 0 0 0 0 0 1 1 0 SLO sN Логический сдвиг содержимого регистра sN влево на один разряд с записью 0 1 1 0 1 п п п п 0 0 0 0 0 т Wi 1 , SL1 sN Логический сдвиг содержимого регистра sN влево на один разряд с записью 1 1 1 0 1 п п л л 0 0 0 0 0 0 1 0 SLX sN Логический сдвиг содержимого регистра sN влево с сохранением последнего раз- ряда 15 14 13 12 11 то 9 8 7 6 5 4 3 2 0 Номер разряда микрокоманды
38 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Окончание табл. 3.12 Поле кода операции Поле номера регистра / Поле направле- ния сдвига па сдвига Мнемони- ка /Я/: j;"L Выполняемая операция 1 1 0 1 п ; п п П 0 0 0 0 0 0 0 0 SLA sN Циклический сдвиг содержимого регистра sN влево через разряд переноса/заема 1 1 0 1 п п п П 0 0 0 0 0 1 0 0 RLsN Циклический сдвиг содержимого регистра sN влево без участия бита переноса 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команды SRO sN и SRI лА выполняют логический сдвиг содержимого регистра с номером sN вправо на один разряд с записью соответственно нулевого и единично- го бита в «освободившийся» (крайний левый) разряд. Команда SRX sN позволяет осуществить операцию логического сдвига данных вправо в регистре sN с сохранением состояния последнего (крайнего левого) разряда. На рис. 3.12 в наглядной форме показан процесс выполнения различных сдвиговых операций, поддерживаемых микропроцессорным ядром PicoBlaze. |SRXsN| jSRAsN] |RR sN| _______________Регистр sN__CARRY Flag ZERO Flag Результат |SR0 SN| o-»-|: I f II I I I I—*H 1 ' Результат ”0 Регистр sN CARRY Flag ZERO Flag !sri sni 1 ДЯ—-ИИ Ц| Результат *0 0 1 Регистр sN | CARRY Flag ZERO Flag результат J* 0 Результат “0 ZERO Flag Результат ¥ 0 w ° Результат "0 ZERO Flag И ZERO Flag Результат И 0 t ° Результат" 0 ZERO Flag результат ^0 Ml---------------° Результат О ZERO Flag Результат?* О 1------------------° Результат “О CARRY Flag Регистр sN i slo sni И-— CARRY Flag Регистр sN isli sni H-—[П32ЕЕЕЗШ--1 CARRY Flag Регистр sN J~ I islx sn CARRY |slasn|L- CARRY Flag Рис. 3.12. Выполнение операций логического и циклического сдвига данных Циклический сдвиг данных в регистре общего назначения на один разряд вправо, выполняемый через разряд переноса/заема CARRY Flag регистра статуса, осуществ-
ГЛАВА 3 39 ляется с помощью команды S/M sN. Операция циклического сдвига вправо без уча- стия бита переноса регистра статуса реализуется с помощью команды RR sN. Команды SLO sN и SL1 sN предназначены для выполнения операций логического сдвига данных влево с занесением нулевого и единичного бита соответственно в «ос- вободившийся» (крайний правый) разряд используемого регистра sN. Для логического сдвига влево содержимого регистра sN с сохранением значения последнего (крайнего правого) разряда предусмотрена команда SLX sN. Операции циклического сдвига данных влево в регистре sN выполняются с по- мощью инструкций SLA sN и RL sN. При использовании команды SLA sN циклический сдвиг производится через разряд переноса/заема CARRY Flag регистра статуса. Команда RL sN позволяет осуществить циклический сдвиг данных влево без участия разряда переноса реги- стра статуса. При выполнении сдвиговых операций в разряд регистра статуса, который содер- жит значение флага переноса/заема CARRY Flag, записывается бит данных, «вытал- киваемый» из регистра общего назначения в процессе сдвига. Состояние флага нуле- вого результата ZERO Flag зависит от значения содержимого используемого регист- ра общего назначения после выполнения операции сдвига. Если во всех разрядах этого регистра присутствуют нулевые значения, то флаг ZERO Flag переключается в установленное состояние. В противном случае флаг нулевого результата ZERO Flag сбрасывается. 3.5. Команды ввода/вывода Команды ввода/вывода предназначены для организации чтения данных из вход- ного порта в заданный регистр общего назначения и передачи информации из ука- занного регистра в выходной порт. Инструкции ввода/вывода включают в себя два параметра. Значение первого параметра определяет номер регистра общего назначе- ния, используемого в качестве приемника данных при операции ввода или в качестве источника при выполнении операции вывода. Второй параметр позволяет указать ад- рес порта ввода/вывода, к которому производится обращение. Адресация ко входным и выходным портам в инструкциях ввода/вывода может осуществляться с помощью 8-разрядной константы, значение которой задается непосредственно в команде, или содержимого регистра общего назначения с указанным номером. Форматы команд ввода/вывода приведены в табл. 3.13. Таблица 3.13. Форматы команд ввода/вывода Попе кода операции Поле номера регистра , < Поле адреса порта ввода/вывода Мнемоника \ Выполняемая операция 1 0 1 0 п п п п К К к К К к К К INPUT sN, kk Чтение данных из порта ввода/вывода с адресом kk в регистр sN 1 1 1 0 п п п п К К к к К к К к OUTPUT sN, kk Запись данных из регистра sN в порт ввода/вывода с адресом kk 15 14 13 12 111 10 1 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
40 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Окончание табл. 3.13 Поле кода операции Поле номера пер- / еого регистра Поле номера вто- рого регистра Нулевые разряды Мнемоника Выполняемая операция 1 0 1 1 П : л л m m m m 0 0 0 0 INPUT sNi|sM) Чтение данных из порта ввода/вывода с адресом, определяемым регистром sM, в регистр sN 1 1 1 1 п п л п m m m m 0 0 0 0 OUTPUT sN,(sM) Запись данных из регистра sN в порт с адресом, опре- деляемым регистром sM 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда INPUT sN, kk выполняет передачу данных из входного порта с адресом kk в регистр общего назначения с номером sN. Чтение входных данных из порта вво- да/вывода, адрес которого указывает содержимое регистра sM, производится при ис- пользовании инструкции INPUTsX,(sY). Передача содержимого регистра общего назначения с номером sN в выходной порт с адресом kk осуществляется с помощью команды OUTPUT sX, kk. Для записи выходных данных из регистра sN в порт, адрес которого определяется содержимым регистра sM9 предназначена команда OUTPUT sN,(sM). Рис. 3.13 поясняет выполне- ние операций ввода/вывода с различными видами адресации. Адрес порта ввода/вывода Адрес, указанный в команде Регистр sN Регистр sN Порт ввода/вывода Адрес порта ввода/вывода Адрес, указанный в команде lhlrtwlT мм. ИИИ-ВЖИк] Порт ввода/вывода Регистр sN Регистр sM Регистр sN Адрес порта ввода/вывода Порт ввода/вывода Рис. 3.13. Выполнение инструкций ввода/вывода с различными видами адресации 3.6. Команды обслуживания прерываний В эту группу входят команды возврата из процедуры обработки прерываний и установки режима обслуживания прерываний в программе. Инструкция возврата из процедуры обслуживания прерывания RETURNI предна- значена для передачи управления программе, при выполнении которой поступил за- прос прерывания. Возврат к выполняемой программе производится в безусловном порядке после завершения процедуры обработки прерывания. Параметры команды
ГЛАВА 3 41 возврата из процедуры обслуживания прерывания позволяют также определить дальнейший режим (запрета или разрешения) обработки прерываний. Форматы инст- рукций обслуживания прерываний представлены в табл. 3.14. Таблица 3.14. Форматы команд обслуживания прерываний Поле режима обработки прерываний : ПОЛеКОбВ Мнемоника •? Вь/лоляяемая операция 1 0 0 0 0 0 0 0 К Г RETURNI ENABLE Возврат из процедуры обработки • и установка режима запрета пре- рывания L ? 1 0 0 0 0 0 0 0 1 0 1 0 6 к 1® RETURNI DISABLE Возврат из процедуры обработки •: и установка режима разрешения 1111 ййИЙЙИИИИ ...... 1 0 0 0 0 0 0 0 К II в к; ENABLE INTERRUPT Установка режима разрешения прерывания 1 0 0 0 0 0 0 0 Р 0 о р DISABLE INTERRUPT Установка режима запрета преры- вания 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1: о: Номер разряда микрокоманды Команда RETURNI ENABLE возвращает управление из процедуры обслуживания прерывания основной программе с разрешением последующих прерываний. Для вы- хода из процедуры обработки прерывания и установки режима запрета прерывания следует использовать команду RETURNI DISABLE. Механизм возврата из процедуры обслуживания прерываний показан на рис. 3.14. Регистр фиксации флагов Рис. 3.14. Выполнение команд обслуживания прерываний При завершении процесса обработки прерывания в программный счетчик из сте- ка загружается значение адреса, которое было записано последним. Таким образом, в программный счетчик заносится адрес команды, которая выполнялась в момент по- ступления запроса на прерывание. Кроме того, восстанавливается состояние флагов в регистре статуса, в котором они находились при вызове процедуры обслуживания запроса на прерывание. Команды разрешения ENABLE INTERRUPT и запрета прерываний DISABLE INTERRUPT позволяют изменить режим обработки прерываний на любом этапе вы- полняемой программы. При этом следует учитывать, что до завершения текущей процедуры обслуживания прерывания должен быть установлен режим запрета пре- рываний.
42 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 3.7. Различия в системе команд микропроцессорных ядер семейства PicoBlaze Несмотря на то что приведенное выше описание системы команд относится, прежде всего к микропроцессорному ядру PicoBlaze, предназначенному для исполь- зования в проектах, которые реализуются на основе ПЛИС серий Spartan-II, Spartan- IIE, Virtex, Virtex-E, оно в значительной мере применимо и к другим элементам этого семейства. Все рассмотренные команды поддерживаются и остальными версиями микропроцессорного ядра PicoBlaze, различаясь только длиной (разрядностью) и форматом инструкций. Отличительные особенности микропроцессорных ядер се- мейства PicoBlaze, которые предназначены для проектирования встраиваемых систем на основе кристаллов других серий, будут представлены в последующих главах.
4. ОСОБЕННОСТИ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ПРИМЕНЕНИЯ В ПРОЕКТАХ, РЕАЛИЗУЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВА VIRTEX-II Микропроцессорное ядро PicoBlaze, предназначенное для применения в проектах встраиваемых систем, выполняемых на базе ПЛИС серии Virtex-II, отличается от ба- зового представителя этого семейства более широкими функциональными возмож- ностями. Данная версия ядра может также использоваться для разработки систем на основе ПЛИС серии Virtex-II PRO. Учитывая, что этот модуль является результатом дальнейшего развития микропроцессорного ядра PicoBlaze, реализуемого на основе кристаллов семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, основное внимание в настоящей главе сосредоточено на отличиях его характеристик, архитектуры и сис- темы команд по сравнению с базовым ядром, описание которого приведено в гл. 2. 4.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейство Virtex-II) Основные характеристики семейства встраиваемых микропроцессорных ядер PicoBlaze, представленные в гл. 2, в большинстве своем относятся ко всем предста- вителям этой серии. Однако ядро, предназначенное для применения в кристаллах се- мейства Virtex-II, имеет ряд отличительных особенностей. К их числу относятся сле- дующие характеристики: разрядность шины адресов - 10 бит; разрядность шины команд - 18 бит; объем блока регистров общего назначения - 32 восьмиразрядных регистра; объем встроенного ППЗУ микропрограмм, реализуемого на основе блочной па- мяти ПЛИС Block SelectRAM, составляет 1024 х 18 разрядов; • объем ресурсов кристалла, необходимых для реализации микропроцессорного ядра PicoBlaze в ПЛИС семейства Virtex-II, ограничивается 84 секциями (slices), что составляет 9 % от полного объема логических ресурсов кристалла XC2V40E и 0,25 % от логической емкости ПЛИС XC2V6000E; повышенная производительность, достигающая 40-70 MIPS (в зависимости от типа используемого кристалла). 4.2. Архитектура микропроцессорного ядра PicoBlaze (семейство Virtex-II) Архитектура микропроцессорного ядра PicoBlaze, предназначенного для приме- нения в кристаллах семейства Virtex-II, изображена на рис. 4.1. В структурном отно- шении она практически не отличается от архитектуры встраиваемого микропроцес- сорного модуля, которая детально рассмотрена в гл. 2. Различия проявляются на уровне отдельных структурных элементов. Эти отличия обусловлены прежде всего тем, что преимущества архитектуры ПЛИС семейства Virtex-II по сравнению с кри- сталлами серий Spartan-II, Spartan-IIE, Virtex, Virtex-E позволили расширить функ-
44 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС циональные возможности структурных элементов соответствующего микропроцес- сорного ядра из семейства PicoBlaze. Рис. 4.1. Архитектура микропроцессорного ядра PicoBlaze (семейство Virtex-II) Объем блока регистров общего назначения увеличен до 32 восьмиразрядных ре- гистров, которые обозначаются соответствующими порядковыми номерами sOO - slF. Тем самым создаются предпосылки для повышения уровня оптимизации разрабатываемой микропроцессорной программы. Двукратное увеличение числа ре- гистров общего назначения позволяет прежде всего сохранять больший объем про- межуточных результатов вычислений, входных и выходных данных, не используя внешнего (по отношению к микропроцессорному ядру) ОЗУ. Замена обращений к внешней оперативной памяти обращениями к регистрам общего назначения позволя- ет получить существенный выигрыш в быстродействии при выполнении программы за счет исключения операций перемещения данных между регистрами и ОЗУ. Кроме того, повышению быстродействия способствует то обстоятельство, что каждый из регистров общего назначения может выполнять функции аккумулятора. Четырехкратное увеличение адресного пространства программной памяти по- требовало расширения шины адресов до 10 разрядов. Тем самым обеспечивается возможность прямого обращения к любой ячейке ППЗУ, используемого для хране- ния микропроцессорных программ, в диапазоне адресов от ООО до 3FF. При этом длина команд возросла до 18 разрядов, что повлекло за собой соответствующее рас- ширение шины команд. В соответствии с увеличением ширины шины адресов также изменена разряд- ность тех элементов архитектуры микропроцессорного ядра PicoBlaze, которые вы- полняют функции формирования и хранения адресов команд. Разрядность программ-
ГЛАВА 4 45 ного счетчика, регистров стека и блока управления выбором адреса следующей ко- манды составляет 10 бит. Модернизация блока дешифровки команд, обусловленная необходимостью учета рассмотренных выше особенностей элементов архитектуры, привела, в частности, к изменению формата команд, поддерживаемых микропроцессорным ядром PicoBlaze, которое предназначено для применения в кристаллах семейства Virtex-IL Изменения в процедуре обработки прерываний коснулись только значения адре- са, по которому указывается вектор процедуры обслуживания прерывания. В связи с расширением диапазона адресов программной памяти в качестве адреса вектора пре- рывания, который в семействе микропроцессорных ядер PicoBlaze соответствует максимально допустимому значению адреса, используется значение 3FF. 4.3. Структура проекта микропроцессорного ядра PicoBlaze (семейство Virtex-II) Структура встраиваемого микропроцессорного ядра PicoBlaze, предназначенного для использования в составе проектов, реализуемых на базе кристаллов семейства Virtex-II, приведена на рис. 4.2. Она отличается от структуры, рассмотренной в гл. 2, только типом и параметрами модулей, которые входят в ее состав. Модуль ЦПУ (исполнительный модуль) PicoBlaze KCPSM2 Входные данные Прерывание Сброс Память программ IN_PORT[7:0] INTERRUPT INSTRUCTIONS 7:0] AD DRESS[9:0] >CLK 8 / * Выходные данные 8, Адрес порта ввода/вывода Строб чтения -> Строб записи OUT_PORT[7:0] PORT_ID[7:0] READ.STROBE WRITE_STROBE э RESET Тактовый сигнал —[-> CLK INSTRUCTION [17:0] ADDRESS[9:0] I— 18, Шина команд Шина адреса 8; 10 Рис. 4.2. Структура микропроцессорного ядра PicoBlaze (семейство Virtex-II) Исполнительный модуль выполнен в форме компонента KCPSM2, представляю- щего собой макрос с относительным размещением, описание которого на языке VHDL содержится в файле kcpsm2.vhd. Отличия интерфейса этого компонента от макроса KCPSM, который является основой микропроцессорного ядра PicoBlaze, реализуемого на базе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, заклю- чаются в размерности векторов, представляющих шины адресов и команд. Выраже- ния декларации компонента KCPSM2 в составе VHDL-описания проектируемой сис- темы выглядят следующим образом: component kcpsm2 Port ( address: out stdjogic_vector(9 downto 0); instruction : in stdjogic_vector(17 downto 0); port Jd: out stdjogic_vector(7 downto 0); write_strobe: out stdjogic;
46 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС out_port: out stdjogic_vector(7 downto 0); read_strobe: out stdjogic; in_port: in stdjogic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic ); end component; В приведенных здесь и далее выражениях декларации используется система обо- значений интерфейсных цепей компонентов микропроцессорного ядра PicoBlaze, подробно описанная в гл. 2. Включение экземпляра компонента, представляющего исполнительный модуль, в состав структурного описания архитектуры проектируемой системы осуществляет- ся с помощью конструкции, которая выглядит следующим образом: inst_name_processor: kcpsm2 port map( address => address_signal, instruction => instruction_signal, port Jd => portjd.signal, write_strobe => write_strobe_signal, out_port => out_port_signal, read_strobe => read_strobe_signal, in_port => in_port_signal, interrupt -> interrupt.signal, reset => reset_signal, elk => clk_signal ); В этой конструкции следует вместо inst^name^processor указать метку, которая определяет идентификатор создаваемого экземпляра компонента kcpsm2. Функции программной памяти, как и в ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, выполняет один модуль блочного ОЗУ Block SelectRAM. Но в отли- чие от кристаллов указанных семейств информационная емкость одного модуля блочной памяти ПЛИС семейства Virtex-II составляет 18 Кбит, что позволило в 4 раза увеличить максимальный объем загружаемой микропроцессорной программы. Модуль программной памяти представлен в виде компонента с названием prog_rom, который фактически описывает ППЗУ с информационной емкостью 1024 х 18 разря- дов, реализуемое на основе однопортового блочного ОЗУ с аналогичной организаци- ей. Для декларации этого компонента следует воспользоваться конструкцией, кото- рая имеет следующий вид: component prog_rom Port ( address: in stdjogic_vector(9 downto 0); instruction : out stdjogic_vector(17 downto 0); elk: in stdjogic ); end component; Создание экземпляра компонента, представляющего программную память, вы- полняется с помощью оператора, который выглядит следующим образом:
ГЛАВА 4 47 inst_name_program: prog_rom port map( address => address_signal, instruction => instruction_signal, elk => clk_signal ); При включении выражений декларации и создания экземпляра компонента, со- ответствующего программной памяти, в состав описания проектируемой системы следует вместо идентификатора prog_rom указать название компонента, совпадаю- щее с идентификатором файла, в котором должен быть записан исходный текст про- граммы. Необходимость такой замены объясняется тем, что ассемблер формирует описание содержимого ППЗУ программ на языке VHDL в виде файла с расширением vhd, название которого совпадает с идентификатором файла, содержащего исходный текст программы. Сопряжение основных компонентов микропроцессорного ядра PicoBlaze демон- стрирует VHDL-описание объекта EMBEDDED_KCPSM2, структуру которого обра- зует исполнительный модуль и подключенный к нему модуль программной памяти. Этот объект представляет собственно встраиваемое микропроцессорное ядро, пред- назначенное для применения в ПЛИС семейства Virtex-II. Ниже приведен полный текст описания объекта EMBEDDEDKCPSM2, которое имеет ту же структуру, что и описание объекта EMBEDDED KCPSM, рассмотренное в гл. 2. - EMBEDDED_KCPSM2.VHD - - Standard IEEE libraries library IEEE; use IEEE.STD_LOGICJ164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity embedded_kcpsm2 is Port ( port—id: out stdjogic_vector(7 downto 0); write_strobe: out stdjogic; read_strobe: out stdjogic; out_port: out std_logic_vector(7 downto 0); in_port: in std_logic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic): end embedded_kcpsm2; architecture connectivity of embedded_kcpsm2 is
48 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - Declaration of KCPSM-II component kcpsm2 Port ( address: out std_logic_vector(9 downto 0); instruction: in stdjogic_vector(17 downto 0); portjd: out std_logic_vector(7 downto 0); write_strobe: out stdjogic; out_port: out stdjogic__vector(7 downto 0); read_strobe: out stdjogic; in_port: in stdJogic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic): end component; - - declaration of program ROM component prog_rom Port ( address: in stdjogic_vector(9 downto 0); instruction : out stdjogic_vector(17 downto 0); elk: in stdjogic); end component; - - Signals used to connect KCPSM-II to program ROM signal address: stdjogic_vector(9 downto 0); signal instruction : stdjogic_vector(17 downto 0); - - Connection of macros begin processor: kcpsm2 port map( address => address, instruction => instruction, portjd => port Jd, write_strobe => write_strobe, out_port => out_port, read_strobe => read_strobe, in_port => in_port, interrupt => interrupt, reset => reset, elk => elk); program: prog_rom port map( address => address, instruction => instruction,
ГЛАВА 4 49 elk => elk); end connectivity; - END OF FILE EMBEDDED.KCPSM2.VHD В случае применения объекта EMBEDDED_KCPSM2 в качестве одного из эле- ментов, входящих в состав разрабатываемой системы, необходимо включить в ее описание выражение декларации соответствующего компонента, которое выглядит следующим образом: component embedded_kcpsm2 Port ( portjd: out stdjogic_vector(7 downto 0); write_strobe: out stdjogic; read_strobe: out stdjogic; ouLport: out stdjogic_vector(7 downto 0); in_port: in stdJogic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic ); end embedded_kcpsm; В описании интерфейса компонента embeddedJccpsm2 используется та же систе- ма обозначений, что и для компонента kepsm, рассмотренного в гл. 2. Для создания одного экземпляра компонента, представляющего встраиваемое микропроцессорное ядро PicoBlaze, в структурное описание проектируемой системы нужно включить следующий оператор: inst_name_embedded_processor: embedded_kcpsm2 port map( portjd => portJd_signal, write_strobe => write_strobe_signal, read_strobe => read_strobe_signal, out_port => out_port_signal, in_port => in_port_signal, interrupt => interrupt. signal, reset => reset_signal, elk => clk_signal ); При практическом использовании этого оператора следует вместо метки inst_name-embedded^processor указать идентификатор создаваемого экземпляра ком- понента. Этот идентификатор, как правило, соответствует позиционному обозначе- нию экземпляра компонента в составе описания проекта. При описании внешних связей компонента embedded_kcpsm2 в блоке port тар () должны быть указаны названия соответствующих сигналов (цепей), используемых в проекте. Все рассмотренные компоненты полностью совместимы с любой из конфигура- ций средств проектирования фирмы Xilinx серии ISE, включая свободно распростра- няемую версию ISE WebPACK [1].
50 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 4.4. Система команд микропроцессорного ядра PicoBlaze (семейство Virtex-II) В состав системы команд микропроцессорного ядра PicoBlaze, встраиваемого в проекты, которые выполняются на основе ПЛИС семейства Virtex-II, входят те же 49 инструкций, что были подробно рассмотрены в предыдущей главе. При этом со- храняется классификация команд по функциональному признаку, в соответствии с которой они подразделяются на 6 уже известных групп. Изменения произошли в формате команд и их мнемонической записи. Необходимость преобразования форма- та инструкций обусловлена архитектурными особенностями, рассмотренными в пре- дыдущем разделе. Как уже упоминалось, длина всех команд в двоичном представле- нии составляет 18 разрядов. В большинстве инструкций поменялась длина полей, и соответственно коды выполняемых операций. В некоторых командах изменилось взаимное расположение полей. В последующих разделах для каждой функциональ- ной группы команд будут представлены соответствующие форматы и мнемоника ин- струкций рассматриваемого представителя семейства микропроцессорных ядер PicoBlaze. 4.5. Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на базе кристаллов семейства Virtex-II В командах безусловного и условных переходов JUMP изменилась структура по- ля кода операции и длина поля адреса перехода. В соответствии с разрядностью ши- ны адресов длина поля адреса перехода увеличена до 10 двоичных разрядов. При мнемонической форме записи команд передачи управления в программе параметр, определяющий адрес перехода, задается в виде последовательности, состоящей из трех шестнадцатеричных символов. Форматы команд безусловного и условных пере- ходов JUMP в новой редакции представлены в табл. 4.1. Таблица 4.1. Форматы команд переходов микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле адреса перехода Мнемоника Выполняемая операция 1 1 0 1 0 0 X X А А А А А А А А А А JUMP ааа Безусловный переход 1 1 0 1 0 1 0 0 А А А А А А А А А А JUMP Z,ааа Переход при условии, что флаг ZERO Flag находится в установленном состоянии 1 1 0 1 0 1 0 1 А А А А А А А А А А JUMP NZ.aaa Переход при условии, что флаг ZERO Flag находится в сброшенном состоянии 1 1 0 1 0 1 1 0 А А А А А А А А А А JUMP С,ааа Переход при условии, что флаг CARRY Flag находится в установленном состоянии 1 1 0 1 0 1 1 1 А А А А А А А А А А JUMP NC.aaa Переход при условии, что флаг CARRY Flag находится в сброшенном состоянии 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Модификация команд обращения к подпрограммам CALL также затронула структуру поля кода операции и длину поля адреса вызываемой процедуры. В новой
ГЛАВА 4 51 редакции поле адреса вызываемой подпрограммы включает в себя 10 двоичных раз- рядов. При мнемонической форме записи команд обращения к подпрограммам зна- чение параметра, указывающее начальный адрес вызываемой процедуры, представ- ляется в виде трехзначного шестнадцатеричного числа. Новые версии форматов ко- манд безусловного и условных вызовов подпрограмм CALL приведены в табл. 4.2. Таблица 4.2. Форматы команд вызова подпрограмм для микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле адреса подпрограммы Мнемоника Выполняемая операция 1 1 0 1 1 0 X X А А А А А А А: А А А CALL ааа Безусловный вызов подпрограммы 1 1 0 1 1 1 0 0 А А , А, А А А А А А А CALL Z, ааа Вызов подпрограммы при усло- вии, что флаг ZERO Flag нахо- дится в установленном состоянии 1 1 0 1 1 1 0 1 А А А А А А А А А А CALL NZ, ааа Вызов подпрограммы при усло- вии, что флаг ZERO Flag нахо- дится в сброшенном состоянии 1 1 0 1 1 1 1 0 А А А А А А А А А А CALL С, ааа Вызов подпрограммы при усло- вии, что флаг CARRY Flag нахо- дится в установленном состоянии 1 1 0 1 1 1 1 1 А А А А А А А А А А CALL NC, ааа Бызов подпрограммы при уело- вии, что флаг CARRY Flag нахо- дится в сброшенном состоянии 17 16 15 14 13 12 11 10 9 8 7 6 fc 4 3 2 1 0 Номер разряда микрокоманды Преобразование инструкций возврата из подпрограммы RETURN коснулось тех же полей, которых оно коснулось и в командах вызова подпрограмм. Для всех вари- антов команд завершения выполняемой подпрограммы и передачи управления ос- новной программе или подпрограмме, из которой производилось обращение к этой процедуре, изменены коды выполняемой операции. Мнемоническая форма записи команд RETURN сохранилась без изменений. В табл. 4.3 представлены модифициро- ванные форматы команд безусловного и условного возвратов из подпрограммы RETURN. Таблица 4.3. Форматы команд безусловного и условного возвратов из подпрограммы для микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле адреса Мнемоника Выполняемая операция 1 0 0 1 0 0 X X 0 0 0 0 0 0 0 0 0 0 RETURN Безусловный возврат из под- программы 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 RETURN Z Возврат из подпрограммы при условии, что флаг ZERO Flag находится в установ- ленном состоянии 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 ° 0 RETURN NZ Возврат из подпрограммы при условии, что флаг ZERO Flag находится в сброшен- ном состоянии 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 RETURN C Возврат из подпрограммы при условии, что флаг CARRY Flag находится в установленном состоянии 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
52 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Окончание табл. 4.3 Поле кода операции Поле адреса Мнемоника Выполняемая операция 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 RETURN NC Возврат из подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 4.6. Группа логических команд микропроцессорного ядра PicoBlaze (семейство Virtex-II) В формате инструкций, которые относятся к группе логических команд, следует обратить внимание на два основных отличия по сравнению с аналогичными инструк- циями, представленными в предыдущей главе. Во-первых, длина поля кода операции увеличилась на один разряд и составляет 5 бит. Во-вторых, поля команд, предназна- ченные для определения номеров регистров общего назначения, содержимое которых используется в качестве операндов, также содержат 5 двоичных разрядов. Изменение длины полей, в которых указываются номера регистров, связано с двукратным уве- личением объема блока регистров общего назначения. В качестве номера регистра MV, который указывается в тексте инструкций, может использоваться любое число в диапазоне от 0 до 31, которое при мнемонической форме записи команд задается в виде последовательности из двух шестнадцатеричных символов (00-1F). Новая редакция форматов команд поразрядных операций «Логическое И» (по- разрядное умножение) AND, выполняемых над содержимым регистра общего назна- чения и константой kk, значение которой задается непосредственно в тексте инструк- ции, а также над содержимым двух регистров общего назначения, приведена в табл. 4.4. Таблица 4.4. Форматы команд поразрядных операций «Логическое И» микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 0 1 п п п п п К К К К К К К К ANDsNN, kk Поразрядное «Логическое И» содержимого регистра sNN и константы kk Поле кода операции Поле номера первого регистра Поле номера вто- рого регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 0 1 п п п п п m m m m m 0 0 0 AND sNN, sMM Поразрядное «Логическое И» содержимого регистров sNN и sMM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Модифицированные форматы инструкций OR, предназначенных для выполнения операций поразрядного сложения двух операндов (поразрядное «Логическое ИЛИ»), определены в табл. 4.5 для двух вариантов. В первом случае операндами являются содержимое любого из 32 регистров общего назначения и константа kk, значение ко- торой указывается в соответствующем поле команды, а во втором - содержимое двух регистров с номерами NN и ММ.
ГЛАА 4 53 Таблица 4.5. Форматы команд поразрядных операций «Логическое ИЛИ» микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 1 0 п п п п п К К К К К К К К OR sNN, kk Поразрядное «Логиче- ское ИЛИ» содержимого регистра sNN и констан- ты kk Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 1 0 п п п п п пл m m m m 0 0 0 OR sNN, sMM Поразрядное «Логиче- ское ИЛИ» содержимого регистров sNN и sMM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Новая редакция форматов команд XOR, используемых для выполнения пораз- рядной операции «Исключающее ИЛИ» с участием содержимого регистра общего назначения с номером NN и константы кк или содержимого двух регистров с номе- рами NN и ММ представлена в табл. 4.6. Таблица 4.6. Форматы команд поразрядных операций «Исключающее ИЛИ» микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 1 1 п п п п л К К К К К К К К XOR sNN, kk Поразрядное «Исключающее ИЛИ» содержимого регистра sNN и константы kk Поле кода опе- рации Поле номера первого регист- ра Поле номера второго реги- стра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 1 1 п п п п п m пл m m пл 0 0 0 XOR sNN.sMM Поразрядное «Исключающее ИЛИ» содержимого регистров sNN и sMM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Форматы инструкций LOAD, предназначенных для загрузки константы или со- держимого какого-либо регистра в выбранный регистр общего назначения, в новой редакции приведены в табл. 4.7. Таблица 4.7. Форматы инструкции загрузки данных в регистр общего назначения микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 0 0 п п п п п К К К К К К К К LOAD sNN, kk Загрузка константы kk в ре- гистр sNN Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 0 0 п п п п п m гп m m m 0 0 0 LOAD sNN, SMM Загрузка содержимого реги- стра sMM в регистр sNN 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
54 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 4.7. Группа арифметических команд микропроцессорного ядра PicoBlaze (семейство Virtex-II) В структуре полей и мнемонической форме записи арифметических команд мик- ропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах се- мейства Virtex-II, произошли те же изменения (по сравнению с форматами аналогич- ных команд, приведенными в предыдущей главе), что и в логических инструкциях, рассмотренных в предыдущем разделе. Модифицированные варианты форматов команд сложения ADD содержимого ре- гистра с номером NN и константы kk или содержимого двух регистров общего назна- чения с номерами NN и ММ без учета переноса представлены в табл. 4.8. Таблица 4.8. Форматы команд сложения двух операндов без учета переноса для микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции : Поре .номё^ / : Поле константы Мнемоника Выполняемая операция 0 0 1 0 0 п п п п п К К К К К К К К Сложение содержимого ре- гистра sNN и константы kk Поле кода опе- рации Поле номера пер- вого регистра . Поле номера вто- рого регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 0 0 л п п п п m m m m m 0 0 0 Сложение содержимого ре- гистров sNN и sMM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Новая версия форматов инструкций ADDCY, предназначенных для вычисления суммы двух операндов с учетом значения флага переноса, полученного при выпол- нении предыдущей операции, приведена в табл. 4.9. Таблица 4.9. Форматы команд сложения двух операндов с учетом переноса для микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 0 1 п п ; п л Л::- К К К К К К К К ADDCY sNN, kk Сложение содержимого регистра sNN и констан- ты kk с учетом переноса Поле кода операции Поле номера первого регистра Поле номера вто- рого регистра Нулевые разряды Мнемоника ; Выполняемая операция 0 1 1 0 1 п п л h п m m пл m m 0 0 0 ADDCY sNN, sMM Сложение содержимого регистров sNN и sMM с учетом переноса 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Форматы инструкций SUB, используемых для выполнения операции вычитания с участием тех же операндов, что и в командах сложения, без учета заема, в новой редакции представлены в табл. 4.10. Таблица 4.10. Форматы команд вычитания без учета заема для микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поре номера региргНра : \ Поле константы Л4немон1/ка Выполняемая операция 0 0 1 1 0 п 'П; л ; л п К К К К К к К К SUBsNN, kk Вычитание из содержи- мого регистра sNN кон- станты kk 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 4 55 Поле кода операции Поле номера первого регистра Поле номера вто- рого регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 1 0 п п п п о m m m m m 0 0 0 SUBsNN, Вычитание содержимого регистра sMM из содер- жимого регистра sNN 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Модифицированные варианты форматов команд SUBCY, предназначенных для вычисления разности двух операндов с учетом заема, образовавшегося при выполне- нии предыдущей операции, приведены в табл. 4.11. Таблица 4.11. Форматы инструкций вычитания с учетом заема для микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 1 1 п N п п п К К К К К К К К SUBCYsNN, kk ' Вычитание из содер- жимого регистра sNN константы kk с учетом заема Поле кода операции Поле номера первого регистра Поле номера вто- рого регистра Нулевые разряды . Мнемоника Выполняемая операция 0 1 1 1 1 п N п п m пл пл m m 0 0 0 SUBCYsNN, sMM Вычитание содержимо- го регистра sMM из со- держимого регистра sNN с учетом заема 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 4.8. Команды сдвига данных для микропроцессорного ядра PicoBlaze, реализуемого на основе кристаллов семейства Virtex-II В формате команд, предназначенных для выполнения операций сдвига данных, произошли те же изменения, что и в формате логических инструкций - длина полей кода операции и номера регистра увеличилась на 1 бит и составляет 5 двоичных раз- рядов. Отличия в мнемонической форме записи команд сдвига от однотипных выра- жений, приведенных в предыдущей главе, заключаются только в форме представле- ния параметра, определяющего номер регистра общего назначения, над содержимым которого выполняется соответствующая операция. Номер регистра, участвующего в операции сдвига, задается в виде последовательности, состоящей из двух шестнадца- теричных символов. Преобразованные форматы инструкций логического (арифмети- ческого) и циклического сдвига данных, находящихся в регистре общего назначения с указанным номером, представлены в табл. 4.12. Таблица 4.12. Форматы команд логического или циклического сдвига данных микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле направле- ния сдвига Полети па сдвига Мнемони- ка Выполняемая операция 1 0 1 0 0 п п п п п 0 0 0 0 1 1 1 0 SROsNN Логический сдвиг содержимого регистра sNN вправо на один разряд с записью 0 j 1 0 1 0 0 п П п п п 0 0 0 0 1 1 1 1 SR1sNN Логический сдвиг содержимого регистра sNN вправо на один разряд с записью 1
56 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Окончание табл. 4.12 Поле кода операции Поле номера регистра Поле направле- ния сдвига Поле ти- па сдвига Мнемони- ка Выполняемая операция 1 0 1 0 0 л ; Л II 0 0 0 0 1 ш 0 SRX sNN Логический сдвиг содержимого регистра sNN вправо с сохра- нением последнего разряда ... 1 0 1 0 0 18 || II 0 0 0 0 1 Й? SRAsNN Циклический сдвиг содержимо- го регистра sNN вправо через разряд,переноса/заема 1 0 1 0 0 п п| Я| Л \ 0 0 0 0 1 та о RR sNN Циклический сдвиг содержимо- го регистра sNN вправо без участия бита переноса 1 0 1 0 0 п п л п 0 0 0 0 0 1 г? 0 SLOsNN Логический сдвиг содержимого регистра sNN влево на один разряд с записью 0 1 0 1 0 0 П ft : п; П 11 0 0 0 0 0 р 1- SL1 sNN Логический сдвиг содержимого регистра sNN влево на один разряд с записью 1 1 0 1 0 0 п п п II 0 0 0 0 0 о SLXsNN Логический сдвиг содержимого регистра sNN влево с сохране- нием последнего разряда 1 0 1 0 0 п П 1 л л 0 0 0 0 0 0 о 0 SLA sNN Циклический сдвиг содержимо- го регистра sNN влево через разряд переноса/заема 1 0 1 0 0 п п л .л/ 0 0 0 0 0 1 0 0 RLsNN ЦиКйческий^сдвигоодержимб- го регистра sNN влево без уча- стия бита переноса 17 16 15 14 13 12 11 10 !i" 7 6 5 4 3 2 1; Й Номер разряда микрокоманды 4.9. Команды ввода/вывода микропроцессорного ядра PicoBlaze (семейство Virtex-II) Структура инструкций ввода/вывода, используемых для организации чтения данных из входного порта в заданный регистр общего назначения и передачи инфор- мации из указанного регистра в выходной порт, отличается от структуры аналогич- ных команд, приведенной в предыдущей главе, длиной полей кода операции и номе- ров регистров, каждая из которых составляет по 5 двоичных разрядов. Значения но- меров регистров общего назначения, используемых в операциях ввода/вывода, при мнемонической форме записи указываются в виде 2-разрядного шестнадцатеричного числа. Новые варианты форматов команд ввода/вывода с различными видами адре- сации приведены в табл. 4.13. Таблица 4.13. Форматы команд ввода/вывода микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле номера регистра Поле адреса порта ввода/вывода Мнемоника Выполняемая операция 1 0 0 0 0 N п л Л п К К к к к к к к INPUT sNN, ; kk Чтение данных из порта вво- да/вывода с адресом kk в регистр sNN 1 0 0 0 1 N ; Л й И п К К к к к к к к оиЙЙив sNN, kk '= Запись данных из регистра sNN в порт ввода/вывода с адресом kk
ГЛАВА 4 57 Поле кода операции Поле номера пер- вогорегистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 1 1 0 0 0 IPS п Ж m m m m m 0 0 0 INPUT sNN, Чтение данных из порта вво- да/вывода с адресом, определяемым регистром sMM, в регистр sNN 1 1 0 0 1 N йЙ m m m m m 0 0 0 OUTPUT sNN,(sMM) Запись данных из регистра sNN в порт с адресом, опре- деляемым регистром sMM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 4.10. Команды обслуживания прерываний микропроцессорного ядра PicoBlaze (семейство Virtex-II) В формате инструкций обслуживания прерываний изменилось взаимное распо- ложение поля кода операции и поля режима обработки прерываний. Кроме того, длина каждого из этих полей команды в двоичном представлении стала составлять 9 разрядов. При этом мнемоника инструкций, используемых для обработки прерыва- ний, осталась прежней. Новая редакция форматов команд возврата из процедуры обслуживания преры- ваний RETURNI и установки режима обслуживания прерываний в программе ENABLE INTERRUPT и DISABLE INTERRUPT представлена в табл. 4.14. Таблица 4.14. Форматы команд обслуживания прерываний микропроцессорного ядра PicoBlaze (семейство Virtex-II) Поле кода операции Поле режима обработки \ 1||| в | Мнемоника Выполняемая операция 1 0 1 1 0 0 0 0 0 gl aj lii 1/ III Ii RETURNI ENABLE Возврат из процедуры обра- ботки и установка режима запрета прерывания 1 1 0 1 1 0 0 0 0 0 й In II III II II til' ii RETURNI DISABLE Возврат из процедуры обра- ботки и установка режима разрешения прерывания 1 1 1 1 0 0 0 0 0 ||[ 0 0 0 II 'Oi 0 0 1 ENABLE INTERRUPT Установка режима разреше- ния прерывания ; 1 1 1 1 0 0 0 0 0 о: о 0 0 0 0 0 111 0 DISABLE INTERRUPT Установка режима запрета прерывания 17 16 15 14 13 12 11 10 9 8 111 а-’: 5 4i 3 is ii 0 Номер разряда микрокоманды Завершая рассмотрение особенностей микропроцессорного ядра PicoBlaze, пред- назначенного для проектирования встраиваемых систем на базе кристаллов семейст- ва Virtex-II, следует упомянуть о соответствующей версии ассемблера, включенной в состав комплекта, предоставляемого пользователю. Новый вариант программы, формирующей файлы описания содержимого программной памяти, учитывает изме- нения в формате команд и параметры блочного ОЗУ используемых ПЛИС.
5. ОСОБЕННОСТИ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ПРИМЕНЕНИЯ В ПРОЕКТАХ, РЕАЛИЗУЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВА COOLRUNNER-II Несмотря на то, что кристаллы серий CPLD обладают значительно меньшими функциональными возможностями по сравнению с представителями семейств FPGA, некоторые из них также могут применяться для реализации встраиваемых микропро- цессорных систем. Для этих целей фирма Xilinx предоставляет наиболее компактную версию микропроцессорного ядра PicoBlaze, которая предназначена для применения в проектах, реализуемых на основе ПЛИС семейства CoolRunner-IL Данное семейст- во кристаллов отличается от других серий ПЛИС с архитектурой CPLD, выпускае- мых фирмой Xilinx, высоким быстродействием, низкой потребляемой мощностью и наличием микросхем с достаточно большим объемом логических ресурсов. Более подробно характеристики кристаллов семейства CoolRunner-II представлены в [2]. Встраиваемый микропроцессорный модуль, предназначенный для применения в ПЛИС семейства CoolRunner-II, разработан на основе микропроцессорного ядра PicoBlaze, реализуемого на базе кристаллов семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E. Поэтому в настоящей главе при рассмотрении характеристик, архитектуры и системы команд микропроцессорного ядра PicoBlaze, реализуемого в ПЛИС семей- ства CoolRunner-II, представлены только его отличительные особенности по сравне- нию с базовым ядром, описание архитектуры и системы команд которого приведено гл. 2,3. 5.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Микропроцессорное ядро PicoBlaze, предназначенное для разработки встраивае- мых систем на основе кристаллов семейства CoolRunner-II, обладает основными тех- ническими характеристиками, схожими с характеристиками базового модуля, пред- ставленными в гл. 2. Наиболее существенные различия проявляются в вопросе при- менения встроенного ППЗУ микропрограмм, объеме блока регистров общего назначения и производительности. Рассматриваемый представитель семейства PicoBlaze характеризуется следующими особенностями по сравнению с микропро- цессорным ядром, реализуемым в ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E: возможностью применения в проектах, выполняемых на основе кристаллов CoolRunner-II с числом макроячеек 256 и более (ХС2С256, ХС2С384, ХС2С512); объемом блока регистров общего назначения - 8 регистров по 8 разрядов; отсутствием встроенного ППЗУ микропрограмм; 4-уровневым стеком; объемом ресурсов кристалла, необходимых для реализации микропроцессорного ядра PicoBlaze в ПЛИС CoolRunner-II, - составляет 212 макроячеек, что соответ- ствует 83 % от полного объема логических ресурсов кристалла ХС2С256 (при этом используется 155 регистров и 53 пользовательских выводов ПЛИС, что со- ставляет соответственно 61 и 45 % от полного объема этих ресурсов).
ГЛАВА 5 59 5.2. Архитектура микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Архитектура микропроцессорного ядра PicoBlaze, предназначенного для приме- нения в кристаллах семейства CoolRunner-II, изображена на рис. 5.1. В структурном отношении она отличается от архитектуры базового микропроцессорного модуля, рассмотренной в гл. 2, только отсутствием встроенного блока программной памяти. Кроме того, имеются различия, которые проявляются уже на уровне отдельных структурных элементов. Эти отличия обусловлены прежде всего ограниченным объ- емом ресурсов ПЛИС семейства CoolRunner-II по сравнению с кристаллами серий Spartan-II, Spartan-IIE, Virtex, Virtex-E. Поэтому одной из основных задач при разра- ботке рассматриваемого варианта микропроцессорного ядра PicoBlaze являлась ми- нимизация ресурсов кристалла, необходимых для его реализации. Решение этой за- дачи достигнуто за счет сокращения функциональных возможностей отдельных структурных элементов. Рис. 5.1. Архитектура микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Во-первых, вдвое уменьшен объем блока регистров общего назначения, который в новой версии микропроцессорного ядра PicoBlaze содержит 8 восьмиразрядных ре- гистров, обозначаемых соответствующими порядковыми номерами s0-s7. Во-вторых, почти в 4 раза (с 15 уровней до 4) сокращена глубина стека про- граммного счетчика. Тем самым накладывается более жесткое ограничение на коли- чество вложенных вызовов процедур в разрабатываемой программе.
60 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Кроме того, модернизация блока дешифровки команд, обусловленная необходи- мостью снижения объема используемых ресурсов ПЛИС, привела, в частности, к из- менению формата команд, поддерживаемых микропроцессорным ядром PicoBlaze, которое предназначено для применения в кристаллах семейства CoolRunner-II. 5.3. Структура проекта микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) В кристаллах семейства CoolRunner-II, как и в ПЛИС CPLD других серий, отсут- ствуют ресурсы выделенной блочной памяти. Использование же основных логиче- ских ресурсов ПЛИС (триггеров, входящих в состав макроячеек) для формирования программной памяти встраиваемого процессорного модуля крайне неэффективно. Поэтому в версии микропроцессорного ядра PicoBlaze, предназначенной для реали- зации в кристаллах семейства CoolRunner-II, исключен модуль встроенного ППЗУ микропрограмм. Таким образом, структура рассматриваемого варианта встраиваемо- го микропроцессорного ядра PicoBlaze в отличие от рассмотренных ранее представителей этого семейства содержит только исполнительный модуль (ЦПУ). Комплект микропроцессорного ядра PicoBlaze, предназначенного для примене- ния в составе проектов, выполняемых на основе ПЛИС семейства CoolRunner-II, со- держит 3 группы файлов, упакованных в архив. Каждая из этих групп расположена в отдельном каталоге (разделе) архива. Первая группа содержит файлы всех необходи- мых модулей описаний на языке VHDL. Файлы этой группы расположены в разделе VHDL. Вторая группа включает в себя исполняемый программный модуль ассембле- ра asm.exe и файл его исходного описания на языке С. В эту же группу также вклю- чен файл, содержащий тестовую программу на языке ассемблера, и файлы, получен- ные в результате обработки этой программы ассемблером. Данная группа файлов на- ходится в разделе С. Третья группа файлов, расположенная в разделе DEMO_TEST, представляет собой тестовый проект, иллюстрирующий использование компонентов рассматриваемой версии микропроцессорного ядра PicoBlaze. Демонстрационный проект и все компоненты ядра полностью совместимы с любой из конфигураций средств проектирования фирмы Xilinx серии ISE, включая свободно распространяе- мую версию ISE WebPACK. Исполнительный модуль выполнен в форме компонента picoblaze, представляю- щего собой макрос с относительным размещением, описание которого на языке VHDL содержится в файле picoblaze, vhd. В этом описании используется ряд компо- нентов следующего (более низкого) уровня иерархии, которые в большинстве своем соответствуют элементам архитектуры микропроцессорного ядра PicoBlaze. Описа- ния этих компонентов находятся в соответствующих файлах, которые расположены в том же разделе, в котором находится и файл описания компонента верхнего уровня иерархии picoblaze. Названия файлов, содержащих описания компонентов нижнего уровня иерархии, как правило, совпадают с именами этих компонентов. Выражения декларации компонента picoblaze в составе VHDL-описания проектируемой системы выглядят следующим образом: component picoblaze Port ( address: out std_logic_vector(7 downto 0); instruction: in std_logic_vector(15 downto 0);
ГЛАВА 5 61 portjd: out std_logic_vector(7 downto 0); write_strobe: out stdjogic; out_port: out stdjogic_vector(7 downto 0); read_strobe: out stdjogic; in_port: in stdjogic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic ); end component; В приведенных выражениях декларации используется та же система обозначений интерфейсных цепей компонентов микропроцессорного ядра PicoBlaze, что и для компонентов базового варианта, подробно описанная в гл. 2. Включение экземпляра компонента, представляющего исполнительный модуль picoblaze, в состав структур- ного описания архитектуры проектируемой микропроцессорной системы осуществ- ляется с помощью следующей конструкции: inst_name_processor: picoblaze port map( address => address_name, instruction => instruction_name, portjd => portjdjiame, write_strobe => write_strobe_name, ouLport => out_port_name, read_strobe => read_strobe_name, in_port => in_port_name, interrupt => interrupLevent, reset => reset_name, elk => clk_name ); В приведенном шаблоне следует вместо идентификатора inst_name-processor за- дать метку, которая, как правило, соответствует позиционному обозначению созда- ваемого экземпляра компонента. Кроме того, в операторе port тар нужно указать на- звания сигналов (цепей), которые применяются в описании проектируемого устрой- ства. Для отладки разрабатываемой программы методом моделирования микропроцес- сорного ядра в составе создаваемого проекта с помощью системы ModelSim ХЕ [1] можно использовать компонент виртуального ПЗУ микропрограмм. Этот компонент представляет ПЗУ информационной емкостью 4 Кбит с организацией 256 х 16 разря- дов. В качестве шаблона для декларации и создания экземпляра компонента вирту- ального ПЗУ микропрограмм можно использовать соответствующие выражения, приведенные в гл. 2 для модуля программной памяти ядра PicoBlaze, реализуемого на базе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E. Название компонента виртуального ПЗУ микропрограмм должно совпадать с именем файла, в котором со- держится текст отлаживаемой программы на языке ассемблера. Тестовый проект, включенный в состав комплекта микропроцессорного ядра PicoBlaze, можно использовать в качестве образца VHDL-описания отладочной сис- темы. Основу этой системы образует VHDL-описание объекта DEMO, в структуру которого входит исполнительный модуль и подключенный к нему модуль виртуаль-
62 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ной программной памяти. Ниже приведен полный текст описания тестовой системы, который также демонстрирует методику применения компонента picoblaze в составе проектируемого устройства. -- Standard IEEE libraries library IEEE; use IEEE.STD_LOGIC_1164.ALL; use 1EEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSlGNED.ALL; entity demo is Port (output: out std_logic_vector(7 downto 0); reset: in stdjogic; elk: in stdjogic); end demo; -- Start of test achitecture architecture Behavioral of demo is component picoblaze Port ( address: out std_logic_vector(7 downto 0); instruction: in stdjogic_vector(15 downto 0); portjd : out std_logic_vector(7 downto 0); write_strobe: out stdjogic; out_port: out std_logic_vector(7 downto 0); read_strobe: out stdjogic; in_port: in std_logic_vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic ): end component; -- declaration of program ROM component demoJest Port ( address : in std_logic_vector(7 downto 0); dout: out std_logic_vector(15 downto 0); elk: in stdjogic ); end component; - Signals used to connect picoblaze to program ROM and I/O logic signal address: std_logic_vector(7 downto 0); signal instruction : std_logic_vector(15 downto 0); signal portjd: std_logic_vector(7 downto 0);
ГЛАВА 5 63 signal out_port: stdjogic_vector(7 downto 0); signal in_port: std_logic_vector(7 downto 0); signal write_strobe: stdjogic; signal read_strobe: stdjogic; signal interrupt_event: stdjogic; - signal reset: stdjogic; - Start of circuit description begin - Inserting picoblaze and the program memory processor: picoblaze port map( address => address, instruction => instruction, portjd => portjd, write_strobe => write_strobe, ouLport => ouLport, read, strobe => read_strobe, in_port => in_port, interrupt => interrupLevent, reset => reset, elk -> elk ); program: demoJest port map( address => address, dout => instruction, elk => elk); - Unused inputs on processor in_port <= «00000000»; interrupLevent <= '01; - reset <- '01; - - adding the output registers to the processor IO_registers: process(clk) begin - waveform register at address 01 if clk'event and clk=T then if portjd(0)='1l and write_strobe=T then output <= ouLport; end if; end if; end process ICLregisters; end Behavioral: - END OF FILE demo.VHD
64 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС В структуре представленного описания можно выделить 3 раздела. В первом разделе описания указаны ссылки на используемые стандартные библиотеки и пакеты. Следую- щий раздел содержит операторы, описывающие интерфейс объекта DEMO. В третьем разделе приводится структурное описание архитектуры этого объекта. Этот раздел со- стоит из пяти секций. Первая секция содержит выражения декларации используемых компонентов. Во второй секции представлены выражения декларации внутренних сигна- лов (цепей) устройства. В третьей секции описывается собственно структура объекта DEMO. Четвертая секция содержит выражения, которые определяют значения сигналов на неиспользуемых входах микропроцессорного ядра. Пятая секция описывает процесс формирования выходных сигналов объекта DEMO. 5.4. Система команд микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Базовая система команд микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, выполняемых на основе ПЛИС семейства CoolRunner-II, включает в себя 49 инструкций, которые были подробно рассмотрены в гл. 3. При классификации команд по функциональному признаку они подразделяются на 6 уже известных групп. Изменения произошли только в формате команд. В ряде инструк- ций поменялась длина полей и коды выполняемых операций. При этом полная длина команд не изменилась и по-прежнему составляет 16 двоичных разрядов. В некоторых командах изменилось взаимное расположение полей. Мнемоническая форма записи инструкций сохранилась без изменений. При необходимости разработчик может расширить существующую систему команд, дополнив ее собственными инструкциями. Для этого нужно внести соот- ветствующие изменения в файлы исходного описания микропроцессорного ядра picoblaze.vhd и ассемблера asm.cpp. В последующих разделах будут представлены соответствующие форматы инст- рукций для каждой функциональной группы, которые входят в базовую систему ко- манд рассматриваемого представителя семейства микропроцессорных ядер PicoBlaze. 5.5. Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на базе кристаллов семейства CoolRunner-II В командах безусловного и условных переходов JUMP изменились значения и структура поля кода операции. Форматы команд безусловного и условных перехо- дов JUMP в новой редакции представлены в табл. 5.1. Таблица 5.1. Форматы команд переходов для микропроцессорного ядра PicoBlaze Поле кода операции Поле адреса перехода Мнемоника Выполняемая операция 1 1 0 1 0 0 X X А А А А А А А А JUMP аа Безусловный переход 1 1 0 1 0 1 0 0 А А А А А А А А JUMPZ.aa Переход при условии, что флаг ZERO Flag находится в установ- ленном состоянии 1 1 0 1 0 1 0 1 А А А А А А А А JUMP NZ, аа Переход при условии, что флаг ZERO Flag находится в сброшен- ном состоянии 1 1 0 1 0 1 1 0 А А А А А А А А JUMP С, аа Переход при условии, что флаг CARRY Flag находится в установ- ленном состоянии
ГЛАВА 5 65 Поле кода операции Поле адреса перехода Мнемоника Вь/поляяемая операция 1 1 0 1 0 1 1 1 А А А ААА А А JUMP NC, аа Переход при условии, что флаг CARRY Flag находится в сброшен- ном состоянии 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Модификация команд обращения к подпрограммам CALL также затронула структуру поля кода операции. Поле адреса вызываемой подпрограммы осталось без изменений. Новые версии форматов команд безусловного и условных вызовов под- программ CALL приведены в табл. 5.2. Таблица 5.2. Форматы команд вызова подпрограмм для микропроцессорного ядра PicoBlaze Поле кода операции Поле адреса подпрограммы Мнемоника Выполняемая операция 1 1 0 1 1 0 X X А А А А А А А А CALL аа Безусловный вызов подпрограммы 1 1 0 1 1 1 0 0 А А А А А А А А CALL Z, аа Вызов подпрограммы при условии, что флаг ZERO Flag находится в установленном состоянии 1 1 0 1 1 1 0 1 А А А А А А А ; А CALL NZ, аа Вызов подпрограммы при условии, что флаг ZERO Flag находится в сброшенном состоянии 1 1 0 1 1 1 1 0 А А А А А А А А CALL С, аа Вызов подпрограммы при условии, что флаг CARRY Flag находится в установленном состоянии 1 1 0 1 1 1 1 1 А А А А А А А А CALL NC, аа Вызов подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Преобразование инструкций возврата из подпрограммы RETURN проявилось в изменении структуры полей и значений кода выполняемой операции. В табл. 5.3. представлены модифицированные форматы команд безусловного и условных возвра- тов из подпрограммы RETURN. Таблица 5.3. Форматы команд безусловного и условных возвратов из подпрограммы для микропроцессорного ядра PicoBlaze Поле кода операции Поле адреса Мнемони- ка Выполняемая операция 1 0 0 1 0 0 X X 0 0 0 0 0 0 0 0 RETURN Безусловный возврат из подпрограммы 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 RETURN Z Возврат из подпрограммы при условии, что флаг ZERO Flag находится в уста- новленном состоянии 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 RETURN NZ Возврат из подпрограммы при условии, что флаг ZERO Flag находится в сбро- шенном состоянии 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 RETURN C Возврат из подпрограммы при условии, что флаг CARRY Flag находится в установленном состоянии 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 RETURN NC Возврат из подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 3—2062
66 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 5.6. Группа логических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейства CoolRunner-ll В формате инструкций, относящихся к группе логических команд, произошли следующие изменения по сравнению с аналогичными инструкциями, представлен- ными в гл. 3. Во-первых, в новой редакции поле кода операции включает в себя 5 двоичных разрядов. Во-вторых, длина полей команд, в которых указываются номе- ра регистров, используемых при выполнении операции, уменьшилась на 1 бит и со- ставляет 3 двоичных разряда. Изменение длины полей, предназначенных для опреде- ления номеров регистров, обусловлено двукратным сокращением объема блока реги- стров общего назначения. В качестве номеров регистров N пМ, которые указываются при мнемонической форме записи инструкций, могут использоваться любые числа в диапазоне от 0 до 7. Новая редакция форматов команд поразрядных операций «Логическое И» (по- разрядное умножение) AND, выполняемых над содержимым одного из регистров об- щего назначения и константой kk, значение которой задается непосредственно в тек- сте инструкции, а также над содержимым двух регистров общего назначения, приве- дена в табл. 5.4. Таблица 5.4. Форматы команд поразрядных операций «Логическое И» для микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 0 1 п П : П . : К К К К К К К К ANDsN, kk Поразрядное «Логическое И» содержимого регистра sN и кон- станты kk Поле кода операции Поле номера первого регистра Поле номера второго ре- гистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 0 1 п п п m m m 0 0 0 0 0 ANDsN, sM Поразрядное «Логическое И» содержимого регистров sN и sM 15 14 13 12 11 Ю ; 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Модифицированные форматы инструкций OR, предназначенных для выполнения операций поразрядного сложения двух операндов (поразрядное «Логическое ИЛИ»), определены в табл. 5.5 для двух вариантов. В первом случае операндами являются содержимое любого из восьми регистров общего назначения и константа kk, значение которой указывается в соответствующем поле команды, а во втором - содержимое двух регистров с номерами N иМ. Таблица 5.5. Форматы команд поразрядных операций «Логическое ИЛИ» для микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Поле кода операции Поле номера : регистра Поле константы Мнемони- ка Выполняемая операция 0 0 0 1 0 п п IIIII К К К К К К К К ОЙШ if Поразрядное «Логическое ИЛИ» содержимого регистра sN и кон- станты kk 15 14 13 12 11 10 Я,." 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 5 67 Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемони- ка Выполняемая операция 0 1 0 1 0 п п П m m m 0 0 0 0 0 ORsN, sM Поразрядное «Логическое ИЛИ» содержимого регистров sN и sM 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Новая редакция форматов команд XOR, используемых для выполнения пораз- рядной операции «Исключающее ИЛИ», с участием содержимого регистра общего назначения с номером N и константы кк или содержимого двух регистров с номерами N и М представлена в табл. 5.6. Таблица 5.6. Форматы команд поразрядных операций «Исключающее ИЛИ» для микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 1 1 п п п К К К К К к К к XOR sN, kk Поразрядное «Исключаю- щее ИЛИ» содержимого ре- гистра sN и константы kk Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 1 1 п п п m m m 0 0 0 0 0 XORsN, sM Поразрядное «Исключаю- щее ИЛИ» содержимого регистров sN и sM 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Форматы инструкций LOAD, предназначенных для загрузки константы или со- держимого какого-либо регистра в выбранный регистр общего назначения, в новой редакции приведены в табл. 5.7. Таблица 5.7. Форматы инструкции загрузки данных в регистр общего назначения для микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Поле кода операции Поле номера , регистра Поле константы Мнемоника Выполняемая операция 0 0 0 0 0 п п п К К К К К К К К LOADsN, kk Загрузка константы kk в регистр sN Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 0 0 п п п m m m 0 0 0 0 0 LOADsN, sM Загрузка содержимого ре- гистра sM в регистр sN 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 5.7. Группа арифметических команд микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства CoolRunner-II В структуре полей арифметических команд микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства CoolRunner-II, произошли те же изменения (по сравнению с форматами аналогичных команд, приведенными в гл. 3), что и в логических инструкциях, рассмотренных в предыдущем разделе.
68 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Модифицированные варианты форматов команд сложения ADD содержимого ре- гистра с номером N и константы kk или содержимого двух регистров общего назна- чения с номерами N и Л/ без учета переноса представлены в табл. 5.8. Таблица 5.8. Форматы команд сложения двух операндов без учета переноса для микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 0 0 п п п К К К К К К К К ADDsN, kk Сложение содержимого ре- гистра sN и константы kk Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 0 0 п л п m m m 0 0 0 0 0 ADD sN, sM Сложение содержимого регистров sN и sM 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Новая версия форматов инструкций ADDCY, предназначенных для вычисления суммы двух операндов с учетом значения флага переноса, полученного при выпол- нении предыдущей операции, приведена в табл. 5.9. Таблица 5.9. Форматы команд сложения двух операндов с учетом переноса для микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Поле кода операции Поле номе- ра регистра Поле константы Мнемоника Выполняемая операция 0 0 1 0 1 п п п К К К К К к К к ADDCY sN, kk Сложение содержимого регистра sN и константы kk с учетом пе- реноса Поле кода операции Поле номера пер- вого реги- стра Поле номе- ра второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 0 1 п п п m m пл 0 0 0 0 0 ADDCY sN, sM Сложение содержимого регист- ров sN и sM с учетом переноса 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Форматы инструкций SUB, используемых для выполнения операции вычитания с участием тех же операндов, что и в командах сложения, без учета заема, в новой редакции представлены в табл. 5.10. Таблица 5.10. Форматы команд вычитания без учета заема для микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 1 0 п п п К К К К К к К к SUB sN, kk Вычитание из содержимого реги- стра sN константы kk Поле кода операции Поле номера первого регистра Поле номе- ра второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 1 0 п п п m m m 0 0 0 0 0 SUBsN, sM Вычитание содержимого регистра sM из содержимого регистра sN 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 5 69 Модифицированные варианты форматов команд SUBCY, предназначенных для вычисления разности двух операндов с учетом значения заема, образовавшегося при выполнении предыдущей операции, приведены в табл. 5.11. Таблица 5.11. Форматы инструкций вычитания с учетом заема для микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 1 1 п 0 п К К К К К К К К SUBCY sN, kk Вычитание из содержимого регистра sN константы kk с учетом заема Попе кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 1 1 п п п m m m 0 0 0 0 0 SUBCY sN, sM Вычитание содержимого ре- гистра sM из содержимого регистра sN с учетом заема 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 5.8. Команды сдвига данных для микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейства CoolRunner-II В формате команд, предназначенных для выполнения операций сдвига данных, изменилась длина полей кода операции и номера регистра. Преобразованные форма- ты инструкций логического (арифметического) и циклического сдвига данных, нахо- дящихся в регистре общего назначения с указанным номером, представлены в табл. 5.12. Таблица 5.12. Форматы команд логического или циклического сдвига данных для микропроцессорного ядра PicoBlaze (семейство CoolRunner-II) Поле кода операции Поле но- мера ре- гистра Поле направле- ния сдвига Поле типа сдвига Мнемо- ника Выполняемая операция 1 0 1 0 0 п п п 0 0 0 0 1 1 1 0 SRO sN Логический сдвиг содержимого регистра sN вправо на один разряд с записью 0 1 0 1 0 0 п п 0 0 0 0 0 1 1 1... 1 < SR1 sN Логический сдвиг содержимого регистра sN вправо на один разряд с записью 1 1 0 1 0 0 л п п 0 0 0 0 1 0 1 0 SRXsN Логический сдвиг содержимого регистра sN вправо с сохранением последнего разряда 1 0 1 0 0 п л п 0 0 0 0 1 0 0 0 SRA sN Циклический сдвиг содержимого регистра sN вправо через разряд переноса/заема 1 0 1 0 0 Л П л 0 0 0 0 1 1 о 0 RR sN Циклический сдвиг содержимого регистра sN вправо без участия бита переноса 1 0 1 0 0 П П п 0 0 0 0 0 1 1 0 г SLO sN Логический сдвиг содержимого регистра sN влево на один разряд с записью 0 1 0 1 0 0 Л п п 0 0 0 0 0 1 1 1 SL1 sN Логический сдвиг содержимого регистра sN влево на один разряд с записью 1 1 0 1 0 0 п п п 0 0 0 0 0 0 1 0 SLX sN Логический сдвиг содержимого регистра sN влево с сохранением последнего раз- ряда 15 14 13 12 11 10 9 ; 8 7 6 5 4 3 2 1г 0 Номер разряда микрокоманды
70 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Окончание табл. 5.12 Поле кода операции Попе мера гисщ нд- ре- оа Поле направле- ния сдвига Поле типа Мнемо- ника Выполняемая операция 1 0 1 0 0 п п п 0 0 0 0 0 0 о SLA sN Циклический сдвиг содержимого регистра sN влево через разряд переноса/заема 1 0 1 0 0 п. П п 0 0 0 0 0 1 0 о RLsN Циклический сдвиг содержимого регистра sN влево без участия бита переноса 15 14 13 12 11 ю 9 8 7 6 5 4 3 2 :.р 0 Номер разряда микрокоманды 5.9. Команды ввода/вывода микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства CoolRunner-ll Структура инструкций ввода/вывода, используемых для организации чтения данных из входного порта в заданный регистр общего назначения и передачи инфор- мации из указанного регистра в выходной порт, отличается от структуры аналогич- ных команд, приведенной в гл. 3, длиной полей кода операции и номеров регистров. В новой редакции команд ввода/вывода указанные поля содержат соответственно 5 и 3 двоичных разряда. Новые варианты форматов команд ввода/вывода с различными видами адресации входных и выходных портов приведены в табл. 5.13. Таблица 5.13. Форматы команд ввода/вывода для микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Поле кода операции Поле номера регистра Поле адреса порта ввода/вывода Мнемоника Выполняемая операция 1 0 0 0 0 п п п К К К К К к К к INPUT sN, kk Чтение данных из порта ввода/вывода с адресом kk в регистр sN 1 0 0 0 1 п п п К К К К К к к к OUTPUTsN, Запись данных из регистра sN в порт ввода/вывода с адресом kk Поле кода операции Поле номера первого ; : регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 1 1 0 0 0 п п п m m m 0 0 0 0 0 INPUT SN, (sM) Чтение данных из порта ввода/вывода с адресом, определяемым регистром sM, в регистр sN 1 1 0 0 1 ; п п п m m m 0 0 0 0 0 OUTPUT sN, (sM) Запись данных из регистра sN в порт с адресом, опре- деляемым регистром sM 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряд а микрокоманды 5.10. Команды обслуживания прерываний микропроцессорного ядра PicoBlaze, реализуемого на основе кристаллов семейства CoolRunner-ll В формате инструкций обслуживания прерываний изменилось взаимное распо- ложение и длина поля кода операции и поля режима обработки прерываний.
ГЛАВА 5 71 Новая редакция форматов команд возврата из процедуры обслуживания преры- ваний RETURNI и установки режима обработки прерываний в программе ENABLE INTERRUPT и DISABLE INTERRUPT представлена в табл. 5.14. Таблица 5.14. Форматы команд обслуживания прерываний для микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Поле кода операции lUll режима обработки прерываний Мнемоника ? Выполняемая операция 1 0 1 1 0 о II 0 II V- 0g в RETURNI ENABLE Возврат из процедуры обработки и установка режима запрета пре- рывания 1 0 1 1 0 о 0 0 II || ш II in Й in in RETURNI DISABLE Возврат из процедуры обработки и установка режима разрешения прерывания 1 1 1 1 0 0 о || II ° 0 II 0 0 0 hi ENABLE INTERRUPT Установка режима разрешения прерывания : "| 1 1 1 1 0 II II ii 0 0 0 0 0 in DISABLE INTERRUPT Установка режима запрета преры- 15 14 13 12 11 м в 7 б 5" 4 ж тр Номер разряда микрокоманды Для практического освоения рассмотренного варианта микропроцессорного ядра PicoBlaze и для аппаратной отладки проектов, включающих это ядро, можно вос- пользоваться инструментальным комплектом CoolRunner-II Design Kit, возможности которого рассмотрены в гл. 14.
6. ОСОБЕННОСТИ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ПРИМЕНЕНИЯ В ПРОЕКТАХ, РЕАЛИЗУЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-3, VIRTEX-II, VIRTEX-IIPRO И VIRTEX-4 После начала серийного выпуска кристаллов нового семейства с архитектурой FPGA (Field Programmable Gate Array) Spartan-3 [2, 5] фирмой Xilinx была разработа- на соответствующая версия микропроцессорного ядра PicoBlaze, которая предназна- чена в первую очередь для применения в проектах, реализуемых на основе ПЛИС этого семейства. Кроме того, новая версия ядра PicoBlaze может успешно использо- ваться в качестве основы для проектирования систем на кристалле, выполняемых на базе ПЛИС семейств Virtex-II, Virtex-IIPRO и Virtex-4. Микропроцессорное ядро PicoBlaze, предназначенное для применения в проек- тах, выполняемых на базе ПЛИС серий Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, отличается от других представителей этого семейства, рассмотренных ранее, расши- ренным спектром функциональных возможностей. Новая версия ядра представляет собой результат дальнейшего развития базового варианта микропроцессорного ядра PicoBlaze, реализуемого на основе кристаллов семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E. Максимальное использование архитектурных особенностей и ресурсов ПЛИС серий Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 позволило обеспечить под- держку дополнительных операций и более высокие технические характеристики со- ответствующего варианта микропроцессорного ядра. Учитывая все вышесказанное, основное внимание в настоящей главе уделяется отличиям характеристик, архитек- туры и системы команд новой версии микропроцессорного ядра PicoBlaze по сравне- нию с базовым вариантом, описание которого приведено в гл. 2, 3. 6.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Большинство основных характеристик семейства встраиваемых микропроцес- сорных ядер PicoBlaze, представленных в гл. 2, справедливы также и для версии, ко- торая предназначена для реализации на базе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4. Поэтому далее приводятся только отличительные особенно- сти рассматриваемой версии ядра PicoBlaze. В новой версии, применяемой в ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, произошли следующие измене- ния по сравнению с базовым вариантом микропроцессорного ядра: увеличена разрядность шины адресов, которая составляет 10 бит; расширена разрядность шины команд до 18 бит; в дополнение к блоку регистров общего назначения, включающему 16 восьми- разрядных регистров, предусмотрено наличие блока сверхоперативного запоми- нающего устройства емкостью 64 байта; - увеличен объем встроенного ППЗУ микропрограмм, реализуемого на основе блочной памяти ПЛИС Block SelectRAM, который составляет 1024 х 18 разря- дов; предусмотрена возможность формирования дополнительных признаков выпол- нения операции в АЛУ;
ГЛАВА 6 73 модернизирована схема управления прерываниями; расширена система команд до 57 инструкций; - увеличена глубина стека до 31 уровня; - объем ресурсов кристалла, необходимых для реализации микропроцессорного ядра PicoBlaze в ПЛИС семейства Spartan-З, ограничивается 96 секциями (slices), что составляет 5 % от полного объема логических ресурсов кристалла XC3S200 и менее 0,3 % от логической емкости ПЛИС XC3S5000; возросла производительность, достигая от 43 MIPS до 66 MIPS (в зависимости от типа и класса быстродействия используемого кристалла); разработан загрузчик программ JTAG Program Loader, позволяющий записывать новый программный код непосредственно в программную память ядра PicoBlaze че- рез порт JTAG-интерфейса ПЛИС с помощью стандартного загрузочного кабеля; два варианта реализации компонентов ядра - в виде описаний на языках высоко- го уровня VHDL и Verilog соответственно. Расширение функциональных возможностей новой версии микропроцессорного ядра привело к незначительному увеличению объема используемых ресурсов ПЛИС. По сравнению с базовым вариантом ядра PicoBlaze объем требуемых ресурсов вырос на 26 %, а по сравнению с версией, предназначенной для реализации в кристаллах семейств Virtex-II, рассмотренной в гл. 4, - на 14 %. 6.2. Архитектура микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Архитектура микропроцессорного ядра PicoBlaze, предназначенного для приме- нения в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, показана на рис. 6.1. В структурном отношении она отличается от архитектуры базовой версии, рассмотренной в гл. 2, наличием дополнительного сверхоперативного запоминающе- го устройства (СОЗУ). Остальные различия проявляются на уровне отдельных струк- турных элементов. Эти отличия обусловлены расширением функциональных воз- можностей этих элементов в новой версии микропроцессорного ядра PicoBlaze за счет использования преимущества архитектуры ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4. Включение в состав архитектуры СОЗУ создает предпосылки существенного со- кращения времени выполнения программы за счет исключения операций обращения к внешней (по отношению к микропроцессорному ядру) памяти. Содержимое каждо- го регистра общего назначения может быть передано в одну из ячеек СОЗУ, и наобо- рот. Для обмена данными между блоком регистров общего назначения и СОЗУ пре- дусмотрены специальные команды, время выполнения которых не превышает двух машинных циклов. Восьмиразрядное АЛУ кроме логических функций, операций сложения, вычита- ния и сдвига, поддерживаемых базовой версией ядра, выполняет также операции по- разрядного и арифметического сравнения двух операндов. В новой версии микро- процессорного ядра, кроме признаков нулевого результата ZERO Flag и перено- са/заема CARRY Flag, АЛУ способно формировать признак четности (или нечетности) PARITY (при выполнении инструкции TEST). Этот признак отображает- ся с помощью флага CARRY Flag.
74 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Адрес порта g ввода/вывода Входные данные 3, IN_PORT[7:0] * Адрес команды ADDRESSING] CLK Блок регистров общего назначения Сверхоперативное запоминающее устройство 64 байта Память программ 1024 х18 бит Шина команд 18, Сброс RESET- Тактовый сигнал Прерывание INTERRUPT INTERRUPT-ACK Блок дешифровки команд 8 То Блок управления PORT_ID[7:0] вводом/выводом В. ---►READ STROBE —►writeIstrobe Выходные данные OUT_PORT[7:0] 8, АЛУ Регистр статуса ZERO CARRY PARITY Регистр фиксации флагов при прерываниях Схема управления прерываниями Блок управления выбором следующего адреса Программный счетчик Стек 8, 8 8 Ж 8 Рис. 6.1. Архитектура микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Увеличение емкости программной памяти до 1024 х 18 разрядов повлекло за со- бой расширения шины адресов до 10 разрядов. Таким образом, верхняя граница ад- ресного пространства памяти программ составляет 3FF. Изменение длины команд до 18 разрядов привело к соответствующему расширению шины команд. Схема управления прерываниями, кроме внутренних управляющих сигналов, необходимых для выполнения процедуры обработки прерываний, формирует вы- ходной сигнал interrupt_ack. Изменения в процедуре обработки прерываний кос- нулись также значения адреса, по которому указывается вектор процедуры обслуживания прерывания. В связи с расширением диапазона адресов программ- ной памяти в качестве адреса вектора прерывания, который в семействе микро- процессорных ядер PicoBlaze соответствует максимально допустимому значению адреса, используется значение 3FF. В соответствии с увеличением ширины шины адреса также изменена разрядность тех элементов архитектуры микропроцессорного ядра PicoBlaze, которые участвуют в процессе формирования и хранения адресов команд. Разрядность программного счетчика, регистров стека и блока управления выбором адреса следующей команды в новой версии составляет 10 бит. Модернизация блока дешифровки команд, обусловленная необходимостью учета рассмотренных выше особенностей элементов архитектуры, привела, в частности, к изменению формата команд, поддерживаемых микропроцессорным ядром Pico Blaze, которое предназначено для применения в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4.
ГЛАВА 6 75 6.3. Структура проекта микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Обобщенная структура варианта ядра PicoBlaze, предназначенного для примене- ния в составе встраиваемых микропроцессорных систем, реализуемых на базе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, приведена на рис. 6.2. Она от- личается от обобщенной структуры базовой версии ядра, рассмотренной в гл. 2, только типом и параметрами модулей, которые входят в ее состав. Модуль ЦПУ (исполнительный модуль) PicoBlaze KCPSM3 Входные данные Прерывание Сброс Память программ INSTRUCTION[17:0] ADDRESS [9:0] ->CLK g .» Выходные данные 8, Адрес порта 7* ввода/вывода ----> Строб чтения ----> Строб записи ----> Подтверждение прерывания Шина адреса OUT_PORT[7:0] PORTJD[7:0] READ.STROBE WRITE_STROBE INTERRUPT-ACK INSTRUCTION[17:0] ADDRESS[9:0] IN_PORT[7:0] INTERRUPT RESET Тактовый сигнал -r-b CLK Шина команд я 10, Рис. 6.2. Обобщенная структура микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Исполнительный модуль, являющийся основой ядра, выполнен в форме компо- нента KCPSM3, представляющего собой макрос с относительным размещением. Описание этого макроса на языке VHDL содержится в файле kcpsm3.vhd, а на языке Verilog - в файле kcpsm3.v. В настоящей и следующей главе основное внимание уде- ляется VHDL-описаниям ядра PicoBlaze и его компонентов. Интерфейс компонента KCPSM3 имеет несколько отличий по сравнению с соответствующим компонентом KCPSM микропроцессорного ядра PicoBlaze, реализуемого на базе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E. Во-первых, изменилась размерность векторов, представляющих шины адресов и команд. Во-вторых, в описании интерфейса компо- нента KCPSM3 добавлен выходной порт interrupt_аск, который соответствует одно- именному выходу сигнала подтверждения прерывания. Для декларации компонента KCPSM3 в составе VHDL-описания проектируемой системы применяются следую- щие выражения: component kcpsm3 Port ( address: out std_logic_vector(9 downto 0); instruction: in stdjogic_vector(17 downto 0); portjd: out stdjogic_vector(7 downto 0); write_strobe: out stdjogic; ouLport: out stdjogic_vector(7 downto 0); read_strobe: out stdjogic; in_port: in stdjogic_yector(7 downto 0); interrupt: in stdjogic; interrupLack: out stdjogic; reset: in stdjogic;
76 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС elk: in stdjogic ); end component; В приведенных здесь и далее выражениях декларации используется система обо- значений интерфейсных цепей компонентов, которая подробно описана в гл. 2 для базового варианта микропроцессорного ядра PicoBlaze. Чтобы добавить экземпляр компонента KCPSM3, представляющего исполнительный модуль, в состав структур- ного описания архитектуры проектируемой системы, необходимо воспользоваться следующей конструкцией, указав вместо inst_name^processor идентификатор соот- ветствующего экземпляра компонента: inst_name_processor: kcpsm3 port map( address => address_signal, instruction => instruction_signal, portjd -> portjd.signal, write_strobe => write_strobe_signal, ouLport => out_poit_signal, read_strobe => read_strobe_signal, in_port => in_porLsignal, interrupt => interrupLsignal, interrupt_ack => interrupt_ack_signal, reset => reset_signal, elk => clk.signal ); Для реализации программной памяти в новой версии микропроцессорного ядра PicoBlaze используется один модуль блочного ОЗУ Block SelectRAM, емкость кото- рого в ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 составляет 18 Кбит. Таким образом, максимальный объем загружаемой микропроцессорной про- граммы вырос в 4 раза по сравнению с базовой версией ядра. Для описания модуля программной памяти в составе микропроцессорного ядра используется компонент с названием progjrom. который представляет ППЗУ с информационной емкостью 1024 х 18 разрядов, реализуемое на основе однопортового блочного ОЗУ с аналогичной организацией. Выражения декларации этого компонента в составе VHDL-описания разрабатываемой системы выглядят следующим образом: component prog_rom Port ( address: in stdjogic_vector(9 downto 0); instruction : out stdJogic_vector(17 downto 0); elk: in stdjogic ); end component; Для создания экземпляра компонента, представляющего программную память, необходимо в состав VHDL-описания разрабатываемой системы включить оператор, который имеет следующий вид. program: prog_rom port map( address => address_signal,
ГЛАВА 6 77 instruction => instruction_signal, elk => clk_signal ); При практическом использовании выражений декларации и создания экземпляра компонента, соответствующего программной памяти, нужно вместо идентификатора prog_rom указать название компонента, совпадающее с идентификатором файла, в котором должен быть записан исходный текст загружаемой программы. Необходи- мость такой замены обусловлена особенностями функционирования ассемблера, ко- торый формирует описание содержимого ППЗУ программ на языках VHDL и Verilog в виде файлов с расширением vhd и v соответственно. Названия этих файлов описа- ния содержимого программной памяти совпадают с идентификатором файла, содер- жащего исходный текст транслируемой программы. Законченное описание встраиваемого микропроцессорного ядра PicoBlaze, со- стоящего из исполнительного модуля, сопряженного с программной памятью, вы- полнено в форме объекта EMBEDDEDKCPSM3. Ниже приведен полный текст опи- сания объекта EMBEDDEDKCPSM3, который имеет ту же структуру, что и описа- ние объекта EMBEDDEDKCPSM, представленное в гл. 2. - EMBEDDED_KCPSM3.VHD - This file instantiates the KCPSM3 processor macro and connects the - - program ROM. - - NOTE: The name of the program ROM will probably need to be changed to reflect the name of the program (PSM) file applied to the assembler. -- Standard IEEE libraries library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity embedded_kcpsm3 is Port ( portjd: out std_logic_vector(7 downto 0); write_strobe: out stdjogic; read_strobe: out stdjogic; out_port: out std_logic_vector(7 downto 0); in_port: in std_logic_vector(7 downto 0); interrupt: in stdjogic; interrupt_ack: out stdjogic; reset: in stdjogic; elk: in stdjogic); end embedded_kcpsm3; - Start of test achitecture architecture connectivity of embedded_kcpsm3 is -- declaration of KCPSM3
78 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС component kcpsm3 Port ( address: out std Jogic_vector(9 downto 0); instruction: in stdjogic_vector(17 downto 0); portjd: out stdjogic_vector(7 downto 0); write_strobe: out stdjogic; out_port: out stdjogic_vector(7 downto 0); read_strobe: out stdjogic; in_port: in stdjogic_vector(7 downto 0); interrupt: in stdjogic; interrupLack: out stdjogic; reset: in stdjogic; elk: in stdjogic); end component: - - declaration of program ROM component prog_rom Port ( address: in stdjogic_vector(9 downto 0); instruction: out stdjogic„vector(17 downto 0); elk: in stdjogic); end component; - Signals used to connect KCPSM3 to program ROM signal address: stdjogic_vector(9 downto 0); signal instruction : stdjogic_vector(17 downto 0); - Start of test circuit description begin processor: kcpsm3 port map( address => address, instruction => instruction, portjd => portjd, write_strobe => write_strobe, ouLport => ouLport, read_strobe => read_strobe, in_port => in_port, interrupt => interrupt, interrupLack => interrupLack, reset => reset, elk => elk); program: prog„rom port map( address => address, instruction => instruction, elk => elk); end connectivity; - END OF FILE EMBEDDED_KCPSM3.VHD
ГЛАВА 6 79 Объект EMBEDDEDKCPSM3 может применяться автономно или в качестве элемента, входящего в состав разрабатываемой системы. В последнем случае этот объект представляется в форме одноименного компонента, декларация которого вы- полняется следующим образом: component embedded_kcpsm3 Port ( portjd: out stdjogic_vector(7 downto 0); write_strobe: out stdjogic; read_strobe: out stdjogic; ouLport: out stdjogic_vector(7 downto 0); in_port: in stdjogic_vector(7 downto 0); interrupt: in stdjogic; interrupt_ack: out stdjogic; reset: in stdjogic; elk: in stdjogic end component: Создание экземпляра компонента embedded_kcpsm3 осуществляется с помощью оператора, который имеет следующий вид: insLname_embedded_processor: embedded J<cpsm3 port map( portjd => portjd.signal, write_strobe => write_strobe_signal, read_strobe => read_strobe_signal, ouLport => out-port-Signal, in_port => in_port_signal, interrupt => interrupLsignal, interrupt_ack => interrupt_ack_signal, reset => reset-signal, elk => clk.signal ); При использовании данного оператора следует вместо метки inst_name -embedded-processor указать идентификатор соответствующего экземпляра компо- нента embedded_kcpsm3. Все компоненты микропроцессорного ядра PicoBlaze, представленные выше, полностью совместимы с любой конфигурацией средств проектирования фирмы Xilinx серии ISE, в том числе и со свободно распространяемой версией ISE WebPACK [1]. 6.4. Общая характеристика системы команд микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) В отличие от других представителей семейства микропроцессорных ядер PicoBlaze система команд новой версии ядра включает в себя 57 инструкций. При классификации по функциональному признаку команды подразделяются на 7 групп. В дополнение к шести уже известным группам, которые были подробно рассмотрены в гл. 3, добавляется группа команд обмена данными между блоком регистров общего назначения и СОЗУ.
80 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Кроме появления новых инструкций изменения произошли также в формате стандартных команд, поддерживаемых всеми версиями микропроцессорного ядра PicoBlaze, и их мнемонической записи. Преобразование формата инструкций в пер- вую очередь связано с теми архитектурными особенностями, которые были рассмот- рены в предыдущих разделах. Для новой версии ядра длина всех команд в двоичном представлении составляет 18 разрядов. В большинстве инструкций поменялась длина полей, и соответственно коды вы- полняемых операций. В некоторых командах изменилось взаимное расположение полей. В последующих разделах для каждой функциональной группы команд будут представлены соответствующие форматы и мнемоника инструкций микропроцессор- ного ядра PicoBlaze, предназначенного для использования в составе проектов, реали- зуемых на основе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4. Про- цесс выполнения операций рассматривается подробно только для новых команд, ко- торые не были представлены в гл. 3. Новый вариант микропроцессорного ядра PicoBlaze, предназначенный для при- менения в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, поддер- живается соответствующей версией ассемблера, которая включена в состав архива файлов, предоставляемого пользователю. 6.5. Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на базе кристаллов семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 В инструкциях безусловного и условных переходов JUMP изменилась структура поля кода операции и длина поля адреса перехода. В соответствии с разрядностью шины адресов и размером адресного пространства программной памяти длина поля адреса перехода увеличена до 10 двоичных разрядов. При мнемонической форме записи команд передачи управления в программе значение параметра, оп- ределяющего адрес перехода, указывается в виде последовательности, состоящей из трех шестнадцатеричных символов. Форматы команд безусловного и условных переходов JUMP для новой версии микропроцессорного ядра PicoBlaze представ- лены в табл. 6.1. Таблица 6.1. Форматы команд переходов микропроцессорного ядра PicoBlaze Поле кода операции Поле адреса перехода Мнемоника Выполняемая операция 1 1 0 1 0 0 X X А А А А А А А А А А JUMP ааа Безусловный переход 1 1 0 1 0 1 0 0 А А А А А А А А А А JUMP Z, ааа Переход при условии, что флаг ZERO Flag находится в установленном состоянии 1 1 0 1 0 1 0 1 А А А А А А А А А А JUMP NZ, ааа Переход при условии, что флаг ZERO Flag находится в сброшенном состоянии 1 1 0 1 0 1 1 0 А А А А А А А А А А JUMP С, ааа Переход при условии, что флаг CARRY Flag находится в установленном состоянии 1 1 0 1 0 1 1 1 А А А А А А А А А А JUMP NC, ааа Переход при условии, что флаг CARRY Flag находится в сброшенном состоянии 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 6 81 Модификация команд обращения к подпрограммам CALL также затронула структуру поля кода операции и длину поля адреса вызываемой процедуры. В новой редакции поле адреса вызываемой подпрограммы включает в себя 10 двоичных разрядов. При мнемонической форме записи команд обращения к подпрограммам значение параметра, указывающее начальный адрес вызываемой процедуры, представляется в виде трехзначного шестнадцатеричного числа. Новая редакция форматов команд безусловного и условных вызовов подпрограмм CALL приведе- на в табл. 6.2. Таблица 6.2. Форматы команд вызова подпрограмм для микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Поле кода операции Попе адреса подпрограммы Мнемоника Выполняемая : операция 1 1 0 0 0 0 X X А А А А I 11 А А А CALL ааа Безусловный вызов подпро- граммы 1 1 0 0 0 1 0 0 А А А А А А А А А А CALL Z, ааа Вызов подпрограммы при условии, что флаг ZERO Flag находится в установленном состоянии 1 1 0 0 0 1 0 1 А А А А А А А А А А CALL NZ, ааа Вызов подпрограммы при ус- ловии, что флаг ZERO Flag находится в сброшенном со- стоянии 1 1 0 0 0 1 1 0 А А А А А А А А А А CALL С, ааа Вызов подпрограммы при ус- ловий, что флаг CARRY Flag находится в установленном состоянии 1 1 0 0 0 1 1 1 А А А А А А А А А А CALL NC, ааа Вызов подпрограммы при ус- ловии, что флаг CARRY Flag находится в сброшенном со- стоянии 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Изменения в формате инструкций возврата из подпрограммы RETURN прояви- лись в структуре тех же полей, что и в командах вызова подпрограмм. Для всех вари- антов команд завершения выполняемой подпрограммы и передачи управления ос- новной программе или подпрограмме, из которых производился вызов данной про- цедуры, изменены коды выполняемой операции. Преобразование форматов команд возврата из подпрограммы не отразилось на мнемонической форме записи команд RETURN, которая сохранилась без изменений. В табл. 6.3 представлены модифици- рованные форматы команд безусловного и условных возвратов из подпрограммы RETURN. Таблица 6.3. Форматы команд безусловного и условных возвратов из подпрограммы для микропроцессорного ядра PicoBlaze Поле кода операции Нулевые разряды Мнемоника Выполняемая операция 1 0 1 0 1 0 X X 0 0 0 0 0 0 0 0 0 0 RETURN Безусловный возврат из под- программы : 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 RETURN Z Возврат из подпрограммы при условии, что флаг ZERO Flag находится в установленном состоянии 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
82 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Окончание табл. 6.3 Поле кода операции Нулевые разряды Мнемоника Выполняемая операция 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 RETURN NZ Возврат из подпрограммы при условии, что флаг ZERO Flag находится в сброшенном состоянии 1 0 1 0 1 1 1 0 о 0 0 0 0 0 0 0 0 0 RETURN С Возврат из подпрограммы при условии, что флаг CARRY Flag находится в ус- тановленном состоянии 1 0 1 0 1 1 1 1 0 0 ° 0 0 0 0 0 ° 0 RETURN NC Возврат из подпрограммы при условии, что флаг CARRY Flag находится в сброшенном состоянии 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 6.6. Группа логических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 В группу логических команд в дополнение к инструкциям, представленным в гл. 3, добавлена новая инструкция - TEST, которая будет подробно рассмотрена в конце этого раздела. В формате инструкций, которые относятся к группе логиче- ских команд, произошли следующие изменения по сравнению с аналогичными инст- рукциями, поддерживаемыми базовой версией микропроцессорного ядра. Во-первых, длина поля кода операции увеличилась на два разряда и составляет 6 бит. Во-вторых, изменились коды логических операций. В табл. 6.4 приведена новая редакция форматов команд поразрядных операций «Логическое И» (поразрядное умножение) AND, выполняемых над содержимым ре- гистра общего назначения с номером и константой kk, значение которой задается непосредственно в тексте инструкции, а также над содержимым двух регистров об- щего назначения с номерами N и М Таблица 6.4. Форматы команд поразрядных операций «Логическое И» микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 0 1 0 п п п п К К К К К К К к ANDsN, kk Поразрядное «Логическое И» содержимого регистра sN и константы kk Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 1 0 1 1 п л п п m m m m 0 0 0 0 ANDsN, sM Поразрядное «Логическое И» содержимого регистров sN и sM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 6 83 Форматы инструкций OR, предназначенных для выполнения операций поразряд- ного сложения двух операндов (поразрядное «Логическое ИЛИ») в рассматриваемой версии микропроцессорного ядра, определены в табл. 6.5 для двух вариантов. В пер- вом случае операндами являются содержимое регистра общего назначения с номером V и константа kk, значение которой указывается в соответствующем поле команды, а во втором - содержимое двух регистров общего назначения с номерами V и М. Таблица 6.5. Форматы команд поразрядных операций «Логическое ИЛИ» микропроцессорного ядра PicoBlaze Поле кода операции Поле номера ре- гистра Поле константы Мнемоника Выполняемая операция 0 0 1 1 0 0 П 181 II К К К К К К К К iiiisis Поразрядное «Логическое ИЛИ» содержимого реги- стра sN и константы kk Поле кода операции По. Р теь че/х еай омера юго >тра Поле номера второ- го регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 1 1 0 1 п п И! гл m m m 0 0 0 0 Поразрядное «Логическое ИЛИ» содержимого реги- стров sN и sM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Новая редакция форматов команд XOR, используемых для выполнения пораз- рядной операции «Исключающее ИЛИ» с участием содержимого регистра общего назначения с номером N и константы kk или содержимого двух регистров с номерами и < представлена в табл. 6.6. Таблица 6.6. Форматы команд поразрядных операций «Исключающее ИЛИ» микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 1 1 1 0 п п п п К К К К К к К К XORsN.kk Поразрядное «Исклю- чающее ИЛИ» содержи- мого регистра sN и кон- станты kk Поле кода операции Полей пере регис омера Жг Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 1 1 1 1 п 111 п m m m m 0 0 0 0 XOR sN, sM Поразрядное «Исклю- чающее ИЛИ» содержи- мого регистров sN и sM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Табл. 6.7 представляет форматы инструкций LOAD, посредством которых осуще- ствляются операции загрузки константы или содержимого какого-либо регистра в выбранный регистр общего назначения микропроцессорного ядра PicoBlaze, реали- зуемого на основе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4.
84 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Таблица 6.7. Форматы инструкций загрузки данных в регистр общего назначения для микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 0 0 0 0 0 п п л п К К К К К К К к LOADsN kk Загрузка константы kk в регистр sN Поле кода операции Поленомера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 0 0 1 п п < П ; , m гл m m 0 0 0 0 LOADsN, sM Загрузка содержимого регистра sM в регистр sN 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда TEST предназначена для выполнения поразрядного сравнения двух опе- рандов. Данная операция выполняется аналогично инструкции поразрядного умно- жения (поразрядное «Логическое И»). Различие заключается в том, что результат операции TEST не запоминается в регистре общего назначения, а фиксируются толь- ко признаки (состояния флагов). Значения флагов ZERO Flag и CARRY Flag опреде- ляются полученным результатом. Если все разряды результирующего слова прини- мают значение логического нуля, то флаг нулевого результата ZERO Flag устанавли- вается в состояние, соответствующее логической единице. В противном случае, если хотя бы в одном разряде результата присутствует единичное значение, флаг нулевого результата ZERO Flag переключается в сброшенное состояние (логического нуля). Состояние флага CARRY Flag зависит от количества единичных разрядов в получен- ном результате. При нечетном количестве единичных битов в слове результата этот флаг устанавливается в состояние, соответствующее логической единице. В противном случае флаг CARRY Flag будет находиться в сброшенном состоянии. Первым операндом в инструкциях поразрядного сравнения TEST всегда является содержимое регистра общего назначения, номер которого указан в виде значения первого параметра команды. В качестве второго операнда используется либо кон- станта, значение которой указывается непосредственно в соответствующем поле ко- манды, либо содержимое другого регистра общего назначения, номер которого зада- ется в виде значения второго параметра инструкции. Команда TEST может приме- няться для выделения требуемого разряда регистра и контроля его значения или наложения заданной маски. В этих случаях второй операнд исполняет роль маски. Форматы команд поразрядного сравнения двух операндов TEST приведены в табл. 6.8. Таблица 6.8. Форматы команд поразрядного сравнения двух операндов для микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 1 0 0 1 0 П п п п К К К К К К К К TESTsN, kk Проверка на четность резуль- тата операции поразрядное «Логическое И» содержимого регистра sN и константы kk 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 6 85 Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 0 1 1 п П : п,. m m m m 0 0 0 0 TESTsN, ИаЙ Проверка на четность резуль- тата операции поразрядное «Логическое И» содержимого регистров sN и sM 17 16 15 14 13 12 ж и й 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда TEST sN,kk выполняет операцию поразрядного сравнения содержимого регистра общего назначения с номером N и константы кк. Для поразрядного сравне- ния содержимого двух регистров общего назначения с номерами N и М предназначе- на команда TEST sN,sM. Выполнение команд поразрядного сравнения иллюстрирует рис. 6.3. Содержимое регистра sN Константа, указанная в команде Результат |TEST sN,kk| &&&&&&&& МИИДВ I i i i i Н i Результат содержит четное число единичных битов Результат И О CARRY И -------------------------О ZERO М -------------------О Flag Я 1 Flag И 1 Результат содержит нечетное Результат = О число единичных битов Содержимое регистра sN Содержимое регистра sM Результат CARRY Flag Результат содержит четное число единичных битов ------------------------О Результат содержит нечетное число единичных битов ZER0 № Flag Результат 4 0Q t-----------1 Результат = О Рис. 6.3. Выполнение поразрядных операций TEST 6.7. Группа арифметических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 Группа арифметических команд новой версии микропроцессорного ядра PicoBlaze пополнилась двумя вариантами инструкции COMPARE, которая будет представлена в заключительной части данного раздела. В структуре полей арифмети- ческих команд микропроцессорного ядра PicoBlaze, предназначенного для примене- ния в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, произошли те же изменения (по сравнению с форматами аналогичных команд, приведенными
86 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС в гл. 3 для базовой версии ядра), что и в логических инструкциях, рассмотренных в предыдущем разделе. В табл. 6.9 приведены модифицированные варианты форматов команд сложения ADD содержимого регистра с номером N и константы kk, а также содержимого двух регистров общего назначения с номерамиNuM без учета переноса. Таблица 6.9. Форматы команд сложения двух операндов без учета переноса для микропроцессорного ядра PicoBlaze Поле кода операции Лоле номера регистра Поле константы Мнемоника Выполняемая операция 0 1 1 0 0 0 п п п п К К К К К К К к ADDsN, kk Сложение содержимого реги- стра sN и константы kk Поле кода операции Поле номера первого Y регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 0 0 1 п п п п m m m m 0 0 0 0 ADDsN, sM Сложение содержимого регистров sN и sM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Табл. 6.10 представляет новую версию формата инструкций ADDCY, выполняю- щих операции суммирования двух операндов с учетом значения флага переноса, по- лученного при выполнении предыдущей команды. Таблица 6.10. Форматы команд сложения двух операндов с учетом переноса для микропроцессорного ядра PicoBlaze Поле кода операции Поленомера . регистра : Поле константы Выполняемая операция 0 1 1 0 1 0 п п п п К К К К К К К к ADDCYsN, kk Сложение содержимого ре- гистра sN и константы kk с учетом переноса Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 0 1 1 п п п п m m m m 0 0 0 0 ADDCY sN, sM Сложение содержимого ре- гистров sN и sM с учетом переноса 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Форматы инструкций SUB, предназначенных для выполнения операции вычита- ния содержимого регистра с номером М или константы kk из содержимого регистра с номером N, без учета заема, в новой редакции представлены в табл. 6.11. Таблица 6.11. Форматы команд вычитания без учета заема для микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 1 1 1 0 0 п П : п п К К К К К К К к SUB SN, kk Вычитание из содержимого регистра sN константы kk Поле кода операции Поле ном первое* регист ера 0 оа Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 1 0 1 п п П' п m m m m 0 0 0 0 SUBsN, sM Вычитание содержимого регистра sM из содержи- мого регистра sN 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
ГЛАВА 6 Модифицированные варианты форматов команд SUBCY, используемых для е числения разности двух операндов с учетом значения заема, образовавшегося г выполнении предыдущей операции, приведены в табл. 6.12. Таблица 6.12. Форматы инструкций вычитания с учетом заема для микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 1 1 1 1 0 К К К К К К К к III . Вычитание из содержимое регистра sN константы kk с учетом заема Поле кода операции Поле номера первого ' регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 1 1 1 1 n n п п m пл m m 0 0 0 0 SUBCY sN, sM Вычитание содержимого pi гистра sM из содержимого регистра sN с учетом заем 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Для осуществления арифметического (в отличие от поразрядного) сравнет значений двух 8-разрядных операндов предназначена команда COMPARE. В качес операндов при выполнении данной инструкции могут выступать содержимое реги ра общего назначения и константа или содержимое двух регистров общего назна ния. Первым операндом в инструкциях COMPARE всегда является содержимое ре стра общего назначения, номер которого W указан в виде значения первого параме команды. В качестве второго операнда выступает либо константа kk, значение ко рой указывается непосредственно в коде команды, либо содержимое другого реги ра общего назначения с номером М, который задается в виде значения второго па метра команды. В табл. 6.13 показаны форматы двух вариантов команды сравне] COMPARE. Таблица 6.13. Форматы инструкций арифметического сравнения двух операндов для микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле константы Мнемоника Выполняемая операция 0 1 0 1 0 0 п 5 Ilf :П П К К К К К к К к COMPARE sN, kk , Сравнение содержи- мого регистра sN и к станты kk Поле кода операции ? Поле номера регистра Поле номе- ра второго регистра Нулевые разряды Мнемоника r Выполняемая операция 0 1 0 1 0 1 h h П п m m m m 0 0 0 0 COMPARE sN, sM Сравнение содержи- мого регистра sM и с держимого регистра 17 16 15 14 13 12 10 9 8 : 7 6 5 4 3 2 1 0 Номер разряда микрокоманды Исполнение команды COMPARE аналогично выполнению операции вычита без учета заема, но полученный при этом результат не сохраняется. Информаци соотношении операндов отражается в состоянии флагов. Если значения операц равны, то все разряды результирующего слова принимают значение логического ля и флаг нулевого результата ZERO Flag устанавливается в состояние, соответ вующее логической единице. В остальных случаях флаг нулевого результата ZE Flag находится в сброшенном состоянии. В том случае если значение второго с
88 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ранда больше значения первого операнда, то флаг CARRY Flag устанавливается в со- стояние, соответствующее логической единице. При другом соотношении операндов флаг CARRY Flag остается в сброшенном состоянии. Рис. 6.4 поясняет выполнение команд арифметического сравнения двух операндов. Результат | COMPARE sN,kk| Содержимое Константа, указанная регистра sN в команде Д'1 - [кТк | к | к | к | к|ЭД Содержимое Содержимое Р,ЗУЛЬТаТ.. „ . a IcOMPAREsN.aMl Растра «N растра sM тмим Результат £ О CARRY ш ж—1----------------О Flag х_________________1 Результат < О Результат^ ZERO П *------------О Flag Ш ------------1 Результат-О Рис. 6.4. Осуществление операций арифметического сравнения двух операндов 6.8. Команды сдвига данных для микропроцессорного ядра PicoBlaze, реализуемого в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 В формате команд, предназначенных для выполнения операций сдвига данных, произошли те же изменения, что и в формате логических инструкций - длина поля кода операции увеличилась на 2 бита и составляет 6 двоичных разрядов, а также по- менялось значение кода операции. Мнемоническая форма записи команд сдвига ос- талась прежней. Новые форматы инструкций логического (арифметического) и цик- лического сдвига данных, находящихся в регистре общего назначения с указанным номером, представлены в табл. 6.14. Таблица 6.14. Форматы команд логического (арифметического) и циклического сдвига данных микропроцессорного ядра PicoBlaze Лоле гада операции Лоле номера регистра Поле направле- ния сдвига Поле ти- па сдвига Мнемо- ника Выполняемая операция 1 0 0 0 0 0 п п п п 0 0 0 0 1 1 1 0 SRO sN Логический сдвиг содержимого регистра sN вправо на один раз- ряд с записью 0 1 0 0 0 0 0 п п п п 0 0 0 0 1 п V jS' SR1 sN Логический сдвиг содержимого регистра sN вправо на один раз- ряд с записью 1 1 0 0 0 0 0 п п п п 0 0 0 0 1 0 1 0 SRX sN Логический сдвиг содержимого регистра sN вправо с сохранени- ем последнего разряда 1 0 0 0 0 0 п п п п 0 0 0 0 1 0 0 0 SRA sN Циклический сдвиг содержимого регистра sN вправо через разряд переноса/заема 1 0 0 0 0 0 п п п п; 0 0 0 0 1 || RRsN Циклический сдвиг содержимого регистра sN вправо без участия бита переноса 1 0 0 0 0 0 п п п п 0 0 0 0 0 1 1 0 SLOsN Логический сдвиг содержимого регистра sN влево на один раз- ряд с записью 0 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 г 0 Номер разряда микрокоманды
ГЛАВА 6 89 Поле кода операции Поле номера регистра Поле направле- ния сдвига Поле ти- па сдвига Мнемо- ника Выполняемаяоперация 1 0 0 0 0 0 п л п п 0 0 0 0 0 1 1 т SL1 sN Логический сдвиг содержимого регистра sN влево на один раз- ряд с записью! 1 0 0 0 0 0 л.^/ д 0 0 0 0 0 8S 0’^ SLXsN Логический сдвиг содержимого регистра sN влево с сохранением последнего разряда 1 0 0 0 0 0 п п п п 0 0 0 0 0 0 0 0 SLAsN Циклический сдвиг содержимого регистра sN влево через разряд переноса/заема 1 0 0 0 0 0 п п п л 0 0 0 0 0 0 1 0 RL sN Циклический сдвиг содержимого регистра sN влево без участия бита переноса 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды 6.9. Команды ввода/вывода микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 Формат инструкций ввода/вывода, предназначенных для чтения данных из вход- ного порта в заданный регистр общего назначения и передачи информации из ука- занного регистра в выходной порт, отличается от структуры аналогичных команд ба- зового варианта ядра PicoBlaze, представленных в гл. 3, длиной поля кода операции. В командах ввода/вывода новой версии ядра длина поля кода операции составляет 6 двоичных разрядов. Кроме того, в инструкциях ввода/вывода поменялось значение кода операции. Мнемоническая форма записи инструкций ввода/вывода сохранилась без изменений. Новые варианты форматов команд ввода/вывода с различными вида- ми адресации приведены в табл. 6.15. Таблица 6.15. Форматы команд ввода/вывода микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Поле кода операции Поле номера регистра Поле адреса порта ввода/вывода Мнемоника Выполняемая операция 0 0 0 1 0 0 п п п п К К К К К К К к INPUT sN, kk Чтение данных из порта ввода/вывода с адресом kk в регистр sN 1 0 1 1 0 0 Й'1 Л / п п К К К К К К К к OUTPUT sN, kk Запись данных из регистра sN в порт ввода/вывода с адресом kk Поле кода операции Поле номе- , ра первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 1 0 1 п п п п m m m m 0 0 0 0 INPUT sN, (sM) Чтение данных из порта ввода/вывода с адресом, определяемым регистром sM, в регистр sN 1 0 1 1 0 1 п п п п m m m m 0 0 0 0 OUTPUT sN, ! (sM) Запись данных из регистра sN в порт с адресом, опре- деляемым регистром sM 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Номер разряда микрокоманды
90 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 6.10. Команды обслуживания прерываний микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 В инструкциях, относящихся к группе команд обслуживания прерываний, изме- нилась длина поля кода операции и поля режима обработки прерываний. Длина каж- дого из этих полей команды в новой версии составляет 9 разрядов. Кроме того, изме- нились значения кодов операций обработки прерываний. При этом мнемоническая форма записи инструкций, используемых для обработки прерываний, осталась без изменений. Форматы команд возврата из процедуры обслуживания прерываний RETURNI и установки режима обслуживания прерываний в программах ENABLE INTERRUPT и DISABLE INTERRUPT для микропроцессорного ядра PicoBlaze, реализуемого на ба- зе кристаллов семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, представлены в табл. 6.16. Таблица 6.16. Форматы команд обслуживания прерываний микропроцессорного ядра PicoBlaze Поле кода операции Поле режима обработки прерываний Мнемоника Выполняемая операция 1 1 1 0 0 0 0 0 0 0 0 0^ Д' Qv 'О!7 Д'*. Д* 1 RETURNI ENABLE Возврат из процедуры обработки и установка режима запрета преры- вания7 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RETURNI DISABLE Возврат из процедуры обработки и установка режима разрешения пре- рывания 1 1 1 1 0 0 0 0 0 0 0 0 0 0 о 0 0 т ENABLE INTERRUPT Установка режима раз- решения прерывания 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DISABLE INTERRUPT Установка режима запре- та прерывания 17 16 15 14 13 12 11 10 9 8 7 6 5 4 ж Г о Номер разряда микрокоманды 6.11. Команды чтения и записи данных в сверхоперативное запоминающее устройство микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 Команды чтения и записи данных в СОЗУ предназначены для организации обме- на данными между регистрами общего назначения и внутренней сверхоперативной памятью. В инструкциях, относящихся к рассматриваемой группе, используется два параметра. Значение первого параметра определяет номер регистра общего назначе- ния, используемого в качестве приемника данных при выполнении операции чтения информации из СОЗУ или в качестве источника при осуществлении операции записи
ГЛАВА 6 91 данных в СОЗУ. Значение второго параметра определяет адрес ячейки сверхопера- тивной памяти, к которой производится обращение. Адресация ячеек СОЗУ в инст- рукциях чтения и записи данных может осуществляться с помощью 8-разрядной кон- станты, значение которой задается непосредственно в виде параметра команды, или содержимого регистра общего назначения с указанным номером. Форматы команд чтения и записи данных в СОЗУ микропроцессорного ядра PicoBlaze, предназначен- ного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, приведены в табл. 6.17. Таблица 6.17. Форматы команд чтения и записи данных в СОЗУ микропроцессорного ядра PicoBlaze Поле кода операции Поле номера регистра Поле адреса ячейки Мнемоника Выполняемая операция 1 0 1 1 1 0 п ” п П 0 0 К К К К К к STORE sN, kk _ Запись данных из реги- стра sN в ячейку СОЗУ с адресом kk 0 0 0 1 1 0 п п п п , К К К К К К к к FETCH sN, kk... Чтение данных из ячейки СОЗУ с адресом kk в ре- гистр sN Поле кода операции Поле номе- ра первого регистра Поле номера второго регистра Нулевые разряды ; Мнемоника Выполняемая операция 1 0 1 1 1 1 п > п п m m m m 0 0 0 0 STORE SN, (sM) Запись данных из реги- стра sN в ячейку СОЗУ с адресом, определяемым регистром sM 0 0 0 1 1 1 п п ; л п m m m m 0 0 0 0 FETCH sN,(sM) Чтение данных из ячейки СОЗУ с адресом, опре- деляемым регистром sM, в регистр sN 17 16 15 14 13 12 11 10 9 8 7 : 6 5 4 3 2 1 0 Номер разряда микрокоманды Команда FETCH sN, kk выполняет операцию чтения данных из ячейки СОЗУ с адресом kk в регистр общего назначения с номером sN. Чтение данных из ячейки СОЗУ, адрес которой указывает содержимое регистра sM, осуществляется с помо- щью инструкции FETCH sN,(sM). Передача содержимого регистра общего назначения с номером sN в ячейку СОЗУ с адресом kk осуществляется с помощью команды STORE sN, kk. Для запи- си данных из регистра sN в ячейку СОЗУ, адрес которой определяется содержи- мым регистра sM, предназначена команда STORE sN,(sM). Рис. 6.5 демонстрирует процесс выполнения операций чтения и записи данных в СОЗУ при различных видах адресации.
92 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Регистр sN Регистр sN Сверхоперативная память Регистр sN ячейки Сверхоперативная память Рис. 6.5. Выполнение инструкций чтения и записи данных в СОЗУ при различных видах адресации 6.12. Загрузчик программ для микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Заметным недостатком всех рассмотренных ранее микропроцессорных ядер се- мейства PicoBlaze является необходимость повторного выполнения этапов синтеза и реализации аппаратной части разрабатываемой системы при внесении каких-либо изменений в программное обеспечение. Для новой версии ядра, реализуемой на ос- нове кристаллов семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, в архив фай- лов, предоставляемых пользователю, включен загрузчик программного кода через порт JTAG-интерфейса применяемой ПЛИС. При использовании загрузчика JTAG Program Loader маршрут проектирования встраиваемых микропроцессорных систем на основе ядра PicoBlaze приобретает вид, показанный на рис. 6.6. Типовая ветвь этого маршрута, включающая этапы синтеза, реализации и формирования конфигурационной последовательности, выполняется только один раз.
ГЛАВА 6 93 Рис. 6.6. Маршрут проектирования встраиваемых микропроцессорных систем на основе ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) с использованием загрузчика программ JTAG Program Loader В случае модификации микропроцессорной программы достаточно выполнить трансляцию исходного текста этой программы и воспользоваться загрузчиком JTAG Program Loader. Запись кода новой микропроцессорной программы непосредственно в программную память ядра PicoBlaze осуществляется через порт JTAG-интерфейса с помощью стандартного загрузочного кабеля фирмы Xilinx, предназначенного для конфигурирования ПЛИС. Загрузчик программ JTAG Program Loader выполнен в виде командного файла jtag_loader.bat и комплекта утилит преобразования формата и управления конфигу- рированием ПЛИС. Этот командный файл содержит набор директив, посредством которых осуществляется последовательный вызов утилит преобразования формата микропроцессорных программ и управления процессом их загрузки в ПЛИС. Исход- ным модулем для загрузчика является файл, содержащий результаты трансляции ис- ходного текста программы в виде кодов в шестнадцатеричном представлении. Этот файл формируется ассемблером KCPSM3.
94 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Для использования загрузчика программ JTAG Program Loader в структуру мик- ропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, были внесены следующие изменения. Программная память реализуется в виде двухпортового оперативного запоминающего устройства. Один из портов программной памяти сопряжен непосредственно с контроллером JTAG-интерфейса. Поэтому новая программа может быть записана в ППЗУ программ через порт JTAG-интерфейса ПЛИС. Кроме того, в блоке программной памяти до- полнительно формируется сигнал сброса, который используется для инициализации модуля исполнительного устройства микропроцессорного ядра PicoBlaze. Такая мо- дернизации модуля программной памяти обусловлена тем, что сразу же после за- грузки новой программы исполнительное устройство должно быть переведено в ис- ходное (начальное) состояние. С учетом этих изменений необходимо в выражения декларации и создания экземпляра компонента программной памяти добавить описа- ние порта, соответствующего выходу сигнала сброса. При формировании структур- ного описания микропроцессорного ядра необходимо подключить выход сигнала сброса программной памяти prog__rom ко входу сброса исполнительного устройства kcpsm3. Модернизированная структура микропроцессорного ядра PicoBlaze, реализуемо- го на основе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4 с поддерж- кой загрузки программного кода через порт JTAG-интерфейса, изображена на рис. 6.7. Модуль ЦПУ (исполнительный модуль) PicoBlaze Порт JTAG Память программ KCPSM3 TDI TDCM BSCAN TMS-) Interface ТСЮ DAT WE PROC.RESET ADDR Входные g -------------- данные IN_PORT[7:0] Прерывание —) INTERRUPT ---------------) RESET OUT_PORT(7:0] PORTJD[7:0] Тактовый Sr. и сигнал “Г / INSTRUCTION[17:0] ADDRESSED] >CLK Шина команд READ.STROBE WR1TE.STROBE INTERRUPT.ACK INSTRUCTION [17:0] ADDRESS[9:0] Выходные данные Адрес порта ввода/вывода > Строб чтения э Строб записи -) Подтверждение прерывания Шина адреса 1 8, 10, Рис. 6.7. Модернизированная структура микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) с поддержкой загрузки программ через порт JTAG-интерфейса В процессе трансляции программ, которые должны записываться в программную память микропроцессорного ядра PicoBlaze через порт JTAG-интерфейса ПЛИС с помощью загрузчика JTAG Program Loader, необходимо использовать модифициро- ванные варианты шаблонов описания содержимого ППЗУ вместо файлов ROMJbrm.vhd и ROMJorm.v. Эти варианты соответствуют ППЗУ программ, реали- зуемому в виде двухпортовой памяти. Модифицированные варианты шаблонов по- ставляются вместе с загрузчиком в форме файлов JTAG_Lo<^der_ROMJbrm.vhd и JTAG_Loader_ROMJbrm.v соответственно.
7. РАЗРАБОТКА ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА ДЛЯ МИКРОПРОЦЕССОРНЫХ ЯДЕР СЕМЕЙСТВА PICOBLAZE Настоящая глава посвящена вопросам подготовки и трансляции программ на языке ассемблера для встраиваемых 8-разрядных микропроцессорных ядер семейства PicoBlaze, которые предназначены для использования в проектах, выполняемых на основе различных серий ПЛИС фирмы Xilinx. Рассматриваются основные элементы языка ассемблера и правила написания микропроцессорных программ. 7.1. Подготовка исходного текста программы (семейство PicoBlaze) Для подготовки исходного текста программы на языке ассемблера нужно вос- пользоваться любым универсальным текстовым редактором, поддерживающим стан- дартный текстовый формат. Можно для этих целей использовать программы Notepad™ или Wordpad™, которые являются стандартными принадлежностями (аксессуарами) ОС Windows™. При использовании этих редакторов следует пом- нить, что они автоматически присваивают имени создаваемого файла расширение txt. Поэтому затем необходимо изменить это расширение на psm или asm. Название фай- ла, содержащего исходный текст программы, не должно содержать более восьми символов. Формировать исходный текст программы достаточно удобно с помощью интегрированного редактора управляющей оболочки Total Commander™ (Windows Commander™) (активизируемого одновременным нажатием клавиш Shift и F4), кото- рый позволяет сразу задать требуемое название создаваемого файла. Кроме того, ис- ходный файл микропроцессорной программы может быть подготовлен с помощью встроенного текстового редактора средств проектирования серии Xilinx ISE. В тексте программы на языке ассемблера микропроцессорного ядра PicoBlaze могут присутствовать следующие элементы: • команды микропроцессорного ядра; директивы ассемблера; метки; комментарии. Команды микропроцессорного ядра - это инструкции, предназначенные для вы- полнения исполнительным модулем PicoBlaze операций, которые предусмотрены ал- горитмом разрабатываемой программы. Синтаксис этих команд совпадает с мнемо- нической формой записи инструкций микропроцессорных ядер PicoBlaze, рассмот- ренных в предыдущих главах. В процессе трансляции ассемблер преобразовывает команды микропроцессорного ядра в исполняемый код. Директивы представляют собой команды, предназначенные для управления ра- ботой ассемблера и процессом трансляции. Директивы ассемблера не транслируются в исполняемый код. Более подробно назначение и использование директив ассембле- ра микропроцессорных ядер семейства PicoBlaze рассматривается в следующем раз- деле. Метки предназначены для идентификации строк программы, содержащих инст- рукции микропроцессорного ядра, на которые имеются ссылки из других команд.
96 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Метки представляют собой последовательность символов, оканчивающуюся двоето- чием, которая располагается перед мнемонической записью инструкции. В составе меток могут употребляться прописные и строчные буквы латинского алфавита (А - Z, а - z), цифры (0-9) и символ подчеркивания (_). Метки не должны содержать пробелов или символов-разделителей, как, например, точки, запятой, точки с запя- той. В качестве меток следует задавать мнемонические идентификаторы, которые повышают информативность разрабатываемой программы. Метки рекомендуется применять в инструкциях перехода JUMP и вызова подпрограмм CALL вместо явно- го указания адреса перехода или адреса вызываемой процедуры. Таким образом, при написании и редактировании микропроцессорной программы не требуются вычисле- ния абсолютных значений адресов команд в программной памяти. Применение меток не только позволяет избежать ошибок, связанных с указанием некорректных значе- ний адресов в командах, но и обеспечивает мобильность разрабатываемой микропро- цессорной программы за счет отсутствия ее привязки к конкретным адресам про- граммной памяти. Комментарии используются, как правило, для внесения различных пояснений в разрабатываемую программу, которые облегчают ее чтение и понимание. Коммен- тарии не оказывают никакого влияния на процесс трансляции программы и форми- руемый исполняемый код. Комментарием считается любая последовательность сим- волов, которая начинается с точки с запятой. Ассемблер микропроцессорных ядер семейства PicoBlaze полностью игнорирует ту часть строки, которая расположена вслед за точкой с запятой. При написании программ на языке ассемблера необходимо соблюдать следую- щие правила. Каждая команда микропроцессорного ядра или директива ассемблера должна располагаться в отдельной строке. Параметры инструкций микропроцессор- ного ядра или директив ассемблера отделяются от текста команд пробелом. Если формат инструкции или директивы требует указания двух параметров, то второй па- раметр отделяется от первого запятой и пробелом. В исходном тексте разрабатывае- мой программы не следует оставлять пустых строк. Если все же требуется включить пустую строку в текст программы, например для разделения основной части про- граммы и подпрограммы, то следует сделать это в виде комментария. Для этого в любую позицию пустой строки нужно вставить точку с запятой. По окончании редактирования исходного текста разрабатываемой программы необходимо сохранить его в виде файла на диске. Название этого файла должно со- стоять не более чем из восьми символов и соответствовать требованиям ОС MS-DOS. Расширение создаваемого файла, в который записывается текст программы, зависит от используемой версии ассемблера. В свою очередь, версия ассемблера определяет- ся типом микропроцессорного ядра PicoBlaze, для которого разрабатывается про- грамма. Для микропроцессорных ядер, реализуемых на основе ПЛИС семейств Spartan-II, Spartan-IIE, Spartan-3, Virtex, Virtex-E, Virtex-II, Virtex-IIPRO и Virtex-4, исходный текст программы должен содержаться в файле с расширением psm. Текст программы на языке ассемблера для микропроцессорного ядра PicoBlaze, используе- мого в кристаллах семейства CoolRunner-II, следует записывать в файл с расширени- ем asm. Создаваемый файл с исходным текстом программы должен располагаться в том же разделе диска, в котором находится и соответствующая программа-ассемблер. Для этих целей рекомендуется использовать рабочий каталог проекта, разрабатывав-
ГЛАВА 7 97 мого в среде САПР серии Xilinx ISE [1], в составе которого применяется соответст- вующее микропроцессорное ядро. Кроме собственно программы ассемблера, в этот каталог для проектов, выполняемых на основе ПЛИС семейств Spartan-II, Spartan-IIE, Spartan-3, Virtex, Virtex-E, Virtex-II и Virtex-IIPRO, необходимо переписать файлы шаблонов ROM^form.vhd и ROM_form.coe. 7.2. Директивы ассемблера (семейство PicoBlaze) Ассемблер микропроцессорных ядер семейства PicoBlaze поддерживает 3 вида директив: CONSTANT, NAMEREG и ADDRESS. Директива CONSTANT предназначена для декларации и определения значения константы, которая может использоваться в качестве параметра в командах микро- процессорной программы. Константы, определенные с помощью данной директивы, могут выступать в качестве операндов в арифметических и логических инструкциях и в качестве адресов входных и выходных портов в инструкциях ввода/вывода. При- менение константы вместо явного числового значения позволяет прежде всего повы- сить информативность программы, написанной на языке ассемблера. Кроме того, ис- пользование констант облегчает процесс отладки и редактирования разрабатываемой программы. Если константа представляет параметр, который многократно встречает- ся в различных местах программы, то для изменения значения этого параметра дос- таточно отредактировать численное значение в строке декларации константы, вместо того чтобы вносить исправления во всех командах, где используется данный пара- метр. Тем самым исключается возможность появления в программе ошибок, которые возникают из-за того, что не во всех инструкциях, где встречается данный параметр, указано его корректное значение. Формат командной строки для директивы CONSTANT выглядит следующим об- разом: CONSTANT <идентификатор_константы>, <числовое_значение_константы> В состав идентификатора константы могут входить прописные и строчные буквы латинского алфавита (А - Z, а - z), цифры (0-9) и символы подчеркивания (_). При этом в имени константы не должно быть пробелов или каких-либо символов- разделителей. Рекомендуется использовать мнемонические идентификаторы кон- стант, отражающие функциональное назначение соответствующего параметра. Кон- станта, определяемая с помощью директивы CONSTANT, содержит 8 двоичных раз- рядов. Числовое значение константы указывается в виде последовательности, со- стоящей из двух шестнадцатеричных символов (0-9, А - F, а - f)- Директива CONSTANT может располагаться в любом месте программы. При этом ее действие распространяется на всю программу, т. е. определяемая константа может использо- ваться в командах, расположенных как после, так и до строки, содержащей соответ- ствующую директиву CONSTANT. Приведенный ниже фрагмент программы иллюстрирует применение директивы CONSTANT. CONSTANT max_va[ue, 15 CONSTANT adrjn_port, 1D CONSTANT adr_out_port, 1F INPUT s1, adr_in_port LOAD s2, s1 4-2062
98 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС SUB s2, max_value JUMP NC, outjnax OUTPUT s1, adr_out_port JUMP nextjnst outjnax: LOAD s3, max_value OUTPUT s3, adr_out_port nextjnst: LOAD s3, s1 В представленном фрагменте программы константа adr_in_port определяет зна- чение адреса используемого входного порта ввода/вывода, а константа adr_out_port - выходного порта. Константа с идентификатором max_yalue используется для указа- ния максимально допустимого значения некоторого контролируемого параметра, значения которого считываются из входного порта с адресом adr_m_port. Директива NAMEREG позволяет переименовать любой из регистров общего на- значения. По умолчанию в качестве названий регистров общего назначения исполь- зуются идентификаторы, состоящие из символа и порядкового номера регистра. Для повышения информативности разрабатываемой ассемблерной программы целе- сообразно задать новые, мнемонические имена для используемых регистров общего назначения. В качестве идентификаторов, определяемых разработчиком, рекоменду- ется указывать названия, отражающие функциональное назначение соответствующе- го регистра или характер данных, записанных в этот регистр. Использование мнемо- нических названий регистров делает более прозрачным процесс отладки микропро- цессорных программ. Применение директивы NAMEREG позволяет также избежать ошибок, обусловленных просчетами при указании номеров регистров общего назна- чения в различных командах программы. Определение новых названий регистров с помощью директивы NAMEREG повышает мобильность разрабатываемых программ. Программа, написанная на ассемблере с использованием директивы NAMEREG, тре- бует минимальных исправлений при ее переносе от одного элемента семейства мик- ропроцессорных ядер PicoBlaze к другому. Вместо переопределения регистров во всех соответствующих инструкциях разработанной программы, в которых они ис- пользуются, достаточно внести изменения только в строки, содержащие директивы NAMEREG. Командная строка для директивы NAMEREG имеет следующий формат. NAMEREG <текущий_идентификатор_регистра>, <новый_идентификатор_регистра> Идентификаторы регистров общего назначения могут содержать те же символы (прописные и строчные буквы латинского алфавита и цифры), что и названия кон- стант, определяемых с помощью директивы CONSTANT. В то же время в названиях регистров не допускается использование пробелов или символов-разделителей. Сле- дует обратить внимание на то, что новое обозначение регистра может применяться только в той части программы, которая следует после строки, содержащей директиву NAMEREG для соответствующего регистра. Таким образом, директива NAMEREG не имеет обратного действия. После переименования регистра его старое обозначе- ние не может использоваться как идентификатор этого регистра. В качестве примера применения директивы NAMEREG далее приводится моди- фицированный вариант фрагмента программы, демонстрирующего использование директивы CONSTANT. CONSTANT max_value, 15 CONSTANT adrjn_port, 1D CONSTANT adr_out_port, 1F
ГЛАВА 7 99 NAMEREG s1, in_data_reg NAMEREG s2, differenc_reg INPUT in_data_reg, adrjn.port LOAD differenc_reg, in_data_reg SUB differenc_reg, max_va1ue JUMP NC, ouLmax OUTPUT in_data_reg, adr__out_port JUMP nextjnst ouLmax: LOAD s3, max_value OUTPUT s3, adr_out_port nextjnst: LOAD s3, in_data_reg В представленном фрагменте программы переопределены идентификаторы двух регистров общего назначения. Регистр si, который выполняет функцию хранения данных, считанных из входного порта ввода/вывода, обозначен как iri_data_reg. Для регистра s2, используемого в операции вычисления разности текущего и максималь- ного значений, с помощью директивы NAMEREG задано новое название - differ- enc_reg. Директива ADDRESS предназначена для указания нового значения адреса, начи- ная с которого должны располагаться команды программы, следующие за строкой, содержащей эту директиву. Таким образом, данная директива позволяет явно указать адресное пространство для размещения в программной памяти любой части разраба- тываемой микропроцессорной программы. Директиву ADDRESS целесообразно ис- пользовать для выделения соответствующих секций в адресном пространстве ППЗУ программ, предназначенных для записи подпрограмм. Кроме того, данная директива необходима для записи вектора обработки прерывания. Формат командной строки для директивы ADDRESS выглядит следующим образом: ADDRESS <числовое_значение_адреса> Числовое значение адреса в директиве ADDRESS указывается в виде последова- тельности, состоящей из двух или трех шестнадцатеричных символов, в зависимости от используемого типа микропроцессорного ядра. Для ядер PicoBlaze, реализуемых на базе кристаллов семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E и CooIRunner-II, адрес задается в виде 2-разрядного шестнадцатеричного числа. В программах, пред- назначенных для микропроцессорного ядра, выполняемого на основе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, значение адреса содержит три шестна- дцатеричных разряда. В качестве примера далее приводится фрагмент программы, который наглядно поясняет способ практического применения директивы ADDRESS. CONSTANT max_value, 15 CONSTANT adrjn.port, 1D CONSTANT adr_out_port, 1F NAMEREG s1, in_data_reg NAMEREG s2,differencjeg INPUT in_data_regf adrjn_port LOAD differencjeg, in_data_reg SUB differenc_reg, max_value JUMP NC, out_data
100 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС JUMP nextjnst ouLdata: OUTPUT in_data_regf adr_out_port nextjnst: LOAD s3, in_data_reg ADDRESS ВО interrupLroutine: ADD ditterenc_regf 01 OUTPUT differenc_reg, adr_out_port RETURNIENABLE ADDRESS FF JUMP interrupLroutine Директива ADDRESS FF предписывает ассемблеру транслировать код вектора прерывания по адресу FF. Необходимость этого обусловлена архитектурными осо- бенностями микропроцессорных ядер семейства PicoBlaze, предназначенных для реализации на основе кристаллов серий Spartan-II, Spartan-IIE, Virtex, Virtex-E и CoolRunner-IL В программах, которые разрабатываются для микропроцессорного яд- ра, выполняемого на основе ПЛИС семейств Virtex-II, Virtex-IIPRO и Virtex-4, код вектора прерывания должен находиться по адресу 3FF. С помощью директивы ADDRESS ВО дается указание ассемблеру транслировать код процедуры обработки прерывания начиная с адреса ВО. Представленный ниже текст файла листинга, сфор- мированного ассемблером при трансляции рассматриваемого фрагмента программы, отражает результаты воздействия директивы ADDRESS на генерируемый код. Пер- вые две шестнадцатеричные цифры в начале каждой строки указывают адрес разме- щения кода соответствующей команды в ППЗУ микропрограмм. Addr Code 00 CONSTANT max_value, 15 00 CONSTANT adr_in_port, 1D 00 CONSTANT adr_out_port, 1F 00 NAMEREG s1, in_data_reg 00 NAMEREG s2, different; jag 00 A11D INPUT in_data_reg[s1], adr_in_port[1 D] 01 C210 LOAD differenc_reg[s2], in_data_reg[s1] 02 6215 SUB differenc_reg[s2], max_vaiue[15] 03 9D05 JUMP NC, out_data[05] 04 8106 JUMP nextJnst[06] 05 E11F out_data: OUTPUT in_data_reg[s1], adr_out_port[1 F] 06 C310 nextjnst: LOAD s3, in_data_reg[s1] 07 07 B0 ADDRESS B0 B0 4201 interrupLroutine: ADD differenc_reg[s2], 01 B1 E21F OUTPUT differenc_reg[s2], adr_out_port[1 F] B2 80F0 RETURNI ENABLE B3 FF ADDRESS FF FF 81B0 JUMP interrupLroutine[BO]
ГЛАВА 7 101 7.3. Трансляция программ, написанных на языке ассемблера (семейство PicoBlaze) Программа-ассемблер для микропроцессорных ядер семейства PicoBlaze пред- ставляет собой DOS-приложение, которое функционирует в консольном режиме. По- этому для его запуска рекомендуется активизировать сеанс DOS (режим командной строки) и установить в качестве текущего раздела каталог, в котором располагаются ассемблер и транслируемая программа. Для выполнения этих операций целесообраз- но воспользоваться какой-либо программой управления файлами, например управ- ляющей оболочкой Windows Commander (Total Commander), которая позволяет бы- стро установить требуемый текущий раздел диска и запустить сеанс DOS. Как уже упоминалось ранее, для каждого микропроцессорного ядра семейства PicoBlaze предоставляется соответствующая версия ассемблера. Командная строка для запуска процесса трансляции разработанной программы состоит из названия со- ответствующей версии ассемблера и идентификатора файла, в котором содержится исходный текст транслируемой программы на языке ассемблера. Формат командной строки, активизирующей процедуру трансляции программ, предназначенных для микропроцессорного ядра PicoBlaze, которое используется в кристаллах семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, выглядит следующим образом: Kcpsm.exe <идентификатор_исходного_файла_программы_на_языке_ассемблера>[.рзт] Для трансляции программ микропроцессорного ядра PicoBlaze, встраиваемого в проекты, реализуемые на базе ПЛИС семейства Virtex-II, следует воспользоваться командной строкой, формат которой имеет следующий вид: Kcpsm2.exe <идентификатор_исходного_файла„программы_на_языке_ассемблера>[.рзт] Формирование описания содержимого программной памяти из исходного текста программ на языке ассемблера для микропроцессорного ядра PicoBlaze, применяемо- го в проектах, которые реализуются на базе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, осуществляется с помощью командной строки, имеющей следующий формат: Kcpsm3.exe <идентификатор_исходного_файла_программы_на„языке_ассемблера>[.рзт] Во всех приведенных выше форматах командной строки квадратные скобки слу- жат для обозначения необязательного параметра. Таким образом, используемое по умолчанию расширение файла psm , содержащего исходный текст программы, можно не указывать. Процедура трансляции программ микропроцессорного ядра PicoBlaze, исполь- зуемого в кристаллах семейства CoolRunner-II, запускается с помощью командной строки, которая должна соответствовать следующему формату: Asm.exe <идентификатор_исходного_файла_программы„на_языке_ассемблера>.азт Процесс трансляции включает в себя несколько последовательных фаз. Инфор- мация о выполнении и результатах каждой фазы трансляции отображается непосред- ственно в окне DOS-приложения. В этом же окне выводятся сообщения о возможных ошибках, обнаруженных в транслируемой программе. На рис. 7.1 в качестве примера, показан вид рабочего окна ассемблера KCPSM.
102 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ^jC:\WINNT\system32\cmd.eKe KCPSM vl.10. Ken СЪгчртап (XUinx~UK) ЙЙШ2 В The assetabler Fоr KCPSM.Programmahle State Machine, PASS1-'1 - Reading input PCM file ' ' ' - CONSTANT maxAaUw, 15 i - , CONSTANT adrjisvport,-. S' ' CONSIftNT adr оut_po Ft, S' . . NAMEREG J ' S'. . NAMEREG ...... ._.... . s ; 1 INPUT in data reg, b - LOAD differenc.„rejf. SOB di£ferenc_reg, .JUMP NC, ©5 1 JUMP next„inst out„data:OUTPUT in....data... reg, adr„out.„.i>ort PASS 2 - Testing Instructions CONSTANT max_ualue, 15 CONSTANT adrin .port, ID t CONSTANT adr out port., IF NAMEREG si, in„data_reg 1 NAMEREG s2„ dif£erenc_reg INPUT in_.data.jreg, adr„in_port - LOAD differenc...reg, in.data reg , jSBB dif.ferencjreg, naxj>alae JUMP NC, 05 . . JUMR next_inst , - 4 ID _ ______. IF si, inLdata„reg s 2 , d i f £ e re п с _ г ё g adr............in.port , in.^.data_reg Fiax_value ERROR - JUMR is not a valid instruction. Please correct and try again. KCPSM complete. C:\Pro ject\PICOBL'"l>, Информация о ходе трансляции программы Сообщения об ошибках Командная строка Puc. 7.1. Вид рабочего окна ассемблера микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E В случае отсутствия ошибок трансляция завершается выводом соответствующего сообщения вида KCPSM successful. При успешном завершении процесса трансляции программы ассемблер форми- рует комплект файлов, назначение которых раскрывается в следующем разделе. 7.4. Файлы, формируемые ассемблером (семейство PicoBlaze) Рис. 7.2 отображает информацию об исходных файлах, используемых при транс- ляции программ микропроцессорных ядер семейства PicoBlaze, предназначенных для реализации в кристаллах серий Spartan-II, Spartan-IIE, Virtex, Virtex-E, Virtex-II, и ре- зультирующих файлах, формируемых ассемблерами KCPSM и KCPSM2. Помимо основного исходного файла, содержащего текст программы на языке ас- семблера, для выполнения трансляции необходимы файлы шаблонов ROM_form.vhd и ROM_form.сое. Файл ROM_form.vhd представляет собой шаблон описания содер- жимого ППЗУ программ на языке VHDL. В файле ROM_form.coe содержится шаблон описания содержимого ППЗУ микропрограмм в формате, воспринимаемом генерато- ром ядер Xilinx CORE Generator™. При отсутствии ошибок в транслируемой программе ассемблерами KCPSM и KCPSM2 генерируется набор файлов, название большинства которых совпадает с идентификатором исходного файла, а расширение соответствует типу содержащейся в них информации. Всю совокупность файлов, формируемых этими версиями
ГЛАВА 7 103 ассемблера, можно условно разбить на 5 групп. К первой группе относятся файлы, в которые записывается содержимое программной памяти в форматах, воспринимае- мых средствами проектирования серии Xilinx ISE. В эту группу входят файлы описа- ния содержимого программной памяти на языке VHDL и в формате, воспринимае- мом генератором ядер Xilinx CORE Generator, которые имеют расширения vhd и сое соответственно. VHDL-описание содержимого ППЗУ программ используется на эта- пах синтеза и моделирования проектируемой системы. Вторую группу образуют файлы, описывающие содержимое программной памяти в форматах, используемых утилитами, не входящими в состав САПР серии Xilinx ISE. К этой группе относятся файлы, содержащие результаты трансляции в виде кодов в шестнадцатеричном и де- сятичном представлении, которые имеют расширения hex и dec соответственно. <filename>.psm } Исходный текст программы Описания содержимого , программной памяти, J <fitename>.vhd используемые средствами I <Шепате>.сое проектирования Xilinx constant.txt labels.txt pass1.dat 'I pass2.dat Промежуточные pass3.dat У результаты pass4.dat трансляции pass5.dat I Отчеты ассемблера Описания содержимого программной памяти в шестнадцатеричном и десятичном форматах <fhenanw>.hex «fOenamexdec Форматированный текст программы Рис. 7.2. Файлы, формируемые ассемблером для микропроцессорных ядер семейства PicoBlaze (серии Spartan-II, Spartan-IIE, Virtex, Virtex-E, Virtex-II) Третью группу составляют файлы отчетов о ходе и результатах трансляции мик- ропроцессорной программы. Файл с расширением log содержит детальную информа- цию о трансляции каждой строки ассемблерной программы. В файле constant.txt пе- речисляются все константы, используемые в программе, с указанием их значений. Файл labels.txt содержит информацию о метках, которые содержатся в программе, и адресах программной памяти, которые им соответствуют. В четвертую группу вхо- дит единственный файл, имеющий расширение fint, в котором записан отформатиро- ванный вариант исходного текста программы на языке ассемблера. К пятой группе относятся файлы passl.dat - pass5.dat, содержащие промежуточные результаты, по- лученные на различных фазах процесса трансляции. Информация, которая содержит-
104 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ся в этих файлах, может использоваться в процессе отладки микропроцессорной про- граммы. Версия ассемблера микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, имеет ряд отличий по сравнению с программами Kcpsm.exe и Kcpsm2.exe. Эта версия, реа- лизованная в виде программы Kcpsm3.exe, поддерживает все новые инструкции мик- ропроцессорного ядра PicoBlaze, реализуемого на базе ПЛИС семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, а также учитывает изменения в формате команд и параметры блочного ОЗУ используемых кристаллов. Кроме того, ассемблер Kcpsm3.exe формирует описания содержимого программной памяти не только в формате языка VHDL, но и Verilog. В связи с этим набор шаблонов описания содер- жимого ППЗУ программ помимо файлов ROMJbrm.vhd и ROMJbrm.coe, рассмот- ренных выше, включает также файл ROMJorm.v. Этот файл представляет собой шаблон описания содержимого программной памяти в терминах языка описания ап- паратуры Verilog. На рис. 7.3 в наглядном виде представлена информация об исход- ных файлах, используемых при трансляции программ микропроцессорного ядра PicoBlaze, предназначенного для реализации в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4, и выходных файлах, формируемых ассемблером KCPSM3. <filename>.psm } Исходный текст программы Шаблоны описания содержимого программной памяти ROMJorm.vhd -----► ROMJorm. v ------► ROMJorm. сое ——► I KCPSM3.EXE pass1.dat ____► pass2.dat pass3.dat pass4.dat pass5.dat Промежуточные результаты трансляции Описания содержимого , программной памяти, используемые средствами^ проектирования Xilinx Описания содержимого программной памяти в шестнадцатеричном и десятичном форматах <filename>.vhd <filename>.v <filename>xoe <filename>1m <filename>.hex <filename>.dec <filename>.log constanttxt labels.txt <filename>.fmt} Форматированный текст программы Отчеты ассемблера Рис. 7,3, Файлы, формируемые ассемблером микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4) Состав файлов, генерируемых ассемблером ASM, который предназначен для трансляции программ микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II, несколько отличается от рассмотренного выше. В первую очередь это связано с тем, что в данной версии ядра модуль программной памяти реализуется не внутри ПЛИС, а в виде внешнего элемента ПЗУ или ППЗУ. Для программирования такого элемента памяти ассемблер должен сформировать
ГЛАВА 7 105 файл прошивки в формате, поддерживаемом различными типами программаторов. На рис. 7.4 показана структура комплекта выходных файлов, создаваемых ассембле- ром микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II, при успешном завершении процесса трансляции. <filename>.asm } Исходный текст программы £<filenamexmcs Код программы в формате MCS-86 <filename>.vhd > VHDL-описание содержимого программной памяти <filename>.bin Т- Двоичный код программы в J шестнадцатеричном формате Форматированный текст программы <filename>.lcg } Отчет ассемблера Рис. 7.4. Файлы, формируемые ассемблером микропроцессорного ядра PicoBlaze (семейство CoolRunner-ll) Все выходные файлы, формируемые ассемблером ASM, имеют одно и то же на- звание, совпадающее с именем входного файла, в котором содержится исходный текст программы на языке ассемблера. В большинстве случаев основным выходным файлом является файл с расширением mcs, в котором содержится информация о прошивке внешнего ПЗУ или ППЗУ в формате Intel® MCS-86. Файл, имеющий рас- ширение vhd, представляет собой описание содержимого программной памяти на языке VHDL, соответствующего транслируемой программе. Этот файл используется в процессе отладки разрабатываемой программы методом моделирования ядра PicoBlaze в составе проектируемого устройства с помощью системы ModelSim ХЕ [1]. Файл с расширением bin включает в себя результаты трансляции программы в виде двоичных кодов, которые представлены в шестнадцатеричном формате. Ин- формация о выполнении и результатах процесса трансляции содержится в файле с расширением log. Форматированный вариант исходного текста программы на языке ассемблера записывается в файл, имеющий расширение fint. При отладке микропроцессорных программ следует учитывать, что выходные файлы, формируемые различными версиями ассемблера, переписываются заново при каждом запуске процесса трансляции. При переходе от одной модификации микро- процессорного ядра PicoBlaze к другой (вызванном, например, необходимостью за- мены используемого семейства ПЛИС) следует обратить внимание на то, что разра- ботанное ранее программное обеспечение не может использоваться непосредственно в новой версии ядра. Для переноса этих программ необходимо привести их исходные тексты в соответствие с форматами команд, поддерживаемыми версией ассемблера
106 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС выбранного варианта микропроцессорного ядра PicoBlaze. Особое внимание нужно обратить на формат представления адресов переходов и подпрограмм, а также номе- ров регистров общего назначения. При этом нужно учитывать возможные различия в объеме программной памяти и блока регистров общего назначения в используемой ранее и новой версии микропроцессорного ядра PicoBlaze. Кроме того, различная глубина стека в этих версиях накладывает ограничения на количество вложенных вызовов подпрограмм. После корректировки исходных текстов программ следует выполнить их трансляцию с помощью соответствующей версии ассемблера. 7.5. Типовые ошибки при написании программ на языке ассемблера В данном разделе рассматриваются наиболее распространенные ошибки, встре- чающиеся в исходном тексте программ на языке ассемблера для микропроцессорных ядер семейства PicoBlaze. Для каждого типа ошибок приводится текст соответст- вующего сообщения, формируемого ассемблерами KCPSM, KCPSM2 и KCPSM3. Текст аналогичных сообщений ассемблера ASM несущественно отличается от образ- цов, представленных ниже, в основном меньшим объемом справочной информации. Типовыми ошибками при написании программ на языке ассемблера микропро- цессорного ядра PicoBlaze являются: опечатки в тексте команд микропроцессорного ядра или директив ассемблера; неправильные названия регистров, указываемые в качестве параметров команд; ошибки в указании параметров инструкций микропроцессорного ядра; отсутствие обязательных параметров команд микропроцессорного ядра или ди- ректив ассемблера; отсутствие метки строки, на которую имеются ссылки в командах программы; использование одной метки для двух или более строк; недопустимые значения числовых параметров директив ассемблера. При выявлении ошибки в тексте команды микропроцессорного ядра или дирек- тивы ассемблер выводит на экран строку, формат которой выглядит следующим об- разом: ERROR - <текст_неидентифицированной_команды_или_директивы> is not a valid instruction. Обнаружение ошибки в названии используемого регистра сопровождается сооб- щением вида ERROR - Invalid register name: <неправильный_идентификатор_регистра> Default register names are in the range 'sO1 to 'sF. Note that NAMEREG directive replaces the default name, so check that user defined register names are consistant. User defined register names are case sensitive. Если допущена ошибка при указании второго параметра инструкции микропроцес- сорного ядра или директивы, то ассемблер формирует следующее предупреждение: ERROR - Invalid second operand: <ошибочный_идентификатор_второго_параметра> This does not match a valid register name or constant label. It is also invalid as an absolute value. Default register names are in the range 'sO' to 'sF. Note that NAMEREG directive replaces the default name,
ГЛАВА 7 107 so check that user defined register names are consistant. Constant labels are defined using the CONSTANT directive. Absolute values must be specified as 2-digits hexadecimal in the range '00' to 'FF'. All user defined labels and names are case sensitive. При обнаружении адреса порта ввода/вывода, выходящего за пределы допусти- мых значений, или несуществующей константы, используемой в качестве адреса порта ввода/вывода, выводится сообщение, которое имеет следующий вид: ERROR - Invalid port address: <неправильный_адрес„порта_ввода/вывода> This does not match a valid constant label. It is also invalid as an absolute port address. Constant labels are defined using the CONSTANT directive. Absolute port addresses must be specified as 2-digits hexadecimal in the range ’00‘ to ‘FF1. The second operand may also be a valid register name enclosed in brackets or a constant label. Default register names are in the range '(sO)1 to '(sF)‘. Note that NAMEREG directive replaces the default name. All user defined labels and names are case sensitive. Если пропущен первый параметр команды микропроцессорного ядра или дирек- тивы, то ассемблер выводит строку, формат которой выглядит следующим образом: ERROR - No operands specified for <инструкция_в„которой_пропущен_параметр> instruction. В случае отсутствия второго обязательного параметра команды микропроцес- сорного ядра или директивы строка сообщения принимает следующий вид: ERROR - No second operand specified for <инструкция_в_которой_пропущен_параметр> instruction. Об отсутствии метки строки, на которую встречаются ссылки в командах пере- хода или вызова подпрограммы, или при обнаружении неправильного значения адре- са команды ассемблер информирует следующим сообщением: ERROR - Address is not 2-digits: <текст_отсутствующей_метки> Provide an absolute address or matching label. Note that labels are case sensitive. Absolute address must be in range '00' to 'FF‘ Обнаружение в тексте программы двух или более строк с одинаковой меткой, сопровождается следующим предупреждением: ERROR - Duplicate label specified: <текст_повторно_используемой_метки> All labels must be unique. При выявлении ошибочного значения адреса, указанного в директиве ADDRESS, ассемблер выводит сообщение, которое выглядит следующим образом: ERROR - Constant value '<ошибочное_значение_адреса>' is not 2-digits. 2-digit hexadecimal constant in range ‘00’ to 'FF' required. Если в директиве определения константы указано значение, выходящее за допус- тимые границы, то ассемблер отреагирует следующим предупреждением: ERROR - Constant value '<ошибочное_значение_константь!>' is not valid. 2-digit hexadecimal constant in range '00' to 'FF' required.
8. ПРОЕКТИРОВАНИЕ ВСТРАИВАЕМЫХ СИСТЕМ НА ОСНОВЕ МИКРОПРОЦЕССОРНЫХ ЯДЕР СЕМЕЙСТВА PICOBLAZE После ознакомления с архитектурой, системой команд и ассемблером микропро- цессорных ядер семейства PicoBlaze приступаем к практическому изучению процесса разработки встраиваемых систем, реализуемых на базе ПЛИС фирмы Xilinx, с использованием этих ядер. Так как ПЛИС с архитектурой FPGA обладают более широкими функциональными возможностями по сравнению с кристаллами серий CPLD [2], то для реализации встраиваемых микропроцессорных систем в большинст- ве случаев рекомендуется использовать микросхемы семейств FPGA. Поэтому далее, в настоящей главе, основное внимание уделяется изучению этапов процесса проек- тирования систем на основе ядер семейства PicoBlaze, реализуемых в ПЛИС серий FPGA, и их выполнению в САПР серии Xilinx ISE. Маршрут проектирования встраиваемых микропроцессорных систем в общем виде инвариантен по отношению к семействам ПЛИС, используемых для их реализа- ции. При этом следует учитывать, что только содержание и выполнение начальных этапов разработки (создание нового проекта и подготовка исходных описаний про- граммной и аппаратной части проектируемой системы) не зависит от выбранного ти- па ПЛИС. Содержание последующих этапов (синтез, функциональное и временное моделирование, размещение, трассировка и загрузка проекта в кристалл) различается для случаев использования ПЛИС семейств CPLD и FPGA. С особенностями выпол- нения этих этапов при использовании микросхем серий CPLD можно ознакомиться в [1]. Процесс проектирования встраиваемых микропроцессорных систем на базе кри- сталлов с архитектурой FPGA с применением ядра PicoBlaze наглядно продемонст- рирован на примере разработки контроллера, реализуемого в ПЛИС семейства Spartan-3. 8.1. Этапы проектирования встраиваемых систем на основе микропроцессорных ядер семейства PicoBlaze Проектирование микропроцессорных систем с использованием 8-разрядных ядер семейства PicoBlaze включает в себя все стандартные этапы разработки цифровых устройств с аппаратной реализацией операций на базе ПЛИС фирмы Xilinx. Содер- жание и выполнение этих этапов в САПР серии Xilinx ISE подробно рассмотрено в [1], поэтому далее они освещаются кратко. Кроме того, маршрут проектирования микропроцессорных систем на основе ядер рассматриваемого семейства содержит этапы создания программного обеспечения для разрабатываемой системы. В общем случае в процессе проектирования встраиваемых систем на основе микропроцессор- ных ядер семейства PicoBlaze можно выделить следующие этапы: * выбор семейства, типа ПЛИС, соответствующей версии микропроцессорного яд- ра для реализации проектируемой системы и разработка ее архитектуры; создание исходного текста микропроцессорной программы на языке ассемблера; трансляция программы на языке ассемблера;
ГЛАВА 8 109 создание нового проекта встраиваемой системы в САПР серии Xilinx ISE с ука- занием выбранного семейства и типа ПЛИС, а также средств синтеза и модели- рования; подготовка описания проектируемой системы в схемотехнической, алгоритмиче- ской или в текстовой форме; синтез проектируемой микропроцессорной системы; отладка программной и аппаратной части разрабатываемой системы методом функционального моделирования; размещение и трассировка проекта встраиваемой микропроцессорной системы в кристалле; отладка программной и аппаратной части разрабатываемой системы методом временного (полного) моделирования; • формирование конфигурационной последовательности ПЛИС, соответствующей проекту разрабатываемой системы; программирование ПЛИС (загрузка проекта разработанной микропроцессорной системы в кристалл) или конфигурационного ПЗУ/ППЗУ. В наглядном виде типовой маршрут проектирования встраиваемых систем, вы- полняемых на основе микропроцессорных ядер семейства PicoBlaze, показан на рис. 8.1. Рассматривая последовательность выполнения этапов, следует обратить внимание на то, что этапы разработки программной части проектируемой системы могут выполняться как до, так и после создания исходных описаний аппаратной час- ти. Далее приводятся краткие пояснения по содержанию перечисленных выше этапов проектирования встраиваемых систем на основе микропроцессорных ядер семейства PicoBlaze. Прежде чем приступить к созданию нового проекта, следует определиться с вы- бором метода описания встраиваемой микропроцессорной системы и соответственно средств синтеза. Исходная информация о проектируемой системе может быть пред- ставлена в виде принципиальных схем, описаний на языке HDL, диаграмм состояний, пакетов и библиотек пользователя. Учитывая, что все компоненты микропроцессор- ного ядра PicoBlaze выполнены на основе языков описания аппаратуры HDL высоко- го уровня VHDL и Verilog, рекомендуется использовать этот же метод для описания разрабатываемой системы. При этом целесообразно выбирать тот язык HDL, в тер- минах которого представлены описания компонентов микропроцессорного ядра. Так как наиболее распространенным языком описания компонентов микропроцессорных ядер семейства PicoBlaze является VHDL (все варианты ядер содержат соответст- вующие VHDL-описания), то далее рассматривается процесс разработки встраивае- мых систем с использованием именно этого языка HDL в качестве основного. При определении семейства и типа ПЛИС (и соответствующей версии ядра PicoBlaze) для реализации проекта микропроцессорной системы необходимо не толь- ко оценить ее сложность с учетом требований, предъявляемых к быстродействию, потребляемой мощности, условиям эксплуатации, но и учесть дополнительные фак- торы, как, например, стоимость, возможность перепрограммирования в системе. Вы- бранное семейство или тип кристалла при необходимости достаточно легко можно изменить в процессе проектирования. При этом следует помнить, что в случае смены семейства ПЛИС (и соответственно версии ядра PicoBlaze) потребуется коррекция разработанной ранее микропроцессорной программы. В процессе разработки архи-
110 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС тектуры встраиваемой микропроцессорной системы, реализуемой на основе ядра PicoBlaze в ПЛИС фирмы Xilinx, определяется ее конфигурация и состав периферий- ных устройств. Создание проекта и исходного описания разрабатываемой микропроцессорной системы Шаблоны описания содержимого программной памяти ROM_form.vhd ROM form.v Исходный текст программы <filename.psm> _____1______ ----► Assembler - <filename.vhd> <filename.v> Трансляция программы Синтез разрабатываемой микропроцессорной системы Размещение и трассировка разрабатываемой микропроцессорной системы в кристалле ПЛИС Формирование конфигурационной последовательности разрабатываемой микропроцессорной системы Загрузка конфигурационной последовательности микропроцессорной системы в кристалл ПЛИС Xilinx ISE Project Navigator HDL-Editor ▼ <design.vhd> Рис. 8.1. Последовательность этапов проектирования встраиваемых систем на основе микропроцессорных ядер семейства PicoBlaze Разработка программной части микропроцессорной системы включает в себя подготовку исходных текстов программ на языке ассемблера и их последующую трансляцию. Эти процедуры подробно рассмотрены в предыдущей главе. На этапе подготовки описания проектируемой системы, кроме формирования ис- ходных текстов на языке HDL, нужно также установить временные и топологические ограничения, которые должны учитываться при синтезе, размещении и трассировке проекта микропроцессорной системы в кристалле. В процессе синтеза на основании исходных модулей проекта формируется список соединений (netlist), содержащий набор примитивов или компонентов, который может быть реализован на основе ре- сурсов выбранного кристалла ПЛИС. Результаты синтеза используются далее в каче- стве исходных данных средствами размещения и трассировки. Отладка разрабаты- ваемой системы, выполняемая методом функционального моделирования, произво- дится без учета реальных значений задержек прохождения сигналов и позволяет проконтролировать соответствие выходных сигналов алгоритму работы микропро- цессорной программы. На этапе размещения и трассировки проекта в кристалл про- изводится распределение выполняемых функций в конфигурируемые логические
ГЛАВА 8 111 блоки CLB (Configurable Logic Block) или макроячейки Macrocell, в зависимости от используемого семейства ПЛИС, и формирование необходимых связей в кристалле. В процессе выполнения этого этапа проектирования также определяются реальные значения задержек распространения сигналов, которые необходимы для полного временного моделирования системы. Основным результатом этапа размещения и трассировки является формирование файла, в котором содержится информация о конфигурации ПЛИС, реализующей проектируемую систему. Далее на основе этого файла создается конфигурационная битовая последовательность, предназначенная для программирования ПЛИС, или файл прошивки конфигурационного ПЗУ/ППЗУ. Завершением процесса разработки встраиваемой микропроцессорной системы является загрузка конфигурационных данных в кристалл или программирование конфигурационного ПЗУ/ППЗУ с помощью соответствующих программ и загру- зочного кабеля. Следует обратить внимание на то, что этапы функционального и временного моделирования не являются обязательными. Тем не менее использование высоко- эффективных средств моделирования, включаемых в состав пакетов САПР фир- мы Xilinx, в качестве отладочных инструментов позволяет обнаружить большин- ство возможных ошибок в аппаратной и программной части и тем самым значи- тельно сократить общее время разработки системы. Процесс моделирования разрабатываемых систем с помощью программных средств ModelSim, используе- мых совместно с САПР серии Xilinx ISE, подробно рассмотрен в [1]. При обна- ружении ошибок на любом из этих этапов, например логических ошибок на этапе функционального моделирования или при получении неудовлетворительных ре- зультатов временного моделирования, следует вернуться на стадию разработки исходных описаний проекта и микропроцессорной программы, внести необходи- мые изменения и повторить последующие этапы. Перед тем как перейти к описанию выполнения всех перечисленных выше этапов процесса проектирования встраиваемых микропроцессорных систем на основе ядер семейства PicoBlaze в рамках САПР серии Xilinx ISE, следует определить понятие проекта, используемое далее. 8.2. Структура проекта встраиваемой микропроцессорной системы на основе ядра семейства PicoBlaze в САПР серии Xilinx ISE Под проектом встраиваемой микропроцессорной системы в САПР серии Xilinx ISE понимается совокупность модулей (файлов), которые содержат информацию, не- обходимую для выполнения всех этапов процесса разработки данной системы на базе ПЛИС фирмы Xilinx. В отличие от проекта цифрового устройства с аппаратной реа- лизацией операций [1], проект микропроцессорной системы включает в себя допол- нительно файлы, используемые в процессе разработки программных средств. В структуре проекта встраиваемой микропроцессорной системы в САПР серии Xilinx ISE ISE можно выделить следующие группы модулей: исходные описания проектируемого устройства в графической или текстовой форме; модули временных и топологических ограничений проекта; исходные тексты микропроцессорных программ на языке ассемблера;
112 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС результаты трансляции микропроцессорных программ на языке ассемблера, представленные в различных форматах; документация, сопровождающая проект; промежуточные результаты, используемые в качестве исходных данных для по- следующих шагов проектирования; отчеты о выполнении основных этапов проектирования; функциональная и временная модели проектируемой системы; описания тестовых воздействий, необходимых для моделирования разрабаты- ваемой системы, в текстовом и графическом формате; результаты функционального и временного моделирования проектируемой сис- темы в графической и текстовой форме; отчеты, формируемые вспомогательными средствами пакета; окончательные результаты проектирования, используемые для конфигурирова- ния ПЛИС. Все модули проекта располагаются в одном каталоге (папке), название которого совпадает с названием проекта. Изначально проект представлен только заголовком и модулем, в котором указываются параметры проекта. Затем к проекту добавляются модули исходного описания аппаратной части проектируемой системы и исходные тексты микропроцессорных программ. Далее после выполнения каждого этапа про- цесса разработки в проект включаются результаты, полученные на этом этапе, и со- ответствующий отчет. Кроме того, разработчик может включить в проект необходи- мую текстовую документацию. 8.3. Создание нового проекта встраиваемой микропроцессорной системы на основе ядра семейства PicoBlaze в САПР серии Xilinx ISE Прежде чем приступить к созданию нового проекта встраиваемой микропроцес- сорной системы в САПР серии Xilinx ISE, рекомендуется сформировать папку для хранения файлов этого проекта. Для этого можно воспользоваться средствами ОС Windows™ 2000/ХР (например, Проводником) или какой-либо управляющей обо- лочки (файлового менеджера), например Total Commander (Windows Commander). Имя создаваемой папки для нового проекта должно совпадать с его названием. Целе- сообразно хранить все проекты в специально созданном для этих целей каталоге, на- пример C:\Project. Каталог, в котором находятся все проекты пользователя, должен располагаться вне раздела, содержащего средства проектирования серии Xilinx ISE, чтобы при обновлении версии пакета САПР он не был удален. В папку, предназначенную для хранения модулей нового проекта, нужно скопи- ровать файлы исходных описаний используемой версии микропроцессорного ядра PicoBlaze, соответствующую версию ассемблера и шаблоны описания содержимого программной памяти. После этого следует в этой же папке сформировать файл, со- держащий исходный текст микропроцессорной программы на языке ассемблера. Да- лее необходимо осуществить трансляцию разработанной программы, при успешном завершении которой будут сгенерированы файлы описания содержимого программ- ной памяти. Выполнение этих процессов подробно рассмотрено в предыдущей главе.
ГЛАВА 8 113 Все последующие этапы разработки микропроцессорной системы выполняются в среде САПР серии Xilinx ISE. Поэтому далее необходимо открыть управляющую оболочку этого пакета - Навигатор проекта (Project Navigator), дважды щелкнув ле- вой кнопкой мыши на пиктограмме zRF, расположенной на Рабочем столе ПК. При отсутствии данной пиктограммы можно воспользоваться кнопкой Пуск (Start). После нажатия этой кнопки в открывшейся панели необходимо выбрать строку Программы (Programs), а затем в предложенном списке выбрать группу программ Xilinx ISE 7. И, в которой нужно выделить строку Project Navigator и щелкнуть на ней левой кнопкой мыши. При успешном выполнении указанных операций на экране монитора отобра- жается основное окно Навигатора проекта, вид которого представлен на рис. 8.2. Для создания нового проекта в САПР серии Xilinx ISE следует выполнить ко- манду File основного меню Навигатора проекта, а затем во всплывающем меню вы- брать строку New Project, как показано на рис. 8.2. Print Preview I ^XtlinK - Project Navigator - NoProject New Project,.. New Open Open Project.. Open Example. Главное Окно исходных Окно Оперативная Инструментальная меню модулей процессов панель управления панель HDL-редактора зЬ - Recent Projects Recent Fites ; ; ' '."Exit Createanew -д. - 'дД;-' Д ; ДД Д'"' ДД - Г/ . Л< Закладки страниц окна Окно консольных Строка Панель размещения рабочих консольных сообщений сообщений состояния окон HDL-редактора Рис. 8.2. Последовательность действий по созданию нового проекта в САПР серии Xilinx ISE В результате указанных действий запускается мастер формирования нового про- екта New Project Wizard. Работа этого мастера начинается с вывода на экран диалого- вой панели, вид которой показан на рис. 8.3. В стартовой диалоговой панели мастера New Project Wizard должны быть опре- делены следующие исходные данные, необходимые для создания нового проекта: название проекта; диск и каталог, в которых должен располагаться проект; тип (способ описания) модуля верхнего уровня иерархии проекта.
114 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС k&.y .:' :-J^::<? : . . • У < "У УУУУУ SW- : fe:. - ' ' Рис. 8.3. Стартовая диалоговая панель мастера формирования нового проекта New Project Wizard в САПР серии Xilinx ISE В первую очередь рекомендуется определить раздел (папку), в котором будет располагаться рабочий каталог проекта. Место расположения проекта на диске ука- зывается в поле редактирования Project Location (см. рис. 8.3). По умолчанию в поле редактирования Project Location предлагаются диск и каталог, которые использова- лись в предыдущем проекте. Изменить место расположения создаваемого проекта можно двумя способами: используя клавиатуру или стандартную панель навигации по дискам компьютера. При выборе первого метода следует поместить курсор на по- ле редактирования Project Location и щелкнуть левой кнопкой мыши, после чего вве- сти с клавиатуры имя диска и каталога. Если указываемый каталог отсутствует на диске, то он создается автоматически. Для выбора каталога, который уже существует, удобнее воспользоваться вторым способом, нажав кнопку с пиктограммой «...», рас- положенную справа от поля редактирования Project Location. В открывшейся диало- говой панели навигации следует с помощью мыши выбрать требуемый диск и ката- лог, а затем подтвердить сделанный выбор нажатием кнопки ОК. После закрытия панели навигации выбранные параметры автоматически отображаются в поле редак- тирования Project Location. Чтобы задать имя создаваемого проекта, необходимо поместить курсор мыши на по- ле редактирования Project name (см. рис. 8.3) и щелкнуть левой кнопкой мыши, после че- го ввести с клавиатуры соответствующее название. Рекомендуется задавать мнемониче- ские имена проектов, чтобы впоследствии было удобнее ориентироваться при поиске требуемого проекта. Введенное название проекта автоматически добавляется в поле Project Location, определяя тем самым название рабочего каталога проекта. Тип (способ описания) модуля верхнего уровня иерархии проекта определяется с помощью поля выбора Top-Level Module Туре. Выпадающий список, который откры- вается при нажатии кнопки, расположенной в правой части этого поля выбора, со-
ГЛАВА 8 115 высокого уровня VHDL и Verilog для описания модуля верхнего уровня иерархии проекта в качестве значения параметра Top-Level Module Туре устанавливается вари- ант HDL. Если исходный модуль верхнего уровня иерархии проекта будет представ- лять собой схему, выполненную в схемотехническом редакторе САПР серии Xilinx ISE, то следует выбрать вариант Schematic. В случаях, когда в качестве модуля верх- него уровня иерархии предполагается использовать описания в формате EDIF или NGC/NGO, должны быть указаны соответствующие варианты значения параметра Top-Level Module Type. Установка значений всех необходимых параметров создаваемого проекта завер- шается нажатием кнопки Далее(Нех1)> которая находится в нижней части диалоговой панели (см. рис. 8.3). Следует обратить внимание на то, что эта кнопка становится доступной только после определения значений всех перечисленных выше парамет- ров. Если значение какого-либо параметра не задано, то данная кнопка остается в не- активном состоянии (ее название отображается серым цветом). После нажатия кноп- ки flanee(Next) на экран выводится очередная диалоговая панель мастера New Project Wizard, с помощью которой определяются следующие параметры нового проекта: семейство ПЛИС, на базе которого разрабатывается микропроцессорная система; тип кристалла, выбираемого для реализации микропроцессорной системы; тип корпуса ПЛИС; категория быстродействия используемого кристалла; применяемые средства синтеза и моделирования проектируемой системы; язык HDL, используемый для формирования моделей разрабатываемой системы. Вид этой диалоговой панели представлен на рис. 8.4. Package .... /.... Ж.. i. cs144 SSWOZZ'ZRS'S '-Г1." J”...2 Syntheste Tool XST "(VHDLjVerilog) ISE Simulator VHDL Puc. 8.4. Диалоговая панель выбора ПЛИС, средств синтеза и моделирования проектируемой системы Семейство ПЛИС, тип кристалла, корпуса, категория быстродействия, средства синтеза и моделирования, а также язык HDL, используемый для описания моделей, устанавливаются в форме таблицы параметров проекта (рис. 8.4). В первом столбце
116 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС этой таблицы отображаются названия параметров (Property Name), а во втором - зна- чения этих характеристик (Value), Каждая ячейка столбца Value представляет собой поле выбора значения соответствующего параметра. Чтобы установить требуемое значение какого-либо параметра в этой таблице, следует активизировать соответст- вующее поле выбора, поместив на него курсор и щелкнув левой кнопкой мыши. По- сле этого в правой части этого поля выбора появляется кнопка управления выпадаю- щим списком. При нажатии на эту кнопку отображается список возможных значений соответствующего параметра. Выбор требуемого значения осуществляется щелчком левой кнопки мыши на строке выпадающего списка, содержащей это значение. По- сле выбора одной из строк выпадающего списка указанное в ней значение автомати- чески отображается в поле выбора. Для определения семейства ПЛИС, на базе которого проектируется устройство, следует воспользоваться полем выбора параметра Device Family (рис. 8.4). При нажа- тии на кнопку управления выпадающим списком, появляющуюся в правой части это- го поля, на экране отображается список семейств ПЛИС, поддерживаемых исполь- зуемой версией средств проектирования серии Xilinx ISE. В поле выбора типа кристалла для реализации проектируемого устройства Device автоматически отображается тип ПЛИС, установленный по умолчанию для выбран- ного семейства. Для его изменения необходимо в выпадающем списке поля выбора значения параметра Device выделить строку, содержащую требуемый тип кристалла. Если разработчик затрудняется определить тип кристалла, необходимый для реали- зации проектируемого устройства, то следует использовать автоматический выбор типа кристалла. Для этого необходимо в списке ПЛИС выбрать строку Auto для тре- буемого семейства ПЛИС. Программы трассировки определят кристалл с минималь- ным количеством ресурсов, необходимых для реализации разрабатываемой системы. Тип корпуса кристалла, выбранного для реализации микропроцессорной систе- мы, указывается в поле выбора Package. Если в качестве типа кристалла задано зна- чение Auto, то в этом поле отображается символ «*», соответствующий режиму авто- матического выбора типа корпуса. В этом случае также можно указать конкретный тип корпуса с неопределенным количеством выводов. Для этого следует выбрать значение <тип корпуса>* из выпадающего списка, который появляется при щелчке левой кнопкой мыши в поле выбора Package. Если в поле Device указан определен- ный тип ПЛИС, то выпадающий список значений поля выбора Package содержит обозначения только тех типов корпусов, в которых выпускается данный кристалл. Для определения категории быстродействия выбранного кристалла предназначе- но поле выбора параметра Speed Grade. Выпадающий список этого поля отображает выпускаемый ряд градации по быстродействию для выбранного типа ПЛИС. Если тип кристалла не конкретизирован (в поле Device указано значение Auto), то список содержит единственное значение «*», соответствующее режиму автоматического выбора категории быстродействия ПЛИС. Набор поддерживаемых средств синтеза определяется выбранным семейством ПЛИС. Чтобы просмотреть этот набор и при необходимости изменить средства син- теза, предлагаемые по умолчанию, следует воспользоваться полем выбора Synthesis Tool (см. рис. 8.4). Состав поддерживаемых средств синтеза зависит от используемой конфигурации средств проектирования серии Xilinx ISE и применяемого семейства ПЛИС. Навигатор проекта автоматически корректирует содержимое выпадающего списка инструментов синтеза в соответствии с конфигурацией САПР и выбранным семейством ПЛИС. По умолчанию предлагаются встроенные средства синтеза САПР серии Xilinx ISE - Xilinx Synthesis Technology (XST).
ГЛАВА 8 117 Для указания средств моделирования проектируемой системы нужно воспользо- ваться полем выбора параметра Simulator. Конфигурации системы проектирования ISE BaseX и ISE Foundation обладают собственными средствами моделирования ISE Simulator. Кроме того, все конфигурации средств проектирования поддерживают систему моделирования ModelSim. В случае использования других систем моделиро- вания следует выбрать строку Other. Параметр Generated Simulation Language позволяет определить язык HDL, ис- пользуемый для формирования моделей проектируемой системы. В выпадающем списке значений этого параметра представлено два значения - VHDL и Verilog, кото- рые соответствуют языкам высокого уровня, поддерживаемым средствами синтеза. После определения значений всех параметров в диалоговой панели, показанной на рис. 8.4, следует нажать кнопку Далее (Next), которая находится в нижней части этой панели. В результате на экране отображается следующая диалоговая панель мастера формирования нового проекта New Project Wizard, вид которой показан на рис. 8.5. Рис. 8.5. Диалоговая панель создания нового исходного модуля проекта Данная диалоговая панель предоставляет возможность создания нового модуля ис- ходного описания микропроцессорной системы и включения его в состав проекта. Чтобы сформировать основу нового модуля исходного описания, следует нажать кнопку New Source (рис. 8.5). В результате выполненных действий открывается диалоговая панель, представленная на рис. 8.6, в которой необходимо выбрать тип нового модуля, задать его имя и указать место расположения создаваемого файла на диске. В первую очередь рекомендуется установить тип создаваемого исходного моду- ля, для чего следует в предложенном списке диалоговой панели (рис. 8.6) выделить соответствующую строку, щелкнув на ней левой кнопкой мыши. Содержание списка возможных типов исходных модулей зависит от выбранного семейства ПЛИС и средств синтеза, используемых в проекте. Учитывая, что все компоненты ядра вы- полнены в виде VHDL-описаний, следует выбрать в предложенном списке в качестве типа создаваемого модуля VHDL Module. Затем нужно активизировать поле редакти-
118 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС рования названия модуля (файла) File Name, поместив на него курсор и щелкнув ле- вой кнопкой мыши. Ввод имени файла осуществляется с помощью клавиатуры. Рас- ширение имени файла устанавливается автоматически в соответствии с выбранным типом модуля. Место расположения создаваемого модуля на диске указывается в по- ле редактирования Location диалоговой панели (рис. 8.6). По умолчанию предлагает- ся рабочий каталог формируемого проекта. Для создаваемых модулей исходного описания проекта рекомендуется использовать именно этот каталог. Рис. 8.6. Диалоговая панель установки параметров нового исходного модуля проекта Особое внимание необходимо обратить на состояние индикатора автоматическо- го включения модуля в состав проекта Add to project. Если флаг индикатора установ- лен (поле индикатора помечено маркером), то созданный модуль автоматически включается в состав формируемого проекта. По умолчанию флаг индикатора нахо- дится в установленном состоянии. Для модификации этого параметра достаточно щелкнуть левой кнопкой мыши, поместив курсор на поле индикатора. При этом со- стояние индикатора изменится на противоположное. Установка значений всех необходимых параметров создаваемого модуля завер- шается нажатием кнопки Далee(Next), которая находится в нижней части диалоговой панели (рис. 8.6). Если создается основа VHDL-модуля, то далее открывается диало- говая панель определения исходных данных, необходимых для автоматической гене- рации шаблона VHDL-описания. Вид этой диалоговой панели показан на рис. 8.7. В поле редактирования Entity Name после его активизации необходимо указать имя описываемого объекта. По умолчанию предлагается идентификатор, совпадаю- щий с названием создаваемого модуля. Имя архитектурного тела VHDL-описания указывается в поле редактирования Architecture Name. По умолчанию в качестве имени архитектурного тела предлагается идентификатор Behavioral. Далее следует заполнить таблицу описания портов, которая содержит 4 столбца. Ячейки первого столбца представляют собой поле редактирования, в которое с помощью клавиатуры заносится идентификатор порта Port Name. Во второй колонке указывается тип порта Direction. Каждая ячейка этого столбца представляет собой поле выбора, выпадаю- щий список которого содержит 3 значения, определяющие тип порта: in (входной), out (выходной) или inout (двунаправленный). Колонки MSB и LSB заполняются толь-
ГЛАВА 8 119 ко для портов, представленных в виде шин и описываемых с помощью векторов. В столбце MSB указывается значение индекса, соответствующее старшему разряду вектора, а в LSB - младшему. Если описание портов нового модуля не помещается в видимой части таблицы, следует воспользоваться элементами вертикальной прокрут- ки, расположенными вдоль правой границы таблицы. После внесения всех необхо- димых данных следует нажать кнопку Далее (Next) (рис. 8.7), в результате чего от- крывается панель, в которой отображается вся информация, на основе которой вы- полняется формирование нового модуля VHDL-описания (рис. 8.8). Рис. 8.7. Диалоговая панель определения исходных данных для формирования шаблона VHDL-описания Рис. 8.8. Информационная панель мастера подготовки шаблона VHDL-описания, отражающая значения параметров создаваемого исходного модуля проекта
120 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Если все данные, необходимые для создания основы нового VHDL-описания, указаны корректно, то далее нужно нажать кнопку Готово (Finish) в нижней части информационной панели (рис. 8.8), в результате чего открывается новое рабочее ок- но встроенного HDL-редактора Навигатора проекта, в котором отображается автома- тически сформированный код. Этот код включает декларацию используемых библиотек и пакетов, интерфейса описываемого объекта entity и основу архитектурного тела VHDL- описания. Для получения законченного описания на языке VHDL необходимо основу ар- хитектурного тела дополнить кодом, описывающим внутреннюю структуру или поведе- ние объекта. Текст описания вводится с помощью клавиатуры или шаблонов встроенного HDL-редактора САПР серии Xilinx ISE. После завершения формирования модуля тек- стового описания следует сохранить его в виде файла на диске, используя команды Save или Save As из всплывающего меню File или кнопку IfiJ, расположенную на опера- тивной панели управления Навигатора проекта. Одновременно с открытием окна встроенного HDL-редактора на экран вновь вы- водится диалоговая панель создания нового исходного модуля, в которой отобража- ется название созданного модуля (рис. 8.5). В этой панели нужно нажать кнопку Да- лее (Next), после чего на экране появляется следующая диалоговая панель мастера формирования нового проекта New Project Wizard, вид которой представлен на рис. 8.9. Рис. 8.9. Диалоговая панель включения существующих модулей исходного описания в состав создаваемого проекта Эта диалоговая панель позволяет включить в состав формируемого проекта су- ществующие модули исходного описания, в том числе и созданные ранее в рамках предыдущих проектов. Чтобы добавить существующий модуль в состав создаваемого проекта, следует воспользоваться кнопкой Add Source (рис. 8.9), после чего на экране
ГЛАВА 8 121 отображается стандартная панель диалога открытия файла. В этой стандартной пане- ли нужно выбрать соответствующий файл, подтвердив сделанный выбор нажатием кнопки Открыть (Open), после чего название этого файла автоматически заносится в таблицу, расположенную в диалоговой панели, изображенной на рис. 8.9. В первой колонке этой таблицы с именем Source File отображается название включаемого файла, во второй с именем Туре - его тип. Третья колонка, Copy to project, содержит индикатор автоматического копирования модуля в состав проекта. Если флаг уста- новлен (поле индикатора помечено маркером), то включаемый модуль автоматически копируется в рабочий каталог создаваемого проекта. Для изменения состояния инди- катора на противоположное нужно поместить курсор на его поле и щелкнуть левой кнопкой мыши. Когда в состав проекта добавляется файл с расширением VHD, то на экран автоматически выводится диалоговая панель, позволяющая уточнить тип включаемого модуля (рис. 8.10). Если добавляемый файл с расшире- нием VHD содержит исходное описание компонента проектируемой системы на языке VHDL, то в этой диалоговой пане- ли нужно выбрать строку VHDL Design File. В том случае, если включаемый файл представляет собой описание тес- тового модуля, следует выбрать строку VHDL Test Bench File. Рассмотренную процедуру нужно поочередно повторить для включения всех необходимых модулей в состав соз- даваемого проекта. Рис. 8.10. Диалоговая панель выбора типа VHDL-модуля при включении его в состав создаваемого проекта При этом нужно не забыть добавить в состав проекта файл описания содержимо- го программной памяти, соответствующий разработанной микропроцессорной про- грамме. Этот файл с именем <название_микропроцессорной_программы>.укс1 дол- жен быть сформирован ассемблером. Когда все требуемые модули будут добавлены в состав формируемого проекта, следует нажать кнопку Далее (Next), расположенную в нижней части диалоговой панели, представленной на рис. 8.9. В результате на эк- ран выводится информационная панель, в которой отображаются установленные значения основных параметров создаваемого проекта. Вид этой панели показан на рис. 8.11. Если необходимо изменить значение какого-либо параметра, то кнопка Назад (Back), расположенная в нижней части информационной панели, позволяет вернуться к предыдущей диалоговой панели. Для завершения процесса формирования нового проекта следует нажать кнопку Готово (Finish) в нижней части информационной па- нели (рис. 8.11). После этого созданный проект автоматически открывается в рабочей области Навигатора проекта. При этом в области расположения рабочих окон ото- бражается подробная информация о новом проекте.
122 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС й* Project Name: NewPrj Ж Project Location: C:\Project\NewPrj Project Type: HDL Device: Device Family: Virtex2 Device: xc2v40 Package. c$144 Speed Grade: -4 Top-Level Module Type: HDL Synthesis Tool: XST |VHDL/Verilog) Simulator. ISE Simulator Generated Simulation Language: VHDL Sources: VHDL Module NewTopLevelvhd VHDL Design File embedded_kcpsm3.vhd copied to Project Puc. 8.11. Информационная панель мастера формирования нового проекта New Project Wizard ewPij\r^^tti7e-|0niSuihmah^ : : gdtt.Reject . Ssm ft-ocess KSfidow Jrfp Sources" in project: . . -. j .. , ,S ЧЖ\1..Ж7.:..х:л g"' H-Q xc2v40-4c$144 & embedded_kcpsm3-connectivity (embedded_kcpsm3.vhd] |?| kcpsm3 Processes for’Source: • Add Ewtlina^dtftc»' Create New Source View Design Summary Design Utilities ~ Create Schematic Symbol View Command Line Log File Check Syntax lor Simulation Launch Xilinx ISE Simulator — View HDL Instantiation Iemplate U ser Constraints ..Create Timing Constraints В Assign Package Pins Create Area Constraints ' E dit Constraints (Text) Synthesize XST Implement Design Generate Programming File =| Programming File Generation Report j2 Generate PROM, ACE, or JTAG File Configure D evice (iM PACT) o El El Property .ProjectNama:- lvalue _________________ T ' jc.^projectViewprj j :|хс2у40 - f Sunday 06/1 2/05 at 02:02 ?биий.: -Ч =::::[•'>/:; ' : ToqIc UtlUzatlon.lused |Ava»ablg|utlllzation [Note^aj) T: " - Ц./~™T“il '7 ' [Property J Value| jpitfdNdt: ' jConatrairrtfo)|RBque»ted|Actual| Logic Levels [ , ; I f, 7' рЦ&Й- ,т .-д. ;Report NameTstatus jLa*t Dtrte Modtfled j ' □ a - >: Q О ч О /ft* 4 Kwtly ' J Рис. 8.12. Вид основного окна Навигатора проекта после создания нового проекта
ГЛАВА 8 123 На следующем этапе разработки микропроцессорной системы при необходимо- сти нужно сформировать недостающие модули исходного описания проекта. Напри- мер, HDL-описания компонентов проектируемой системы. Для создания основы но- вого модуля исходного описания проекта следует нажать кнопку !ДЙ на оперативной панели, которая дублирует команду New Source из раздела Project основного меню Навигатора проекта. После этого на экран выводится диалоговая панель установки параметров нового исходного модуля проекта, приведенная на рис. 8.6. Далее необ- ходимо выполнить ту же последовательность действий, что и при создании модуля с помощью мастера формирования нового проекта New Project Wizard, которая была рассмотрена выше. Кроме модулей исходного описания разрабатываемой микропроцессорной сис- темы, в состав проекта в большинстве случаев необходимо включить файл времен- ных и топологических ограничений User Constraints File (UCF). Данный файл содер- жит дополнительную информацию для программ синтеза, размещения и трассиров- ки, в частности информацию о привязке внешних цепей разрабатываемой микропроцессорной системы к выводам ПЛИС. Синтаксис выражений, включаемых в файл временных и топологических ограничений, подробно рассмотрен в [1]. По- этому остановимся на изучении только двух наиболее часто используемых типов ог- раничений. Параметр LOC позволяет установить соответствие между внешними цепями про- ектируемой системы и номерами выводов ПЛИС, а также явно указать конфигури- руемый логический блок (Configurable Logic Block, CLB) для реализации элементов проекта. Для привязки интерфейсных цепей проектируемой системы (подключаемых к контактам кристалла) к требуемым выводам ПЛИС используется следующий фор- мат выражения ограничения NET <название_цепи> 1ОС=<номер_вывода_ПЛИС>; Форма записи номера вывода ПЛИС в этом выражении зависит от типа исполь- зуемого корпуса микросхемы. Для корпусов, относящихся к категории BGA (Ball Grid Array), номер вывода указывается в том же виде, в каком он представлен в до- кументации. При использовании корпусов других типов номер вывода ПЛИС, ука- занный в документации, в выражении ограничения LOC сопровождается префик- сом Р. В качестве примеров топологических ограничений, используемых для указа- ния соответствия внешних цепей разрабатываемой микропроцессорной системы и номеров выводов ПЛИС, приводятся следующие выражения: NET clk_s LOC=C10; NET datel LOC=P5; Максимальное значение периода сигнала синхронизации для соответствующей цепи разрабатываемой микропроцессорной системы задается с помощью параметра PERIOD. Полный формат соответствующего выражения ограничения имеет вид NET <название_цепи_синхронизации> РЕРЮО=<длительность_периода> [<единицы_измерения>] [{HIGH | LOW} [<длительность_первой_фазы_периода> [<единицы_измерения>] ]];, где значение HIGH или LOW указывает логический уровень сигнала в первой фазе периода, а элементы, указанные в квадратных скобках, являются необязательными. По умолчанию установлены в качестве единиц измерения длительности наносекун-
124 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ды, нс (ns), и одинаковая продолжительность состояний высокого и низкого уровня периода синхросигнала, в результате чего получается сокращенный формат записи NET <название_цепи_синхронизации> PERIOD =<дпительность_периода> ; например, NET clock PERIOD=20ns;. Таким образом, значение параметра PERIOD накладывает ограничение на время распространения сигналов по цепям и логике, подключенных между выходом одного и входом другого синхронного элемента (триггера, регистра или ОЗУ), которые так- тируются одним и тем же сигналом синхронизации. _____ Для создания основы файла UCF следует воспользоваться кнопкой [йЙ на опе- ративной панели или командой New Source из раздела Project основного меню Нави- гатора проекта. После чего в открывшейся диалоговой панели установки параметров нового модуля следует выделить строку Implementation Constraints File (поместив на нее курсор и щелкнув левой кнопкой мыши), которая в качестве типа нового модуля задает файл временных и топологических ограничений проекта (см. рис. 8.6). Затем в этой же панели нужно указать название нового файла - UCF в поле редактирования File Name и нажать кнопку flanee(Next). После этого на экран выводится следующая панель диалога, которая позволяет выбрать модуль исходного описания проекта, с которым ассоциируется создаваемый файл временных и топологических ограниче- ний (рис. 8.13). Для этого следует расположить курсор мыши на требуемой строке списка, отображаемого в диалоговой панели, и щелкнуть левой кнопкой. Как прави- ло, выбирается модуль описания верхнего уровня иерархии проекта. Рис. 8.13. Диалоговая панель выбора модуля исходного описания проекта, с которым ассоциируется создаваемый файл UCF Если все данные, необходимые для создания файла UCF, указаны корректно, то далее нужно нажать кнопку Готово (Finish) в нижней части информационной панели (рис. 8.13). Кнопка Назад (Back) позволяет при необходимости вернуться к преды- дущим шагам его создания. При успешном завершении рассмотренного процесса в окне исходных модулей Навигатора проекта появляется строка с названием нового файла ограничений. Для внесения информации в файл UCF можно использовать встроенный HDL- редактор или специальную программу Constraints Editor, которая на основании дан- ных, указанных разработчиком в диалоговом режиме, автоматически формирует со- ответствующие выражения для описания ограничений проекта. Кроме того, в проек- тах, выполняемых на основе ПЛИС семейств FPGA, для этих целей может использо-
ГЛАВА 8 125 ваться редактор назначения выводов кристалла и топологических ограничений РАСЕ (Pinout and Area Constraints Editor), Все перечисленные программы входят в состав средств проектирования серии Xilinx ISE. Чтобы приступить к редактированию фай- ла UCF, необходимо в окне исходных модулей Навигатора проекта щелчком левой кнопки мыши выделить строку с его названием, после чего в окне процессов развер- нуть строку User Constraints (рис. 8.12). Для изменения файла UCF во встроенном текстовом редакторе следует дважды щелкнуть левой кнопкой мыши на строке Edit Constraints (Text), в результате чего открывается новое окно редактирования. Ввод выражений временных и топологических ограничений осуществляется с помощью клавиатуры. При этом рекомендуется использовать шаблоны HDL-редактора, пред- ставленные в папке UCF. Чтобы выполненные изменения вступили в силу, необхо- димо сохранить файл временных и топологических ограничений на диске, восполь- зовавшись командой Save из всплывающего меню File или кнопкой располо- женной на оперативной панели управления Навигатора проекта. После того как сформированы все необходимые исходные модули проекта, сле- дует перейти к выполнению основных этапов разработки встраиваемой микропро- цессорной системы. 8.4. Выполнение основных этапов проектирования встраиваемых систем на основе микропроцессорных ядер семейства PicoBlaze в САПР серии Xilinx ISE Чтобы получить доступ к интерактивному списку основных этапов процесса раз- работки встраиваемой микропроцессорной системы на базе ПЛИС фирмы Xilinx, следует в окне исходных модулей Навигатора проекта выделить строку с названием файла описания верхнего уровня иерархии проекта, поместив на нее курсор и щелк- нув левой кнопкой мыши. При этом в окне процессов отображается маршрут проек- тирования, соответствующий выбранному типу ПЛИС и средств синтеза (см. рис. 8.12). В представленном маршруте обязательными этапами являются синтез, размещение и трассировка проекта встраиваемой микропроцессорной системы в кри- сталле, формирование конфигурационной последовательности ПЛИС и загрузка про- екта разработанной микропроцессорной системы в кристалл. Данные этапы, за ис- ключением последнего, обычно выполняются в автоматическом режиме. Для управ- ления соответствующими процессами разработчик может использовать файлы временных и топологических ограничений, а также параметры этих процессов, уста- навливаемые с помощью диалоговых панелей Навигатора проекта. Прежде чем непосредственно активизировать процессы, соответствующие пере- численным этапам, предварительно рекомендуется проконтролировать и при необхо- димости установить требуемые значения параметров этих процессов. Для этого сле- дует в окне процессов Навигатора проекта щелчком левой кнопки мыши выделить И строку с названием каждого процесса, после чего нажать кнопку Lsal расположен- ную на оперативной панели, или воспользоваться командой Properties контекстно- зависимого всплывающего меню, которое выводится при щелчке правой кнопки мыши. В результате выполненных действий на экране монитора отображается диало- говая панель параметров выделенного процесса. Подробное описание каждого пара-
126 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС метра всех процессов приведено в [1]. Для большинства параметров можно исполь- зовать значения, установленные по умолчанию. Далее будут указаны только те пара- метры, на которые следует обратить особое внимание. При изменениях значений па- раметров следует подтвердить их нажатием кнопки ОК, расположенной в нижней части соответствующей диалоговой панели. Доступ к параметрам синтеза открывает строка Synthesize, расположенная в окне процессов (см. рис. 8.12). Диалоговая панель параметров синтеза, вид которой пока- зан на рис. 8.14. отображаемая на экране монитора, содержит 3 страницы, снабжен- ные закладками с их названиями: Synthesis options, HDL options и Xilinx Specific options. Process Properties Г .......... Normal No 100 _ Maintain Ast No AllciockNets Yes .; Proper^ Name Keep.Hierarchy / у level Advanced Рис. 8.14. Диалоговая панель, предназначенная для установки параметров процесса синтеза проектируемой системы (страница Synthesis options) В этой панели рекомендуется проконтролировать параметры, управляющие оп- тимизацией процесса синтеза и подключением буферных элементов к внешним це- пям проектируемой системы. Параметры оптимизации расположены на странице Synthesis options. Параметр Optimization Goal позволяет выбрать критерий оптимиза- ции и может принимать одно из двух значений: Speed и Area. Значение Speed уста- навливает стратегию оптимизации, ориентированную на достижение максимального быстродействия проектируемого устройства. При выборе значения Area оптимизация
ГЛАВА 8 127 выполняется с целью минимизации используемой области (ресурсов) кристалла. По умолчанию установлено значение Speed. Параметр Optimization Effort определяет уровень производимой оптимизации и имеет два возможных значения: Normal и High. Если задано значение Normal, то используются стандартные алгоритмы опти- мизации. При выборе значения High выполняется дополнительная оптимизация с учетом особенностей архитектуры выбранного кристалла ПЛИС, что позволяет дос- тигнуть более высоких результатов, но приводит к увеличению времени вычислений. По умолчанию установлено значение Normal. Параметр Add I/O Buffers разрешает или запрещает автоматическое подключение буферных элементов к цепям модуля исходного описания верхнего уровня проекта, которые предназначены для соедине- ния с выводами кристалла. Для проверки и изменения его значения нужно открыть страницу Xilinx Specific options диалоговой панели параметров синтеза (рис. 8.15). По умолчанию установлено разрешающее значение этого параметра. Рис. 8.15. Страница Xilinx Specific options диалоговой панели параметров синтеза проектируемой системы Этап реализации {Implementation) проектов, выполняемых на базе ПЛИС се- мейств FPGA, включает в себя 3 фазы: трансляцию {Translate)', отображение логиче- ского описания проекта на физические ресурсы кристалла {МАР)', размещение и трассировку {Place and Route). Для контроля параметров соответствующих процедур нужно в окне процессов воспользоваться строкой с названием этапа Implement Design. Диалоговая панель параметров реализации содержит 7 страниц с закладками: Translate Properties, MAP Properties, Place and Route Properties, Incremental Design Properties, Simulation Properties, Post-Map Static Timing Report Properties, Post-Place & Route Timing Report Properties (рис. 8.16).
128 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Рис. 8.16. Диалоговая панель параметров процесса реализации проекта разрабатываемой микропроцессорной системы (страница Translate Properties) На странице Translate Properties, содержащей параметры процедуры трансляции проекта разрабатываемой микропроцессорной системы, следует убедиться, что для параметра Use LOC Constraints установлено значение «включено». В этом случае процесс трансляции будет выполняться с учетом топологических ограничений, опи- сываемых с помощью выражений LOC =..., которые присутствуют в файле UCF. Открыв страницу MAP Properties, на которой сосредоточены параметры проце- дуры распределения ресурсов CLB кристалла для реализации проектируемой систе- мы (рис. 8.17), необходимо с помощью параметра Optimization Strategy (Cover Mode) выбрать стратегию оптимизации, осуществляемой во время выполнения данной фа- зы. На этой фазе производится назначение функциональных генераторов CLB для реализации соответствующих функций разрабатываемой микропроцессорной систе- мы. В выпадающем списке возможных значений этого параметра представлено 4 элемента: Area, Speed, Balanced, Off. Значение Area, установленное по умолчанию, определяет в качестве критерия оптимизации минимизацию количества используе- мых таблиц преобразования (LUT) и, следовательно, конфигурируемых логических блоков. При выборе значения Speed целью оптимизации является уменьшение задер- жек распространения сигналов за счет сокращения количества уровней логики. Зна- чение Balanced позволяет сочетать рассмотренные выше стратегии оптимизации. Ис- пользование значение Off запрещает оптимизацию при распределении ресурсов CLB кристалла. Далее следует перейти к странице Place and Route Properties (рис. 8.18), которая объединяет параметры управления процедурами размещения и трассировки проекта аппаратной части разрабатываемой микропроцессорной системы. Прежде всего нуж- но с помощью параметра Place and Route Effort Level (Overall) указать требуемый уровень эффективности процедур размещения и трассировки проекта в кристалл. Этот параметр позволяет за счет выбора более совершенных алгоритмов размещения и трассировки (соответственно за счет увеличения времени выполнения рассматри- ваемого этапа) достичь более высоких результатов. И наоборот, выбирая менее
ГЛАВА 8 129 сложные алгоритмы, можно сократить время выполнения процесса размещения и трассировки, но получить результаты, далекие от оптимальных. Для сложных проек- тов снижение времени, необходимого для выполнения размещения и трассировки, может привести к появлению неразведенных цепей и увеличению задержек распро- странения сигналов. .::.' Properties 'Properties ; . Property Hame , .... Ш Jit Extra Effort J Ш’Ж ft N/A N/A ftf JJJ pr RepHcate Logic to Allow Logic Level Reduction pT Г Map to Input Functions . i c < 4 iOptlmizatfonStrategy(CoverMode): ft,;.;.- GenerateBeOted MAP itepcrt д rf-; Area £ MAP Guide Mode / None МЙ1Ш ft ffl|S For Inputs and Outputs Disable RegisterOr dering p“ 100 Off c Other Map Command Line Options 1 Рис. 8.17. Страница MAP Property диалоговой панели параметров для процесса реализации проекта разрабатываемой микропроцессорной системы В выпадающем списке возможных значений этого параметра представлено 3 элемента, расположенные в порядке возрастания уровня эффективности результа- тов размещения и трассировки: Standard, Medium, High. Значение Standard позволяет минимизировать время размещения и трассировки за счет низкого уровня оптимиза- ции этих процессов. При выборе значения High достигаются наилучшие результаты, но требуется максимальное время для выполнения всех процедур. Можно также ус- тановить различный уровень эффективности для каждой фазы этого процесса, ис- пользуя параметры Placer Effort Level (Overrides Overall Level) и Router Effort Level (Overrides Overall Level), которые предназначены для раздельной установки уровня эффективности процедур размещения и трассировки соответственно. Выбирая значение параметра Extra Effort (Highest PAR level only), можно преду- смотреть возможность выделения дополнительного времени для выполнения проце- дур размещения и трассировки, необходимого для удовлетворения различных вре- 5—2062
130 Зотов В Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС менных ограничений проекта. Этот параметр используется только в случае, если для Place and Route Effort Level (Overall) задано значение High. По умолчанию установ- лено значение None, которое запрещает выделение дополнительного времени. При выборе других значений (Normal или Continue on Impossible) допускается увеличение времени выполнения процедур размещения и трассировки. Рис. 8.18. Страница Place and Route Properties диалоговой панели параметров размещения и трассировки проекта разрабатываемой микропроцессорной системы Значение параметра Place and Route Mode позволяет выбрать режим выполнения процесса размещения и трассировки. Для данного параметра рекомендуется исполь- зовать значение Normal Place and Route, установленное по умолчанию. Это значение соответствует нормальному режиму трассировки и размещения, при котором выпол- няются все процедуры с учетом параметров, указанных разработчиком или установ- ленных по умолчанию. При выборе значения Reentrant Route осуществляется много- кратное повторение процедур трассировки с целью оптимизации результатов. Но этот режим можно устанавливать только в том случае, если хотя бы один раз полно- стью пройдена стадия размещения и трассировки. Для того чтобы средствами размещения и трассировки принимались во внимание временные ограничения проекта, указанные в файле UCF, необходимо выбрать для параметра Use Timing Constraints значение «включено». Чтобы получить доступ к параметрам процесса генерации конфигурационной последовательности, нужно воспользоваться строкой Generate Programming File в окне процессов (см. рис. 8.12). Диалоговая панель параметров процесса генерации конфигурационной последовательности, вид которой показан на рис. 8.19, содержит 5 страниц, снабженных закладками, на которых указаны их названия: General Options, Configuration Options, Startup Options, Readback Options, Encryption options.
ГЛАВА 8 131 Рис. 8.19. Диалоговая панель параметров процесса генерации конфигурационной последовательности разработанной микропроцессорной системы В этой панели нужно открыть страницу Startup Options, на которой расположены параметры управления фазой активизации логики после конфигурирования кристал- ла (рис. 8.19). Значение параметра Start-Up Clock определяет источник сигнала син- хронизации, используемого в процессе конфигурирования. Выпадающий список со- держит 3 возможных значения: CCLK, User Clock, JTAG Clock. Значение CCLK, уста- новленное по умолчанию, назначает в качестве сигнала синхронизации процесса активизации логики тактовый сигнал CCLK, вырабатываемый внутри кристалла. При выборе значения User Clock тактовым является сигнал, определяемый разработчи- ком, который подключается к выводу CLK символа STARTUP. Значение JTAG Clock следует выбирать при загрузке конфигурационной последовательности в режиме пе- риферийного сканирования через JTAG-порт. После контроля и установки требуемых значений параметров следует перейти к выполнению основных этапов проектирования. Все перечисленные выше процессы могут быть активизированы поочередно. Для запуска процесса следует дважды щелкнуть левой кнопкой мыши на строке с его названием. Используя средства про- ектирования серии Xilinx ISE необходимо принять во внимание, что при активизации какого-либо процесса все предшествующие этапы (процессы) будут выполнены ав- томатически, если не были успешно завершены до этого. Учитывая данную особен- ность, рекомендуется сразу активизировать процесс генерации конфигурационной последовательности проектируемой микропроцессорной системы, дважды щелкнув левой кнопкой мыши на строке Generate Programming File в окне процессов (см. рис. 8.12). При этом этапы (процессы) синтеза, размещения и трассировки будут вы- полнены автоматически. Выполнение всех процессов сопровождается информацией в окне консольных сообщений и строке состояния. Страница Console окна консольных сообщений является основной (используется более часто в работе с проектом) и предназначена для вывода информационных сообщений о запуске и ходе выполне- ния процедур. На страницах Errors и Warnings отображаются соответственно сооб- щения об ошибках и предупреждения, сопровождаемые идентификационными кода- ми. О характере завершения каждого этапа сигнализирует соответствующая пикто-
132 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС грамма в строке с его названием в окне процессов. Возможны следующие варианты завершения процессов: - текущий процесс выполнен успешно; а - процедура исполнена без ошибок, но имеются предупреждения; X - при выполнении процесса обнаружены ошибки; ? - результаты выполнения процесса устарели (не соответствуют исходным данным). Более подробные сведения о результатах выполнения процесса содержатся в со- ответствующем отчете. Для просмотра отчета удобнее всего дважды щелкнуть левой кнопкой мыши на строке с его названием в окне процессов. При успешном завершении процесса генерации конфигурационной последова- тельности разработанной микропроцессорной системы создается файл с расширени- ем bit, который может быть загружен непосредственно в ПЛИС или использоваться в качестве исходного для генерации файла программирования ПЗУ/ППЗУ. После этого следует перейти к заключительному этапу проектирования - конфигурированию ПЛИС. 8.5. Загрузка конфигурационной последовательности разработанной микропроцессорной системы в ПЛИС Для загрузки конфигурационной последовательности из файла с расширением bit в кристалл FPGA с помощью программы IMPACT можно использовать любой из сле- дующих кабелей: JTAG-кабель, подключаемый к параллельному порту (LPT) ПК (Parallel Down- load Cable); универсальный кабель MultiLinx, подключаемый к последовательному порту (СОМ) ПК (MultiLinx Download Cable RS-232); универсальный кабель MultiLinx, подключаемый к последовательной шине (Universal Serial Bus, USB) ПК (MultiLinx Download Cable USB); кабель, входящий в состав комплекса MultiPro Desktop Tool™. Наиболее доступным для разработчиков является JTAG-кабель, подключаемый к параллельному порту (LPT) ПК (Parallel Download Cable). Его можно изготовить самостоятельно, воспользовавшись принципиальными схемами, которые можно най- ти в документации средств проектирования и отладочных модулей. Поэтому далее рассматриваются варианты конфигурирования ПЛИС с применением JTAG-кабеля. Загрузка конфигурационного битового потока может производиться через JTAG-порт кристалла в режиме периферийного сканирования Boundary-Scan (JTAG) или через специальные контакты ПЛИС, предназначенные для конфигурирования, в подчинен- ном последовательном режиме Slave Serial. При использовании режима периферийного сканирования перед формированием конфигурационной последовательности необходимо установить для параметра Start- Up Clock значение JTAG Clock. После генерации файла конфигурации следует под- ключить сигнальные выводы загрузочного кабеля Test Data In(TDI), Test Mode Select (TMS), Test Clock (TCK) и Test Data Out (TDO) к одноименным контактам кристалла, а выводы GND и VCC к общей шине и цепи питания. После этого следует подать на- пряжение питания на разработанную систему. Такая последовательность обеспечива-
ГЛАВА 8 133 ет возможность автоматического обнаружения и инициализации загрузочного кабеля и цепочки периферийного сканирования кристаллов ПЛИС при активизации про- граммы iMPACT. Если загрузочный кабель подключается после запуска модуля про- граммирования, то в этом случае необходимо выполнить «вручную» операции уста- новки типа и параметров используемого кабеля и инициализации цепочки перифе- рийного сканирования кристаллов, Для активизации программы iMPACT следует дважды щелкнуть левой кнопкой мыши на строке Configure Device (iMPACT,) в окне процессов Навигатора проекта (рис. 8.12). Если для программы iMPACT используются значения параметров ини- циализации, установленные по умолчанию, то после ее активизации автоматически запускается мастер, который позволяет определить эти параметры в интерактивном режиме. Работа мастера начинается с вывода на экран диалоговой панели Configure Devices, в которой необходимо выбрать режим конфигурирования ПЛИС (рис. 8.20). Рис. 8.20. Диалоговая панель выбора режима конфигурирования ПЛИС Чтобы выполнить загрузку конфигурационной битовой последовательности в ПЛИС в режиме периферийного сканирования, в этой диалоговой панели следует выбрать строку Boundary-Scan Mode. После установки режима конфигурирования ПЛИС нужно нажать кнопку flanee(Next), чтобы перейти к заключительной диалого- вой панели мастера, вид которой показан на рис. 8.21. Рис. 8.21. Диалоговая панель, позволяющая выбрать способ обнаружения загрузочного кабеля и цепочки периферийного сканирования Рекомендуется установить режим автоматического обнаружения подключенного загрузочного кабеля и цепочки периферийного сканирования. Для этого в диалоговой
134 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС панели Boundary-Scan Mode Selection следует выбрать строку Automatically connect to cable and identify Boundary-Scan Chain. Работа мастера завершается нажатием кнопки Готово (Finish) в нижней части диалоговой панели Boundary-Scan Mode Selection. При выборе «ручного» способа определения цепочки периферийного сканирова- ния после завершения работы мастера выводится стандартная панель открытия фай- ла, в которой нужно указать название с^Лфайла. В файле cdf (Chain Description File) сохраняется информация, описывающая состав и конфигурацию цепочки перифе- рийного сканирования. Если был установлен режим автоматической идентификации типа подключенно- го кабеля и цепочки периферийного сканирования, то далее программа iMPACT вы- полняет процедуру обнаружения загрузочного кабеля. Ход этого процесса отобража- ется на экране дисплея с помощью всплывающего окна индикации и сопровождается соответствующей информацией в окне регистрации сообщений. При успешной иден- тификации присоединенного загрузочного кабеля производится автоматический по- иск и инициализация цепочки периферийного сканирования ПЛИС, подключенной к выбранному JTAG-порту. В случае обнаружения микросхем в составе цепочки пери- ферийного сканирования на экран выводится информационная панель, содержащая сообщение об их количестве (рис. 8.22). Рис. 8.22. Информационная панель, сообщающая о количестве обнаруженных микросхем в составе цепочки периферийного сканирования После идентификации каждого кристалла выводится стандартная панель выбора файла, в которой необходимо указать название соответствующего модуля, содержа- щего конфигурационные данные для этой ПЛИС. Информация об идентифицирован- ной цепочке периферийного сканирования ПЛИС отображается в графической форме в рабочей области основного окна и в текстовом виде в окне регистрации сообщений программы iMPACT (рис. 8.23). Под каждым условным графическим образом (УГО) ПЛИС указывается ее тип и название соответствующего файла, содержащего конфигурационную последователь- ность. Если эта информация отсутствует или необходимо изменить название файла программирования, то следует выделить требуемый УГО, поместив на него курсор и щелкнув левой кнопкой мыши, после чего воспользоваться командой Assign Configuration File из всплывающего меню Edit или кнопкой ШЯ, расположенной на оперативной панели. Можно также использовать команду Assign New Configuration File из всплывающего контекстно-зависимого меню, активизируемого щелчком пра- вой кнопки мыши на соответствующем УГО в рабочей области. В результате выпол- ненных действий на экране отображается стандартное окно открытия файла, с помо- щью которого производится выбор требуемого файла программирования.
ГЛАВА 8 135 Right click device to select operations PROGRESS_END - End Operation. Elapsed tine = 1 sec. /.. л. ....Л Puc. 8.23. Отображение цепочки периферийного сканирования в окне модуля iMPACT средств проектирования серии Xilinx ISE Загрузка конфигурационной последовательности в выбранный кристалл осуще- ствляется с помощью команды Program меню Operations или контекстно-зависимого всплывающего меню, после активизации которой на экран выводится диалоговая па- нель параметров процесса загрузки конфигурации ПЛИС (рис. 8.24). Рис. 8.24. Диалоговая панель параметров процесса конфигурирования ПЛИС
136 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Значение параметра Verify, расположенного в этой диалоговой панели, определя- ет использование операции контроля конфигурационных данных по окончании про- граммирования ПЛИС. Выбор значения «включено» устанавливает режим проверки конфигурационной последовательности после ее загрузки в кристалл. По умолчанию установлено значение «выключено», при котором верификация загруженных конфи- гурационных данных не выполняется. После установки необходимого значения параметра Verify и нажатия кнопки ОК в нижней части диалоговой панели (рис. 8.24) стартует операция загрузки конфигу- рационных данных в выбранный кристалл. Состояние процесса конфигурирования ПЛИС отображается с помощью всплывающего окна индикации. Завершение про- цесса загрузки конфигурационной последовательности сопровождается соответст- вующей информацией в рабочей области и окне регистрации сообщений программы iMPACT. На этом фактически завершается процесс разработки микропроцессорных систем на основе ядер семейства PicoBlaze. Учитывая, что в большинстве разрабаты- ваемых систем конфигурационные данные в ПЛИС должны загружаться из ПЗУ/ППЗУ, в следующем разделе рассматривается процесс подготовки соответст- вующего файла программирования. 8.6. Генерация файлов программирования ПЗУ/ППЗУ с помощью модуля iMPACT Для преобразования конфигурационной последовательности в файл программи- рования ПЗУ/ППЗУ следует использовать соответствующий режим модуля iMPACT. Эта программа позволяет также формировать файлы «прошивки» ПЗУ/ППЗУ в стан- дартных промышленных форматах, поддерживаемых различными аппаратными про- грамматорами. Для ее активизации в этом режиме необходимо дважды щелкнуть ле- вой кнопкой мыши на строке Generate PROM, АСЕ, or JTAG File, расположенной в окне процессов Навигатора проекта (см. рис. 8.12). После этого автоматически запускается соответствующий мастер инициализации программы iMPACT. Его работа начинается с вывода на экран диалоговой панели выбора типа формируемого файла программирования, приведенной на рис. 8.25, Рис. 8.25. Диалоговая панель выбора типа файла программирования
ГЛАВА 8 137 Чтобы сформировать файл «прошивки» ПЗУ/ППЗУ, следует нажать кнопку PROM file и, воспользовавшись кнопкой Далее(Нех1), перейти к следующей диалого- вой панели мастера, в которой необходимо указать формат и параметры создаваемо- го файла программирования (рис. 8.26). Рис. 8.26. Диалоговая панель установки параметров файла программирования С помощью кнопок Xilinx PROM и Generic Parallel PROM выбирается вид ис- пользуемого элемента ПЗУ/ППЗУ: последовательный или параллельный. Группа кнопок PROM File Format предназначена для выбора формата создавае- мого файла. В эту группу входят следующие кнопки: MCS, ЕХО, ТЕК, HEX, UFP, BIN и ISC. Чтобы сформировать файл для программирования конфигурационного ППЗУ, следует выбрать формат MCS, нажав одноименную кнопку. В поле редактирования PROM File Name необходимо указать название создавае- мого файла программирования, используя клавиатуру. С помощью параметра Location определяется место расположение формируемого файла «прошивки» на диске. Полное название каталога, включающее в себя путь доступа к нему, вводится с клавиатуры или указывается в стандартной панели выбо- ра диска и раздела, которая открывается при нажатии кнопки Browse, расположенной справа от поля редактирования Location. Процесс установки параметров файла программирования завершается нажатием кнопки Далее (Next), расположенной в нижней части панели (рис. 8.26). При этом от- крывается очередная диалоговая панель мастера, в которой нужно выбрать серию и тип используемого ПЗУ/ППЗУ (рис. 8.27).
138 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Рис. 8.27. Диалоговая панель выбора серии и типа используемого ПЗУ/ППЗУ Выпадающий список поля выбора Select a PROM содержит названия всех серий ПЗУ/ППЗУ, выпускаемых фирмой Xilinx. После выбора семейства ПЗУ/ППЗУ нужно в следующем поле указать конкретный тип используемого элемента. Для этого сле- дует активизировать выпадающий список этого поля, который содержит все ПЗУ или ППЗУ выбранного семейства. Чтобы использовать выбранный элемент, необходимо нажать кнопку Add, после чего его название отображается в составе цепочки конфи- гурационных ПЗУ/ППЗУ с указанием номера позиции. При необходимости следует повторить операции выбора и включения в состав цепочки следующего элемента. В простейшем случае используется единственный элемент ПЗУ или ППЗУ для хра- нения конфигурационных данных. Параметр Auto Select PROM предоставляет возможность автоматического выбора серии и типа используемого ПЗУ/ППЗУ. По умолчанию для него установлено значе- ние «выключено». При переключении этого параметра в состояние «включено» про- грамма iMPACT автоматически определит тип ПЗУ/ППЗУ для хранения конфигура- ционных данных проекта. Процедура выбора типа ПЗУ/ППЗУ завершается нажатием кнопки Далее(Ыех() (см. рис. 8.27). После этого на экран выводится информационная панель, в которой отображаются установленные значения всех параметров процесса генерации файла программирования (рис. 8.28).
ГЛАВА 8 139 Рис. 8.28. Информационная панель, отображающая значения параметров, используемых при генерации файла программирования Для изменения каких-либо значений следует вернуться к предыдущим шагам, нажав кнопку Назад(Васк). Если все параметры установлены корректно, то следует нажать кнопку Далее (Next), после чего будет открыта следующая диалоговая панель мастера, вид которой показан на рис. 8.29. Рис. 8.29. Диалоговая панель выбора файла конфигурационной последовательности, используемого в качестве исходного для генерации файла программирования В этой панели следует воспользоваться кнопкой Add File, чтобы указать название файла конфигурационной последовательности (с расширением .bit), который исполь- зуется в качестве исходного при формировании файла «прошивки». При нажатии
140 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС кнопки Add File открывается стандартная диалоговая панель выбора файла, с помо- щью которой определяется название используемого файла (.bit). Модуль генерации файла программирования позволяет разместить несколько конфигурационных после- довательностей в одном ПЗУ или ППЗУ. Для этого следует в панели запроса о вклю- чении еще одной конфигурационной последовательности в загружаемый поток (Data Stream) нажать кнопку Да (рис. 8.30) и повторить процедуру выбора файла. Рис. 8.30. Панель запроса о включении еще одной конфигурационной последовательности в загружаемый поток Если размер конфигурационной битовой последовательности превышает емкость выбранного элемента ПЗУ/ППЗУ, выводится соответствующее предупреждение (рис. 8.31). В этом случае рекомендуется повторно запустить мастер процесса гене- рации файла программирования и выбрать соответствующий тип ПЗУ/ППЗУ. Рис. 8.31. Панель предупреждения о несоответствии размера конфигурационной битовой последовательности и емкости выбранного элемента ПЗУ/ППЗУ Процесс формирования загружаемого потока (Data Stream) завершается нажати- ем кнопки Нет в панели запроса (см. рис. 8.30). При этом отображается заключи- тельная панель мастера, вид которой показан на рис. 8.32. Рис. 8.32. Итоговая панель мастера формирования файла программирования
ГЛАВА 8 141 В этой панели необходимо нажать кнопку Готово (Finish), которая запускает ав- томатический процесс генерации файла программирования, в начале которого выво- дится панель запроса, приведенная на рис. 8.33. PROM File Generation Puc. 8.33. Диалоговая панель, содержащая запрос подтверждения немедленного запуска генерации файла программирования Необходимо подтвердить немедленный запуск процесса генерации файла про- граммирования, нажав кнопку Да, расположенную в диалоговом окне запроса. Ин- формация о ходе выполнение процесса генерации файла программирования появля- ется в окне регистрации сообщений программы iMPACT. После успешного заверше- ния формирования файла программирования в рабочей области основного окна программы iMPACT выводится соответствующее сообщение и отображается УГО ПЗУ/ППЗУ, рядом с которым указывается его название и процент заполнения. Структура формируемого файла «прошивки» также представлена в графической форме в виде условных изображений ПЛИС, конфигурационные данные которых со- держатся в файле программирования (рис. 8.34). При расположении курсора мыши на УГО появляется всплывающая панель, в которой представлена информация о со- ответствующем элементе в рабочей области основного окна программы iMPACT . Рис. 8.34. Отображение структуры сформированного файла «прошивки» ПЗУ/ППЗУ в рабочей области окна модуля iMPACT
142 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Сформированный файл, имеющий расширение mcs, может непосредственно ис- пользоваться для программирования ППЗУ с помощью модуля iMPACT. 8.7. Программирование ППЗУ серий XC18V00 и Platform Flash с помощью модуля IMPACT Перед активизацией программы iMPACT рекомендуется присоединить загрузоч- ный кабель к соответствующему порту ПК и специальным JTAG-контактам ППЗУ, после чего подать напряжение питания на плату разработанной системы. Далее для запуска модуля iMPACT необходимо выполнить ту же последовательность операций, что и при конфигурировании ПЛИС в режиме периферийного сканирования, кото- рый подробно рассмотрен в разд. 8.5. Если используются значения параметров ини- циализации программы iMPACT, установленные по умолчанию, то после ее активи- зации автоматически стартует мастер, позволяющий выбрать требуемые значения опций в интерактивном режиме. Для программирования ППЗУ при работе с масте- ром следует выполнить те же действия, что и при конфигурировании ПЛИС в режи- ме периферийного сканирования. После успешного обнаружения ППЗУ в цепочке периферийного сканирования ее УГО отображается в рабочей области окна про- граммы iMPACT (см. рис. 8.23). Сразу после выполнения инициализации ППЗУ предлагается определить название используемого файла «прошивки» с помощью стандартного окна открытия файла. Если в дальнейшем требуется изменить название файла программирования, то следует выделить требуемый УГО ППЗУ, поместив на него курсор и щелкнув левой кнопкой мыши, после чего воспользоваться командой Assign Configuration File из всплывающего меню Edit или кнопкой liBl, расположен- ной на оперативной панели. Можно также применять команду Assign New Configuration File из всплывающего контекстно-зависимого меню, активизируемого щелчком правой кнопки мыши на изображении соответствующего УГО в рабочей области. Выполнение всех операций программирования ППЗУ и обратного чтения осуще- ствляется с помощью команд всплывающего меню Operations или контекстно- зависимого всплывающего меню. При использовании меню Operations необходимо предварительно выбрать элемент ППЗУ, поместив на его УГО курсор и щелкнув ле- вой кнопкой мыши. Для активизации контекстно-зависимого всплывающего меню следует расположить указатель на условное изображение соответствующего ППЗУ и щелкнуть правой кнопкой мыши. Программирование выбранного элемента ППЗУ осуществляется с помощью ко- манды Program меню Operations или контекстно-зависимого всплывающего меню, после активизации которой на экран выводится диалоговая панель параметров этого процесса (см. рис. 8.24). В этой панели помимо параметра Verify, назначение которого рассмотрено в разд. 8.5, для программирования ППЗУ могут использоваться следующие опции. Параметр Erase Before Programming позволяет разработчику установить режим предварительного «стирания» конфигурационных данных, находящихся в ППЗУ пе- ред его программированием. Значение «включено», установленное по умолчанию для этого параметра, указывает на необходимость выполнения операции «стирания» перед загрузкой новой конфигурационной последовательности.
ГЛАВА 8 143 Параметр Read Protect предназначен для установки защиты от несанкциониро- ванного чтения (копирования) загружаемых конфигурационных данных. Программи- рование ППЗУ с использованием защиты от чтения устанавливает код секретности, который «сбрасывается» только при выполнении операции полного «стирания». По умолчанию этот параметр принимает значение «выключено», запрещающее исполь- зование защиты от чтения. С помощью параметра PROM Usercode (8 HEX Chars) можно указать пользова- тельский идентификационный код USERCODE, который заносится в одноименный регистр ППЗУ и может быть впоследствии считан для определения назначения и вер- сии записанных конфигурационных данных. Этот код задается в виде последова- тельности из восьми шестнадцатеричных символов. При переключении параметра PROM Usercode (8 HEX Chars) в состояние «включено» активизируется соответст- вующее поле редактирования, в котором с помощью клавиатуры задается требуемый код. По умолчанию этот параметр находится в состоянии «выключено». При этом в качестве пользовательского идентификационного номера употребляется значение ОхЕЕЕЕРРЕЕ. После установки всех необходимых значений параметров следует подтвердить их нажатием кнопки ОК в нижней части диалоговой панели (см. рис. 8.24), что при- водит к запуску операции программирования выбранного элемента ППЗУ. Состояние процесса программирования отображается с помощью всплывающего окна индика- ции. Завершение процесса программирования сопровождается соответствующими уведомлениями в рабочей области и окне регистрации сообщений программы iMPACT. Чтобы получить информацию о состоянии (запрограммирован или нет) выбран- ного элемента ППЗУ, следует использовать команду Blank Check. Данные о его ста- тусе отображаются в виде всплывающего сообщения в рабочей области основного окна программы iMPACT. Перевод ППЗУ в незапрограммированное состояние осу- ществляется с помощью команды стирания Erase. Для получения сводной информации о каждом элементе ППЗУ в цепочке пери- ферийного сканирования, представленной в рабочей области основного окна про- граммы iMPACT, достаточно поместить указатель мыши на соответствующий УГО. После этого в рабочей области отображается всплывающая панель, в которой содер- жатся данные о версии, пользовательском коде, установленной защите и контроль- ной сумме для выбранного элемента ППЗУ. Эти данные доступны только после вы- полнения соответствующих операций в текущем сеансе работы с программой iMPACT. 8.8. Проектирование контроллера на основе микропроцессорного ядра PicoBlaze, предназначенного для реализации в ПЛИС семейства Spartan-3 В качестве примера, иллюстрирующего процесс разработки встраиваемых мик- ропроцессорных систем на основе ядер семейства PicoBlaze, рассмотрим проектиро- вание простейшего контроллера, который должен выполнять функции приема и ото- бражения данных, поступающих с дискретных (двухпозиционных) датчиков, сравне- ния их с эталонными значениями и формирования соответствующих управляющих сигналов. Такой контроллер может применяться в системах безопасности, сбора дан-
144 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ных, автоматизированного управления и т. п. Структурное представление архитекту- ры разрабатываемой микропроцессорной системы показано на рис. 8.35. В состав проектируемого контроллера, кроме микропроцессорного ядра PicoBlaze, входят два входных и два выходных параллельных порта. Входной порт с адресом ADDRJN- PORT1 предназначен для считывания информационных данных, а порт с адресом ADDRJNPORT2 - эталонного значения. Выходной порт с адресом ADDROUT- PORT1 используется для подключения светодиодных индикаторов, а порт с адресом ADDR_OUTPORT2 - для вывода управляющих сигналов. Описание компонентов, представляющих параллельные порты ввода и вывода, будут сформированы в про- цессе разработки контроллера. Рис. 8.35. Архитектура контроллера, разрабатываемого на основе микропроцессорного ядра PicoBlaze (семейство Spartan-3) Для реализации контроллера выберем ПЛИС семейства Spartan-З, сочетающие широкие функциональные возможности с невысокой стоимостью. В качестве аппа- ратного тестового модуля, используемого для проверки функционирования разрабо- танного контроллера, воспользуемся отладочной платой из инструментального ком- плекта Spartan-3 Starter Kit, описание которого приводится в гл. 14. Прежде чем приступить к подготовке проекта контроллера, создадим с помощью Проводника (или управляющей оболочки Total Commander) раздел на одном из дис- ков компьютера, предназначенный для хранения всех разрабатываемых проектов, например раздел C'XProject. В этом разделе сформируем новую папку с названием sampled_data_controller, которая будет использоваться в качестве рабочего каталога проекта контроллера. В эту папку скопируем из архива Kcpsm3.zip файлы исходного описания компонентов микропроцессорного ядра PicoBlaze, реализуемого в ПЛИС семейства Spartan-3, Kcpsm3.vhd и embeddedJccpsm3.vhd, а также шаблоны описания программной памяти ROM_Jorm.vhd, ROMJorm.v, ROMJbrm.coe и соответствующую версию ассемблера Kcpsm3.exe. Далее нужно активизировать текстовый редактор, например Блокнот (Notepad) или Wordpad. Удобнее всего воспользоваться интегрированным редактором управ- ляющей оболочки (файлового менеджера) Total Commander, окно которого открыва- ется при одновременном нажатии клавиш Shift и F4. В появившейся панели запроса
ГЛАВА 8 145 имени создаваемого файла следует ввести строку progjrom.psm. Использование дан- ного названия создаваемой программы позволяет избежать переименования компо- нента программной памяти в описании проектируемой системы. В открывшемся окне редактора с помощью клавиатуры набираем исходный текст программы на языке ас- семблера, который выглядит следующим образом: CONSTANT ADDRJNPORT1, 00 CONSTANT ADDRJNPORT2,01 CONSTANT ADDR_OUTPORT1, 01 CONSTANT ADDRJ3UTPORT2, 02 NAMEREG sO, inform NAMEREG s1, templat NAMEREG s2, contrl iNPUT templat, ADDRJNPORT2 strt: INPUT inform, ADDRJNPORT1 LOAD contrl, inform XOR contrl, templat OUTPUT inform, ADDR_OUTPORT1 OUTPUT contrl, ADDR_OUTPORT2 JUMP strt В начале программы с помощью директивы CONSTANT определяются мнемони- ческие обозначения используемых адресов портов ввода/вывода. Затем, используя директиву NAMEREG, вводим мнемонические названия задействованных регистров общего назначения. Далее следует команда считывания эталонных (уставочных) зна- чений, соответствующих нормальному состоянию датчиков. Завершает программу последовательность команд, образующих бесконечный цикл операций, в котором выполняется чтение текущих значений входных данных, сравнение их с эталонными значениями, формирования управляющих сигналов и вывод соответствующей ин- формации в выходные порты индикации и управления. После ввода исходного текста программы в окне редактирования нужно сохранить его в файле prog_rom.psm, кото- рый должен располагаться в рабочем каталоге создаваемого проекта, т. е. в папке C:\Project\sampled_data_controller. Для трансляции разработанной микропроцессорной программы можно запустить сеанс DOS, перейти в созданный рабочий каталог C:\Project\sampled_data „controller и воспользоваться следующей командной строкой74 Kcpsm3.exe prog_rom.psm Но удобнее активизировать процесс трансляции, используя команду Выполнить (Run) из меню, вызываемого кнопкой Пуск (Start) ОС Windows 2000/ХР. В появив- шейся на экране диалоговой панели (рис. 8.36) с помощью кнопки Обзор активизиру- ем стандартную панель открытия файла, воспользовавшись которой переходим в созданный рабочий каталог проекта и выбираем исполняемый файл ассемблера Kcpsm3.exe. После этого переключаемся на строку Открыть в диалоговой панели Запуск программы (рис. 8.36) и дополняем командную строку названием исходного модуля микропроцессорной программы на языке ассемблера prog_rom.psm, исполь- зуя клавиатуру. Для исполнения набранной командной строки нажимаем кнопку ОК, располо- женную в нижней части диалоговой панели Запуск программы. После этого автома- тически открывается окно сеанса DOS, в котором отражается выполнение процесса трансляции. При успешном завершении этого процесса в окне сеанса DOS появляет-
146 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ся строка KCPSM3 successful, а в рабочем каталоге - сформированные файлы описа- ния программной памяти в различных форматах, в том числе файл prog_rom.vhd. Запуск программы ..... Рис. 8.36. Запуск процесса трансляции разработанной программы с помощью команды Выполнить (Run) из меню, вызываемого кнопкой Пуск (Start) ОС Windows 2000/ХР Далее активизируем управляющую оболочку средств проектирования серии Xilinx ISE Навигатор проекта и запускаем мастер формирования нового проекта New Project Wizard, выполнив команду New Project из всплывающего меню File. В стартовой диалоговой панели мастера New Project Wizard, в поле редактирования Project Location, указываем название каталога, используемого для хранения проектов C:\Project (рис. 8.37). В поле редактирования Project name с помощью клавиатуры вводим название создаваемого проекта контроллера sampled_data_controller. При этом данное название автоматически добавляется в поле редактирования Project Location, определяя тем самым имя рабочего каталога проекта. Так как модуль верх- него уровня иерархии проекта будет представлять собой VHDL-описание разрабаты- ваемой системы, то в поле выбора Top-Level Module Туре оставляем значение HDL, предлагаемое по умолчанию. , Project Name: |sarnpled_data2controller Project Location: J C: \Proiect\sampled_data_conhoiler Puc. 8.37. Вид стартовой диалоговой панели мастера New Project Wizard при создании проекта контроллера в САПР серии Xilinx ISE
ГЛАВА 8 147 Завершив ввод исходных данных, необходимых для создания нового проекта контроллера, после нажатия кнопки Далее в стартовой панели мастера New Project Wizard (рис. 8.37) переходим к диалоговой панели выбора ПЛИС для реализации проекта. В этой панели поочередно выбираем семейство ПЛИС - Spartan-З, тип кри- сталла - xc3s200, тип корпуса - FT256, класс быстродействия - 4 (рис. 8.38). Именно такой кристалл установлен на отладочной плате из инструментального комплекта Spartan-3 Starter Kit. Рис. 8.38. Диалоговая панель выбора ПЛИС, средств синтеза и моделирования проектируемого контроллера В качестве средств синтеза и моделирования разрабатываемого контроллера вы- бираем встроенные инструменты синтеза и моделирования САПР серии Xilinx ISE - Xilinx Synthesis Technology (XST) и ISE Simulator соответственно. Для формирования моделей проектируемой системы будем использовать язык VHDL. После этого, вос- пользовавшись кнопкой Далее в панели выбора ПЛИС, средств синтеза и моделиро- вания проектируемого контроллера (см. рис. 8.38), переключаемся на диалоговую панель создания нового исходного модуля проекта, вид которой показан на рис. 8.5. С помощью этой панели создадим модуль исходного описания проектируемой мик- ропроцессорной системы верхнего уровня иерархии, нажав кнопку New Source. В появившейся на экране диалоговой панели установки параметров создаваемого ис- ходного модуля в качестве типа модуля выбираем VHDL Module. В поле редактиро- вания названия формируемого модуля File Name указываем имя, совпадающее с на- званием проекта, - sampled_data_controller.
148 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ’м IP (CoreGen & Architecture Wizard) V + JVV'VV fc>l Schematic 0 State Diagram 0 Test Bench Waveform 0 User Document 0 Verilog Module 0 Verilog T est Fixture VHDL Library VHDL Module 0 VHDL Package @ VHDL Test Bench Puc. 8.39. Вид диалоговой панели параметров для создаваемого исходного модуля описания контроллера верхнего уровня иерархии После нажатия кнопки Далее в этой диалоговой панели (рис. 8.39) открывается па- нель определения исходных данных для создания шаблона VHDL-описания. В этой па- нели оставим имя описываемого объекта Entity Name, предлагаемое по умолчанию, - sampled_data_controller, а имя архитектурного тела Architecture Name изменим на structural, указывая на то, что оно содержит структурное описание объекта. Затем пооче- редно внесем в таблицу описания портов названия, тип и разрядность интерфейсных портов объекта sampled_data_controller, как показано на рис. 8.40. < Назад I Далее > I Отмена I Справка Рис. 8.40. Диалоговая панель исходных данных для создания шаблона VHDL-описания верхнего уровня иерархии проекта контроллера
ГЛАВА 8 149 Ввод исходных данных, необходимых для автоматического создания основы VHDL-описания верхнего уровня иерархии проекта контроллера, завершается нажа- тием кнопки Далее, после чего на экране отображается информационная панель, в которой представлены установленные значения параметров формируемого модуля (рис. 8.41). Рис. 8.41. Информационная панель мастера подготовки шаблона VHDL-описания, отображающая параметры создаваемого модуля верхнего уровня иерархии проекта Подтверждаем выбранные значения нажатием кнопки Готово в нижней части информационной панели. После этого на экран повторно выводится диалоговая па- нель создания нового исходного модуля проекта, в которой представлено название сформированного файла и его тип (рис. 8.42). Рис. 8.42. Вид диалоговой панели создания нового исходного модуля после формирования VHDL-описания верхнего уровня иерархии для проекта контроллера
150 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Нажав кнопку Далее, расположенную в этой панели, переходим к диалоговой па- нели включения существующих модулей в состав проекта. Воспользовавшись кноп- кой Add Source и стандартной панелью открытия файла, поочередно добавляем в со- став проекта контроллера модули исходного описания компонентов ядра PicoBlaze и содержимого программной памяти (рис. 8.43). Рис. 8.43. Вид диалоговой панели включения существующих модулей исходного описания в состав создаваемого проекта контроллера Процесс формирования таблицы модулей, добавляемых в состав проекта, завер- шаем нажатием кнопки Далее, после чего на экран выводится информационная па- нель, в которой отображаются установленные значения основных параметров созда- ваемого проекта контроллера (рис. 8.44). New Project Information . specif icatidhs’:; <. . ' :'. ' Pipiegt;.....................................................................................s-'^ Project N ame: sampled_data_controiler да; Project Location: C:\Project\sampled_data_control1er да i Project Type: H D L Device: Device Family: Spartan3 да... Device. xc3s200 Package: ft256 Speed Grade:-4 Top-Level Module Type: HDL Synthesis Tool: XST (VHDL/Verilog) .да .. Simulator: ISE Simulator да да Generated Simulation Language: VHDL да:si Sources: VHDL Module sampled_data_controller.vhd VHDL Design File embedded_kcpsm3 vhd copied to Project . = да VHDL Design File kcp$m3.vhd copied to Project да Puc. 8.44. Информационная панель мастера формирования нового проекта контроллера
ГЛАВА 8 151 Нажатием кнопки Готово в нижней части информационной панели (рис. 8.44) подтверждаем установленные значения основных параметров создаваемого проекта контроллера. После этого в рабочей области Навигатора проекта автоматически от- крывается сформированный проект sampled_data_controller. При этом в области рас- положения рабочих окон открыто две страницы. Первая содержит подробную ин- формацию о новом проекте. Во второй странице представлен текст шаблона VHDL- описания верхнего уровня иерархии для проекта контроллера, который был автома- тически сформирован мастером и должен быть дополнен вручную. j QxilinH - ProI ject jditfn r whbllrr^wi^hM -------——-“^Ж«в|Ив8ЙИ11ЙИ ............. Я @ sampled_data_controller, ise Й Cl xc3$20D-4ft256 < ЙPl embedded_kcpsm3-connectivity [embedded_kcpsm3 vhd) % [?] kcpsm3-low_leveLdehnition (kcpsmS.vhd) E£} proa_rom-low_level_definition (PROG_RDM.VHD) Property Value ^jntebieSutf№arytViW;ag.HW Йй1Йё®Жй#*[ Logic Utilization xc3s200 Friday 06/24/05 at 22:28 prog rom summary ,html Used] Airaiiable| Utilization |Hcrte(s)| □ □ ,"sjf ? Create New Source View Design Summary Design Utilities Create Schematic Symbol View Command Line Log File Check Syntax lor Simulation Launch Xilinx ISE Simulator View HDL Instantiation Template User Constraints Creete T iming Constraints $i|| Assign Package Pins Create Area Constraints E dit Constraints (T ext) Synthesize - XST Implement Design Generate Programming File t Programming File Generation Report Generate PROM, ACE, or JTAG File Configure Device [iMPACT] Property [Value О в s s 'У;'Ж". ;Ьi;V ''Л1;:' Jli!;lii;Н [Report HamefstatuslLast Date Modified | Rwdy Puc. 8.45. Вид основного окна Навигатора проекта после создания нового проекта контроллера О о Q Прежде чем вносить дополнения в представленный текст шаблона, создадим мо- дули исходного описания входных и выходных параллельных портов контроллера. Для этого воспользуемся кнопкой ЙЙ на оперативной панели или выберем команду New Source из раздела Project основного меню Навигатора проекта. В появившейся диалоговой панели параметров нового исходного модуля (см. рис. 8.39) выберем тип создаваемого файла - VHDL Module. В поле редактирования названия формируемого модуля File Name указываем in_port8x2 для создания шаблона VHDL-описания вход- ных портов. Затем, нажав кнопку Далее, переходим к диалоговой панели ввода ис-
152 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ходных данных, в которую заносим информацию об интерфейсе описываемого объ- екта, как показано на рис. 8.46. Имя архитектурного тела Architecture Name изменим на structur. Рис. 8.46. Вид диалоговой панели исходных данных для создания шаблона VHDL-описания входных портов контроллера Закончив ввод исходных данных и воспользовавшись кнопкой Далее, проверяем установленные значения параметров в открывшейся информационной панели масте- ра подготовки VHDL-описания (рис. 8.47). Рис. 8.47. Информационная панель мастера подготовки VHDL-шаблона, отображающая параметры создаваемого модуля описания входных портов контроллера
ГЛАВА 8 153 Убедившись в отсутствии ошибок, нажатием кнопки Готово (Finish) в информа- ционной панели завершаем процесс создания исходного модуля VHDL-описания входных портов для разрабатываемого контроллера. После этого название созданно- го файла in_port8x2.vhd отображается в окне исходных модулей Навигатора проекта. Одновременно автоматически открывается новое рабочее окно HDL-редактора, в ко- тором отображается сформированный шаблон VHDL-описания входных портов кон- троллера. Вид этого окна приведен на рис. 8.48. ГдПГ-Target Device Г"" 11П '' ............ ... .................. L] Tool versions: 11 '— Description: ^'7 f i''!: — " 13 — Dependencies: 14 15 — revision: 15 Revision u.rii - FiJe Cleared 17 -- Additional Comments: ; 18 10 '--------------------------------------------------------------------- 2Q library IEEE; 21 use IEEE.STD_LOGIC_1164.ALL; 22 use IEEE.STD_LOGIC_ARITH.ALL; 23 use IEEE.STD_LOGIC_UNSIGNED.ALL; 24 . fjh ----Uncomment the following library declaration if instantiating 20 -----any Xilinx primitives in this code. 27 --library UNISIM; 'gn 28 —use UNIS IM.VComponents.all; • 20 30 entity in_port8x2 is 3 .1 Port ( port_idn : in std^lcgic; 32 ‘ write_en : in std__logic; 33 in_datel : in std_logic_vector(7 downto 0); 34 in_date2 : in std_logic_vector (7 downto 0); 35 / out_date : out std__logic_yector (7 downto О); 35 elk : in std_logic); 37 end in_port8x2; л;: 38 '' 30 architecture structur of in_port8x2 is 40 41 begin .ГС 43^ : — 44i end structur; vj л1_! i. .C.X.’..C "... .. .. -Г J”’*”"'' A Puc. 8.48. Рабочее окно HDL-редактора, содержащее автоматически сформированный шаблон VHDL-описания входных портов контроллера В этом шаблоне прежде всего убираем символы комментариев в строках, содер- жащих директивы включения библиотеки UNISIM. Затем в описание интерфейса объекта in_port8x2 добавляем оператор generic, определяющий разрядность входных портов. Далее между строкой с названием архитектурного тела architecture structur of in_port8x2 is и ключевым словом begin включаем выражения декларации внутренних сигналов. Сразу после ключевого слова begin добавляем выражения структурного
154 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС описания объекта in_port8x2. В результате выполненных операций редактирования VHDL-описание входных портов должно выглядеть следующим образом: - - Company: - - Engineer: -Create Date: 18:40:18 06/25/05 - Design Name: - Module Name: in_port8x2 - structur - Project Name: - Target Device: - Tool versions: - Description: - Dependencies: - Revision: - Revision 0.01 - File Created - - Additional Comments: - Используемые библиотеки library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library UNISIM; use UNISIM.VComponents.all; entity in_port8x2 is generic (N: natural :=8); Port (portjdn : in stdjogic; write_en: in stdjogic; i n_date1: in std_logic_vector(7 downto 0); i n_date2: in std_logic„vector(7 downto 0); o ut_date: out stdjogic_vector(7 downto 0); elk: in stdjogic); end in_port8x2; - Структурное описание объекта in_port8x2 architecture structur of in_port8x2 is - Внутренние сигналы signal out_date1: std_logic_vector(7 downto 0); signal out_date2: std_logic_vector(7 downto 0);
ГЛАВА 8 155 signal outJateS: std_logic_vector(7 downto 0); begin - Описание схемы соединения компонентов gen_port: for i in 1 to N generate portjnn: fdce port map( q=> out_date1(i-1), c => elk, ce => write„en, clr => 'O', d=> in_date1(M) ); portjnm: fdce port map( q => out_date2(i-1), c => elk, ce => write.en, clr => ‘O', d => in _date2(i-1) MUXF5J-1: MUXF5 port map ( O=> out_dateS(l-1), IO => out_date1(i-1), 11 => out„date2(M), S => port Jdn portjn: fdce port map( q=> out_date(i-1), c => elk, ce => write.en, clr => 'O', d=> ouLdateS(i-l) end generate gen„port; end structur; Закончив редактирование файла in_port8x2.vhd, сохраняем его на диске. После этого повторим рассмотренную выше последовательность операций формирования нового исходного модуля для создания VHDL-описания выходного порта out_port8.vhd. При этом диалоговая панель исходных данных для создания шаблона VHDL-описания выходного порта должна выглядеть так, как показано на рис. 8.49.
156 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Рис. 8.49. Вид диалоговой панели исходных данных для создания шаблона VHDL -описания выходного порта контроллера На основе указанных исходных данных формируется шаблон VHDL-описания выходного порта контроллера out_роп8, который автоматически открывается в окне встроенного HDL-редактора Навигатора проекта (рис. 8.50). io 1 * 11 -- Description: 12 - Ча -- DeperuSenciec: 14 15 Revision: , ; ;1G-„- — Pevi&ion G.G1 - File Greeted 1.7 Additional CoiHmcnts: > 18 3 ' 1S .......................................... ...........................- . 20 library IEEE; 21 use IEEE.STD_LOGIC_1164.ALL; 22 use IEEE.STD_LOGIC_ARITH.ALL; 23 use IEEE.STD_LOGIC_UNSIGNED.ALL; 24 26 - UncCBinent thf_> fol lowing library declaration if instantiating ; 20 ---ar у Xilinx pruritiv^s in this c-fd^. : 27 library UNISIE; :p> 28 --use CNISir.VCoiriponents.aU; : .. V i; 30 entity out_port0 is ar ’ Port ( port_idn : in std_logic; 32 wrlte_en : in std logic; 7$ 33 in_date : in scd_logic_vector(7 downto 0); , 34 outpace : out std_logic_yector (7 downto 0) ; •:.< 36 1 elk : in std_logic7; 30 end out_port8; 37 * 30 . architecture structur of out_port0 is ; 30 i-ife : 40 begin / : ; 42 ' ' 43 . end structur; . Ш jf Ready ' : ?5i. ' Б1СЫМ T™F Puc. 8.50. Рабочее окно HDL-редактора, содержащее автоматически сформированный шаблон VHDL-описания выходного порта контроллера
ГЛАВА 8 157 В текст шаблона описания объекта out_port8 вносим те же изменения и дополне- ния, что и при создании VHDL-описания входного порта in_port8x2, после чего со- храняем его на диске в файле out_port8. vhd. В окончательном виде содержимое этого файла должно выглядеть следующим образом: - Company: - Engineer: - Create Date: 19:33:05 06/25/05 - - Design Name: - - Module Name; out_port8 - structur - Project Name: - Target Device: - Tool versions: - - Description: " Dependencies: - - Revision: Revision 0.01 - File Created Additional Comments: - - Используемые библиотеки library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library UNISIM; use UNISIM.VComponents.all; entity out_port8 is generic (N: natural :=8); Port (portjdn : in stdjogic; write_en: in stdjogic; in_date: in std_logic_vector(7 downto 0); out_date: out std_logic_vector(7 downto 0); elk: in stdjogic); end out_port8; -- Структурное описание объекта out_port8 architecture structur of out_port8 is -- Внутренние сигналы signal write_enable: stdjogic;
158 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС begin -- Описание схемы write_enable <= portjdn and write.en; gen „port: for i in 1 to N generate port_outn: fdce port map( q=> out_date(i-1), c => elk, ce => write_enable, clr => ‘01, d => in_date(i-1) ); end generate gen_port; end structur; После создания описаний входных и выходных портов приступаем к редактиро- ванию шаблона VHDL-описания модуля верхнего уровня иерархии проекта. Для это- го вернемся к рабочему окну HDL-редактора с заголовком sampled_data_control- ler.vhd (рис. 8.51). ® sampieddatacontroHer.vhd * j fl t 20 library IEEE; 21 use IEEE.STD_LOGIC_1164.ALL; 2? use IEEE.STD_LOGIC_ARITH.ALL; j 23: use IEEE.STD_LOGIC_UNSIGNED.ALL; „ ,,J ^28/.-----UritfurcmeiXir the following Librar у declarai ion if instantiat i no 20 ---- чпу Xilinx primitives in this cod». 27 - -library UNISZH; 28-’: --use ’JIHSIH. VCoinponer ts . al 1; 29; . за (^entity sampled_data_controller is 31 Port ( in_portl : in sod_ Icgic^vectur (7 downto 0); 32 ." in_port2 : in 3td_logio_vector(7 downto □); 33 out portl : out std logic_vector(7 downto 0); 34 .. out_porc2 : out std_logic_vectc-r (7 downto 0); - 36 interrupt : in std_Jogic; $S interrupt_ack ; out std logic; 37 reset : in std_logic; 38 elk : in std_iogir); 30 end sampled_data_controller; 40 41 architecture Structural of sampled_data_controiler is 42 43 begin 44 46- 40 end Structural; Puc. 8.51. Рабочее окно HDL-редактора, содержащее автоматически сформированный шаблон VHDL-описания модуля верхнего уровня иерархии проекта В текст этого шаблона между строкой с названием архитектурного тела architecture Structural of sampled_data_controller is и ключевым словом begin добавим
ГЛАВА 8 159 выражения декларации используемых компонентов микропроцессорного ядра PicoBlaze embeddedjkcpsm3 и портов ввода/вывода in_port8x2, out_port8, Между ключевыми словами begin и end Structural помещаем VHDL-код структурного описа- ния контроллера. Закончив редактирование модуля исходного описания верхнего уровня иерархии проекта, сохраняем его в виде файла sampled_data_controller.vhd, содержимое которого должно выглядеть следующим образом: - Company: - - Engineer: - Create Date: 22:28:40 06/24/05 - - Design Name: - - Module Name: sampled_data_controller - Structural - - Project Name: - - Target Device: - - Tool versions: - - Description: - Dependencies: - - Revision: - - Revision 0.01 - File Created - - Additional Comments: library IEEE; use IEEE.STD-LOGICJ 164. ALL; use IEEE.STD_LOGlC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; — Uncomment the following library declaration if instantiating any Xilinx primitives in this code. - library UNISIM; -use UNISIM.VComponents.all; entity sampled_data_controller is Port (in_port1: in std_logic_vector(7 downto 0); in_port2: in stdjogic_vector(7 downto 0); out_port1: out std_!ogic_vector(7 downto 0); out_port2: out stdJogic_vector(7 downto 0); interrupt: in stdjogic; interrupt—ack: out stdjogic; reset: in stdjogic; elk: in stdjogic); end sampled_data_controller; architecture Structural of sampled_data_controller is - declaration of embedded_kcpsm3 component embedded_kcpsm3
160 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Port ( portjd: out std_logic„vector(7downto 0); write.strobe: out stdjogic; read_strobe: out stdjogic; ouLport: out std_logic_vector(7 downto 0); in_port: in stdjogic_vector(7 downto 0); interrupt: in stdjogic; interrupLack: out stdjogic; reset: in stdjogic; elk: in stdjogic): end component: -- declaration of in_port8x2 component in_port8x2 Port ( portjdn: in stdjogic; write_en: in stdjogic; in_date1 : in stdjogic_vector(7 downto 0); in_date2: in stdjogic_vector(7 downto 0); out_date: out std_iogic_vector(7 downto 0); ci к: in stdjogic); end component; - declaration of out_port8 component ouLporte Port ( portjdn: in stdjogic; write_en: in stdjogic; in_date: in std_logic_vector(7 downto 0); out_date : out std_logic_vector(7 downto 0); elk: in stdjogic); end component; signal inpuLdat: stdjogic_vector(7 downto 0); signal out_dat: std_logic_vector(7 downto 0); signal port_addr: std_logic_vector(7 downto 0); signal write.str: stdjogic; signal read_str: stdjogic; begin processor: embedded_kcpsm3
ГЛАВА 8 161 port map( portjd => port_addr, write_strobe => write_str, out_port => out_dat, read.strobe => read_str, in_port => input_dat, interrupt => interrupt, interrupLack => interrupLack, reset => reset, elk => elk ); in_prt12: in„port8x2 port map( portjdn => port_addr(0), write_en => T, in_date1 => in_port1, in_date2 => in_port2, out_date -> input_dat, elk => elk ); out_prt1: out_port8 port map( portjdn => porLaddr(O), write_en => write.str, in_date => out.dat, out_date => out„port1, elk => elk ); out_prt2: out_port8 port map( portjdn => port_addr(1), write_en => write.str, i n.date => out_dat, out_date => out_port2, elk => elk); end Structural; Чтобы указать требуемую привязку интерфейсных цепей контроллера к выводам ПЛИС, сформируем файл временных и топологических ограничений проекта кон- троллера. Для этого инициируем процедуру создания нового исходного модуля про- екта, воспользовавшись кнопкой на оперативной панели Навигатора проекта или командой New Source из всплывающего меню Project. В диалоговой панели па- раметров нового исходного модуля (рис. 8.52) для определения типа создаваемого файла выберем строку Implementation Constraints File. В поле редактирования File Name указываем имя файла ограничений, совпадающее с названием проекта sam- pled_data_controller. 6—2062
162 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Д ВММ File fi: Ий / IP (CoreGen & Architecture Wizard) Ji? 0 MEM File Д Й Schematic • ® Slate Diagram Pl Test Bench Waveform H) User Document J ; В Verilog Module . Bl Verilog T est Fixture Й lb VHDL Library ! Й VHDL Module В VHDL Package ;Й E) VHDL Test Bench |sampled_data_controller ::|cAProi^ ' Puc. 8.52. Вид диалоговой панели исходных данных для создания основы файла временных и топологических ограничений проекта контроллера После нажатия кнопки Далее (рис. 8.52) на экране появляется диалоговая панель, которая содержит список исходных модулей проекта, среди которых нужно выбрать тот, с которым ассоциируется создаваемый файл UCF для проекта контроллера (рис. 8.53). Рис. 8.53. Диалоговая панель выбора модуля исходного описания, с которым ассоциируется создаваемый файл UCF для проекта контроллера В предложенном списке выделяем строку с названием модуля описания верхнего уровня иерархии проекта sampled_data_controller и подтверждаем выбор нажатием кнопки Далее (рис. 8.53). Затем в открывшейся информационной панели (рис. 8.54) нажимаем кнопку Готово, в результате чего создается пустой файл временных и то- пологических ограничений проекта контроллера, а рабочая область Навигатора про- екта принимает вид, показанный на рис. 8.55.
ГЛАВА 8 163 Рис. 8.54. Информационная панель мастера, отображающая параметры создаваемого модуля временных и топологических ограничений проекта контроллера Для внесения данных в файл UCF воспользуемся интегрированным текстовым редактором средств проектирования серии Xilinx ISE, дважды щелкнув левой кноп- кой мыши на строке Edit Constraints (Text) в окне процессов (рис. 8.55). @ $ampled_data_controller.ise Й О xc3s200-4ft256 f Й 0 sampled_data_controller-structural (sampled_data_controller.vhc (3 0 embedded_kcp$m3-connectivity Eembedded_kcpsm3.vhd) 0 kcp$m3-low_leveLdefinition (kcpsm3.vhd) 0 prog_rom-lowjevel_definition (PROG_ROM.VHD) 0 in_port8x2-$tructur (in_port8x2 vhd) 0 out_port8-$tructur [out_port8.vhd] □ Add Existing Source ? □ Create New Source El- User Constraints J— Create Timing Constraints ' Assign Package Pins ВЯ Create Area Constraints Edit Constraints (Text)* Puc. 8.55. Вид рабочей области Навигатора проекта после создания основы модуля временных и топологических ограничений проекта контроллера
164 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС В открывшемся окне редактирования с помощью клавиатуры набираем следую- щий текст: Net elk PERIOD = 20000 ps; Net elk L0C=T9; Net reset LOC=I14; Net out_port1<0> L0C=k12; Net out_port1<1> L0C=p14; Net out_port1<2> LOC=I12; Net out_port1<3> L0C=n14; Net out_port1 <4> L0C=p13; Net out_port1 <5> L0C=n12; Net out_port1<6> L0C=p12; Net out_port1 <7> L0C=p11; Net ouLport2<0> L0C=e14; Net out_port2<1> L0C=g13; Net ouLport2<2> L0C=n15; Net out_port2<3> L0C=p15; Net out_port2<4> L0C=r16; Net out_port2<5> LOC=f 13; Net out_port2<6> L0C=n16; Net out_port2<7> l_0C=p16; Net in_port1<7> L0C=k13; Net In_port1<6> L0C=k14; Net in_port1<5> L0C=j13; Net in_port1<4> L0C-J14; Net in_port1<3> L0C=h13; Net in_port1<2> L0C=h14; Net in_port1<1> L0C=g12; Net in_port1<0> L0C=f12; Net in_port2<7> L0C=e6; Net In„port2<6> L0C=c5; Net in_port2<5> L0C=c6; Net in_port2<4> L0C=c7; Net in_port2<3> L0C=c8; Net in_port2<2> L0C=c9; Net in_port2<1> L0C=a3; Net in_port2<0> L0C=a4; Приведенные выражения ограничений устанавливают привязку интерфейсных цепей контроллера к выводам кристалла с учетом архитектуры используемой отла- дочной платы из инструментального комплекта Spartan-3 Starter Kit. При выполнении указанных ограничений входы параллельного порта in_portl будут подключены к восьми ползунковым переключателям SW0-SW7, с помощью которых имитируются входные сигналы, поступающие с датчиков. Входы параллельного порта in_port2 бу- дут выведены на контакты разъема А2, на которые могут быть поданы эталонные значения входных данных. Выходы параллельного порта outjjortl должны подклю- чаться к светодиодным индикаторам LD0-LD7. Выходы параллельного порта out_port2 для наглядности соединяются с отдельными сегментами светодиодных 7-сегментных индикаторов дисплея DSP1. Вход сброса должен подключаться к кноп- ке BTN3. Вход тактового сигнала reset должен сопрягаться с выходом кварцевого ге-
ГЛАВА 8 165 нератора, установленного на отладочной плате. В начало файла UCF включено вы- ражение, которое устанавливает временное ограничение проекта, соответствующее значению тактовой частоты разрабатываемого контроллера - 50 МГц. Завершив редактирование файла ограничений, сохраняем его на диске и присту- паем к выполнению основных этапов проектирования. Для этого в окне исходных модулей проекта выделяем строку с названием модуля описания верхнего уровня ие- рархии sampled_data_controller - Structural, При этом окно процессов Навигатора проекта принимает вид, показанный на рис. 8.56. г Щ sampled_data_controller,i$e Й О xc3s200-4ft256__________________ i..IUl sampled_data_controller.ucf El- M embedded_kcpsm3*connectivity (embedded_kcpsm3 vhd) ;[?] kcpsm3-lQw_level_definition (kcp$m3.vhd) prog_rom-low_level_definition (PROG_ROM VHD) [?) in_port8x2-structur (in_port8x2.vhd) |?| out_port8-$lructur (out_port8.vhd) View Design Summary В Design Utilities ..О Create Schematic Symbol [=] View Command Line Log File я Check Syntax for Simulation Г"Я Launch Xilinx ISE Simulator '[J] View HDL Instantiation Template Й № User Constraints Create Timing Constraints X Assign Package Pins " BSI Create Area Constraints I Edit Constraints (Text) Й El Q Synthesize -XST .. Implement Design I? Eb Q Generate Programming File □ Add Existing Source Create New Source Prqgramrning FileGer^eratiai-i Report Generate PR DM, ACE, or JTAG File Configure Device (iMPACT) Puc. 8.56. Вид рабочей области Навигатора проекта после создания всех модулей исходного описания проекта контроллера Щелчком правой кнопки мыши на строке Generate Programming File в окне про- цессов (рис. 8.56) открываем диалоговую панель параметров процесса генерации конфигурационной последовательности для разработанного контроллера. В данной панели на странице Startup Options для параметра Start-Up Clock выбираем значение JTAG Clock, так как загрузка конфигурационной последовательности будет выпол- няться в режиме периферийного сканирования через JTAG-порт. Чтобы запустить процесс автоматического выполнения всех необходимых этапов проектирования, достаточно дважды щелкнуть левой кнопкой мыши на строке
166 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Configure Device (iMPACT,) в окне процессов Навигатора проекта (рис. 8.56). Процесс выполнения всех этапов может занять несколько минут в зависимости от производи- тельности используемого компьютера. За ходом выполнения всех процедур можно наблюдать, отслеживая информацию, которая поэтапно отображается в окне кон- сольных сообщений. Если все исходные описания проекта контроллера были введе- ны без ошибок, то весь процесс проектирования должен закончиться успешно (воз- можно появление только нескольких предупреждений, на которые можно не обра- щать внимания в данном проекте). В результате на экран будет автоматически выведена стартовая диалоговая панель мастера определения параметров инициализа- ции программы iMPACT (см. рис. 8.20). Прежде чем продолжить процедуру загрузки конфигурационной последовательности проекта контроллера в ПЛИС, подключим загрузочный кабель к отладочной плате и подадим на нее напряжение питания. Далее, используя последовательно диалоговые панели мастера инициализации программы iMPACT, выбираем режим периферийного сканирования Boundary-Scan Mode и автоматическое обнаружение подключенного загрузочного кабеля и цепочки периферийного сканирования Automatically connect to cable and identify Boundary- Scan Chain. После установки указанных параметров открывается окно программы iMPACT, вид которого показан на рис. 8.57. Рис. 8.57. Вид окна программы iMPACT, отображающего цепочку периферийного сканирования отладочной платы из инструментального комплекта Spartan-3 Starter Kit В составе цепочки периферийного сканирования, обнаруженной на отладочной пла- те, представлена ПЛИС XC3S200 и конфигурационное ППЗУ XCF02S. Для ПЛИС ука- зываем название файла, содержащего конфигурационную последовательность проекта контроллера sampled_data_controller.bit. Затем, выделив условный графический образ
ГЛАВА 5 167 ПЛИС, с помощью команды Program меню Operations или контекстно-зависимого всплывающего меню загружаем конфигурационную последовательность проекта кон- троллера в кристалл. После успешного завершения этой процедуры, можно визуально проверить функционирование разработанного контроллера. Для этого, изменяя положе- ние ползунковых переключателей и наблюдая за состоянием светодиодных индикаторов, убеждаемся в нормальной работоспособности контроллера. На этом завершается изучение проектирования встраиваемых микропроцессор- ных систем на основе 8-разрядных ядер семейства PicoBlaze.
9. MICROBLAZE-CEMEHCTBO 32-РАЗ рядных МИКРОПРОЦЕССОРНЫХ ЯДЕР, ПРЕДНАЗНАЧЕННЫХ ДЛЯ ПРОЕКТИРОВАНИЯ ВСТРАИВАЕМЫХ СИСТЕМ НА ОСНОВЕ ПЛИС СЕРИЙ FPGA ФИРМЫ XILINX Семейство 8-разрядных микропроцессорных ядер PicoBlaze, которое было пред- ставлено в предыдущих главах, применяется, как правило, в системах начального и среднего уровня. В качестве основы для проектирования систем на кристалле более высокого уровня и быстродействия, фирма Xilinx предлагает семейство 32-разрядных микропроцессорных модулей MicroBlaze. В отличие от свободно распространяемого семейства микропроцессорных ядер PicoBlaze, MicroBlaze является составной частью пакета Embedded Development Kit (EDK), предлагаемого фирмой Xilinx в качестве основного инструмента разработки и отладки встраиваемых микропроцессорных систем на основе ПЛИС серий FPGA. Элементы семейства MicroBlaze представляют собой встраиваемые микропроцессор- ные ядра с архитектурой RISC (Reduced Instruction Set Computer), которые предна- значены для применения в системах, выполняемых соответственно на основе ПЛИС серий Spartan-II, Spartan-IIE, Spartan-3, Virtex, Virtex-E, Virtex-II, Virtex-II Pro, Virtex-4. В настоящей главе рассматриваются основные характеристики, архитектура и организация шинных интерфейсов микропроцессорных ядер семейства MicroBlaze. 9.1. Основные характеристики микропроцессорных ядер семейства MicroBlaze Отличительными особенностями микропроцессорных ядер семейства MicroBlaze являются: гибкая архитектура с раздельными шинами данных и команд, которые соответст- вуют спецификации ОРВ V2.0 (On-chip Peripheral Bus) фирмы IBM®; 32-разрядная шина данных; 32-разрядная шина команд; прямой доступ к ресурсам блочной памяти ПЛИС Block SelectRAM, реализуе- мый через шину LMB (Local Memory Bus); возможность организации памяти данных микропроцессорной системы на основе ресурсов внутренней блочной памяти ПЛИС Block SelectRAM или внешних за- поминающих устройств различного типа; - диапазон адресного пространства оперативной памяти ядра, позволяющий ис- пользовать в составе проектируемой микропроцессорной системы память данных объемом от 0 до 4 Гбайт; « возможность использования кеш-памяти с целью повышения производительно- сти разрабатываемой микропроцессорной системы; поддержка интерфейса Xilinx CacheLink (XCL), обеспечивающего высокоскоро- стной обмен между кеш-памятью и контроллером внешней памяти; 32-разрядное АЛУ, реализующее логические функции, операции сложения, вы- читания, умножения, деления и сдвига;
ГЛАВА 9 169 блок регистров общего назначения, включающий в себя 32 тридцатидвухразряд- ных регистра; применение специального прецизионного блока для выполнения операций с пла- вающей запятой Floating point unit (FPU); 32-разрядная шина адресов; система команд, поддерживающая 124 тридцатидвухразрядные инструкции; возможность реализации ППЗУ микропрограмм как на основе внутренней блоч- ной памяти ПЛИС, так и на базе внешней памяти, расположенной вне кристалла; диапазон адресного пространства программной памяти ядра, позволяющий ис- пользовать в составе разрабатываемой микропроцессорной системы ППЗУ мик- ропрограмм объемом до 4 Гбайт; применение трехступенчатого конвейера микрокоманд, обеспечивающее высо- кую производительность проектируемой системы; поддержка прямого, косвенного и непосредственного режимов адресации; поддержка восьми входных и восьми выходных интерфейсов, соответствующих спецификации FSL (Fast Simplex Link); применение аппаратных умножителей для реализации соответствующих опера- ций АЛУ (в кристаллах, обладающих данным типом ресурсов, например в ПЛИС семейств Virtex-II или Spartan-3, Virtex-II Pro, Virtex-4); включение в состав микропроцессорного ядра специальной логики, обеспечи- вающей возможность аппаратной отладки разрабатываемых программ непосред- ственно в кристалле через порт JTAG-интерфейса; наличие входа сброса (инициализации), позволяющего перевести микропроцес- сор в начальное состояние; полная совместимость компонентов ядра со средствами разработки проектов и программирования ПЛИС серии Xilinx ISE: ISE BaseX и ISE Foundation; возможность моделирования ядра в составе разрабатываемых проектов с помо- щью системы ModelSim ХЕ [1]; оптимизированная структура микропроцессорных ядер, учитывающая особенно- сти используемых ПЛИС и позволяющая минимизировать объем ресурсов кри- сталла, требуемых для их реализации, что делает возможным размещение в этом же кристалле периферийных модулей проектируемой системы, включая интер- фейсы ввода/вывода; расширенные интерфейсные возможности микропроцессорных ядер, обеспечи- вающие оптимальное их сопряжение с периферийными модулями, реализуемы- ми как на основе свободных логических ресурсов кристалла, так и в виде внеш- них устройств; высокая производительность, достигающая 166 D-MIPS (в зависимости от типа используемого кристалла); интегрированная система разработки и отладки аппаратной части и программных средств встраиваемых микропроцессорных систем, реализуемых на основе кри- сталлов семейств FPGA фирмы Xilinx, EDK; возможность разработки микропроцессорных программ с применением языков высокого уровня C/C++; наличие дополнительных компонентов периферийных модулей микропроцес- сорной системы, включенных в комплект пакета программных средств разработ-
170 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ки EDK в виде IP-ядер, которые позволяют значительно ускорить и упростить процесс разработки «систем на кристалле». 9.2. Архитектура микропроцессорных ядер семейства MicroBlaze Структура микропроцессорных ядер семейства MicroBlaze построена по принци- пу гарвардской архитектуры, в основе которой лежит концепция использования раз- дельных шин данных и команд. Организация магистралей микропроцессора в соот- ветствии с этой концепцией обеспечивает достижение высоких скоростей выполне- ния операций. Обобщенная структура микропроцессорных ядер семейства MicroBlaze представлена на рис. 9.1. ILMB IXCL.M IXCL.S Программный счетчик Буфер команд (конвейерный регистр) Регистр состояния MSR АЛУ Add/Sub ShiffiLogical Multiply Блок дешифровки команд Регистр состояния FSR Блок регистров общего назначения 32x32 разряда Блок выполнения операций с плавающей запятой FPU DXCLJfl DXCL_S DOPBy MFSL0..7 SFSL0...7 Рис. 9.1. Архитектура микропроцессорных ядер семейства MicroBlaze Основными элементами архитектуры микропроцессорных ядер семейства MicroBlaze являются: 32-разрядное АЛУ; блок регистров общего назначения; блок выполнения операций с плавающей запятой (FPU); регистры состояния (статуса); программный счетчик (счетчик команд); буфер команд (конвейерный регистр); блок дешифровки команд; контроллер интерфейса шины команд; контроллер интерфейса шины данных; регистры специального назначения Exception Address Register (EAR) и Exception Status Register (ESR); отладочная логика; * кеш-память команд; кеш-память данных; схема управления прерываниями.
ГЛАВА 9 171 Последние 5 элементов из перечисленных выше явно не показаны на рис. 9.1. Отладочная логика и кеш-память команд и данных не являются обязательными эле- ментами архитектуры микропроцессорных ядер семейства MicroBlaze. Необходи- мость их присутствия определяется разработчиком в соответствии с конфигурацией проектируемой системы. Блок АЛУ выполняет логические и арифметические операции над 32-разряд- ными операндами. В качестве операндов может использоваться содержимое любого из 32 регистров общего назначения, а также шестнадцати- или 32-разрядные кон- станты, указанные непосредственно в тексте команде. Результат выполнения опера- ции заносится в один из регистров общего назначения, номер которого задается в ка- честве соответствующего параметра выполняемой инструкции. В кристаллах се- мейств Virtex-II, Spartan-3, Virtex-II Pro и Virtex-4 для выполнения инструкций умножения могут использоваться блоки аппаратных умножителей, что позволяет значительно сократить время выполнения указанных операций. Для выполнения опе- раций с плавающей запятой в состав архитектуры последней версии микропроцес- сорных ядер семейства MicroBlaze добавлен специальный блок FPU. Такое решение позволило расширить набор поддерживаемых команд соответствующей группой ин- струкций. Регистр состояния (Machine Status Register, MSR) содержит значения флагов (признаков), формируемых блоком АЛУ при выполнении арифметических и логиче- ских инструкций, а также операций ввода/вывода и прерываний. Регистр статуса Floating Point Status Register (FSR) предназначен для хранения значений флагов (при- знаков), формируемых блоком выполнения операций с плавающей запятой (FPU). Эти регистры имеют по 32 разряда, назначение которых подробно рассматривается в следующем разделе. Блок регистров общего назначения содержит 32 регистра, обозначаемых по по- рядку RO - R31, длина каждого из которых составляет 32 разряда. При использова- нии этих регистров в разрабатываемой программе следует придерживаться соглаше- ний, установленных интерфейсом Application Binary Interface (ABI), который опреде- ляет правила создания приложений на языке ассемблера для микропроцессорного ядра MicroBlaze. Компилятор программ, написанных на языке высокого уровня C/C++, при их трансляции автоматически выполняет требования, предусмотренные ABI. Согласно классификации, принятой в ABI, все регистры общего назначения ус- ловно разделяются на 3 группы: регистры, предназначенные для хранения временных (промежуточных) данных, которые не сохраняются при вызове функций (подпрограмм); регистры, содержимое которых восстанавливается после вызова функций (под- программ) в состояние, предшествующее обращению к функции (подпрограмме); выделенные регистры, предназначенные для хранения строго определенных данных. К первой группе относятся регистры с номерами R3-R12. Регистры R3 и R4 предназначены для записи возвращаемых значений вызываемой функции, которые передаются в вызывающую программу (функцию). Регистры R5-R12 используются для передачи параметров между подпрограммами. Вторую группу образуют регист- ры с номерами R19-R31. Информация, которая хранится в этих регистрах, при вызо- ве функций (подпрограмм) записывается в стек. После выполнения функции (под-
172 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС программы) данные, помещенные в стек перед ее вызовом, перезаписываются из сте- ка в соответствующие регистры. В третью группу входят регистры с номерами R0 - R2 и R13 - R18. Регистр с идентификатором R0 всегда содержит нулевое значение. Любые попытки записи иных данных в этот регистр игнорируются, поэтому всегда из него можно считать нулевое значение. В регистр R1 записывается значение указа- теля стека. Поэтому его содержимое обновляется при вызове функций (подпрограмм) и возврате из них. Регистр R14 предназначен для хранения адреса возврата при вызо- ве процедуры обслуживания прерывания. Регистр R15 используется для записи адреса возврата при обращении к подпрограмме. В регистр R16 заносится значение адреса возврата при обработке системных прерываний отладчика, вызванных непредвиденной ситуацией. Регистр R17 предназначен для записи адреса возврата из процедуры обработки исключений. Регистр R18 используется для хранения времен- ных (промежуточных) данных при выполнении ассемблерных операций. Схема управления прерываниями формирует комбинацию внутренних сигналов, необходимых для выполнения процедуры обработки прерываний. Микропроцессор- ные ядра семейства MicroBlaze изначально содержат единственную цепь сигнала прерывания. Для расширения системы прерываний следует использовать дополни- тельную логику, которая реализуется на основе свободных ресурсов кристалла. Контроллеры интерфейсов шин данных и команд предназначены для организа- ции взаимодействия микропроцессорного ядра и других компонентов проектируемой системы, включая программную и оперативную память, через соответствующие ма- гистрали. Буферный (конвейерный) регистр команд используется для организации конвей- ерной обработки инструкций, которая позволяет повысить производительность мик- ропроцессорного ядра за счет параллельного выполнения обработки нескольких ко- манд. Принцип конвейерной обработки основан на расщеплении процесса обработки команды на несколько фаз и совмещении во времени выполнения различных фаз не- которой последовательности инструкций. В микропроцессорных ядрах семейства MicroBlaze процесс обработки команды разбит на 3 фазы: выборку инструкции из программной памяти; дешифровку кода команды; исполнение инструкции. Каждая из перечисленных фаз выполняется в течение одного машинного цикла. При этом выигрыш в производительности ядра достигается за счет одновременного выполнения (на протяжении одного машинного цикла) соответствующих фаз трех инструкций, которые последовательно выбираются из программной памяти. В тече- ние одного машинного цикла производится выборка новой команды, дешифровка предыдущей инструкции и исполнение команды, которая предшествовала двум пере- численным инструкциям. Рис. 9.2 в наглядной форме поясняет использование метода конвейерной обработки команд в микропроцессорных ядрах семейства MicroBlaze. Для некоторых инструкций фаза исполнения может занимать более одного ма- шинного цикла. Поэтому, чтобы исключить сбои в работе конвейера, применяется буфер предварительной выборки команд.
ГЛАВА 9 173 Рис. 9.2. Конвейерная обработка команд в микропроцессорных ядрах семейства MicroBlaze Очевидно, что применение конвейерной обработки команд дает положительный эффект только при последовательной выборке инструкций из программной памяти. При выполнении команды передачи управления в программе две последующие инст- рукции, которые находятся в стадии выборки и дешифровки, становятся неактуальны и далее не выполняются. Для повторного заполнения конвейера новой последова- тельностью команд после передачи управления требуется 3 машинных цикла. Чтобы сократить временные потери, вызванные необходимостью перезагрузки конвейера после выполнения инструкций, управляющих последовательностью выполнения опе- раций в программе, используется следующий метод. При исполнении команд пере- дачи управления производится сброс только той инструкции в конвейере, которая находится в стадии выборки. Команда, находящаяся в фазе дешифровки, продолжает выполняться. Таким образом, фактическая передача управления происходит только после завершения исполнения декодируемой инструкции. Для практического приме- нения этого метода предусмотрены специальные варианты команд, управляющих по- следовательностью выполнения операций в программе. В конце мнемонического идентификатора таких команд присутствует символ D (Delay), указывающий на то, что исполнение этих команд осуществляется с дополнительной задержкой. Блок дешифровки команд на основании данных, поступающих с выходов про- граммной памяти (а точнее, с выходов конвейерного регистра), формирует совокуп- ность управляющих сигналов, необходимых для выполнения соответствующей опе- рации, которые подаются на все блоки микропроцессорного ядра. Управление последовательностью выполнения команд в составе программы осуществляется с помощью программного счетчика. Сигналы на его выходах обра- зуют адрес выборки следующей команды. Эти сигналы передаются на адресные вхо- ды программной памяти. Режим работы программного счетчика (счет или загрузка) определяется типом текущей выполняемой инструкции и состоянием сигналов на входах управления микропроцессорного ядра. В основном режиме, при отсутствии прерываний, остановов, команд управления последовательностью выполнения про- граммы, содержимое программного счетчика автоматически увеличивается на еди- ницу при исполнении текущей операции. Таким образом реализуется последователь- ная выборка и выполнение команд программы. В процессе выполнения команд управления ходом программы в программный счетчик производится загрузка значения, соответствующего адресу, по которому осуществляется передача управления в программе. После исполнения команды пере- хода программный счетчик продолжает работу в инкрементном режиме, но уже на- чиная с нового значения, которое было записано при ее выполнении.
174 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС При появлении активного уровня сигнала на входе прерывания микропроцессор- ного ядра процесс выполнения текущей команды принудительно прекращается, а в программный счетчик загружается адрес вектора соответствующей процедуры обра- ботки (0x00000010). Перед этим значение адреса инструкции, которая выполнялась в момент поступления запроса прерывания, сохраняется в регистре общего назначе- ния R14. Для запрета будущих прерываний, запросы которых могут поступить во время выполнения процедуры обслуживания, флаг Interrupt Enable (IE) Flag регистра статуса сбрасывается в состояние низкого логического уровня. После завершения процесса обработки прерывания происходит автоматическое восстановление значе- ния адреса невыполненной команды в программном счетчике. При этом флаг IE ус- танавливается в состояние высокого логического уровня, разрешающее обработку прерываний. Если при выполнении микропроцессорной программы генерируется исключение, то процесс исполнения текущей инструкции прерывается. Адрес этой невыполнен- ной команды записывается в регистр общего назначения R17, а в программный счет- чик загружается адрес вектора процедуры обработки исключения (0x00000008). По этому адресу расположена инструкция передачи управления соответствующей под- программе, которая должна выполняться при возникновении события, вызывающего исключение. В начальный момент времени функционирования микропроцессорного ядра, а также при подаче внешнего сигнала сброса выходы программного счетчика уста- навливаются в нулевое состояние (низкого логического уровня). Таким образом, в этих случаях управление передается команде программы, расположенной по адресу 0x00000000. Отладочный модуль реализуется на основе логики периферийного сканирования кристаллов FPGA. При включении этого модуля в состав микропроцессорного ядра обеспечивается возможность отладки разрабатываемых приложений в кристалле че- рез порт JTAG-интерфейса, используя соответствующие программные средства EDK. В процессе отладки можно установить требуемое число контрольных точек, выпол- нять отлаживаемую программу в пошаговом режиме, считывать данные и произво- дить запись в память и все регистры, включая регистр состояния и программный счетчик. Для повышения производительности проектируемой системы в ряде случаев в состав микропроцессорных ядер семейства MicroBlaze может быть включена быст- родействующая кеш-память команд и данных. Размер этой памяти может составлять 2 Кбайт, 4 Кбайт, 8 Кбайт, 16 Кбайт, 32 Кбайт и 64 Кбайт. Архитектура микропроцессорных ядер семейства MicroBlaze предоставляет воз- можность выбора одного из трех вариантов реализации программной памяти, в кото- рой хранится последовательность выполняемых команд. Первый вариант предпола- гает организацию памяти программ в виде запоминающего устройства, реализуемого на основе ресурсов блочной памяти кристалла Block SelectRAM. Основным недос- татком этого варианта является ограниченный объем программной памяти, который определяется физическими ресурсами блочной памяти ПЛИС. Второй вариант за- ключается в применении внешнего (по отношению к кристаллу FPGA) ППЗУ для хранения программ. В этом случае объем программной памяти может достигать мак- симально допустимого значения (4 Гбайт) при включении соответствующего числа
ГЛАВА 9 175 микросхем ППЗУ. Для третьего варианта организации программной памяти харак- терно совместное использование внутренней блочной памяти ПЛИС и внешнего ППЗУ. При этом применяются различные шины команд для каждого типа программ- ной памяти. Более подробно различные варианты конфигурации ППЗУ программ бу- дут рассмотрены при описании шинных интерфейсов микропроцессорных ядер се- мейства MicroBlaze. 9-3. Структура регистров статуса MSR и FSR микропроцессорных ядер семейства MicroBlaze Из 32 разрядов регистра статуса MSR 21 бит (с 1 по 21) в текущей версии микро- процессорных ядер семейства MicroBlaze не используется. Эти разряды регистра со- стояния зарезервированы для дополнительных флагов, которые могут появиться в последующих версиях микропроцессорных ядер. Здесь и далее используется нумера- ция разрядов регистра, начинающаяся с нуля. Таким образом, последний разряд ре- гистра имеет порядковый номер 31. Нулевой разряд регистра состояния MSR, обозначаемый как Carry Copy Flag (СС), представляет собой копию флага переноса/заема Carry Flag. Копирование зна- чения флага переноса/заема Carry Flag в нулевой разряд MSR производится автома- тически при чтении регистра статуса. В 22 разряд регистра статуса MSR заносится значение флага Exception In Progress Flag (EIP), состояние которого указывает на осуществления обработки аппаратного исключения. Нулевое значение этого флага информирует об отсутствии аппаратных исключений. При выполнении процедуры обработки аппаратных исключений дан- ный флаг переключается в установленное состояние (принимает значение логической единицы). Двадцать третий разряд регистра состояния MSR содержит значение флага Exception Enable Flag (ЕЕ), которое устанавливает режим обработки аппаратных ис- ключений. Если данный флаг находится в установленном состоянии, то аппаратные исключения разрешены. При нулевом значении флага ЕЕ аппаратные исключения заблокированы. Двадцать четвертый разряд регистра статуса MSR используется для хранения зна- чения флага Data Cache Enable Flag (DCE), который определяет возможность исполь- зования кеш-памяти данных. При единичном значении этого флага разрешается ис- пользование кеш-памяти данных. Сброшенное состояние флага DCE соответствует запрету использования кеш-памяти В 25 разряд регистра состояния MSR записывается значение флага Dvision by Zero Flag (DBZ). Этот флаг переключается в установленное состояние (состояние вы- сокого логического уровня) в случае, если при выполнении операции происходит де- ление на нуль. При отсутствии признака деления на нуль флаг DBZ находится в со- стоянии низкого логического уровня. Двадцать шестой разряд регистра статуса MSR содержит значение флага Instruction Cache Enable Flag (ICE), который указывает на возможность использова- ния кеш-памяти команд. Если этот флаг находится в установленном состоянии (со- стоянии высокого логического уровня), то разрешается использование кеш-памяти команд. Сброшенное состояние флага ICE указывает на запрет использования кеш- памяти команд.
176 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Двадцать седьмой разряд MSR предназначен для записи состояния флага FSL Error Flag (FSL), сигнализирующего о наличии и отсутствии ошибок интерфейса FSL. Данный флаг переключается в состояние высокого логического уровня при обнару- жении ошибки интерфейса FSL. При отсутствии ошибок флаг FSL находится в сбро- шенном состоянии (состоянии низкого логического уровня). В 28 разряде регистра статуса MSR содержится значения флага Break in Progress Flag (BIP), который информирует об останове в процессе выполнения программы. Процесс выполнения программы может быть временно приостановлен как про- граммным, так и аппаратным способом. В первом случае останов осуществляется внутри программы с помощью соответствующих инструкций (brk и brki). Во втором случае приостановление процесса выполнения программы инициируется извне сиг- налами, которые поступают со входа Ext_Brk или Ext NM Brk. Когда микропроцес- сорное ядро переходит в режиме останова, флаг BIP устанавливается в состояние вы- сокого логического уровня. В противном случае этот флаг находится в сброшенном состоянии. В 29 разряд регистра MSR записывается состояние флага переноса/заема Carry Flag (С). Этот флаг устанавливается в состояние высокого логического уровня в том случае, если в результате операции сложения происходит перенос или заем при вы- полнении вычитания. При отсутствии переноса (или заема) из самого старшего раз- ряда значение флага С соответствует состоянию низкого логического уровня. Тридцатый разряд регистра статуса MSR содержит значение флага Interrupt Enable Flag (IE), который информирует о режиме обработки прерываний. Если этот флаг находится в установленном состоянии, то обработка прерываний разрешена. Сброшенное состояние флага IE соответствует режиму запрета прерываний. В 31 разряд регистра состояния MSR заносится значение флага Buslock Enable Flag (BE), который сигнализирует о возможности включения режима Buslock шины данных ОРВ. Значение низкого логического уровня этого флага указывает на запрет указанного режима шины данных ОРВ. Установленное состояние флага BE соответ- ствует разрешающему значению. Первые 27 разрядов регистра состояния FSR в текущей версии ядра MicroBlaze не используются. Эти разряды регистра состояния FSR зарезервированы для допол- нительных флагов выполнения операций с плавающей запятой, которые могут поя- виться в последующих версиях микропроцессорного ядра. Двадцать седьмой разряд регистра статуса FSR содержит значение флага In- struction Invalid Operation Flag (IO), который сигнализирует об ошибке в команде. Сброшенное состояние этого флага указывает на отсутствие ошибок при обработке команд, выполняющих операции с плавающей запятой. В 28 разряд регистра состояния FSR записывается значение флага Dvision by Zero Flag (DZ). Этот флаг по своему назначению и состояниям аналогичен одно- именному флагу регистра статуса MSR, но формируется блоком выполнения опера- ций с плавающей запятой. Двадцать девятый разряд регистра состояния FSR предназначен для записи состояния флага Overflow Flag (OF), сигнализирующего о возникновении переполне- ния при выполнении операции с плавающей запятой. Данный флаг переключается в состояние высокого логического уровня при появлении переполнения. Сброшенное состояние флага OF указывает на отсутствие переполнения.
ГЛАВА 9 177 Тридцатый разряд регистра статуса FSR содержит значение флага Interrupt Underflow Flag (UF), который информирует об исчезновении значащих разрядов в ре- зультате операций с плавающей запятой. Сброшенное состояние флага UF соответст- вует нормальному результату выполнения операций с плавающей запятой. В 31 разряд регистра состояния FSR заносится значение флага Denormalized operand error Flag (DO), который сигнализирует об ошибке в операндах с плавающей запятой. Значение низкого логического уровня этого флага указывает на отсутствие ошибок в операндах с плавающей запятой. 9.4. Шинные интерфейсы микропроцессорных ядер семейства MicroBlaze Каждая из шин микропроцессорных ядер семейства MicroBlaze (шина данных и шина команд) фактически разделяется на две независимые магистрали: глобальную шину, соответствующую спецификации ОРВ; локальную шину, соответствующую спецификации LMB. В микропроцессорной системе, разрабатываемой на основе ядра MicroBlaze, ши- ны данных и команд могут быть реализованы как в полном составе, так и в виде только локальной LMB- или только глобальной ОРВ-магистрали. На рис. 9.3 показа- ны 6 типовых вариантов конфигурации шинных интерфейсов микропроцессорных ядер семейства MicroBlaze. Здесь и далее используется следующая система обозна- чений: DOPB - шина данных, соответствующая спецификации ОРВ; DLMB - ло- кальная шина данных, соответствующая спецификации LMB; ЮРВ - шина команд, соответствующая спецификации ОРВ; ILMB - локальная шина команд, соответст- вующая спецификации LMB. MicroBlaze Вариант 1 MicroBlaze Рис. 9.3. Типовые варианты конфигурации шинных интерфейсов микропроцессорных ядер семейства MicroBlaze Далее кратко освещаются особенности каждого из шести вариантов конфигура- ции шинных интерфейсов, представленных на рис. 9.3, и приводятся соответствую- щие типовые схемы сопряжения микропроцессорных ядер семейства MicroBlaze и стандартных периферийных модулей. Компоненты стандартных периферийных
178 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС модулей, предоставляемые разработчику в составе пакета EDK, рассматриваются в следующем разделе. Конфигурация 1 соответствует варианту реализации шин данных и команд в полном составе (IOPB+ILMB+DOPB+DLMB). На рис. 9.4 показана типовая схема подключения стандартных периферийных модулей и памяти, соответствующая этой конфигурации. Глобальная шина команд, соответствующая спецификации ОРВ, ис- пользуется для подключения внешней программной памяти через соответствующий контроллер. Локальная шина команд, соответствующая спецификации LMB, обеспе- чивает быстрый доступ к памяти программ, реализуемой на основе блочной памяти кристалла. Внешняя память данных и периферийные модули (реализуемые как внут- ри, так и вне ПЛИС) подключаются к глобальной шине данных DOPB. Локальная шина данных DLMB выполняет функции сопряжения микропроцессорного ядра MicroBlaze и оперативной памяти, реализуемой на базе блочной памяти кристалла. Данную конфигурацию целесообразно использовать в случае, когда необходим большой объем программной и оперативной памяти, превосходящей ресурсы блоч- ной памяти ПЛИС. При этом для хранения критических сегментов программного ко- да и данных используется блочная память кристалла. Рис. 9.4. Вариант 1 конфигурации микропроцессорной системы, проектируемой на основе ядра MicroBlaze Конфигурация 2 (IOPB+DOPB+DLMB) отличается от предыдущей отсутствием локальной шины команд ILMB (рис. 9.5). При этом программная память полностью выполняется в виде внешнего ППЗУ, взаимодействие с которым осуществляется по глобальной шине команд ЮРВ через соответствующий контроллер. Сопряжение оперативной памяти и периферийных модулей с микропроцессорным ядром выпол- няется по той же схеме, по которой оно выполняется и в конфигурации 1. Конфигу- рация 2 применяется при больших объемах программного кода и данных, выходящих за пределы ресурсов блочной памяти кристалла FPGA, и реализации памяти про- грамм вне ПЛИС. При использовании данной конфигурации разработчик может за- действовать максимальный объем блочной памяти кристалла для организации опера- тивной памяти с высокой скоростью доступа по шине DLMB.
ГЛАВА 9 179 Рис. 9.5. Вариант 2 конфигурации микропроцессорной системы, проектируемой на основе ядра MicroBlaze В конфигурации 3 (ILMB+DOPB+DLMB) по сравнению с конфигурацией 1 ис- ключена глобальная шина команд ЮРВ (рис. 9.6). ППЗУ программ в этом случае в полном объеме реализуется на основе блочной памяти ПЛИС. Взаимодействие мик- ропроцессорного ядра MicroBlaze с оперативной памятью и периферийными моду- лями осуществляется так же, как и в конфигурациях, рассмотренных выше. Конфи- гурацию 3 эффективно использовать при небольшом объеме программного кода, для хранения которого достаточно ресурсов внутренней блочной памяти кристалла. При этом достигается высокая скорость выборки команд программы за счет использова- ния локальной шины команд ILMB. Рис. 9.6. Вариант 3 конфигурации микропроцессорной системы, проектируемой на основе ядра MicroBlaze В отличие от конфигурации 1 в конфигурации 4 (IOPB+ILMB+DOPB) отсутству- ет локальная шина данных DLMB (рис. 9.7). Шина команд и программная память ор- ганизованы так же, как и в конфигурации 1. Внешняя оперативная память и перифе- рийные модули подключаются к глобальной шине данных DOPB. Для отладки про- граммного кода может применяться дополнительный контроллер BRAM Memory
180 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Controller, обеспечивающий доступ к внутренней блочной памяти через глобальную шину данных DOPB. Данная конфигурация используется в тех случаях, когда объем разрабатываемой программы и данных превосходит емкость внутренней блочной па- мяти кристалла. Критические фрагменты программного кода записываются во внут- реннее ППЗУ, реализуемое на основе блочной памяти ПЛИС. Рис. 9.7. Вариант 4 конфигурации микропроцессорной системы, проектируемой на основе ядра MicroBlaze В конфигурации 5 (IOPB+DOPB) шины данных и команд представлены только глобальными магистралями, соответствующими спецификации ОРВ (рис. 9.8). Для хранения кода программ и данных используется внешняя память. Сопряжение памя- ти данных и периферийных модулей с микропроцессорным ядром осуществляется теми же способами, которыми оно осуществляется и в конфигурации 1. Конфигура- ции 5 применяется, как правило, при больших объемах программного кода и данных, которые не содержат критических секций. Рис. 9.8. Вариант 5 конфигурации микропроцессорной системы, проектируемой на основе ядра MicroBlaze Наиболее компактной является конфигурация 6 (ILMB+DOPB), в которой задей- ствованы только локальная шина команд ILMB и глобальная шина данных DOPB
ГЛАВА 9 181 (рис. 9.9). Программная память в данной конфигурации формируется на базе блочной памяти кристалла FPGA, доступ к которой производится по быстрой локальной шине ILMB, что обеспечивает минимальное время выборки команд. Конфигурацию 6 це- лесообразно использовать при небольшом объеме программного кода, не превосхо- дящем емкости блочной памяти ПЛИС. MIcroBiaze Рис. 9.9. Вариант 6 конфигурации микропроцессорной системы, проектируемой на основе ядра MicroBlaze 9.5. Периферийные компоненты для проектирования встраиваемых систем на основе микропроцессорных ядер семейства MicroBlaze Пакет программных средств разработки встраиваемых микропроцессорных сис- тем EDK помимо ядра MicroBlaze содержит набор компонентов периферийных мо- дулей, которые представлены в форме Intellectual Property, IP-ядер. При проектиро- вании систем на кристалле на основе микропроцессорных ядер семейства MicroBlaze разработчик может использовать следующие IP-модули: таймер счетчик (Tkner/Coimter); сторожевой таймер (WatchDog Timer); универсальный асинхронный приемник/передатчик UART (Universal Asynchro- nous Receiver/Transmitter)(UART - Lite); контроллер прерываний Interrupt Controller (INTC); контроллер стандартного интерфейса ввода/вывода (GPIO Controller); контроллер интерфейса памяти SDRAM (SDRAM Controller); контроллер интерфейса памяти DDR SDRAM (DDR SDRAM Controller); контроллер интерфейса памяти Flash Memory (Flash Memory Controller); контроллер интерфейса блочной памяти BlockRAM (BRAM Controller); * контроллер интерфейса Serial Peripheral Interface (SPI Master and Slave Bus Con- troller), соответствующего спецификации фирмы Motorola®; универсальный асинхронный приемник/передатчик UART, использующий для коммуникации JTAG-порт (JTAG UART). Все перечисленные выше IP-модули включены в состав EDK в полнофункцио- нальном варианте. Кроме того, в комплект EDK входят ознакомительные версии
182 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС (которые могут использоваться только на протяжении некоторого ограниченно- го периода времени) следующих IP-ядер: • универсальных асинхронных приемников/передатчиков UART, совместимых со стандартами UART 16550 hUART 16450 фирмы National Semiconductor®; - контроллера сетевого интерфейса Ethernet 1Gb (1Gb Ethernet Controller); • контроллеров сетевого интерфейса Ethernet Media Access Controller (EMAC) и EMAC Lite 10/100 Mbs, соответствующих спецификации IEEE Std. 802.3 Media Independent Interface; • контроллера интерфейса High Level Data Link Control (HDLC). IP-модули, представленные в виде ознакомительных версий, поставляются от- дельно как самостоятельные продукты. При этом следует учитывать, что список пол- нофункциональных IP-ядер, поставляемых в составе комплекса EDK, постоянно расширяется. Поэтому IP-компоненты, представленные ранее в ознакомительных конфигурациях, в новой версии EDK могут быть доступны в полнофункциональном варианте. С полным списком IP-ядер, предлагаемых фирмой Xilinx для проектирова- ния микропроцессорных систем на основе ПЛИС различных семейств, можно озна- комиться в соответствующей документации на WEB-странице http://www.xilinx.com. 9.6. Ограничения адресного пространства, производительности и объема памяти для микропроцессорных ядер семейства MicroBlaze В архитектуре микропроцессорного ядра MicroBlaze используется 32-разрядная шина адреса. Таким образом, адресное пространство памяти рассматриваемого мик- ропроцессорного ядра ограничивается диапазоном от 0x00000000 до OxFFFFFFFF. Доступ к памяти может осуществляться через шину Local Memory Bus (LMB) или через шину On-chip Peripheral Bus (ОРВ). Локальная шина LMB предназначена в пер- вую очередь для обеспечения высокоскоростного доступа к памяти, расположенной непосредственно на кристалле. Эта память реализуется на основе элементов блочно- го ОЗУ Block RAM (BRAM) ПЛИС семейств FPGA фирмы Xilinx. Глобальная шина ОРВ может использоваться для сопряжения ядра MicroBlaze и памяти, расположен- ной как внутри, так и вне кристалла. Кроме того, эта шина предназначена для органи- зации взаимодействия микропроцессорного ядра и периферийных устройств. Следу- ет обратить внимание на то, что подключение памяти, реализуемой на основе внут- ренних ресурсов ПЛИС, через шину ОРВ приводит к снижению производительности системы по сравнению с вариантом, когда интерфейс между микропроцессорным ядром и внутренней памятью строится на основе локальной шины LMB. Выполнение операций записи и чтения данных из блочной памяти ПЛИС при использовании ин- терфейса шины LMB занимает два машинных цикла. Если сопряжение микропроцес- сорного ядра с памятью, расположенной непосредственно на кристалле, осуществля- ется по шине ОРВ, то для выполнения операции записи данных в память требуется 3 машинных цикла, а для операции чтения - 4 машинных цикла. Время доступа к внешней памяти (по отношению к ПЛИС) во многом зависит от параметров микро- схем, применяемых для ее реализации. В настоящее время в большинстве случаев время доступа к памяти, расположенной вне кристалла, составляет от 5 до 7 машин- ных циклов.
ГЛАВА 9 183 Суммарный объем памяти, реализуемой непосредственно на кристалле, ограни- чивается соответствующими физическими ресурсами используемой ПЛИС. Макси- мальное значение этого параметра зависит от семейства и типа кристалла FPGA [2], выбранного для реализации проектируемой микропроцессорной системы. 9.7. Распределение адресного пространства памяти микропроцессорных ядер семейства MicroBlaze Типовая структура распределения адресного пространства памяти микропроцес- сорных ядер семейства MicroBlaze показана на рис. 9.10. Начальной (стартовой) по- зицией адресного пространства памяти является нулевое значение (0x00000000). Ко- нечная граница адресного пространства памяти микропроцессорных ядер семейства MicroBlaze зависит от конфигурации проектируемой системы, но не может превы- шать максимального значения (OxFFFFFFFF). В начальной секции адресного пространства располагается диапазон адресов, за- резервированный для памяти, которая расположена непосредственно на кристалле и сопряжена с микропроцессорным ядром по локальной шине LMB. Следующий диа- пазон адресов предназначен для внутренней памяти ПЛИС, доступ к которой осуще- ствляется по шине ОРВ. Далее, в направлении увеличения значения адреса, следует диапазон адресов внешней памяти, подключенной к шине ОРВ. В конечной секции адресного пространства памяти обычно находится диапазон адресов периферийных модулей проектируемой микропроцессорной системы. Между перечисленными диа- пазонами адресов в общем случае могут присутствовать неиспользуемые интервалы адресного пространства. Диапазон адресов памяти, подключенной к шине LMB Начальный адрес 0x00000000 Диапазон адресов памяти, расположенной на кристалле и подключенной к шине ОРВ Диапазон адресов внешней памяти, подключенной к шине ОРВ Диапазон адресов периферийных устройств Конечный адрес максимальное значение OxFFFFFFFF Рис. 9.10. Карта типового распределения адресного пространства памяти микропроцессорных ядер семейства MicroBlaze Карта фактического распределения адресного пространства памяти определяется в спецификации аппаратной части проектируемой микропроцессорной системы MHS (Microprocessor Hardware Specification). В файле MHS указывается диапазон адресов для каждого используемого компонента разрабатываемой системы, в том числе для
184 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС блочной памяти ПЛИС В RAM, подключаемой к шинам LMB и ОРВ, внешней памяти и периферийных модулей. Информация о необходимом диапазоне адресов для IP- ядер, входящих в комплект пакета Xilinx EDK, содержится в соответствующей доку- ментации. В спецификации аппаратной части разрабатываемой микропроцессорной системы MHS задается базовое и максимальное значение адреса для каждого приме- няемого IP-компонента. Часть адресного пространства памяти микропроцессорных ядер семейства MicroBlaze в диапазоне от 0x00000000 по 0x00000028 зарезервирована для выполне- ния специальных функций. В частности, в ячейках памяти этого диапазона содер- жится информация об адресах переходов, выполняемых при сбросе микропроцессор- ного ядра, обработке прерываний и исключений. При включении питания или посту- плении сигнала сброса в микропроцессорных ядрах семейства MicroBlaze управление автоматически передается по адресу 0x00000000. При появлении запроса прерывания осуществляется переход по адресу 0x00000010. В случае возникновения исключений автоматически производится передача управления по адресу 0x00000008. 9.8. Размещение исполняемого кода программ в памяти микропроцессорных ядер семейства MicroBlaze Адресное пространство памяти микропроцессорных ядер семейства MicroBlaze можно условно разбить на две части: системную область и область, используемую прикладными программами. Под системную область, как правило, отводится диапа- зон адресного пространства, начинающийся с нулевого значения адреса (0x00000000). Использование этой части памяти определяется выбранным режимом исполнения прикладной программы. Микропроцессорные ядра семейства MicroBlaze поддерживают несколько режимов (сценариев) выполнения прикладных программ. Каждому из этих сценариев соответствует определенная схема размещения программ в адресном пространстве памяти. Первый вариант сценария используется для выполнения прикладных программ, написанных на языках высокого уровня C/C++, которые не требуют поддержки от- ладки. В этом случае в процессе генерации исполняемого кода компоновщик присое- диняет к объектному файлу основной программы системный файл crtO.o. Исполняе- мый код, соответствующий данному системному файлу, загружается в системную область памяти начиная с нулевого адреса. Исполняемый код прикладной программы располагается непосредственно вслед за кодом файла crtO.o. В более наглядной фор- ме данный способ размещения прикладной программы в адресном пространстве па- мяти микропроцессорных ядер семейства MicroBlaze поясняет рис. 9.11, а. Второй вариант сценария выполнения прикладных программ применяется в слу- чае, когда необходимо обеспечить поддержку отладочных средств Xilinx Micropro- cessor Debugger (XMD). Для этого в системную область памяти микропроцессорного ядра MicroBlaze должен быть загружен соответствующий модуль xmdstub. Данный модуль располагается в системной области памяти начиная с нулевого адреса (0x00000000). При этом компоновщик в процессе формирования исполняемого кода присоединяет к объектному файлу основной программы системный файл crtl.o. Сге- нерированный исполняемый код прикладной программы, включающий в себя файл crtl.o, размещается в области памяти, которая начинается с фиксированного значе- ния адреса. Для рассматриваемого варианта сценария в качестве значения этого адре- са, установленного по умолчанию, используется 0x00000800. Рис. 9.11, б иллюстри-
ГЛАВА 9 185 рует размещение исполняемого кода программных модулей в памяти микропроцес- сорных ядер семейства MicroBlaze, соответствующее второму варианту сценария. а б Рис. 9.11. Варианты размещения исполняемого кода программ в адресном пространстве памяти микропроцессорных ядер семейства MicroBlaze Для того чтобы сформировать объектный код разрабатываемой прикладной про- граммы, соответствующий одному из рассмотренных выше сценариев выполнения, сле- дует воспользоваться специальными параметрами компилятора. Параметр -xl-mode- executable применяется для компиляции прикладных программ, не требующих при вы- полнении поддержки средств отладки. Параметр -xl-mode-xmdstub применяется в процес- се компиляции программ, которые должны выполняться в режиме отладки. 9.9. Организация хранения данных в памяти и регистрах общего назначения микропроцессорных ядер семейства MicroBlaze Микропроцессорные ядра семейства MicroBlaze предусматривают 3 формата за- писи и извлечения данных из памяти: в виде 32-разрядных (полных) слов, 16-разряд- ных слов (полуслов) и 8-разрядных слов (побайтово). В процессе разработки про- грамм на языке ассемблера или языках высокого уровня C/C++, а также при создании описаний модулей микропроцессорной системы с использованием языков высокого уровня VHDL и Verilog необходимо располагать информацией о способе нумерации битов данных, передаваемых по шинам и записываемых в регистры общего назначе- ния, и порядке размещения байтов, составляющих слово, в адресном пространстве памяти. В архитектуре микропроцессорных ядер семейства MicroBlaze используется сле- дующее соглашение о нумерации разрядов шин и регистров. Старший разряд (стар- ший значащий бит) MSB (most significant bit) имеет нулевой порядковый номер. Со- ответственно младший разряд (младший значащий бит) LSB (least significant bit) при 32-разрядной архитектуре шин и регистров обозначается порядковым номером 31. При этом следует учитывать, что ряд интерфейсных ядер, предлагаемых фирмой Xilinx, использует противоположный способ нумерации битов данных, при котором нулевой порядковый номер соответствует младшему разряду. В качестве примера ядер, использующих альтернативный способ нумерации битов данных, можно при-
186 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС вести модуль интерфейса шины PCI- PCI Core. Данный модуль может применяться в виде компонента, который включается в состав встраиваемых микропроцессорных систем, проектируемых на основе ядра MicroBlaze. В микропроцессорных ядрах семейства MicroBlaze байты, составляющие слово данных, располагаются в адресном пространстве памяти таким образом, при котором старшему значащему байту слова соответствует меньшее (начальное) значение адре- са, а младшему байту - большее. При этом нумерация байтов в слове начинается со старшего значащего байта. Иными словами, байты слова данных размещаются в ад- ресном пространстве памяти в порядке убывания значимости. Данный способ орга- низации хранения данных в памяти и регистрах в англоязычной литературе обозна- чается термином Big-endian. Табл. 9.1-9.3 в наглядной форме поясняют порядок нумерации битов и байтов в структуре слов данных различной длины и способ их организации в адресном про- странстве памяти, которые применяются в микропроцессорных ядрах семейства MicroBlaze. Таблица 9.1. Организация 32-разрядных слов данных в адресном пространстве памяти и регистрах микропроцессорных ядер семейства MicroBlaze Ддрес байта п n+1 n+2 n+3 Номер байта в слове 0 1 2 3 Порядок следования байтов в слове Старший байт most significant byte (MSByte) Младший байт least significant byte (LSByte) Номер бита в слове 0 31 Порядок следования битов в слове Старший бит Младший бит most significant bit (MSB) least significant bit (LSB) Некоторые компоненты встраиваемых микропроцессорных систем могут исполь- зовать обратный порядок размещения байтов слова данных в адресном пространстве памяти, при котором младший (начальный) адрес соответствует младшему значаще- му байту. Такой способ организации данных в адресном пространстве памяти обо- значается термином Little-endian. Информация о типе организации данных для при- меняемого компонента содержится в документации, описывающей этот компонент. Для того чтобы применять компоненты, использующие организацию данных Little- endian, в системах, основанных на микропроцессорных ядрах семейства MicroBlaze, в состав VHDL- или Verilog-описаний необходимо включить секцию кода, в которой выполняется преобразование структуры слов данных. Таблица 9.2. Организация 16-разрядных слов данных в адресном пространстве памяти и в регистрах микропроцессорных ядер семейства MicroBlaze Адрес байта п n+1 Номер байта в слове 0 1 Порядок следования байтов в слове Старший байт most significant byte (MSByte) Младший байт least significant byte (LSByte) Номер бита в слове Olli I I I I I I I I I 15 Порядок следования битов в слове Старший бит Младший бит most significant bit (MSB) least significant bit (LSB)
ГЛАВА 9 187 Таблица 9.3. Организация 8-разрядных слов данных в адресном пространстве памяти и в регистрах микропроцессорных ядер семейства MicroBlaze Адрес байта п Номер байта в слове 0 Номер бита в слове 0 I I I I I I _ I7 Порядок следования битов в слове Старший бит Младший бит most significant bit (MSB) least significant bit (LSB) В качестве примера ниже приводится VHDL-описание модуля блочной памяти BRAM, доступ к которой осуществляется через шину ОРВ. Модуль блочной памяти строится на основе базовых элементов двухпортового ОЗУ, информационная емкость которого составляет 16 384 бита (16 Кбит). Каждый порт блочной памяти имеет ор- ганизацию 2048 слов х 8 разрядов с контролем по четности. Таким образом, для соз- дания 32-разрядного модуля блочной памяти необходимо кратное четырем число ба- зовых элементов. Базовый элемент блочного ОЗУ представлен в виде компонента RAMB16JS9JS9. Шина ОРВ предполагает использование организации данных Big-endian, а в ком- понентах базовых элементов блочной памяти применяется Little-endian. Декларация объекта OPB_BRAM, который описывает модуль блочной памяти, подключенной к шине ОРВ, выглядит следующим образом: --Interface Between BRAM and MicroBlaze library IEEE; use IEEE.std_logic_1164.all; entity OPB_BRAM is generic ( C_BASEADDR: std_iogic_vector(0 to 31) := X»BOOO_OOOO»; C_NO_BRAMS : natural := 4; -- Can be 4,8,16,32 only C_VIRTEXII: boolean :=true ); port ( - Global signals OPB_Clk: in stdjogic; OPB_Rst: in stdjogic; - OPB signals OPB_ABus: in std_logic_vector(0 to 31); OPB_BE: in std_logic_vector(0 to 3); OPB.RNW: in stdjogic; OPB_select: in stdjogic; OPB.seqAddr: in stdjogic; OPBJDBus: in std_logic_vector(0 to 31); OPB_BRAM_DBus: out std_iogic_vector(0 to 31); OPB_BRAM_errAck: out stdjogic; OPB_BRAM_retry: out stdjogic; OPB_BRAM_toutSup: out stdjogic; OPB_BRAM_xferAck: out stdjogic; - - OPBJ3RAM signals (other port) BRAM_Clk: in stdjogic;
188 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС BRAM.Addr: in std_logic_vector(0 to 31); BRAM.WE: in std_logic_vector(0 to 3); BRAM.Write.Data: in stdjogic_vector(0 to 31); BRAM.Read.Data: out stdjogic_vector(0 to 31) ); end entity OPB.BRAM; Кроме собственно выражений декларации, описывающих интерфейс и парамет- ры объекта OPBBRAM, в приведенном фрагменте представлены также ссылки на используемую библиотеку и пакет. Объем создаваемого модуля блочной памяти (в виде числа базовых элементов) определяется с помощью параметра C_NO_BRAMS. Параметр CJASEADDR предназначен для установки значения базового адреса. Архитектурное тело объекта OPBBRAM, представляющего модуль блочной па- мяти, который предназначен для сопряжения с микропроцессорным ядром через ши- ну ОРВ, содержит структурное описание этого объекта на языке VHDL. В состав ар- хитектурного тела описания объекта OPB_BRAM входят 4 раздела. В первом разделе приводится декларация компонента RAMB16_S9_S9, представляющего двухпортовое ОЗУ, используемое в качестве базового элемента для построения модуля блочной памяти. Этот раздел содержит следующий VHDL-код: architecture IMP of OPB.BRAM is - BRAM Component Declaration (little-endian) component RAMB16.S9.S9 port ( DIA: in stdjogic.vector (7 downto 0); DIB: in stdjogic.vector (7 downto 0); DIPA: in stdjogic.vector (0 downto 0); DIPB: in stdjogic.vector (0 downto 0); ENA: in std.ulogic; ENB: in std.ulogic; WEA: in std.ulogic; WEB: in std.ulogic: SSRA: in std.ulogic; SSRB: in std.ulogic; CLKA: in std.ulogic; CLKB: in std.ulogic: ADDRA: in stdjogic.vector (10 downto 0); ADDRB: in stdjogic.vector (10 downto 0); DOA: out stdjogic.vector (7 downto 0); DOB: out stdjogic.vector (7 downto 0); DOPA: out stdjogic.vector (0 downto 0); DOPB: out stdjogic.vector (0 downto 0) ); end component; Второй раздел включает в себя стандартные конструкции, используемые для декларации внутренних сигналов и переменных. Текст данного раздела не представ- лен в настоящей главе. Вся необходимая информация о типе используемых внутрен- них сигналов и переменных приводится далее в виде комментариев.
ГЛАВА 9 189 Третий раздел архитектурного тела описания объекта OPBBRAM содержит по- следовательность выражений, выполняющих преобразование структуры слов данных из формата Little-endian в формат Big-endian. Содержимое этого раздела выглядит следующим образом: --Swap BRAM Little-endian Data to Big-endian BEJo_LE: for I in 0 to 31 generate opb_dbusje(l) <= OPB_DBus(31-l); bram_write_dataje(l) <= BRAMJ/Vrite_Data(31-l); BRAM_Read_Data(l) <= bram_Read_Data_LE(31-l); opb_ABus_LE(l) <= OPB_ABus(31-l); bram_Addr_LE(l) <= BRAM_Addr(31-l); end generate BEJo_LE; В четвертом разделе архитектурного тела описания объекта OPB_BRAM пред- ставлены выражения, предназначенные для создания экземпляров компонентов базо- вых элементов ОЗУ, образующих модуль блочной памяти. Этот раздел содержит следующий VHDL-код: --BRAM Instantiation AILBrams: for I in 0 to C_NO_BRAMS-1 generate By_8: if (CJMO_BRAMS - 4) generate RAMB16_S9_S9J: RAMB16_S9_S9 port map ( DI A => opb_DBUS_LE(((i+1)*8-1) downto Г8), --[in stdjogic j/ector(7 downto 0)] DIB =>bram_Write_Data_LE(((l+1)*8)-1 downto Г8), --[in std_logic_vector (7 downto 0)] DIPA => nullj, - [in std_logic_vector (7 downto 0)] DIPB => nullj - [in std_logic_vector (7 downto 0)j ENA =>T, -- [in stdjjlogic] ENB => 'Г, -- [in stdjjlogic] WEA => opb_WE(l), - [in std_ulogic] WEB => BRAM_WE(I), -- [in std_ulogic] SSRA => 'O', - [in std_ulogic] SSRB => “O', - [in stdjjlogic] CLKA => OPB_Clk, -- [in stdjjlogic] CLKB => BRAM_Clk, -- [in std_ulogic] ADDRA => opb_ABusJ_E(12 downto 2), -- [in stdjogic_vector (10 downto 0)] ADDRB => bram_Addr_LE(12 downto 2), -- [in stdjogic j/ector (10 downto 0)] DOA=>opb_BRAM_DBus_LEJ(((l+1)*8-1 (downto l*8),~[out stdjogicj/ector(7 downto 0)] DOB ->bram_Read_Data_LE(((l+1)*8-1) downto Г8),-[out stdjogic_vector(7 downto 0)] DOPA => open, -- [out stdjogicj/ector (0 downto 0)] DOPB -> open -- [out stdjogic_vector (0 downto 0)] ); end generate By J; В представленном разделе все выражения, в которых описывается соответствие портов компонентов и используемых внутренних сигналов и переменных, сопровож- даются комментариями, в которых указывается тип этих сигналов и переменных. На этом завершается описание архитектурных особенностей микропроцессорных ядер семейства MicroBlaze. В следующей главе будет представлена система команд, поддерживаемых ядрами данного семейства.
10. СИСТЕМА КОМАНД МИКРОПРОЦЕССОРНЫХ ЯДЕР СЕМЕЙСТВА MICROBLAZE В настоящей главе дается подробное описание системы команд микропроцессор- ных ядер семейства MicroBlaze. Рассмотрена классификация поддерживаемых инст- рукций по функциональному признаку и по типам формата. Для каждой команды приведены мнемоническая форма записи, формат в табличном представлении и даны краткие пояснения выполняемой операции. 10.1. Общая характеристика команд, поддерживаемых микропроцессорными ядрами семейства MicroBlaze В системе команд, поддерживаемых микропроцессорными ядрами семейства MicroBlaze, при классификации по функциональному признаку можно выделить 10 групп инструкций. К первой группе относятся инструкции, предназначенные для выполнения основных арифметических операций. В эту группу входят команды сло- жения, вычитания, умножения, деления и сравнения двух 32-разрядных операндов. Значение одного из операндов, участвующих в арифметических операциях, содер- жится в регистре общего назначения, номер которого указан в команде. В качестве второго операнда может использоваться значение, заданное непосредственно в коде команды, или содержимое другого регистра общего назначения. Вторую группу образуют логические инструкции. Эти команды выполняют по- разрядные операции «Логическое И» (поразрядное умножение), «Логическое ИЛИ» (поразрядное сложение), «Исключающее ИЛИ». В качестве операндов могут высту- пать значения содержимого двух регистров общего назначения, а также содержимое любого регистра общего назначения и константа, указанная в тексте команды. В третью группу входят команды сдвига. Они позволяют реализовать операции арифметического или циклического сдвига данных, записанных в регистре общего назначения, номер которого указан в тексте команды. В этой группе предусмотрены инструкции, предназначенные для осуществления сдвига данных как в сторону младшего разряда, так и в направлении старшего разряда. В процессе выполнения одной команды сдвиг может производиться как на один, так и на несколько разрядов. Операции циклического и арифметического сдвига данных могут выполняться с ис- пользованием разряда переноса регистра статуса или без его участия. Четвертую группу составляют инструкции преобразования типов данных. Ко- манды этой группы предназначены для реформирования данных различной длины до 32-разрядного значения. Как правило, для этих целей используется операция знако- вого расширения. Пятая группа включает в себя команды передачи данных. В нее входят инструк- ции, используемые для пересылки данных различной длины из памяти в регистры общего назначения и, наоборот, из регистра в ячейки памяти. Передача данных мо- жет осуществляться в форме 32-разрядных значений (слов), 16-разрядных значений (полуслов) и 8-разрядных значений (байтов). Шестая группа объединяет инструкции, предназначенные для управления после- довательностью выполнения команд в программе. К этой группе относятся инструк- ции переходов, а также команды возврата из подпрограмм и процедур обслуживания
ГЛАВА 10 191 прерываний. Инструкции передачи управления в программе представлены как в без- условной форме, так и в условных вариантах (т. е. исполнение команды возможно только при выполнении определенного условия). В седьмую группу входят инструкции ввода/вывода. Эти команды предназна- чены для организации обмена данными между регистрами общего назначения и входными/выходными интерфейсами, соответствующими спецификации FSL (Fast Simplex Link). Для каждого режима чтения данных, поступающих через входной интерфейс FSL, предусмотрены соответствующие версии инструкций, которые используются для записи считанной информации в выбранный регистр общего назначения. Несколько вариантов команд вывода позволяют реализовать различные режимы передачи данных из любого регистра общего назначения че- рез выходной интерфейс FSL. Восьмую группу образуют специальные команды. Эти инструкции выполняют операции чтения информации из регистра статуса и записи ее в регистр общего на- значения, а также записи содержимого выбранного регистра общего назначения в ре- гистр состояния. Девятая группа объединяет команды, необходимые для работы с кеш-памятью. В нее входят инструкции записи в кеш-память данных и в кеш-память команд. К десятой группе относятся команды, используемые для поразрядного сравнения двух операндов. Последняя группа включает в себя команды, предназначенные для выполнения операций с плавающей запятой. Данная группа инструкций поддерживается только последней версией микропроцессорных ядер семейства MicroBlaze. 10.2. Форматы команд, поддерживаемых микропроцессорными ядрами семейства MicroBlaze В системе команд микропроцессорных ядер семейства MicroBlaze используется в основном два типа формата инструкций. Структура этих вариантов форматов команд показана на рис. 10.1. Длина всех инструкций, независимо от типа формата, состав- ляет 32 двоичных разряда. Тип А Поле кода ЙЙМВвЖй НОМвра длязаписи результата ввНйИй Поле номера регистра, содержащего второй операнд Поле дополнительных ; параметров * чЬл* 5 * Г' 0 11 | 21 314 15 б|/|в|э|ю 11|12|1Э|14|15 16117|18|19120 21 22 23 24|25 2б|27|28 29|30|31 ь&разряда Тип В номера реГИСТра длязаписи результата ’SSF верОЙй! Поле константы, указываемой непосредственно в инструкции V",* Вж 0 111 213 |4 |5 6171819 |ю 1б|17|18|19|20 |21|22|23|24|25|2б|27|28|29|30|31 Рис. 10.1. Основные варианты форматов команд, поддерживаемых микропроцессорными ядрами семейства MicroBlaze
192 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Команды, которые относятся к первому типу формата (типу А), включают в себя 5 полей. Первые 4 поля инструкции являются основными, а последнее - вспомога- тельным. Основными полями инструкций типа А являются: поле кода операции; поле номера регистра общего назначения, предназначенного для записи резуль- тата выполняемой операции; поле номера регистра, содержащего значение первого операнда; поле номера регистра, содержащего значение второго операнда. Длина поля кода операции составляет 5 двоичных разрядов. Поля команды, ис- пользуемые для записи номеров регистров, содержат по 5 разрядов. Вспомогательное поле, длина которого составляет 11 разрядов, может использоваться для указания до- полнительных параметров команды, например, типа операндов. Если дополнитель- ные параметры в инструкции не требуются, то это поле заполняется нулевыми разря- дами. Команды, принадлежащие ко второму типу формата (типу В), состоят из четырех полей, первые 3 из которых выполняют те же функции и имеют ту же длину, что и в инструкциях типа А: поле кода операции; поле номера регистра, предназначен