Text
                    В. Ю. Зотов

В. Ю. Зотов Проектирование встраиваемых микроврвцессорных систем на основе ПЛИС фирмы Я 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 из которых выполняют те же функции и имеют ту же длину, что и в инструкциях типа А: поле кода операции; поле номера регистра, предназначенного для записи результата выполняемой операции; - поле номера регистра, содержащего значение первого операнда; поле значения второго операнда, указываемого непосредственно в инструкции. Как видно из рис. 10.1, формат команд, относящихся к типу В, позволяет указы- вать непосредственно в составе инструкции значение 16-разрядной константы. При этом в качестве операнда обычно используется результат знакового расширения это- го значения до 32-разрядного слова. Для того чтобы получить непосредственное 32-разрядное значение операнда, в системе команд микропроцессорных ядер семей- ства MicroBlaze предусмотрена специальная инструкция расширения IMM. Эта ко- манда позволяет использовать в последующей инструкции типа В 32-разрядное зна- чение константы. 10.3. Группа арифметических команд Арифметические команды микропроцессорных ядер семейства MicroBlaze обес- печивают выполнение операций сложения, вычитания, умножения, деления и срав- нения над двумя 32-разрядными операндами. Первым параметром в арифметической команде всегда является номер одного из регистров общего назначения, который ис- пользуется для записи результата выполняемой операции. В качестве номера регист- ра может употребляться любое число в диапазоне от 1 до 31. Второй параметр опре- деляет номер регистра общего назначения, который содержит значение первого опе- ранда. В роли второго операнда может выступать константа, значение которой
ГЛАВА 10 193 задается непосредственно в коде команды, или содержимое любого регистра общего назначения. Таким образом, третий параметр арифметической команды определяет значение константы или номер регистра, содержимое которого используется в каче- стве второго операнда. В системе команд микропроцессорных ядер семейства MicroBlaze представлены 8 вариантов инструкций, предназначенных для выполнения операций сложения це- лочисленных операндов. Для вычисления суммы двух 32-разрядных слагаемых без учета переноса используются инструкции ADD, ADDK, ADDI и ADDIK, форматы ко- торых представлены в табл. 10.1. Команды ADD Rd,Ra,Rb и ADDK Rd,Ra,Rb выполняют сложение содержимого двух регистров общего назначения с номерами а и b без учета переноса. Инструкции ADDI Rd,Ra, Imm и ADDIK Rd,Ra,Imm предназначены для суммирования без учета переноса содержимого регистра общего назначения с номером а и значения, которое является результатом знакового расширения 16-разрядной константы Imm до 32- разрядного слова. Если инструкциям ADDI или ADDIK предшествует команда IMM, то указанное в ней значение используется в качестве 16 старших разрядов второго слагаемого. Значение суммы, полученное в результате выполнения рассмотренных команд, записывается в регистр с номером d. После исполнения команд сложения ADD и ADDI флаг переноса/заема Carry Flag (29-й разряд регистра статуса) устанав- ливается в состояние высокого логического уровня в том случае, если в результате выполненной операции происходит перенос из самого старшего разряда. В против- ном случае этот флаг переключается в сброшенное состояние (низкого логического уровня). В отличие от команд ADD и ADDI инструкции ADDK и ADDIK позволяют реализовать аналогичные операции, не изменяя при этом состояние флага перено- са/заема Carry Flag. Рис. 10.2 в наглядной форме поясняет выполнение операций сложения без учета переноса. ___ Нет переноса _ CARRY М - 0 Flag KJ Есть перенос Регистр Rd lilhlhillliillliililllliillilll ___________Регистр Ra [ADD Rd^Ra,Rb| ^__2^ишишншииипш+uiLiiiiniiLLi 111111! i и 111! m | ADDK Rd,Ra^Rb] _ Нет переноса. CARRY ra ---------------0 Flag BUI Есть перенос Регистр Rd ПТГПГГТГПП11111Н11111111НН ____________Регистр Ra lADDI Rd;Ra,lrnm1 |ADDIK Rd,Ra,lmm] Регистр Rb Константа, указанная в команде _____________, Ю Иб rrmTfflTTniTni 1111H111111 fi i+шп.! 11111111 ш ш i ш шееш ю Рис. 10.2. Выполнение операций сложения двух операндов без учета переноса Сложение двух операндов с учетом переноса, полученного при выполнении пре- дыдущей операции, производится с помощью команд ADDC, ADDKC, ADDIC 1&ADDIKC, форматы которых приведены в табл. 10.2. 7—2062
Таблица 10.1. Форматы команд сложения двух операндов без у чета переноса Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 0 0 d d d d d а а а а а ь ь ь b b 0 0 0 0 0 0 0 0 0 0 0 ADD Rd, Ra, Rb Сложение содержимого регистров Ra и Rb без учета переноса и запись резуль- тата в регистр Rd 0 0 0 0 d d d d d а а а а а b ь ь b b 0 0 0 0 0 0 0 0 0 0 0 ADDK Rd, Ra, Rb Сложение содержимого регистров Ra и Rb без учета переноса с записью ре- зультата в регистр Rd, без изменения флага переноса 0 2 3 4 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции Поле ном первог регист 0 pa Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 0 1 0 0 0 d d d d d а а а а а ADDIRd Ra mm Сложение содержимого регистра Ra и знакового расширения константы Imm без учета переноса, с записью результа- та в регистр Rd 0 0 0 0 d d d d d а а а а а ADDIK Rd Ra, Imm Сложение содержимого регистра Ra и знакового расширения константы Imm без учета переноса, с записью результа- та в регистр Rd без изменения флага переноса 0 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
Таблица 10.2. Форматы команд сложения двух операндов с учетом переноса Поле кода операции III s S.S | О S Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника выполняемая операция 0 0 0 0 1 0 d d d d d а а а а а ь ь ь Ь b 0 0 0 0 0 0 0 0 0 0 0 ADDC Rd, Ra, Rb Сложение содержимого регистров Ra и Rb с учетом переноса и запись резуль- тата в регистр Rd 0 0 I 1 0 d d d d d а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 ADDKC Rd, Ra, Rb Сложение содержимого регистров Ra и Rb с учетом переноса, с записью ре- зультата в регистр Rd без изменения флага переноса 3 4 5 6 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 I 0 1 0 d d d. d d а а а а а ADDIC Rd, Ra, Сложение содержимого регистра Ra и Imm внаковоГО расширения константы Imm с рчетом переноса, с записью результата в регистр Rd 0 0 0 d d d d а а а а ADDIKC Rd, Ra,Сложение содержимого регистра Ra и Imm знакового расширения константы Imm с г/четом переноса, с записью результата в регистр Rd, без изменения флага пе |реноса 0_ 2 3 4 7 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды 195
196 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Команды ADDC Rd,Ra,Rb и ADDKC Rd,Ra,Rb используются для вычисления суммы содержимого двух регистров общего назначения с номерами а и b с учетом состояния флага переноса перед выполнением этой операции. Команды ADDIC Rd,Ra,Imm и ADDIKC Rd,Ra,Imm суммируют значение содержимого регистра с номе- ром а с результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Чтобы использовать в каче- стве второго слагаемого 32-разрядную константу, следует перед командами ADDIC или ADDIKC поместить инструкцию IMM. Для записи результата вычислений, вы- полняемых с помощью команд ADDC, ADDKC, ADDIC и ADDIKC, используется ре- гистр общего назначения с номером d. Процесс выполнения команд сложения двух операндов с учетом переноса отображен на рис. 10.3. ___ Нет переноса _ CARRY ЦД ---------*-----0 Flag Ш Есть перенос Регистр Rd шшпшвшшши ____________Регистр Ra [ADDC Rd,Ra,Rb| Регистр Rb CARRY Flag [ADDKC Rd,RajRb] __ Нет переноса CARRY И ------------0 Flag И Есть перенос Регистр Rd [ЛДИШИЕИННВИЗЗИ ____________ [ADDIKC Rd,Ra,Imm | ____________Регистр Ra | ADDIC Rd,Ra,Imm | liiiiiiiiiiiiiiiMiiiiiiiiimiiil Константа, указанная i0 в команде CARRY ,—--л----yFlag Ю 115 _ Mil...Ill..IIHIHI... . . Puc. 10.3. Осуществление операций сложения двух операндов с учетом переноса При выполнении команд ADDC и ADDIC итоговое состояние флага перено- са/заема Carry Flag в регистре статуса зависит от полученного результата. При воз- никновении в результате операции сложения переноса из самого старшего разряда этот флаг переключается в установленное состояние (высокого логического уровня). При отсутствии переноса из самого старшего разряда в итоговой сумме флаг перено- са/заема сбрасывается в состояние низкого логического уровня. Инструкции ADDKC и ADDIKC выполняют операции сложения двух операндов с учетом переноса, сохра- няя при этом исходное состояние флага переноса/заема Carry Flag. Для выполнения операций целочисленного вычитания предусмотрены 8 вариан- тов инструкций. Вычисление разности двух операндов без учета заема выполняется с помощью инструкций RSUB, RSUBK, RSUBI и RSUBIK, форматы которых представ- лены в табл. 10.3. Для получения разности содержимого двух регистров общего назначения с но- мерами b и а следует использовать команды RSUB Rd,Ra,Rb и RSUBK Rd,Ra,Rb. Ко- манды RSUBI Rd,Ra,Imm и RSUBIK Rd,Ra,Imm позволяют вычесть значение содер- жимого регистра с номером а из значения, полученного в результате знакового рас- ширения константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Если командам RSUBI или RSUBIK предшествует инструкция IMM, то в каче- стве первого операнда используется 32-разрядное слово, состоящее из двух 16-разр- ядных значений, указанных в этих командах. При использовании рассмотренных
ГЛАВА 10 197 инструкций вычитания следует обратить внимание на то, что результаты выполнения команд RSUBK и RSUBIK, в отличие от инструкций RSUB и RSUBI, не оказывают влияния на состояние флага переноса/заема CARRY Flag. Рис. 10.4 демонстрирует выполнение команд вычитания без учета заема. /ч А— Есть заем п CARRY ВЦ —Г 0 Flag И Нет заема 1 Регистр Rd Регистр Ra ______________Регистр Rb |RSUB Rd.Ra^Rb] . z ШЛИ । и I и 111111111111111111111 - та I RSUBK Rd.Ra^b] ___ Есть заем * CARRY ИЛ *—0 Flag IB -wl Нет заема 1 Регистр Rd ________________ Константа, RSUBI Rd,RaJmrn| указанная 10______________в команде Регистр Ra (---------------V--------------\ 10 116 :Г1,Гт,11111111111Ш11111111.11Н1 - | RSUBIK Rd,Ra,Imm | Puc. 10.4. Вычисление разности двух операндов без учета заема Для вычисления разности двух операндов с учетом значения заема, образовавше- гося при выполнении предыдущей операции, предназначены инструкции RSUBC, RSUBKC, RSUBIC и RSUBIKC. Информация о форматах этих команд содержится в табл. 10.4. Команды RSUBIC Rd,Ra,Imm и RSUBIKC Rd,Ra,Imm выполняют вычитание значений содержимого регистра с номером а с участием флага заема из операнда, который является результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Для ис- пользования в этих командах в качестве первого операнда 32-разрядной констан- ты следует непосредственно перед ними вставить инструкцию IMM, которая оп- ределяет старшие 16 разрядов слова. Вычисление разности содержимого двух ре- гистров общего назначения с номерами b и а с участием значения флага заема производится с помощью команд RSUBC Rd,Ra,Rb и RSUBKC Rd,Ra,Rb. Для запи- си результата вычислений, выполняемых с помощью команд вычитания, исполь- зуется регистр общего назначения с номером d, который указывается в качестве первого параметра этих инструкций. После выполнения команд вычитания с учетом заема RSUBC и RSUBIC состоя- ние флага переноса/заема регистра статуса изменяется в зависимости от полученного результата. Инструкции RSUBKC и RSUBIKC применяются в том случае, когда при выполнении операции вычитания с учетом заема необходимо сохранить исходное со- стояние флага переноса/заема. Рис. 10.5 иллюстрирует выполнение операций вычи- тания с учетом заема.
Таблица 10.3. Форматы команд вычитания двух операндов без учета заема Поле кода операции П оле номера первого регистра Поле номера второго регистра Л оле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 0 0 1 d d d d d а а а а а Ь ь ь b ь 0 0 0 0 0 0 0 0 0 0 0 RSUB Rd, Ва]Вычитание содержимого регистра Ra из содер- Rb (жимого регистра Rb без учета заема и запись результата в регистр Rd 0 0 0 1 0 1 d d d d d а а а а а ь ь Ь ь ь 0 0 0 0 0 0 0 0 0 0 0 RSUBK Rd, |Вычитание содержимого регистра Ra из содер- Ra, Rd ркимого регистра Rb без учета заема, с записью результата в регистр Rd, без изменения флага (переноса /заема 2 5 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции П оле номера первого регистра П оле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 1 0 0 d d d d d а а а а а RSUBI Rd, Ra, Imm Зычитание содержимого регистра Ra из знако- вого расширения константы Imm без учета за- ема и запись результата в регистр Rd 0 1 1 0 d d d d d а а а а а RSUBIK Rd, Ra, Imm Зычитание содержимого регистра Ra из знако- вого расширения константы Imm без учета за- ема, с записью результата в регистр Rd, без изменения флага переноса 0 4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
Таблица 10.4. Форматы команд вычитания двух операндов с учетом заема Попе кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 0 I 1 d d d d d а а а а а ь ь b ь ь 0 0 0 0 0 0 0 0 0 0 0 RSUBC Rd, Ra, Rb Зычитание содержимого регистра Ra из содержимого регистра Rb с учетом заема г запись результата в регистр Rd 0 0 0 1 1 d d d d d а а а а а ь ь Ь b ь 0 0 0 0 0 0 0 0 0 0 0 RSUBKC Rd, Ra, Rb ВычитанйесодержиМого регистра Ra из содержимого регистра Rb с учетом заема, с записью результата в регистр Rd, без изменения флага переноса 3 4 5 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции Поле номера первого регистра Поле номера второго регистра Попе значения константы Мнемоника Выполняемая операция 0 0 1 0 1 । д d d d d а а а а а i 1 1 1 1 1 1 1 1 1 1 1 1 RSUBIC Rd, Ra, Imm Зычитание содержимого регистра Ra из знакового расширения константы 1mm с учетом заема и запись результата в ре- гистр Rd 0 0 1 I 1 d d d d d а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 RSUBIKC Rd, Ra, Imm Зычитание содержимого регистра Ra из знакового расширения константы 1mm с учетом заема, с записью результата в ре- гистр Rd, без изменения флага переноса 0 2 3 4 5 7 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды 199
200 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Есть заем Q Нет заема л Регистр Rd______ Регистр Ra ______________Регистр Rb гегистр ка CARRY | RSUBC Rd,RaJRb] Flag bllllllllllinini'llllllllllllllll - ШвИИЕКШ - IRSUBKC Rd.Ra^Rb] CARRY Flag Ш Есть заем Q Нет заема „ -------------1 Регистр Rd______ ____________________ Константа, RSUBIC Rd,Ra,Imm | указанная в команде 10 Регистр Ra 10 115 CARRY Flag [RSUBIKC Rd Ra.Imm] Рис. 10.5. Вычисление разности двух операндов с учетом заема Инструкции умножения поддерживаются только теми элементами семейства микропроцессорных ядер MicroBlaze, которые реализуются на основе ПЛИС, имею- щих в своем составе встроенный аппаратный умножитель. Для выполнения операций целочисленного умножения двух 32-разрядных операндов предусмотрены две разно- видности инструкций, форматы которых представлены в табл. 10.5. Команда MUL Rd,Ra,Rb предназначена для перемножения содержимого двух ре- гистров общего назначения с номерами b и а. В инструкции MULI Rd,Ra,Imm первым сомножителем является значение содержимого регистра с номером а. В качестве второго сомножителя выступает значение, полученное в результате знакового рас- ширения 16-разрядной константы Imm, которая задается непосредственно в инструк- ции, до 32-разрядного слова. Если инструкции MULI предшествует команда IMM, то указанное в ней значение используется в качестве 16 старших разрядов второго со- множителя. Результат применения команд умножения MUL и MULI представляет со- бой 64-разрядное значение. Старшие 32 разряда произведения отбрасываются, а младшие записываются в регистр общего назначения с номером J, который указы- вается в качестве первого параметра инструкций умножения. Осуществление опера- ций умножения двух операндов показано на рис. 10.6. Обозначение LSW (Least Significant Word), используемое на этом рисунке, соответствует процедуре выделения последнего (младшего) 32-разрядного слова в значении результата операции. Регистр Rd I MUL Rd,Ra,Rb | Регистр Ra *LSw- ВИ1ИЯ1ИВ IlilllllllllllffllllllllllHIillll Регистр Rb ><LL.Li.l.LL.LI.U.l..l.l j.l.l.l.l1,1 LIlTlIUl 111 Константа, Регистр Rd I MULI Rd,Ra,Imm | Регистр Ra шшмшаяв!^ Евжпжшнтаним указанная Ю в команде г v л \ 10 115 х ШШШШПШШШШПШ IIIIIOBII Рис. 10.6. Выполнение операций умножения двух операндов Система команд семейства микропроцессорных ядер MicroBlaze содержит два варианта команд целочисленного деления, которые доступны только элементам, реа- лизуемым на основе кристаллов FPGA, обладающих встроенными аппаратными ум- ножителями. При этом в процессе описания конфигурации ядра должна быть указана опция использования встроенного аппаратного делителя. Форматы команд целочис- ленного деления IDIV и IDIVU приведены в табл. 10.6.
Таблица 10.5. Форматы команд умножения двух операндов Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция 0 1 0 0 0 0 d d d d d а а а а а b b b b Ь 0 0 о Ж 0 0 0 0 б О' 0 MUL Rd, Ra, Rb Перемножение содержимого ре- гистров Ra и Rb и запись млад- шего слова результата в регистр Rd ; < ф;;; 0 1 2 3 4 5 6 7 В 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 1 1 0 0 0 d d :d d d а а а а а i i ) 1 /Г/ :,г i i i : * 1 - i i i i MULI Rd, Ra, Imm Перемножение содержимого ре- гистра Ran знакового расшире- ния константы Imm, с записью младшего слова результата в регистр Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Таблица 10.6. Форматы команд целочисленного деления двух операндов Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Поле типа операндов Мнемоника Выполняемая операция 0 1 0 0 1 0 d d d d d а а а а а b ь b b Ь 0 0 0 0 0 0 0 0 0 0 0 1DIV Rd, Ra, Rb Целочисленное деление содер- жимого регистра Rb на содержи- мое регистра Ra при восприятии операндов как значений со знаком и запись результата в регистр Rd 0 1 0 0 1 0 d d d d d а а а а а ь ь; ь Ь ь 0 0 0 0 0 0 0 0 0 1 0 IDIVU Rd, Ra, Rb ; Целочисленное деление содер- жимого регистра Rb на содержи- мое регистра Ra при восприятии операндов как значений без знака и запись результата в регистр Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
202 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС В качестве делимого в обоих вариантах инструкций деления выступает содержимое регистра общего назначения с номером Ь, который указывается в форме последнего параметра команд. Делителем является значение содержимого регистра с номером а, который задается в виде второго параметра инструкций. При использовании команды IDIV Rd,Ra,Rb содержимое регистров с номерами b и а интерпретируется как целое число со знаком. В инструкции 1DIVU Rd,Ra,Rb значения делимого и делителя пред- ставляют собой целые числа без знака. Результат выполнения операции деления со- храняется в регистре с номером d, который определяется значением первого пара- метра инструкций ID1V и IDIVU. Если содержимое регистра делителя представляет собой нулевое значение, то флаг деления на нуль Divide_By_Zero Flag (25-й разряд регистра статуса) устанавливается в состояние высокого логического уровня. При этом в регистр, предназначенный для записи результата, заносится нулевое значение. В случае, когда значение делителя отличается от нуля, флаг Divide__By__Zero Flag на- ходится в сброшенном состоянии. Рис. 10.7 иллюстрирует выполнение операций це- лочисленного деления. Division by Zeroej о Flag M^-JRaJ^p^ Регистр Rd |lDIVRd,Ra,Rb| | IDIVU Rd,Ra,Rb] Регистр Ra liHiiiiiMiiiiffigeoiimiKiiii] Регистр Rb /ГТТГГПТГГП11ТГ11IIII1111HIIIII Puc. 107. Осуществление операций целочисленного деления К группе арифметических команд относятся также инструкции сравнения двух целочисленных операндов СМР и CMPU. Информация о форматах этих команд со- держится в табл. 10.7. Инструкции CMP Rd,Ra,Rb и CMPU Rd,Ra,Rb предназначены для сравнения зна- чений содержимого регистров общего назначения с номерами а и Ь. Результат вы- полнения операции сравнения заносится в регистр с номером d. Различие инструкций СМР и CMPU заключается в типе сравниваемых операндов. При выполнении коман- ды CMP Rd,Ra,Rb значения содержимого регистров с номерами а и b воспринимают- ся как целые числа со знаком. При использовании команды CMPU Rd,Ra,Rb содер- жимое регистров с номерами а и b интерпретируется как целочисленные значения без знака. Фактически инструкции сравнения выполняют операцию вычитания со- держимого регистра а из содержимого регистра Ь, результат которой записывается в регистр d. Если значения содержимого регистров с номерами а и b равны, то в ре- гистр d заносится нулевое значение. Когда сравниваемые операнды не равны, резуль- тат выполнения команд СМР и CMPU отличен от нуля. При этом информация о со- отношении величин содержимого регистров с номерами а и b содержится в старшем (знаковом) разряде регистра d. Рис. 10.8. поясняет процесс выполнение инструкций сравнения двух целочисленных операндов. (Ra)>(Rb)„ ___________ @CfRaMRb)1 [СМР Rd,Ra,Rb] | °PerMCTpRd |CMPU Rd,Ra,Rb| Регистр Ra _____________РегистрRb______ Puc. 10.8. Выполнение инструкций сравнения двух целочисленных операндов
ГЛАВА 10 203 10.4. Группа логических команд В командах, входящих в эту группу, используются 3 параметра, из которых два последних определяют значения операндов. Первым операндом в логических опера- циях всегда является содержимое регистра общего назначения, номер которого указывается в виде второго параметра команды. В роли второго операнда может вы- ступать либо содержимое другого регистра общего назначения, либо результат зна- кового расширения до 32 разрядов 16-разрядной константы, значение которой указы- вается непосредственно в коде инструкции. При мнемонической форме записи ко- манд номер второго регистра и значение константы задается в форме третьего параметра. Чтобы использовать в качестве второго операнда 32-разрядную констан- ту, следует перед соответствующей логической командой поместить инструкцию IMM. Результат выполнения логической операции записывается в регистр общего на- значения, номер которого определяет первый параметр инструкции. Форматы команд поразрядных операций «Логическое И» (поразрядное умноже- ние) представлены в табл. 10.8. Для поразрядного умножения содержимого двух регистров общего назначения с номерами а и b предназначена команда AND Rd,Ra,Rb. Команда ANDI Rd,Ra,Imm выполняет операцию «Логическое И» над соответствующими разрядами содержимо- го регистра с номером а и значения, полученного в результате знакового расширения константы Imm до 32-разрядного слова. Рис. 10.9 поясняет процесс выполнения этих команд. [AND Rd,Ra^Rb1 регистр Ra &&&&&&&&&&&&&&&&&&&&&&&&&<&&<&<&&&& I I I I I I I I I Г I I I I I I I I I I I I I I I I I I I I I I I Регистр Rb Регистр Rd | ANDI Rd,Ra,Imm I I iO I iO I £0 110 I £0 I £0 [ 10 j 10 I iO I iO I iO 110 110 110110110 | iO I 11 112113 j 141 15 j 161 i7 | IB | iff |110|lll|il2|113|114|115| Регистр Ra iO - 515 - Константа, указанная в команде Регистр Rd Рис. 10.9. Выполнение поразрядных операций «Логическое И» Кроме того, в системе команд микропроцессорных ядер семейства MicroBlaze присутствует еще одна разновидность инструкций, реализующих операцию «Логиче- ское И», с инверсией второго операнда. Форматы этих команд приведены в табл. 10.9. Инструкция ANDN Rd,Ra,Rb используется для поразрядного умножения содер- жимого регистра с номером а и инвертированного значения содержимого регистра с номером Ь. Команда ANDNI Rd,Ra,lmm предназначена для выполнения поразрядной операции «Логическое И» над содержимым регистра с номером а и инвертированно-
204 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС го значения, полученного в результате знакового расширения константы Imm до 32-разрядного слова. Выполнение команд ANDN и ANDNI иллюстрирует рис. 10.10. IANDN Rd.RTRbl Регистр Ra &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& I ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 ~1 Регистр Rb I I I I t I Г Г 1. I I Регистр Rd IANDNI Rd,Ra,lmm| Регистр Ra &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — iO - i15 - | io | io | io | io | io | ю j io | io | io | io | io fio I w | io [ io [ io | io | ii | i21131141 i5116 {171 i8 ] i> |iio|iii|ii2jii3|ii4|ii5| Константа, I указанная Puc. 10.10. Выполнение поразрядных операций «Логическое И» с инверсией второго операнда Операции поразрядного сложения двух операндов осуществляются с помощью инструкций OR и ORI, форматы которых определены в табл. 10. Команда OR1 Rd Jia,Imm выполняет поразрядную операцию «Логическое ИЛИ» содержимого регистра с номером а и значения, являющегося результатом знакового расширения константы Imm до 32-разрядного слова. Поразрядное сложение содер- жимого двух регистров общего назначения с номерами а и b реализует команда OR Rd,Ra,Rb. Последовательность выполнения операций «Логическое ИЛИ» показана на рис. 10.11. [OR Rd,Ra,Rb] Регистр Ra I I I I I I I i i 1 i I I I I l i i I j I I i I i ( I I i I i I I I I I I I i I I I I I I I I I I i I t 1 I 1 I 1 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Регистр Rb IПIH П ПIП П П П П П j П ПIП I I I I. I I I.И I ! I M I I I M I I I I I I I ггтгт Регистр Rd |ORI Rd,Ra,Imm | □ГШ^Е1Ж1Ж2ЕИ1^Ж^1ЖЖЕНаИШ Регистр Ra I I I I I I I I I 1 I I I I I I I I I I 1 I I I I I I I I i I I I I I I I I I 1 I I I I I I I t t I I i I I I I 1 I I I I I I I .A 1ЛХ- iO - i15 - 1101Ю IiO IiD IiO 1101iO |Ю [iO|i01 iO|iO |iO |iO1101iO |iO1111121131141151 i6117116119 flio|lll|112|113|114|115| КОНСТаНТЭ г=’ Регистр Rd Рис. 10.11. Выполнение поразрядных операций «Логическое ИЛИ» Форматы инструкций XOR и XORI, предназначенных для выполнения поразряд- ной операции «Исключающее ИЛИ», представлены в табл. 10.11.
Таблица 10.7. Форматы команд сравнения двух целочисленных операндов Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Поле типа операндов Мнемоника Выполняемая операция 0 0 0 1 0 1 d d d d d а а а а а b b Ь ь Ь 0 0 0 0 0 0 0 0 0 0 0 СМР Rd, Ra, Rb Сравнение величин содержи- мого регистров Rb и Ra, ин- терпретируемых как значения со знаком, и запись результа- та в регистр Rd 0 0 0 1 0 1 d d d d d а а а а а b Ь ь b ь 0 0 0 0 0 0 0 0 0 1 0 CMPU Rd, Ra, Rb Сравнение величин содержи- мого регистров Rb и Ra, ин- терпретируемых как значения без знака, и запись результа- та в регистр Rd 0 1 2 3 4 5 6 7 8 9 ю 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Таблица 10.8. Форматы команд поразрядных операций «Логическое И» Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевыеразряды Р Мнемоника Выполняемая операция 1 0 0 0 0 1 d d d d d а а а а а b b b b Ь 0 0 0 0 0 0 0 0 0 0 0 AND Rd, Ra, Rb Поразрядное «Логическое И» со- держимого регистров Ra и Rb и запись результата в регистр Rd 0 1 2 3 4 5 6 7 8 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30: 31 Номер разряда микрокоманды Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле: значения константы Мнемоника Выполняемая операция 1 0 1 0 0 1 d d d d d а а а а а i III I |ii । j; 1 : i i i i L T i I. ANDI Rd, Ra, Imm Поразрядное «Логическое И» со- держимого регистра Ra и знаково- го расширения константы Imm, с записью результата в регистр Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды 205
206 Таблица 10.9. Форматы команд поразрядных операций «Логическое И» с инверсией второго операнда Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 d d а а а ь Ь b b 0 0 0 0 0 0 0 0 0 0 0 ANDN Rd, Ra Rb Поразрядное «Логическое И» содержимого регистра Ra и ин- вертированного значения со- держимого регистра Rb с запи- сью результата в регистр Rd 3 4 5 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции 11 1 Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 d а а а ANDNI Rd Ra, Imm Поразрядное «Логическое И» содержимого регистра Ra и ин- вертированного значения зна- кового расширения константы Imm, с записью результата в регистр Rd 0 2 3 4 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Таблица 10.10. Форматы команд поразрядных операций «Логическое ИЛИ» Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция 1 0 0 0 0 0 d d d d d а а а а а ь ь b ь b 0 0 0 0 0 0 0 0 0 0 0 OR Rd, Ra, Rb Поразрядное «Логическое ИЛИ» содержимого регистров Ra и Rb и запись результата в регистр Rd 0 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
Окончание табл 10 10 Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 0 0 d d d d d а а а а а ORI Rd, Ra, Поразрядное «Логическое ИЛИ» содержимого регистра Ra и знакового расширения константы Imm, с записью ре- зультата в регистр Rd 2 4 S 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Таблица 10.11. Форматы команд поразрядных операций «Исключающее ИЛИ» Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 1 0 d d d d d а а а а а ь b b ь b 0 0 0 0 0 0 0 0 0 0 0 XOR Rd, Ra, Rb Поразрядное «Исключающее ИЛИ» содержимого регистров Ra и Rb и запись результата в регистр Rd 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 0 0 d d d d d а а а а XORI Rd, Ra, Поразрядное «Исключающее ИЛИ» содержимого регистра Ra и знакового расширения кон- станты Imm, с записью резуль- тата в регистр Rd 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды 207
208 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Инструкция XORI Rd,Ra,Imm выполняет поразрядную операцию «Исключающее ИЛИ», в которой участвует содержимое регистра с номером а и значение, получен- ное в результате знакового расширения константы Imm до 32-разрядного слова. Ко- манда XOR Rd,Ra,Rb осуществляет аналогичную операцию, операндами которой яв- ляется содержимое двух регистров общего назначения с номерами а и Ь. Выполнение поразрядных операций «Исключающее ИЛИ» демонстрирует рис. 10.12, |XOR Rd,Ra^Rb] Регистр Ra AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA I 1 I I I I I I I I I I I I I I I I I II I II I I I I I Регистр Rb Регистр Rd |XORIRd,Ra,lmm| Регистр Ra лллллллллллллллллллллллллллллллл ,л |io |ю |io | io | io |io | io Цо |io | w Цо Цо Цо Цо Цо Цо Цо | n | х21 i31i41 is| ifi| i&|19 Ц1оЦ11Ц12Ц1зЦ14Ц15] Константа, ^команде Рис. 10.12. Выполнение поразрядных операций «Исключающее ИЛИ» 10.5. Команды сдвига данных Инструкции этой группы предназначены для выполнения операций арифметиче- ского или циклического сдвига данных, хранящихся в регистре общего назначения, номер которого указывается в качестве второго параметра команды. В составе рас- сматриваемой группы команд можно выделить две подгруппы: основную и дополни- тельную. Инструкции сдвига данных, относящиеся к основной подгруппе, поддержи- ваются всеми элементами семейства микропроцессорных ядер MicroBlaze по умол- чанию. Дополнительные команды сдвига данных поддерживаются элементами этого семейства только при условии, что в процессе конфигурирования ядра MicroBlaze включена соответствующая опция. Основной набор инструкций сдвига содержит команды арифметического и цик- лического сдвига данных на один разряд вправо. Эти инструкции содержат два пара- метра. Первый параметр определяет номер регистра общего назначения, предназна- ченного для записи результата операции. Второй параметр указывает номер регистра, содержащего исходные данные. Форматы основных инструкций сдвига данных пред- ставлены в табл. 10.12. Команда SRA Rd,Ra позволяет осуществить операцию арифметического сдвига вправо данных, которые содержатся в регистре с номером а, с сохранением состоя- ния последнего (крайнего левого) разряда. Циклический сдвиг данных в регистре общего назначения с номером а на один разряд вправо, выполняемый через разряд переноса/заема CARRY Flag регистра статуса, осуществляется с помощью команды SRC Rd,Ra. Инструкция SRL Rd,Ra предназначена для реализации операции арифме- тического сдвига данных, содержащихся в регистре с номером а, вправо на один раз- ряд с записью нулевого бита в «освободившийся» (крайний левый) разряд.
Таблица 10.12. Форматы основных команд арифметического и циклического сдвига данных Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле типа сдвига Мнемоника 1 Выполняемая операция 1 0 0 1 0 0 d d d. d; d а а а а а 0 0 0 0 0 0 о о 0 IJj 0: 0 Ж SRA Rd, Ra Арифметический сдвиг содержимо- го регистра Ra вправо на один раз- ряд с сохранением последнего раз- ряда изапись результата в регистр Rd 1 0 0 1 0 0 d d d d а а а а а 0 0 0 0 Ж jj 0 0 0 Ж H I-Ж 0 ||| ;1 SRC Rd, Ra Циклический сдвиг содержимого ре- гистра Ra вправо на один разряд через разряд переноса/заема реги- стра: статуса и запись результата в регистр Rd г 1 0 0 1 0 0 d d d d d а а а а а 0 0 0 0 0 0 0 0 0 л; iii 0 0 0 Jl SRL Rd,Ra Арифметический сдвиг содержимо- го регистра Ra вправо на один раз- ряд с записью 0 в последний разряд и сохранение результата в регистре Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Si 23s 24 25 26 27 28 29 30 Номер разряда микрокоманды 209
210 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Результат основных сдвиговых операций, осуществляемых с помощью команд SRA, SRC и SRL, записывается в регистр общего назначения с номером d. При выпол- нении этих сдвиговых инструкций бит данных, «выталкиваемый» из регистра общего назначения с номером а в процессе сдвига, записывается в 29-й разряд регистра ста- туса, который содержит значение флага переноса/заема CARRY Flag. На рис. 10.13 в наглядной форме показан процесс выполнения основных сдвиговых операций, под- держиваемых микропроцессорными ядрами семейства MicroBlaze. __________________________|SRA Rd,Ra Регистр Ra —। carry Flag I I I ..... Регистр Rd |SRC Rd,Ra| Регистр Ra |SRL Rd,Ra| Регистр Ra I carry Flag o-^l.II 1111III..IIBlИ Регистр Rd Puc. 10.13. Выполнение основных операций арифметического и циклического сдвига данных Дополнительные команды сдвига позволяют осуществить операцию арифмети- ческого или циклического сдвига данных вправо или влево на несколько разрядов. При использовании этих инструкций необходимо указать 3 параметра. Первые два параметра выполняют те же функции, что и в основных командах сдвига данных. Значение третьего параметра команды косвенно или явно определяет, на какое коли- чество разрядов выполняется сдвиг. В качестве третьего параметра дополнительных инструкций сдвига может указываться номер регистра общего назначения или непо- средственно числовое значение. Если третий параметр команды представляет собой номер регистра, то последние 5 разрядов (с 27-го по 31-й) содержимого этого регист- ра определяют, на какое количество разрядов производится сдвиг. Форматы допол- нительных инструкций арифметического и циклического сдвига данных представле- ны в табл. 10.13. Для осуществления операции циклического сдвига данных, хранящихся в реги- стре с номером а, вправо на N разрядов предусмотрены команды BSRL Rd,Ra,Rb и BSRLI Rd,Ra,Imm. При использовании инструкции BSRL значение N определяют по- следние 5 разрядов содержимого регистра с номером Ь. В команде BSRLI значение N указывается непосредственно в виде константы Imm. Условные изображения, приве- денные на рис. 10.14, поясняют выполнение дополнительных команд арифметиче- ского и циклического сдвига данных. Команды BSRA Rd,Ra,Rb и BSRAI Rd,Ra,Imm предназначены для выполнения операций арифметического сдвига содержимого регистра общего назначения с номе- ром а вправо на N разрядов. При этом в «освободившиеся» (крайние левые) разряды регистра Rd, используемого для записи результата операции, заносится значение ну-
ГЛАВА 10 211 левого разряда исходного регистра Ra (рис. 10.14). Количество разрядов Л/, на кото- рое производится сдвиг, в инструкции BSRA определяется последними пятью разря- дами содержимого регистра с номером Ь, а в команде BSRAI - значением константы Imm. [BSRL Rd,Ra,Rb| Г 'Г I I j I I I 'I IM II 111 II 111 I I it I h?! 4 I Ы Регистр Rb __________________Количество разрядов сдвига f_ I—Регистр Ra + Регистр Rd | BSRA Rd,Ra,Rb] III I I » I I I I I I I I I I I ГТГ1 I Illi I hl. I I ~Ш1 Регистр Rb __________________Количество разрядов сдвига f_ ►^^НЗЗЗ^^ЕИИ^НЕНЯ^ЕЯЙДШЕПЕЗЗЗЙЕПП Регистр Ra ♦ Регистр Rd BSLL Rd,Ra,Rb] I I I I I I I I I I I I I I I I I I I I I I I I I I I ШГ~га Регистр Rb Количество разрядов сдвига f Регистр Ra __________________+__________________ Регистр Rd |BSRL1 Rd,Ra,1mm | |mm II 1 I I 1 j II I I I I 1 I I I I I I I I I I I I I Команда __________________________Количество разрядов сдвига |___ [—Регистр Ra + II II 1..1". I I I. ] I Г 4 ^1^441<: 1^ 14 11114 Г: Г-Г:4 -: Г 1/14/1 Регистр Rd [BSRAI Rd,Ra,lmm | lmm I I j j 1 j I I I I 1 I 11 I I II I I I I I I U I I I; hll команда ______ ____________________Количество разрядов сдвига j___ I—*4 К 14 I I 4 4 'I;::I Г 4 I 14 4- I Г I I T I IГ14 44 I I I I I Регистр Ra ♦ еэзевев^^ регистр Rd |HSLLf Rd.Ra jmm | lmm ГПТП Г I Г 1 I I I 1 I I I I I I I I I I I I I H 4 I hl Команда ___________________________Количество разрядов сдвига f___ КaeieHSW» ISl£ I <ТП <-! Регистр Ra + НаШйМЩ Регистр Rd Puc. 10.14. Выполнение дополнительных команд арифметического и циклического сдвига данных Операции циклического сдвига содержимого регистра общего назначения с но- мером а на N разрядов влево реализуются с помощью инструкций BSLL Rd,Ra,Rb и BSLLI Rd,Ra,Imm. Значение W при выполнении команды BSLL составляют 5 послед- них разрядов содержимого регистра с номером b (см. рис. 10.14). В инструкции BSLLI это значение задается непосредственно в виде константы lmm.
212 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Как видно из рис. 10.14, при использовании дополнительных сдвиговых команд циклический или арифметический сдвиг данных производится без участия разряда переноса/заема CARRY Flag регистра статуса. 10.6. Команды преобразования типов данных Команды преобразования типов данных позволяют трансформировать значения, представленные различным количеством двоичных разрядов, в 32-разрядное слово. Форматы этих инструкций приведены в табл. 10.14. Команда SEXT8 Rd,Ra предназначена для выполнения операции знакового рас- ширения 1-байтового значения, которое содержится в регистре общего назначения с номером а, до 32-разрядного слова. Для осуществления операции знакового расши- рения 2-байтового значения, которое находится в регистре с номером а, используется инструкция SEXT16 Rd,Ra. Результат преобразования данных, выполняемого с по- мощью команд SEXT8 и SEXTI6, записывается в регистр общего назначения с номе- ром d. Процесс выполнения инструкций преобразования типов данных демонстриру- ет рис. 10.15. |SEXT8 Rd,Ra| I I I I I I I I I- I I I I I I I It I I I I М Регистр Ra ______________ _________________ |SEXT16 Rd,Ra| [ШПЛШПШЖШШШПВ Регистр Ra нннннннн Регистр Rd |IMM lmm| | m | и 1121 и | м | is | it | i71 и|»|un|iii|ii2|ii3|ii4[iis| Значение Imm, указанное в инструкции рв™гти пн. vn.UeUMO ШТШШвИЖВ^вВИИ B^".™™x данных Рис. 10.15. Выполнение инструкций преобразования типов данных Команду IMM Imm также можно отнести к группе инструкций преобразования типов данных. Шестнадцатиразрядное значение Imm, указываемое в качестве единст- венного параметра инструкции, записывается в регистр, предназначенный для хране- ния временных данных. Это значение автоматически учитывается при выполнении следующей команды, относящейся к типу В, в качестве 16 старших разрядов значе- ния, указываемого непосредственно в этой инструкции. Таким образом, инструкция IMM позволяет указывать 32-разрядные значения при использовании непосредствен- ного способа определения операндов в команде.
Таблица 10.13. Форматы дополнительных команд арифметического и циклического сдвига данных Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Поле направления и типа сдвига Мнемоника Выполняемая операция 0 1 0 0 0 1 d а d ад а а а а а ад ад в ад 0 0 0 0 0 0 0 0 0 0 0 BSRL Rd, Ra, Циклический сдвиг содержимого регистра Ra вправо на число раз- рядов, определяемое битами 27- 31 содержимого регистра Rb, и запись результата в регистр Rd 0 1 0 0 0 1 d d d d d а а а а а Ь ад ад Вй 0 1 0 0 0 0 0 0 0 0 0 BSRARd.Ra, Rb Арифметический сдвиг содержи- мого регистра Ra вправо на число разрядов, определяемое битами 27-31 содержимого регистра Rb, и запись результата в регистр Rd 0 1 0 0 0 1 d d d d d а а а а а ад ад ад b 1 0 0 0 0 0 0 0 0 0 0 BSLL Rd, Ra, Rb : ж Циклический сдвиг содержимого регистра Ra влево на число раз- рядов, определяемое битами 27- 31 содержимого регистра Rb, и запись результата в регистр Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды 213
Окончание табл. 10.13 214 Поле кода операции Поле номера первого регистра Поле номера второго регистра Нулевые разряды Поле направления и типа сдвига Поле значения константы Мнемоника Выполняемая операция 0 1 1 0 0 1 d d d: d d а а а а а 0 0 0 Ж 0 0 0 0 0 0 0 i i i i i BSRLI Rd, Ra, Imm Циклический сдвиг содержимого регистра Ra вправо на число раз- рядов, определяемое значением константы Imm, и запись резуль- тата в регистр Rd 0 1 1 0 0 1 d d if; d d а а а а а 0 де ж I*: 0 0 1 0 0 0 0 i i i i i BSRAIRd, Ra, Imm Арифметический сдвиг содержи- мого регистра Ra вправо на число разрядов, определяемое значе- нием константы Imm, и запись ре- зультата в регистр Rd 0 1 1 0 0 1 d d d d d а а а а а 0 0 де :0d 0 1 0 0 0 0 0 i i i i i BSLLI Rd,Ra,lmm Циклический сдвиг содержимого регистра Ra влево на число раз- рядов, определяемое значением константы Imm, и запись резуль- тата в регистр Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Й to- 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Таблица 10.14. Форматы инструкций преобразования типов данных Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле типа операции/значения} юнстанты Мнемоника ; Выполняемая операция 1 0 0 1 0 0 d: d d d d а а а а а 0 0 0 0 0 ill 0 дег 0 1 г о де де. д 0 SEXT8 Rd, Ra Знаковое расширение последнего байта содер- жимого регистра Ra и запись результата в ре- гистр Rd 1 0 0 1 0 0 d d d де d а а а а а 0 0 0 0 ft о де 0 де де Л Ж; 0 1де SEXT16 Rd, Ra Знаковое расширение последних двух байт со- держимого регистра Ra и запись результата в ре- гистр Rd 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 i i i i 1 i i i I де i । де i i IMM Imm Запись значения Imm в регистр, предназначенный для хранения временных данных ж ; 0 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 В 24 25 26 ж 2S 29 30 31 Номер разряда микрокоманды
ГЛАВА 10 215 10.7. Команды передачи данных Данную группу составляют инструкции, предназначенные для организации об- мена данными между памятью и регистрами общего назначения. В системе команд микропроцессорных ядер семейства MicroBlaze предусмотрены инструкции, позво- ляющие передавать данные в виде слов размерностью 4 байта (32 двоичных разряда), полуслов размерностью 2 байта (16 двоичных разрядов) и побайтово (8 двоичных разрядов). При выполнении операций обращения к памяти используется косвенная адресация. Значение адреса памяти при выполнении операций чтения или записи представляется в виде суммы содержимого некоторого базового регистра общего на- значения и смещения. Номер базового регистра указывается в виде второго парамет- ра соответствующей команды. При мнемонической форме записи команд передачи данных значение смещения определяется с помощью третьего параметра инструк- ции. Смещение может задаваться двумя способами. Первый способ позволяет опре- делить значение смещения в виде содержимого одного из регистров общего назначе- ния. При использовании второго способа значение смещения является результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Поэтому в качестве третьего параметра команд передачи данных может использоваться номер регистра общего назначения или 16-разрядная константа Imm. Номер регистра общего назначения, который использу- ется в качестве источника данных, записываемых в память, или для хранения инфор- мации, извлекаемой из памяти, указывается в виде первого параметра соответствую- щей команды передачи данных. Форматы инструкций, предназначенных для загрузки данных различной длины из памяти в регистр общего назначения, приведены в табл. 10.15. Инструкции LBU Rd,Ra,Rb и LBUI Rd,Ra,Imm используются для передачи байта дан- ных из памяти в регистр общего назначения с номером d при различных способах опре- деления значения смещения. Передаваемые данные записываются в младшие восемь разрядов регистра Rd. В остальные разряды этого регистра заносится нулевое значение. Рис. 10.16 иллюстрирует выполнение операций побайтовой загрузки данных. fLBU Rd,Ra,Rb] Регистр Ra IHBHiiiaiiiiMiiiMifflii llllllillllllllllllll Регистр Rb Адрес Ячейки памяти Hiasaas Регистр Rd |LBUI Rd,RaJrnrn1 Константа, указанная Регистр Ra в команде < Л МО 115 Адрес чтения байта Ячейки памяти - WWW Регистр Rd Рис. 10.16. Выполнение инструкций передачи байта данных из памяти в регистр общего назначения
216 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Команды LHU Rd,Ra,Rb и LHUI Rd,Ra,Imm выполняют загрузку полуслова дан- ных, состоящего из 2 байт, из памяти в регистр общего назначения с номером d. Счи- танная информация размещается в младшие 16 разрядов регистра Rd. Неиспользуе- мые разряды этого регистра сбрасываются в состояние, соответствующее нулевому значению. Рис. 10.17 в наглядной форме поясняет выполнение копирования полусло- ва данных из памяти в регистр общего назначения. ILHU Rd,Ra,Rbl Адрес [ 11 ЧТО НИЯ Регистр Ra Регистр Rb полуслова Ячейки памяти — ,ЯИИЙ8ИЯ®81Йх d16 d31 ILHUI Rd,Ra,Imm I Константа, --------------- указанная шшппипшшшшшш Регистр Ra в команде Адрес чтения полуслова Регистр Rd d31 Cl16 Рис. 10.17. Выполнение команд передачи полуслова данных из памяти в регистр общего назначения Для передачи слова данных из памяти в регистр общего назначения предназна- чены команды LW Rd,Ra,Rb и LWI Rd Jia,Imm. Процесс их выполнения показан на рис. 10.18. |LW Rd,Ra,Rb~| Регистр Ra ШШПШШШШШИ Адрес Регистр Rb чтения |LWI Rd,Ra,lmml Регистр Rd IН 111 111111111 III III1111 И111ГП Константа, указанная Регистр Rd ПШШШШЖШШШПШ Рис. 10.18. Выполнение инструкций передачи слова данных из памяти в регистр общего назначения Для сохранения в памяти информации, содержащейся в регистрах общего назна- чения, предусмотрены 3 типа команд, отличающиеся размерностью передаваемых данных. Каждый из этих типов представлен двумя вариантами инструкций, соответ- ствующими различным способам определения смещения при вычислении адреса за- писи. Информация о форматах этих команд содержится в табл. 10.16.
Таблица 10.15. Форматы команд передачи данных из памяти в регистр общего назначения Поле кода операции Поле номера первого регистра Поле номера второго регистра Лоле номера третьего регистра Нулевые разряды Мнемоника ; Выполняемаяоперация 1 1 0 0 0 0 d: d d 6 d а а а а а b b Ь ь ь 1Я о 0 и да да да IF да? да 0 LBU Rd, Ra, Rb Загрузка из памяти в регистр Rd бай- та данных, адрес которого представ- лен в виде суммы содержимого реги- стров Ran Rb .. 1 1 0 0 0 1 d 4 d а а а а а b ь ь ь ь о Ж ж ёза в- Ж в 0 jis в в в да да LHU Rd, Ra, Rb Загрузка из памяти в регистр Rd по- луслова данных, адрес которого представлен в виде суммы содержи- мого регистров Ra и Rb 1 1 0 0 1 0 d d d d d а а а а а b ь ь ь ь <07: 0 да да да да 0 о LW Rd, Ra, Rb Загрузка из памяти в регистр Rd сло- ваданных, адрес которого: представ- лен в виде суммы содержимого реги- стров Ra и Rb 0_ 1 2 3 4 5 6 7 8 9 iO 11 12 13 14 15 16 17 18 19 20 21 22 23 24 257? 26 27 29 30 31 Номер разряда микрокоманды го
Окончание табл 10 15 Поле кода one рации Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемоника Выполняемая операция 0 0 0 d d d а а 1 i 1 1 LBUI Rd, Ra, Загрузка из памяти в регистр Rd бай- та данных, адрес которого представ пен в виде суммы содержимого реги- стра Ra и знакового расширения кон- станты Imm 0 0 d d d а а 1 1 i LHUI Rd, Ra, Загрузка из памяти в регистр Rd по пуслова данных, адрес которого представлен в виде суммы содержи- мого регистра Ra и знакового расши- рения константы Imm 0 d d d d d • 1 l LWI Rd, Ra, Загрузка из памяти в регистр Rd сло- ва данных, адрес которого представ- лен в виде суммы содержимого реги- стра Ra и знакового расширения кон- станты Imm 0 3 4 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды 218 Таблица 10.16. Форматы команд передачи данных из регистра общего назначения в память Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле номера третьего регистра Нулевые разряды Мнемони- Выполняемая операция 1 1 0 1 0 0 d d d d d а а а а а ь ь b ь b 0 0 0 0 0 0 0 0 0 0 0 SB Rd, Ra, Rb Запись байта данных из регистра Rd в память по адресу, равному сумме со- держимого регистров Ra и Rb 1 1 0 1 0 1 d d d d d а а а а а ь ь Ь b Ь 0 0 0 0 0 О 0 0 0 0 0 SH Rd, Ra, Rb Запись полуслова данных из регистра Rd в память по адресу, травному сумме содержимого регистров Ra и Rb 1 0 1 1 0 d d d d d а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 SW Rd, Ra, Rb Запись слова данных из регистра Rd в память по адресу, равному сумме со цержимого регистров Ra и Rb 0 2 3 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
Окончание табл 10 16 Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемони- ка Выполняемая операция 0 0 d d d d а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 SBI Rd, Ra, Imm Запись байта данных из регистра Rd в память по адресу, равному сумме со- держимого регистра Ка и знакового эасширения константы Imm 0 d d d d а а а а а : 1 1 1 1 i г • 1 1 । 1 1 i SHI Rd, Ra, Imm Запись полуслова данных из регистра Rd в память по адресу, равному суммг содержимого регистра Ra и знакового расширения константы Imm 0 d d d d а а а а а 1: 1 (В 1 В; 1 1 । t 1 i 1 SWI Rd, Ra, Imm Запись данных из регистра Rd в па- мять пр адресу, равному сумме со- держимого регистра Ra и знакового эасширения константы Imm 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Й6 27 28 29 30 31 Номер разряда микрокоманды 219
220 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Запись младшего байта данных из регистра с номером d в память по адресу, рав- ному сумме значений содержимого регистров с номерами а и b или содержимого ре- гистра Ra и результата знакового расширения константы Imm, осуществляется с по- мощью команд SB Rd,Ra,Rb и SBI Rd,Ra,Imm соответственно. Рис. 10.19 поясняет вы- полнение операций побайтной передачи данных из регистра общего назначения в память. |SBI Rd,RaJrnrn] (124 d31 Константа, указанная в команде Регистр Ra ИИНПИВ+ 115 Адрес записи байта IIIIIII1IIIIIIIIIIIIIIIIIIIIIIII Ячейки памяти --- Регистр Rd ЕЛ ;МИВИЙМ1МИШШ1НИИЙ| (124 d31 Рис. 10.19. Выполнение команд побайтовой передачи данных из регистра общего назначения в память Инструкции SH Rd,Ra,Rb и SHI Rd, Ra, Imm используются для передачи полуслова данных, состоящего из двух младших байт содержимого регистра общего назначения с номером d, в память. Выполнение команд записи полуслова данных из регистра общего назначения в память иллюстрирует рис. 10.20. SH Rd,Ra,Rb Адрес ----~~ записи Регистр Ra Регистр Rb nenvcnnsa lllllltllllltlllillMIWIItllH+ll.и>| Ячейки памяти ИМВИМММ—ВИИ I iiiiiiiiiiinniiiiiiiiiiiiiiiiil М111ВМИИИК'. |SHI Rd,Ra,lmm| ___________WtWMt Регистр Rd Ы№1111111111111ГI d16 d31 Константа, указанная ,о вкоманде Адрес Регистр Ra 115 по3луслова <;Г£Д1И1ШММ11 Регистр Rd [ТШ111П111Н d16 d31 Рис. 10.20. Выполнение инструкций копирования полуслова данных из регистра общего назначения в память
ГЛАВА 10 221 Команды SW Rd,Ra,Rb и SWI Rd,Ra,Imm предназначены для сохранения в памяти содержимого регистра общего назначения с номером d. На рис. 10.21 в наглядной форме показан процесс выполнения операций записи слова данных в память. |SW Rd,Ra,Rb| Адрес Регистр Ra Регистр Rb записи liiiiiiiiiliiiiiiiiiiiiiiiiiiiiilEiaSg Ячейки памяти —ИИ 11 hrmilffW- | SWI Rd,Ra,ltntn| Константа, указанная Регистр Rd ЕШШШНИЦ] 11МИЯМ11+ Регистр Ra в команде IIIIIIIIIIIIIIIIIIIIIIIIIIIHIII Ячейки памяти Адрес записи слова ннннншннннннншн регистр Rd IHlilHUlilll Рис. 10.21. Выполнение команд передачи слова данных из регистра общего назначения в память 10.8. Команды управления последовательностью выполнения операций в программе Группа инструкций, используемых для передачи управления в программе, вклю- чает в себя: команды безусловных переходов; команды условных переходов; команды возврата из подпрограмм и процедур обслуживания прерываний. Система команд микропроцессорных ядер семейства MicroBlaze содержит инст- рукции безусловных переходов, использующие как абсолютную, так и относитель- ную адресацию. При абсолютной адресации исполнительный адрес, по которому осуществляется передача управления в программе, указывается в виде значения со- ответствующего параметра команды. В случае применения инструкций переходов, использующих относительную адресацию, исполнительный адрес вычисляется как сумма текущего значения содержимого программного счетчика и смещения, зада- ваемого в виде значения соответствующего параметра команды. Для определения значения адреса перехода (при абсолютной адресации) или смещения (при относи- тельной адресации) может применяться регистровый косвенный или непосредствен- ный способ. При регистровом косвенном способе значение адреса перехода или сме- щения содержится в регистре общего назначения, номер которого указывается в ка- честве соответствующего параметра команды. Непосредственный способ позволяет задавать требуемые значения адреса или смещения в виде составной части (соответ- ствующего поля) инструкции. Как правило, при этом значение адреса или смещения представляет собой результат знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова.
222 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Большинство команд безусловных переходов представлено в двух вариантах: с немедленной передачей управления и с задержкой исполнения. При выполнении инструкции с немедленной передачей управления загрузка нового значения (адреса перехода) в программный счетчик осуществляется сразу же после завершения обра- ботки этой команды. Инструкции безусловных переходов с задержкой исполнения применяются с целью сокращения временных потерь, вызванных необходимостью перезагрузки конвейера после их выполнения. При использовании этих команд фак- тическая передача управления происходит только после завершения исполнения сле- дующей инструкции, находящейся в фазе дешифровки. В конце мнемонического идентификатора таких инструкций присутствует символ D (Delay), указывающий на то, что исполнение этих команд осуществляется с дополнительной задержкой. Микропроцессорные ядра семейства MicroBlaze поддерживают 14 разновидно- стей команд безусловной передачи управления в программе, форматы которых при- ведены в табл. 10.17. В инструкциях безусловного перехода BR Rb и BRI Imm используется относи- тельная адресация с регистровым косвенным и непосредственным указанием значе- ния смещения соответственно. Команда BR передает управление по адресу, равному сумме значений текущего состояния программного счетчика и содержимого регистра общего назначения, номер которого указывается в качестве единственного параметра инструкции. При использовании команды BRI адрес перехода представляет собой сумму текущего значения программного счетчика и результата знакового расшире- ния 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32- разрядного слова. Рис. 10.22 демонстрирует выполнение команд безусловного пере- хода с относительной адресацией. Новое значение Текущее значение программного счетчика программного счетчика Регистр Rb ------------------------- НИ1ШИИ+1__________________________ I BR Rb | Константа, указанная Новое значение Текущее значение ю В К0МЛанДе программного счетчика программного счетчика/—^5 ИШОШЙ , —+ IIIIIIIIIIIIIIIIIIIIIIIIIIIM | BRI Imm I Рис. 10.22. Выполнение инструкций безусловного перехода с относительной адресацией Команды BRD Rb и BRID Imm также предназначены для осуществления безус- ловного перехода с относительной адресацией, но передача управления осуществля- ется только после завершения обработки следующей (декодируемой) инструкции. Команды BRLD Rd,Rb и BRLID Rdjmm выполняют те же операции, что и предыду- щая пара инструкций, сохраняя предварительно текущее состояние программного счетчика в регистре общего назначения. Номер регистра, используемого для записи текущего состояния программного счетчика, указывается в качестве значения перво- го параметра этих команд. Рис. 10.23 поясняет выполнение команд безусловного пе- рехода с относительной адресацией и задержкой исполнения. lUlllllllillllllllillllllllllll
Таблица 10.17. Форматы команд безусловной передачи управления в программе Поле кода операции Поле номера пер- вого регистра Поле типа перехода Поле номера вто- рого регистра Нулевые разряды Мнемо- ника Выполняемая операция 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 b ь b b b 0 0 0 0 0 0 0 0 0 0 0 BR Rb Безусловный переход с относительной адресацией и регистровым косвенным указанием смещения (адрес перехода формируется путем суммирования те- кущего Значения программного счетчика и содержимого регистра Rb) 1 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 b ь ь b b 0 0 0 0 0 0 0 0 0 0 0 BRD Rb Безусловный переход с относительной адресацией, регистровым косвенным указанием смещения и задержкой ис- полнения (до завершения обработки де- кодируемой инструкции) 1 0 0 1 1 0 d d d d d 1 0 1 0 0 b ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BRLD Rd, Rb Безусловный переход с относительной ад- ресацией, регистровым косвенным указа- нием смещения, задержкой исполнения и сохранением текущего состояния про- граммного (нетчика в регистре Rd 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 b ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BRA Rb Безусловный переход с абсолютной ре- гистровой косвенной адресацией (адрес перехода указывается в форме значения содержимого регистра Rb) 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 b ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BRAD Rb Безусловный переход с абсолютной ре- гистровой косвенной адресацией и за- держкой исполнения 1 0 0 1 1 0 d d d d d 1 1 1 0 0 ь ь ь ь ь 0 0 0 0 0 0 0 0 0: :0 0 BRALD Rd, Rb Безусловный переход с абсолютной ре- гистровой косвенной адресацией, за- держкой исполнения и сохранением те- кущего состояния программного счетчи- ка в регистре Rd 1 0 0 1 1 0 d d d d d 0 1 1 0 0 ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BRK Rd, Rb Переход в режим Break с передачей управления по адресу, указанному в ви- де значения содержимого регистра Rb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды го
Окончание табл. 10.17 го го Поле кода операции Поле номера первого регистра Поле номера второго регистра Поле значения константы Мнемо- ника Выполняемая операция 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 i i i i i i I i 1 i i 1 i i i i BRI lmm Безусловный переход с относительной адресацией и непосредственным опре- делением смещения (адрес перехода формируется путем суммирования те- кущего значения программного счетчика и знакового расширения константы Imm) 1 0 1 1 1 0 0 0 0 0 0 i 0 0 0 0 i i i i i i i i i i i i i i i i BRID Imm Безусловный переход с относительной ад- ресацией, непосредственным определени- ем смещения и задержкой исполнения 1 0 1 1 1 0 d d d d d 1 0 1 0 0 i i i i i i 1 i i i i i i I i i BRLID Rd, Imm Безусловный переход с относительной адресацией, непосредственным опреде- лением смещения, задержкой исполне- ния и сохранением текущего состояния программного счетчика в регистре Rd 1 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 i i i i i i i i i i i i i i i i BRAI Imm Безусловный переход с непосредствен- ной абсолютной адресацией (адрес пе- рехода указывается в форме знакового расширения константы 1mm) 1 0 1 1 1 0 0 0 0 0 0 1 1 0 0 0 i i i i i i i i i I i i i i i i BRAID Imm Безусловный переход с непосредствен- ной абсолютной адресацией и задерж- кой исполнения 1 0 1 1 1 0 d d d d d 1 1 1 0 0 i i i i i i i i i i i i i i i BRALID Rd, Imm Безусловный переход с непосредственной абсолютной адресацией, задержкой испол- нения и сохранением текущего состояния программного счетчика в регистре Rd 1 0 1 1 1 0 d d d d d 0 1 1 0 0 j i i I i i i I i i i i i i I i BRKI Rd, Imm Переход в режим Break с передачей управления по непосредственно указы- ваемому адресу (адрес перехода указы- вается в форме знакового расширения константы 1mm) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
ГЛАВА 10 225 BRD Rb BRLD Rd,Rb Текущее значение Новое значение Текущее значение программного счетчика Регистр Rb IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 1ИНШИППШПИ+ BRID 1mm BRLID Rd,Imm Текущее значение ..........hllhhlll Регистр Rd Константа, указанная Новое значение Текущее значение ю вио^нде программного счетчика программного счетчика<—л ШШШШШШШШН-----------------ЕИНШПШШ1ШШ+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII Рис. 10.23. Выполнение инструкций безусловного перехода с относительной адресацией и задержкой исполнения Инструкции BRA Rb и BRAI Imm реализуют функцию безусловной передачи управления в программе с использованием абсолютной адресации, с регистровым косвенным и непосредственным указанием значения адреса перехода соответствен- но. В команде BRA значение адреса перехода определяется содержимым регистра общего назначения, номер которого указывается в качестве единственного параметра инструкции. Команда BRAI передает управление по адресу, который представляет собой результат знакового расширения 16-разрядной константы Imm, указанной не- посредственно в инструкции, до 32-разрядного слова. Рис. 10.24 демонстрирует вы- полнение команд безусловного перехода с абсолютной адресацией. Новое значение программного счетчика мт» -------------------- |BRARb| liiiiiiiiiiiiiii Регистр Rb Новое значение программного счетчика Константа, указанная в команде И5 iiiiiiiiiiiiiiiniiiiiiiiiiiiiiil Ullllllllllllllllllllllllllll iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil |BRAI lmm| Рис. 10.24. Выполнение инструкций безусловного перехода с абсолютной адресацией Команды BRAD Rb и BRAID Imm позволяют осуществлять безусловный переход с абсолютной адресацией и задержкой исполнения, которая необходима для завер- шения обработки следующей инструкции (находящейся в стадии декодирования). Единственным отличием команд BRALD Rd,Rb и BRALID Rd,Imm от предыдущей па- 8—2062
226 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ры инструкций является сохранение текущего состояния программного счетчика в регистре общего назначения, номер которого указывается в качестве значения перво- го параметра этих команд. На рис. 10.25 показана последовательность операций при выполнении команд безусловного перехода с абсолютной адресацией и задержкой исполнения. BRAD Rb BRALD Rd,Rb Текущее значение Новое значение программного счетчика Регистр Rb liiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil BRAID Imm BRALID Rd,Imm Текущее значение Исполнение инструкции, следующей за командой перехода программного счетчика ||BRALID Rd,Imm | Регистр Rd Новое значение программного счетчика 1ИВИЯИИ* Константа, указанная в команде llllllllllllllllllllllllllllllll Рис. 10.25. Выполнение инструкций безусловного перехода с абсолютной адресацией и задержкой исполнения Инструкции BRK Rd,Rb и BRKI Rd,Imm предназначены для реализации в про- грамме режима Break с передачей управления по указанному адресу. В этих коман- дах применяется абсолютная адресация. Первым параметром в данных инструкциях является номер одного из регистров общего назначения, который используется для записи значения текущего состояния программного счетчика. Содержимое этого ре- гистра впоследствии может использоваться в процессе вычисления адреса возврата при выполнении соответствующей инструкции. В качестве значения второго пара- метра команды BRK также указывается номер регистра, содержимое которого опре- деляет адрес передачи управления. В инструкции BRKI адрес перехода представляет собой результат знакового расширения 16-разрядной константы Imm, указанной не- посредственно в инструкции, до 32-разрядного слова. При исполнении рассмотрен- ных команд флаг Break in Progress Flag (28-й разряд регистра статуса) переключается в установленное состояние. Процесс выполнения команд BRK и BRKI иллюстрирует рис. 10.26.
ГЛАВА 10 227 |BRK Rd,Rb] Регистр Rd Текущее значение lllllllllllllllllll программного счетчика Новое значение программного счетчика ШПШПШППШШШПШ-'— Регистр Rb Break in Progress Регистр Rd lllllllllllllt IIIIIIHIIIIIIIHI Новое значение программного счетчика пииинин-— |BRKI Rd,lmm] Текущее значение I программного счетчика Progress —ь-Д Константа, указанная в команде Break in Мб liiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii IlilHIHIillllinmili iHiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil Рис. 10.26. Выполнение команд BRK и BRKI При условных переходах загрузка в программный счетчик нового адреса, по ко- торому передается управление в программе, производится только при выполнении соответствующего условия. Если заданное условие не выполнено, то программный счетчик продолжает работу в инкрементном режиме. Проверка выполнения соответ- ствующего условия заключается в сопоставлении с нулем значения содержимого од- ного из регистров общего назначения, номер которого указывается в качестве перво- го параметра инструкций условных переходов. Система команд микропроцессорных ядер семейства MicroBlaze содержит инструкции, позволяющие анализировать вы- полнение одного из шести типов условий: значение содержимого указанного регистра равно нулю; значение содержимого указанного регистра не равно нулю; значение содержимого указанного регистра меньше нуля; значение содержимого указанного регистра меньше или равно нулю; значение содержимого указанного регистра больше нуля; • значение содержимого указанного регистра больше или равно нулю. В отличие от команд безусловного перехода в инструкциях условных переходов всегда используется относительная адресация с регистровым косвенным и непосред- ственным указанием значения смещения. Все команды условной передачи управле- ния представлены в двух вариантах: с немедленным исполнением и с задержкой до завершения обработки следующей (декодируемой) инструкции. Форматы команд ус- ловных переходов представлены в табл. 10.18.
Таблица 10.18. Форматы команд условных переходов Поле кода операции Поле типа условия перехода Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 0 0 0 а а а ь b 0 0 0 0 0 0 0 0 0 BEQ Ra Rb Переход при условии, что значение содержимого регистра Ra равно ну- лю с регистровой косвенной адре сацией(адрес перехода формирует ся путем суммирования текущего значения программного счетчика и содержимого регистра Rb) 1 0 0 1 1 1 0 0 0 0 1 а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 BNE Ra, Rb Переход при условии что значение содержимого регистра Ra не равно нулю, с регистровой косвенной адре сацией 0 0 1 1 0 0 1 0 а а а а а ь ь ь b b 0 0 0 0 0 0 0 0 0 0 0 BLT Ra, Rb Переход при условии что значение содержимого регистра Ra меньше нуля, с регистровой косвенной адре сацией 1 0 0 1 1 1 0 0 0 1 а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BLE Ra, Rb Переход при условии, что значение содержимого регистра Ra меньше или равно нулю, с регистровой кос- венной адресацией 1 0 0 1 0 0 Г1- 0 0 а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BGT Ra, Rb Переход при условии, что значение содержимого регистра Ra больше нуля, с регистровой косвенной адре сацией 1 0 0 1 1 1 0 0 ч 0 1 а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 BGE Ra Rb Переход при условии, что значение содержимого регистра Ra больше или равно нулю, с регистровой кос венной адресацией 0 3 4 6 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
Продолжение табл 10 18 ерации Попе типа условия перехода Поле номера первого регистра Поле номера второго регистра Нулевые разряды Мнемоника Выполняемая операция 0 0 0 0 а а а а а b ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BEQD Ra, Rb Переход при условий, что значение содержимого регистра Ra равно ну- лю, с регистровой косвенной адре- сацией и задержкой исполнения (до )авершения обработки декодируе- мой инструкции) 1 1 1 0 0 0 1 а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BNED Ra, Rb Переход при условии, что значение содержимого регистра Ra не равно нулю, с регистровой косвенной ад- ресацией и задержкой исполнения 1 1 1 0 0 1 0 а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BLTD Ra, Rb Переход при условии, что значение содержимого регистра Ra меньше нуля, с регистровой косвенной адре- сацией и задержкой исполнения 1 1 1 0 0 а а а а а ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BLED Ra, Rb Переход при условии, что значение содержимого регистра Ra меньше или равно нулю, с регистровой кос- венной адресацией и задержкой ис- полнения 1 1 1 0 1 0 0 а а а а а ь ь ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BGTD Ra, Rb Переход при условии, что значение содержимого регистра Ra больше нуля, с регистровой косвенной адре- сацией и задержкой исполнения 1 1 1 0 1 0 а а а а а ь ь ь 0 0 0 0 0 0 0 0 0 0 0 BGED Ra, Rb Переход при условии, что значение содержимого регистра Ra больше или равно нулю, с регистровой кос- венной адресацией и задержкой ис- полнения 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды 229
Продолжение табл 10 18 Поле кода операции Поле типа условия перехода Поле номера первого регистра Лоле значения константы Мнемоника Выполняемая операция 0 0 0 0 0 а а а а а BEQI Ra, Imm Переход при условии, что значение содержимого регистра Ra равно ну- лю, с непосредственной адресацией адрес перехода формируется путем суммирования текущего значения программного счетчика и знакового расширения константы Imm) 1 0 1 1 1 1 0 0 0 0 1 а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 i BNEI Ra, Переход при условии, что значение содержимого регистра Ra неравно ну- лю, с непосредственной адресацией 0 1 1 1 1 0 0 0 0 а а а а а 1 i 1 1 1 1 1 * 1 1 1 1 1 1 i BLTi Ra, Переход при условии, что значение содержимого регистра Ra меньше ну- ля, с непосредственной адресацией 0 1 1 1 0 0 0 1 1 а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ' 1 BLEI Ra, Переход при условии, что значение содержимого регистра Ra меньше или равно нулю, с непосредственной адресацией 1 0 1 1 0 0 1 0 0 а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 BGTI Ra, Переход при условии, что значение содержимого регистра Ra больше ну- ля, с непосредственной адресацией 1 0 1 1 1 0 0 1 0 1 а а а а а 1 1 1 i 1 i 1 ' i 1 i 1 1 1 1 1 BGEI Ra, Переход при условии, что значение содержимого регистра Ra больше или равно нулю, с непосредственной адресацией 1 0 1 1 1 1 1 0 0 0 0 а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 i । 1 1 BEQID Ra, Imm Переход при условии, что значение содержимого регистра Ra равно ну- лю, с непосредственной адресацией и задержкой исполнения 2 3 4 5 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
Окончание табл 10 18 Поле кода операции Поле типа условия перехода Поле номера первого регистра Поле значения константы Мнемоника Выполняемая операция 0 0 0 0 а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I BNEID Ra,lmm Переход при условии, что значение Эдержимогр регистра Ra не равно аулю, с непосредственной адреса- цией и задержкой исполнения 0 0 0 0 а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 1 1 BLTID Ra, Imm Переход при условии, что значение содержимого регистра Ra меньше нуля, с непосредственной адресаци- ей изадержкой исполнения 0 0 0 1 а а а а а 1 1 1 1 1 1 1 * 1 1 1: ' 1 1 • BLEID Ra, Переход при условии, что значение содержимого регистра Ra меньше или равно нулю, с непосредственной адресацией и задержкой исполнения 0 0 0 0 а а а а а • 1 1 1 1 1 1 1 1 1 1 1 1 I BGTID Ra, Imm Переход при условии, что значение содержимого регистра Ra больше нуля, с непосредственной адресаци- ей и задержкой исполнения 0 0 0 а а а а а 1 1 1 1 1 1 1 1 1 1 1 1 BGEID Ra, Переход при условии, что значение содержимого регистра Ra больше 4ли равно нулю, с непосредственной адресацией и задержкой исполнения 0 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
232 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Инструкции BEQ Ra,Rb и BEQI Ra,Imm инициируют передачу управления по за- данному адресу при условии, что значение содержимого регистра общего назначения с номером а равно нулю. Адрес перехода формируется путем суммирования текуще- го значения программного счетчика и смещения, которое указывается в виде содер- жимого регистра общего назначения с номером b (в команде BEQ) или результата знакового расширения 16-разрядной константы Imm до 32-разрядного слова (в ко- манде BEQI). При исполнении команд BNE Ra,Rb и BNEI Ra,Imm управление переда- ется инструкции с указанным адресом только в случае, если значение содержимого регистра общего назначения с номером а не равно нулю. Инструкции BLT Ra,Rb и BLTI Ra,Imm загружают новое значение адреса в программный счетчик при условии, что значение содержимого регистра общего назначения с номером а меньше нуля. С помощью команд BLE Ra,Rb и BLEI Ra,Imm осуществляется переход к выполнению инструкции с указанным адресом, если содержимое регистра общего назначения с номером а меньше или равно нулю. Инструкции BGT Ra,Rb и BGTI Ra,Imm предна- значены для передачи управления в программе по новому адресу при условии, что значение содержимого регистра общего назначения с номером а больше нуля. Ко- манды BGE Ra,Rb и BGE1 Rajmm позволяют выполнить переход к инструкции с тре- буемым адресом, если содержимое регистра общего назначения с номером а больше или равно нулю. Рис. 10.27 поясняет выполнение команд условных переходов. Текущее значение не выполнено Новое значение программного счетчика шивпнв1виш ZBEQ Ra,Rb BNE Ra,Rb BLT Ra,Rb BLE Ra,Rb BGT Ra,Rb BGE Ra,Rb (Ra) - 0 (Ra) И 0 (Ra) < 0 (Ra) 3 0 (Ra) > 0 (Ra) £ 0 программного счетчика -ВИИПИИНИШ+Д выполнено Условие не выполнено Новое значение программного счетчика 1ШНШПШШ BEQI Ra,Rb BNEI Ra,Rb BLTI Ra.Rb BLEI Ra,Rb BGTI Ra,Rb BGEI Ra,Rb (Ra) - 0 (Ra) И 0 (Ra) < 0 (Ra) 3 0 (Ra) >0 (Ra) £ 0 Текущее значение программного счетчика — НШШВПВПВШШ+д Текущее значение программного счетчика Условие ШШШЛШШП1И+ Константа, указанная ю в команде ( К МО 116 llllllllllllllllllllllllllilllll выполнено Рис. 10.27. Выполнение инструкций условных переходов Инструкции BEQD Ra,Rb, BNED Ra,Rb, BLTD Ra,Rb, BLED Ra,Rb, BGTD Ra,Rb, BGED Ra,Rb, BEQID Ra,Imm, BNEID Ra,Imm, BLTID Ra,Imm, BLEID Ra,Imm, BGTID Rajmm, BGE1D Ra,Imm выполняют те же функции, что и команды BEQ, BNE, BLT, BLE, BGT, BGE, BEQI, BNEI, BLTI, BLEI, BGTI, BGEI, рассмотренные выше. Отличие заключается в том, что передача управления производится при выполнении соответ- ствующего условия только после завершения обработки следующей инструкции, на- ходящейся в стадии дешифровки. Процесс выполнения команд условного перехода с задержкой исполнения показан на рис. 10.28. В системе команд микропроцессорных ядер семейства MicroBlaze представлено 4 инструкции возврата управления в программе:
ГЛАВА 10 233 команда возврата из подпрограмм; команда возврата из процедур обслуживания прерываний; команда выхода из режима Break; команда возврата из процедур обработки исключений. Условие Текущее значение не выполнено Новое значение программного счетчика ШЛШНИШШЙЯШИНИИ Исполнение инструкции, следующей за командой перехода BEQD Ra,Rb BNED Ra,Rb BLTD Ra,Rb BLED Ra,Rb BGTD Ra,Rb BGED Ra,Rb (Ra) - 0 (Ra) t 0 (Ra) < 0 (Ra) $ 0 (Ra) > 0 (Ra) > 0 программного счетчика -М-4 Текущее значение программного счетчика Регистр Rb Условие выполнено liiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil Условие не выполнено Текущее значение программного счетчика Новое значение программного счетчика шишввзви BEQID Ra,Rb BNEID Ra,Rb BLTID Ra,Rb BLEID Ra,Rb BGTID Ra,Rb BGEID Ra,Rb Исполнение инструкции, следующей за командой перехода (Ra) О (Ra) * О (Ra) < О (Ra) S О (Ra) > О (Ra) * О Условие выполнено Текущее значение программного счетчика - IIHHMIW- iO Константа, указанная в команде 115 llllllllllllllllllllllllllliw Рис. 10.28. Выполнение инструкций условного перехода с задержкой исполнения Все команды этой подгруппы предусматривают задержку передачи управления до момента завершения исполнения следующей инструкции, находящейся в стадии дешифровки. Тем самым снижаются временные потери, связанные с необходимо- стью перезагрузки конвейера. В командах возврата применяется относительная адре- сация, при которой значение адреса возврата складывается из базового значения и смещения. Все 3 инструкции возврата управления используют два параметра. В качестве значения первого параметра указывается номер регистра общего назначения, в кото- ром содержится базовый адрес передачи управления. Вторым параметром является 16-разрядная константа, значение которой определяется непосредственно в составе инструкции. Результат знакового расширения этой константы до 32-разрядного слова используется в качестве значения смещения при относительной адресации. Форматы инструкций возврата управления приведены в табл. 10.19. Инструкция возврата из процедуры обслуживания прерывания RTID Ra,Imm предназначена для передачи управления программе, при выполнении которой посту- пил запрос прерывания. Адрес возврата вычисляется как сумма содержимого регист- ра общего назначения с номером а и результата знакового расширения константы Imm до 32-разрядного значения. После завершения исполнения этой команды флаг Interrupt Enable Flag (тридцатый разряд регистра статуса) переключается в установ- ленное состояние (высокого логического уровня), разрешая тем самым обработку по- следующих прерываний. Выполнение инструкции возврата из процедуры обслужи- вания прерывания демонстрирует рис. 10.29.
234 Таблица 10.19. Форматы команд возврата управления в программе Поле кода операции Поле типа возврата Поле номера первого регистра 1 Полезяачешяконстан/пь/ Мнемоника ВМлняеман операция 1 0 1 1 0 1 1 да 0 а а а а а ; £ i i i- ! i i : ||i 111 yi1; i 1 j 1 i i ii all RTID Ra, Imm Возврат из процедуры обработки прерывания с передачей управ- ления по адресу, равному сумме содержимого регистра Ra и зна- кового расширения константы Imm 1 0 1 1 0 1 0 о о 0 а а а а а 1 <:.Г i i ' i i i i I i 1 III ||| If) / i RTSD Ra, Imm Возврат из подпрограммы с пе- редачей управления по адресу, равному сумме содержимого ре- гистра Ra и знакового расшире- нияконстанты Imm 1 0 1 1 0 1 т 0 о If 0 а а а а а i j i I i i I . i J : i l£ |f- i If) RTBD Ra, Imm Возврат из режима Break с пере- дачей управления по адресу, равному сумме содержимого ре- гистра Ra и знакового расшире- ния константы Imm 1 0 1 1 0 1 1 0 0 1 1 а а а а а j I j t i i i i i 1 i i i i RTED Ra, Imm Возврат из режима обработки ис- ключения с передачей управле- ния по адресу, равному сумме содержимого регистра Ra и зна- кового расширения константы Imm 0 1 2 3 4 5 6:£ 7 Л 8 II 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 да да 30 31 Номер разряда микрокоманды
ГЛАВА 10 235 Исполнение инструкции, следующей за командой ______перехода_________ 4 Новое значение RTSD Rajmm RTID Rajmm RTED Rajmm RTBD Raj mm Текущее значение программного счетчика -^ввиишиш Константа, указанная _ в команде Текущее значение ю л программного счетчика программного счетчика^——w ^5 ШИМИН---------------И1ЖДПШШИ+1111111111111111111111И |RTBD Rajmm | Break In Progress Flag I RTID Rajmm | Interrupt Enable Flag ।-----------. 1 -*- Exception Enable Flag RTED Rajmm S 1-----------1 0-ЧИ Exception In Progress Flag Puc. 10.29. Выполнение инструкций возврата управления в программе Безусловное завершение выполняемой подпрограммы и передача управления ос- новной программе или подпрограмме, из которых производилось обращение к этой процедуре, осуществляется с помощью команды RTSD Rajmm. При возврате из под- программ выполняется та же последовательность действий, что и при возврате из процедуры обслуживания прерывания, но значения флагов регистра статуса не изме- няются (рис. 10.29). Команда RTBD Rajmm используется для выхода из режима Break с передачей управления по адресу, значение которого равно сумме содержимого регистра общего назначения с номером а и результата знакового расширения константы lmm. После ее исполнения флаг Break in Progress Flag (28-й разряд регистра статуса) переключается в сброшенное состояние (низкого логического уровня) (рис. 10.29). Возврат из процедур обработки исключений осуществляется с помощью коман- ды RTED Rajmm. Данная инструкция передает управление по адресу, значение кото- рого равно сумме содержимого регистра общего назначения с номером а и результа- та знакового расширения константы 1mm. В результате ее выполнения флаг Exception In Progress (22-й разряд регистра статуса) переключается в сброшенное состояние (низкого логического уровня), а флаг Exception Enable - в установленное состояние (высокого логического уровня). 10.9. Группа инструкций ввода/вывода Интерфейс ввода/вывода микропроцессорных ядер семейства MicroBlaze, соот- ветствующий спецификации FSL (Fast Simplex Link), поддерживает два режима пе- редачи данных: с блокировкой и без блокировки работы процессора. Для каждого из этих режимов предусмотрены соответствующие команды ввода/вывода. При выпол- нении инструкций, использующих режим блокировки, работа процессора приоста- навливается до завершения считывания или записи достоверных данных. Исполнение команд ввода/вывода без блокировки не останавливает функционирование процессо- ра независимо от того, могут ли быть считаны или переданы достоверные данные че- рез указанный канал интерфейса FSL.
236 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Одни и те же каналы интерфейса FSL могут использоваться для передачи как информационных, так и управляющих данных. Тип передаваемого слова данных оп- ределяет значение специального контрольного бита. В случае передачи информаци- онных данных значение этого бита должно быть равно нулю. Для идентификации управляющих данных используется единичное значение контрольного бита. Поэтому для передачи информационных и управляющих данных используются различные ва- рианты инструкций ввода/вывода. Команды ввода/вывода через каналы интерфейса FSL используют два параметра. Значение первого параметра определяет номер регистра общего назначения, исполь- зуемого в качестве приемника данных при операции ввода (чтения) или в качестве источника при выполнении операции вывода (записи). Второй параметр позволяет указать номер используемого канала интерфейса FSL. Система команд микропроцессорных ядер семейства MicroBlaze включает в себя 4 инструкции, предназначенные для чтения данных различного типа, поступающих через входной интерфейс FSL. Информация о форматах этих команд содержится в табл. 10.20. Команда GET Rd,FSLn выполняет операцию чтения информационных данных из л-го канала интерфейса FSL в регистр общего назначения с номером d, используя режим блокировки процессора. Инструкция NGETRdtFSLn предназначена для чтения информационных данных из n-го канала интерфейса FSL в регистр Rd без блокиров- ки. Считывание управляющих данных из n-го канала интерфейса FSL в регистр с но- мером d в режиме блокировки осуществляется с помощью команды CGET Rd,FSLn. Для чтения управляющих данных из n-го канала интерфейса FSL в регистр Rd без блокировки используется инструкция NCGET Rd,FSLn. Если при выполнении опера- ций чтения значение контрольного бита не соответствует ожидаемому типу данных, то флаг FSL Error Flag (27-й разряд регистра статуса MSR) устанавливается в состоя- ние, соответствующее высокому логическому уровню. При выполнении команд чте- ния без блокировки для достоверных данных флаг переноса Carry Flag (29-й разряд регистра статуса) сбрасывается в состояние низкого логического уровня. В случае чтения неверных данных флаг переноса устанавливается в состояние высокого логи- ческого уровня. Рис. 10.30 поясняет выполнение инструкций чтения данных из кана- лов интерфейса FSL Регистр Rd шишшвп 1 май GET Rd,FSLn NGET Rd.FSLn CGET Rd,FSLn NCGET Rd,FSLn Puc. 10.30. Осуществление операций чтения данных из каналов интерфейса FSL Для передачи данных различного типа из регистра общего назначения в выход- ной канал интерфейса FSL предусмотрено 4 варианта инструкций, форматы которых приведены в табл. 10.21, Передача информационных данных из регистра общего назначения с номером a в n-й канал интерфейса FSL в режиме блокировки осуществляется с помощью ко- манды PUT Ra,FSLn. Для записи информационных данных из регистра Ra в n-й канал
ГЛАВА 10 237 интерфейса FSL без блокировки предназначена команда NPUT Ra,FSLn. Команда CPUT Ra,FSLn выполняет операцию передачи управляющих данных из регистра Ra в n-й канал интерфейса FSL, используя режим блокировки процессора. Инструкция NCPUT RaJFSLn осуществляет вывод управляющих данных из регистра Ra в п-й ка- нал интерфейса FSL без блокировки. При успешном выполнении команд передачи данных из регистра общего назначения в выходной канал интерфейса FSL флаг пере- носа Carry Flag сбрасывается в состояние низкого логического уровня. В противном случае флаг переноса устанавливается в состояние высокого логического уровня. Рис. 10.31 поясняет выполнение команд передачи данных различного типа из регист- ра общего назначения в выходной канал интерфейса FSL. Регистр Ra Рис. 10.31. Выполнение инструкций передачи данных из регистра общего назначения в выходные каналы интерфейса FSL 10.10. Группа специальных команд Инструкции, входящие в данную группу, предназначены для копирования со- держимого регистров специального назначения в регистры общего назначения и на- оборот. Форматы специальных команд представлены в табл. 10.22. Инструкция MTS Rs,Ra позволяет загрузить содержимое выбранного регистра общего назначения с номером а в регистр специального назначения. Если в качестве первого параметра указано условное обозначение Rmsr (двоичное значение 001), то содержимое регистра общего назначения заносится в регистр состояния MSR. Когда первый параметр задается в виде условного обозначения Rfsr (двоичное значение 111), то содержимое регистра общего назначения загружается в регистр состояния операций с плавающей запятой Floating Point Status Register (FSR). Данные, записан- ные в регистр состояния с помощью команды MTS, вступают в силу через один цикл после исполнения этой инструкции. Команда MFS Rd,Rs выполняет копирование содержимого одного из регистров специального назначения Rs в регистр общего назначения с номером d. При исполь- зовании в инструкции MFS в качестве второго параметра условного обозначения Rmsr (двоичное значение 001) производится копирование содержимого регистра со- стояния MSR. Когда второй параметр принимает вид условного обозначения Rfsr (двоичное значение 111), то в указанный регистр общего назначения загружается со- держимое регистра состояния операций с плавающей запятой FSR. Если в качестве второго параметра указано условное обозначение Rpc (двоичное значение ООО), то в регистр общего назначения с номером d записывается содержимое программного счетчика. При использовании в качестве второго параметра условных обозначений Rear (двоичное значение 011) или Resr (двоичное значение 101) в регистр общего на- значения с номером d заносится содержимое регистров специального назначения EAR или ESR соответственно. Рис. 10.32 иллюстрирует выполнение специальных инструкций.
238 Таблица 10.20. Форматы команд чтения данных, передаваемых через интерфейс FSL Поле кода операции Поле номера регистра Нулевые разряды Поле режима чтения Номер канала интерфейса FSL Мнемоника Выполняемая операция 0 1 1 0 1 1 d d d d d 0 0 0 0 0 0 0 0 0 0 п п п п п п п п п п GET Rd, FSLn Чтение информационных данных из n-го канала ин терфейса FSL в регистр Rd в режиме блокировки 0 1 1 0 1 1 d d d d d 0 0 0 0 0 0 1 0 0 0 п п п п п п п п п п п NGET Rd, FSLn Чтение информационных данных из n-го канала ин- терфейса FSL в регистр Rd без блокировки 0 1 1 0 I 1 d d d d d 0 0 0 0 0 0 0 1 0 0 п п п п п п п п п п п CGET Rd, FSLn Чтение управляющих данных из n-го канала интерфейса FSL в регистр Rd в режиме блокировки 0 1 1 о 1 1 d d d d d 0 0 0 0 0 0 1 1 0 0 п п п п п п п п п п п NCGET Rd, FSLn Чтение управляющих данных из п го канала интерфейса FSL в регистр Rd без блоки- ровки 0 6 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
Таблица 10.21. Форматы команд записи данных в выходной канал интерфейса FSL Поле кода операции Нулевые разряды Поле номера регистра Поле режима вывода Номер канала интерфейса FSL Мнемоника Выполняемая операция 0 1 1 0 1 1 0 0 0 0 0 а а а а а 1 0 0 0 0 п п п п п п п п п п п PUT Ra, FSLn Передача информационных данных из регист- ра Ra в n-й канал интерфейса FSL в режиме злокировки о 1 0 1 1 0 0 0 0 0 а а а а а 1 1 0 0 0 п п п п п п п п п п п NPUT Ra, FSLn Передача информационных данных из регист pa Ra в n-й канал интерфейса FSL без блоки ровки 0 1 1 0 1 1 0 0 0 0 0 а а а а а 1 0 1 0 0 л п п п п п п л п п п CPUT Ra, FSLn Передача управляющих данных из регистра Ra в n-й канал интерфейса FSL в режиме блоки ровки 0 1 1 0 1 1 0 0 0 0 0 а а а а а 1 1 1 0 0 л п п п п п п П Л п п NCPUT Ra, FSLn Передача управляющих данных из регистра Ra в n-й канал интерфейса FSL без блокировки с^_ 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Таблица 10.22. Форматы специальных команд Поле кода операции Нулевые разряды Поле номера регистра обще- го назначения Поле направления передачи данных и типа регистра специального назначения Мнемоника Выполняемая операция 1 0 0 1 0 0 0 0 0 0 а а а а а 1 100000000000SS3 MTS Rs, Ra Загрузка содержимого регистра общего назначения Ra в регистр специального назначения 4 5 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Поле кода операции Поле номера регистра общего назначения Нулевые разряды Поле направления передачи данных и типа регистра специального назначения Мнемоника Выполняемая операция 1 0 0 1 о d d d d d 0 0 0 0 0 1000000000000 sss MFS Rd, Rs Загрузка содержимого регистра специального назначения в ре- гистр общего назначения Rd 0 3 4 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
240 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС |MTS Rmsr.Ra] Регистр Ra винииииизшии Регистр состояния MSR [MFS Rd,Rmsr] Регистр Rd плшшшшшшшппш Регистр состояния MSR | MFS Rd, Rpc~| Регистр Rd 1111111111 III НН II11 IIIIHIHIIi вии Программный счетчик miiiiiMMiMHiiMisil | MTS Rfsr,Ra~| ШИШИИИИ Регистр состояния FSR | MFS Rd, Rfar] Регистр Rd iiriiiiiriTrrrrmiii inn и uni WffltttttttWttWtttttttWt IIIHIIHII HI IIHI111II1111111II Регистр состояния FSR |MFS Rd,Rear] |MFSRd,Resr| WtffltffltttttttWHWtttttt ивяишши]] Регистр специального назначения ( EAR, ESR) Рис. 10.32. Выполнение специальных инструкций 10.11. Инструкции записи в кеш-память Для работы с кеш-памятью в системе команд микропроцессорных ядер семейст- ва MicroBlaze предусмотрены две инструкции, позволяющие загружать содержимое выбранного регистра общего назначения в кеш-память данных и в кеш-память ко- манд. Эти инструкции используют два параметра. В качестве первого параметра ука- зывается номер регистра общего назначения, который используется для хранения ад- реса записи. Второй параметр определяет номер регистра общего назначения, содер- жимое которого копируется в кеш-память. Форматы команд, предназначенных для работы с кеш-памятью, определены в табл. 10.23. Инструкция WIC Ra,Rb используется для загрузки содержимого регистра общего назначения с номером b в кеш-память команд. Инструкция WDC Ra,Rb выполняет операцию копирования содержимого регистра с номером b в кеш-память данных. Рис. 10.33 поясняет процесс выполнения этих команд. WIC Ra,Rb Адрес WDC Ra,Rb Регистр Ra записи 111111111И111111111111Н1111ITT1---- кэш-память - 1!1ИИа^ЩФ1ШЫШЫФ11ШЖЙШ44ИШШ - tttttttttttttttttttttttttttttttt данные Регистр Rb |||||||||||||||||ПТПТП1 ГГТГГП Рис. 10.33. Осуществление операций записи данных и команд в кеш-память 10.12. Инструкции поразрядного сравнения двух операндов В группу команд поразрядного сравнения двух операндов входят 3 инструкции. В качестве операндов в этих командах используется содержимое двух регистров об- щего назначения, которые указываются в виде 2-го и 3-го параметров инструкции. Результат выполненной операции сравнения заносится в регистр общего назначения, который задается в форме 1-го параметра команды. Форматы команд поразрядного сравнения двух операндов приведены в табл. 10.24.
Таблица 10.23. Форматы команд записи данных и команд в кеш-память Поле кода операции Поле номера первого регистра Поле номера первого регистра Попе номера второго регистра Поле типа кеш-памяти Мнемоника Выполняемая операция 1 0 0 1 0 0 а а а а а а а А а а b Ь ь Ь b: 0 0 0 0 1 1 0 1 0 0 0 WIC Ra, Rb Загрузка содержимого регистра Rb в кеш-память команд 1 0 0 1 0 0 а а а а а а а А а а b b Ь b ь 0 0 0 0 1 1 0 0 1 0 0 WDC Ra, Rb Загрузка содержимого регистра Rb в кеш-память данных 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды Таблица 10.24. Форматы команд поразрядного сравнения двух операндов Поле кода операции Поле номера первого регистра Поле номера второго регистра Поленомера третьего регистра Поле типа операндов Мнемоника Выполняемая операция 1 0 0 0 1 0 d d d d d а а а а а b b ь ь b 1 0 0 0 0 0 0 0 0 0 0 PCMPEQ Rd.Ra.Rb Проверка эквивалентности содержимого регистров Rb и Ra 1 0 0 0 1 1 d d d d d а а а а а b b ь ь Ь 1 0 0 0 0 0 0 0 0 0 0 PCMPNE Rd.Ra.Rb Проверка неэквивалентности содержимого регистров Rb и Ra 1 0 0 0 0 0 d d d d d а а а а а b b ь ь Ь 1 0 0 0 0 0 0 0 0 0 0 PCMPBF Rd.Ra.Rb Последовательное побайтное сравнение содержимого реги- стров Rb и Ra 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды ю
242 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Команда PCMPEQ Rd,Ra,Rb выполняет проверку эквивалентности содержимого регистров общего назначения с номерами а и Ь. Если содержимое указанных регист- ров совпадает, то в регистр с номером d записывается единичное значение. В про- тивном случае в регистр с номером d заносится нулевое значение. Рис. 10.34 иллюст- рирует процесс выполнения операций поразрядного сравнения. Инструкция PCMPNE Rd,Ra,Rb предназначена для проверки неэквивалентности содержимого регистров с номерами а и Ь. Если содержимое этих регистров различается, то в регистр с номе- ром d записывается единичное значение. В случае совпадения содержимого указан- ных регистров в регистр с номером d заносится нулевое значение. Регистр Rd Условие выполнено Рис. 10.34. Осуществление операций поразрядного сравнения содержимого двух регистров Команда PCMPBF Rd,Ra,Rb выполняет последовательное побайтовое сравнение содержимого регистров общего назначения с номерами а и b до первого совпадения. Процесс проверки начинается со старшего значащего байта и завершается младшим. По результатам сравнения в регистр с номером d записывается номер байта, в кото- ром произошло совпадение значений. Если содержимое указанных регистров отлича- ется в каждом байте, то в регистр с номером d заносится нулевое значение. 10.13. Группа команд, предназначенных для выполнения операций с плавающей запятой Команды, используемые для выполнения операций с плавающей запятой, по функциональному признаку можно было бы отнести к группе арифметических инст- рукций. Но, учитывая, что процесс выполнения операций с плавающей запятой имеет ряд специфических особенностей, целесообразно объединить соответствующие ко- манды в отдельную группу. В этой группе можно выделить две подгруппы. В первую подгруппу входят инструкции, предназначенные для выполнения основных арифме- тических операций (сложение, вычитание, умножение и деление). Вторую подгруппу образуют команды сравнения двух операндов с плавающей запятой. В командах, предназначенных для выполнения операций с плавающей запятой, используется 3 параметра. Первый параметр определяет номера регистра общего на- значения, который применяется для записи полученного результата. Оставшиеся два параметра указывают номера регистров общего назначения, которые содержат зна- чения соответствующих операндов. При выполнении инструкций, относящихся к данной группе, признаки результата операции записываются в регистр специально- го назначения FSR, который выполняет функции регистра статуса для операций
ГЛАВА 10 243 с плавающей запятой. Форматы инструкций, предназначенных для выполнения арифметических операций с плавающей запятой, представлены в табл. 10.25. Команда FADD Rd, Ra, Rb выполняет сложение двух операндов с плавающей за- пятой, значения которых содержатся в регистрах общего назначения с номерами а и b и запись результата в регистр с номером d. Для вычисления разности содержимого двух регистров общего назначения с номерами b и а, интерпретируемого как числа с плавающей запятой, предназначена команда FRSUB Rd,Ra,Rb. Выполнение команд сложения и вычитания операндов с плавающей запятой иллюстрирует рис. 10.35. | FADD Rd,Ra^Rb] Регистр Ra Регистр Rb Регистр Rd [ЩЩШДШЖШШПШШ Overflow Нет переполнения ИМ Есть переполнение' 4 111 1111Ж11И1H4UIIHHI III It 1+ГТПТТ11 III.I.Ill 1ТПТТП Регистр Rd | FRSUB Rd;Ra^Rb~| Регистр Rb Регистр Ra □шшшшшшпзшшш * * ШШПШШППШШШШ] - шшпшшшшшппшш Underflow Flag .. Нет исчезновения значимых разрядов НИ Есть исчезновение значимых разрядов 1 Overflow F,a9 Нет переполнения Q Рис. 10.35. Выполнение инструкций сложения и вычитания операндов с плавающей запятой Умножение двух операндов с плавающей запятой, содержащихся в регистрах общего назначения с номерами а и Ь, и запись полученного результата в регистр с номером d осуществляются с помощью инструкции FMUL Rd,Ra,Rb. Команда FDIV Rd,Ra,Rb выполняет операцию деления над двумя операндами с плавающей запятой, содержащимися в регистрах с номерами а и Ь, и запись результата в регистр с номе- ром d. Если содержимое регистра делителя представляет собой нулевое значение, то флаг деления на нуль DivideByZero Flag (28-й разряд регистра статуса FSR) уста- навливается в состояние высокого логического уровня. В случае, когда значение де- лителя отличается от нуля, флаг DivideByZero Flag находится в сброшенном со- стоянии. Рис. 10.36 наглядно поясняет выполнение инструкций умножения и деления операндов с плавающей запятой. [FMUL Rd,Ra3b] Регистр Rd Регистр Ra Регистр Rb Overflow Underflow *22? Нет переполнения Flafl нет исчезновения значимых разрядов I А I --------------------------------- — WW у Есть переполнение Есть исчезновение значимых разрядов |FDIV Rd,Ra,Rb| Регистр Rd Регистр Ra Регистр Rb ШШШИШШШВШ] *- Nllllllllllillllll'HHinillliri/lllllllllllllll.........................НП1111ПТП Division by Zero Underflow Overflow Flag Flag Flag (Ra)^o_ Нет исчезновения значимых разрядов Нет переполнения — 1^1 ---------------------------------------О ” (Ra)-o j Т | Есть исчезновение значимых разрядов №1 ^Есть переполнение 1 Рис. 10.36. Выполнение команд умножения и деления операндов с плавающей запятой
244 Таблица 10.25. Форматы команд, предназначенных для выполнения арифметических операций с плавающей запятой Поле кода операции Поленомера первого регистра Поле номера второго регистра Поленомера третьего регистра Поле типа операции > Мнемоника Выполняемая операция 0 1 0 1 1 0 d d d d d а а а а а Ь :g: b b ь 0 0 0 0 0 0 0 0 0 0 0 FADD Rd, Ra, Rb Сложение двух операндов с плавающей запятой, содержащихся в регистрах Ra и Rb и запись результата в регистр Rd 0 1 0 1 1 0 d d d: d: d а а а а а b Ь Jg Ь ь 0 0 0 1 0 0 0 0 0 0 0 FRSUB Rd.Ra.Rb Вычисление разности двух операндов с плавающей запятой, содержащихся в регистрах Ra и Rb и запись результата в регистр Rd 0 1 0 1 1 0 d d d d d : а а а а а Ь Ь ь ь 0 0 1 0 0 0 0 0 0 0 0 FMUL 7 Rd.Ra.Rb Умножение двух операндов с плаваю- щей запятой, содержащихся в регистрах Ra и Rb и запись результата в регистр Rd 0 1 0 1 1 0 d d d d d а а а а а b b ь ь Ь 0 0 1 1 0 0 0 0 0 0 0 FDIV Rd,Ra,Rb Деление двух операндов с плавающей запятой, содержащихся в регистрах Ra и Rb и запись результата в регистр Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
ГЛАВА 10 245 Если при выполнении арифметических операций с плавающей запятой возникает переполнение, то флаг Overflow Flag (29-й разряд регистра статуса FSR) переключа- ется в установленное состояние. При отсутствии переполнения этот флаг сбрасыва- ется в состояние низкого логического уровня. В случае, когда в результате выполне- ния арифметических операций с плавающей запятой происходит исчезновение зна- чащих разрядов, флаг Underflow Flag (ЗО-й разряд регистра статуса FSR) принимает значение логической единицы. В противном случае данный флаг остается в сбро- шенном состоянии. Информация о форматах команд, предназначенных для выполнения операций сравнения операндов с плавающей запятой, приведена в табл. 10.26. Инструкции, предназначенные для сравнения операндов с плавающей запятой, фактически проверяют выполнение утверждений, устанавливающих одно из возмож- ных соотношение их значений. Если соотношение значений содержимого регистров общего назначения с номерами а и b соответствует условию, указанному в команде, то в регистр с номером d записывается единичное значение. В противном случае, в регистр с номером d заносится нулевое значение. Процесс выполнения инструкций сравнения двух операндов с плавающей запятой поясняет рис. 10.37. Регистр Rd FCMP.UN Rd,Ra,Rb FCMP.LT Rd,Ra,Rb FCMP.EQ Rd,Ra,Rb FCMP.LE Rd,Ra,Rb FCMP.GT Rd,Ra,Rb FCMP.NE Rd,Ra,Rb FCMP.GE Rd,Ra,Rb Условие не выполнено (Ra) - NaN или (Rb)» NaN (Rb) < (Ra) (Rb)=(Ra) (Rb) $ (Ra) (Rb) >(Ra) (Rb) j*(Ra) (Rb)>(Ra) Условие выполнено о 1 Puc. 10.37. Выполнение инструкций сравнения двух операндов с плавающей запятой На этом завершается описание системы команд микропроцессорных ядер семей- ства MicroBlaze. Прежде чем приступить к изучению процесса разработки встраи- ваемых систем на основе этих модулей, необходимо познакомиться с программными средствами проектирования, составной частью которых является семейство ядер MicroBlaze. Поэтому в следующей главе будут рассмотрены характеристики и струк- тура комплекса Embedded Development Kit, предлагаемого фирмой Xilinx в качестве основного инструмента разработки и отладки встраиваемых 32-разрядных микро- процессорных систем на основе ПЛИС серий FPGA.
246 Таблица 10.26. Форматы команд, предназначенных для выполнения операций сравнения операндов с плавающей запятой Поле кода операции Поле номера первого регистра Поле номера второго регистра ЭД : mpO/TlbCSO регистра Поле типа операции Мнемоника Выполняемая операция 0 1 0 1 1 0 d d d a d а а а а а b ь ь да ь 0 1 0 0 0 0 0 0 0 0 0 FCMP.UN Rd,Ra,Rb Сравнение значений с плавающей запятой, содержащихся в регистрах Ra и Rb, с NaN и запись результата в регистр Rd 0 1 0 1 1 0 d d d d d а а а а а b да ь да 0 1 0 0 0 0 1 0 0 0 0 FCMP.LT Rd,Ra,Rb Проверка условия, что значение с плаваю- щей запятой, содержащееся в регистре Rb, меньше значения содержимого регистра Ra и запись результата в регистр Rd 0 1 0 1 1 0 d d d d d а а а а а b Ь- да ь ь 0 1 0 0 0 1 0 0 0 0 0 FCMP.EQ Rd,Ra,Rb Проверка условия, что значение с плаваю- щей запятой, содержащееся в регистре Rb, равно значению содержимого регистра Ra и запись результата в регистр Rd 0 1 0 1 1 0 d d d d d а а а а а b ь ь b ь 0 1 0 0 0 1 1 0 0 0 0 fcmp.le Rd,Ra,Rb : Проверка условия, что значение с плавающей запятой, содержащееся в регистре Rb, меньше или равно значению содержимого регистра Ra и запись результата в регистр Rd 0 1 0 1 1 0 d d d d d а а а а а b ь ь ь ь 0 1 0 0 1 0 0 0 0 0 0 FCMP.GT Rd,Ra,Rb Проверка условия, что значение с плаваю- щей запятой, содержащееся в регистре Rb, больше значения содержимого регистра Ra и запись результата в регистр Rd 0 1 0 1 1 0 d d: d а а а а а ь ь да да 0 1 0 0 1 0 1 0 0 0 0 FCMP.NE Rd,Ra,Rb Проверка условия, что значение с плаваю- щей запятой, содержащееся в регистре Rb, не равно значению содержимого регистра Ra и запись результата в регистр Rd 0 1 0 1 1 0 d d d d d а а а а а ь ь ь ь ь 0 1 0 0 1 1 0 0 0 0 0 FCMP.GE Rd.Ra.Rb Проверка условия, что значение с плавающей запятой, содержащееся в регистре Rb, больше или равно значению содержимого регистра Ra и запись результата в регистр Rd 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2о 21 22 23 24 25 26 27 28 29 30 31 Номер разряда микрокоманды
11. EMBEDDED DEVELOPMENT KIT-СИСТЕМА ПРОЕКТИРОВАНИЯ ВСТРАИВАЕМЫХ 32-РАЗРЯДНЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ПЛИС СЕРИЙ FPGA ФИРМЫ XILINX Пакет Xilinx Embedded Development Kit (EDK) представляет собой комплекс средств автоматизированного проектирования, позволяющий выполнять разработку и отладку не только аппаратной, но и программной части встраиваемой микропро- цессорной системы. В настоящей главе приводятся характерные особенности, описа- ние структуры л пользовательского интерфейса этого пакета. Кроме того, здесь же рассматриваются основные этапы проектирования 32-разрядных встраиваемых мик- ропроцессорных систем на основе ядер семейства MicroBlaze, осуществляемого с помощью комплекса Xilinx EDK. 11.1. Основные характеристики пакета Xilinx Embedded Development Kit Отличительными особенностями комплекса проектирования встраиваемых мик- ропроцессорных систем Xilinx Embedded Development Kit являются: возможность совместной разработки и отладки программной и аппаратной части микропроцессорной системы в рамках одного пакета; поддержка различных способов описания аппаратной части разрабатываемой системы; тесная интеграция САПР со стандартными средствами разработки проектов и программирования ПЛИС серии ISE: ISE BaseX и ISE Foundation; возможность применения разнообразных средств отладки программной и аппа- ратной частей создаваемых систем; возможность формирования моделей аппаратной части для последующей верификации в среде пакета ModelSim ХЕ; наличие обширной библиотеки компонентов периферийных модулей микропро- цессорной системы, представленных в виде Intellectual Property IP-ядер, которые позволяют значительно ускорить и упростить процесс разработки «систем на кристалле»; наличие шаблонов для разработки оригинальных пользовательских ядер; возможность применения мастера создания новых системных платформ Base System Build Wizard™, позволяющего ускорить процесс разработки и избежать потенциальных ошибок; наличие мастера Import Peripheral Wizard™, который существенно облегчает включение входящих в состав пакета и разработанных пользователем ядер пери- ферийных модулей в состав новых проектов; простота и наглядность пользовательского интерфейса, повышающие эффектив- ность процесса разработки. В состав пакета Xilinx Embedded Development Kit входят: средства разработки встраиваемых микропроцессорных систем Embedded System Tools (EST);
248 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС комплект IP-компонентов встраиваемых микропроцессорных систем (микропро- цессорные ядра и периферийные модули); дополнительные средства разработки прикладного программного обеспечения встраиваемых микропроцессорных систем Xilinx Platform Studio SDK; документация. Система автоматизированного проектирования Xilinx EDK поддерживается сле- дующими ОС: Windows 2000 (Service Pack 2 и выше); Windows XP; - Solaris™ 2.8/2.9. Пакет Xilinx EDK рассчитан на совместную работу с аналогичной версией стан- дартных средств разработки проектов и программирования ПЛИС серии ISE за ис- ключением свободно распространяемой версии ISE WebPack. САПР Xilinx EDK позволяет реализовать полный цикл разработки встраиваемых микропроцессорных систем на основе 32-разрядного ядра с RISC (Reduced Instruction Set СотрШег)-архитектурой MicroBlaze или аппаратного микропроцессорного моду- ля PowerPC. Для реализации микропроцессорных систем, проектируемых на базе яд- ра MicroBlaze, могут использоваться ПЛИС с архитектурой FPGA следующих се- мейств: Spartan-II (кристаллы с объемом 50 тыс. системных вентилей (XC2S50) или более); Spartan-IIE; Spartan-3; Spartan-3L; Spartan-3E; Virtex/E (кристаллы с объемом 50 тыс. системных вентилей (XCV50) или более); Virtex-П (кристаллы с объемом 250 тыс. системных вентилей (XC2V250) или более); Virtex-II Pro; Virtex-4. Встраиваемые системы, разрабатываемые на базе аппаратного микропроцессор- ного модуля PowerPC, предназначены для реализации в кристаллах семейств Virtex-II Pro и Virtex-4. Для ускорения процесса разработки и аппаратной отладки микропроцессорных систем, проектируемых на базе ядра MicroBlaze или модуля PowerPC, могут исполь- зоваться инструментальные комплекты и демонстрационные платы на основе соот- ветствующих ПЛИС, выпускаемые различными производителями. В пакете Xilinx EDK предусмотрена поддержка широкого набора инструментальных комплексов и отладочных плат, в том числе: Avnet® Spartan-II Evaluation Kit; AvnetVirtex-E Evaluation Kit; Digilent® Spartan-IIE Board; • Memec® Design Virtex-E Demo Board; Memec Design Spartan-II Demo Board; Memec Design Virtex-II MicroBlaze Board; Memec Design Virtex-II Pro Board; Memec Design The Virtex-II Pro FG456 Development Kit;
ГЛАВА 11 249 Memec Design Virtex-II Pro FF1152 Development Kit; Memec Design Virtex-II Pro FF672 Development Kit; Memec Design Spartan-3 LC Development Kit; Xilinx Spartan-3 Starter Kit; Xilinx Virtex-II Multimedia Board; Xilinx ML300 Evaluation Platform; Xilinx ML310 Embedded Development Platform; Xilinx AFX Board. Кроме указанных отладочных плат, средства проектирования Xilinx EDK позво- ляют использовать готовые аппаратные решения различных фирм, загрузив соответ- ствующие данные, описывающие их конфигурацию, непосредственно с Web-стра- ницы фирмы-производителя. 11.2. Структура средств разработки встраиваемых микропроцессорных систем Embedded System Tools Средства разработки Xilinx EST представляют собой комплекс инструментов, выполненных в виде программных модулей, которые предназначены для осуществ- ления соответствующих этапов проектирования встраиваемых микропроцессорных систем. Эти программные модули могут активизироваться как автономно, так и в среде графической управляющей оболочки. Запуск отдельных модулей пакета Xilinx EST в автономном режиме может осуществляться с помощью соответствующей ко- мандной строки. В структуре средств разработки встраиваемых микропроцессорных систем Xilinx EST можно выделить две группы программ и управляющую оболочку. К первой группе программ относятся инструменты, необходимые для проектирования аппа- ратной части встраиваемых микропроцессорных систем. В данную группу входят программы, выполняющие следующие функции: создание и редактирование спецификаций аппаратной части разрабатываемой системы; формирование HDL-описаний и списка соединений проектируемой аппаратной платформы; создание и редактирование спецификаций моделей компонентов аппаратной платформы разрабатываемой микропроцессорной системы; генерацию моделей компонентов аппаратной платформы для последующей верификации проектируемой системы. В эту же группу можно также включить модули, которые используются в качестве инструментов пакета Xilinx EST, но являются самостоятельными программами или при- надлежат к другим системам проектирования. Такими инструментами являются: различные программы моделирования, как, например, ModelSim ХЕ; программы размещения и трассировки проекта в кристаллах семейств FPGA; модуль конфигурирования ПЛИС семейств FPGA и программирования конфигу- рационных ПЗУ/ППЗУ iMPACT. Ко второй группе относятся инструменты разработки программных компонентов встраиваемых микропроцессорных систем. В этой группе представлены программы, которые выполняют следующие функции:
250 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС создание и редактирование спецификаций программной платформы, которая со- держит библиотеки, драйверы и процедуры обслуживания прерываний компо- нентов разрабатываемой системы; формирование модулей программной платформы проектируемой системы; создание и редактирование исходных модулей прикладных программ (приложе- ний) для разрабатываемой микропроцессорной системы; компиляцию исходных модулей прикладных программ; отладку программ на уровне инструкций микропроцессорного ядра; комплексную отладку прикладных программ проектируемой системы; преобразование исполняемого кода программ в загружаемый код кристаллов FPGA. Функции управляющей графической оболочки выполняет программа Xilinx Platform Studio (XPS), образуя интегрированную среду разработки и отладки аппа- ратной и программной части встраиваемых микропроцессорных систем. В более наглядной форме структура средств Xilinx EST показана на рис. 11.1. Средства создания и редактирования спецификации аппаратной платформы Мастер формирования новых системных платформ Base System Builder (BSB) wizard Средства создания и редактирования спецификации программной платформы > Генератор библиотек Library Generator ] Генератор списка соединений аппаратной платформы Platform Generator Средства создания и редактирования спецификации моделирования аппаратной платформы Управляющая оболочка Средства создания и редактирования исходных модулей прикладных программ Средства компиляции прикладных программ GNU Compiler Tools Генератор моделей аппаратной платформы Simulation Model Generator Xilinx Platform Studio (XPS) Отладчик прикладных программ GNU Debugger Средства моделирования аппаратной платформы Средства отладки прикладных программ Xilinx Microprocessor Debugger (XMD) Программы размещения и трассировки проекта в кристаллах семейств FPGA Утилита включения исполняемого кода ► прикладных программ в конфигурационную последовательность ПЛИС Bitlnit Модуль конфигурирования ПЛИС и программирования конфигурационных ПЗУ/ППЗУ IMPACT Рис. 11.1. Структура средств разработки встраиваемых микропроцессорных систем EST Рассмотрим более детально основные составляющие средств разработки встраи- ваемых микропроцессорных систем Xilinx EST. Конфигурация аппаратной части проектируемой микропроцессорной системы определяется спецификацией MHS (Microprocessor Hardware Specification). В этой спецификации описываются: архитектура шин; микропроцессорные ядра; используемые периферийные модули; конфигурация взаимосвязей компонентов разрабатываемой системы;
ГЛАВА 11 251 приоритеты запросов прерывания; диапазоны адресов памяти, используемые компонентами проектируемой системы. Спецификация аппаратной части микропроцессорной системы представляет со- бой текстовый файл с расширением MHS. Для создания и модификации этого файла может использоваться любой текстовый редактор. Интегрированная среда разработ- ки проекта средств Xilinx EST содержит встроенный редактор, который может быть эффективно использован для подготовки спецификации аппаратной части проекти- руемой системы. Более наглядным способом генерации файла MHS является исполь- зование интерактивных и графических средств, которые входят в состав пакета Xilinx EST. К ним относится, в частности, графический редактор структурных схем Platform Block Diagram Editor. С его помощью создается представление спецификации MHS в виде структурной схемы (диаграммы), которое автоматически транслируется в тек- стовый формат. Кроме того, файл спецификации аппаратной части разрабатываемой системы может быть также автоматически сформирован с помощью мастера созда- ния новых системных платформ Base System Build Wizard. Спецификация MHS является исходным модулем в процессе генерации списка соединений (netlist) проектируемой микропроцессорной системы. Формирование файлов списков соединений осуществляется с помощью программы Platform Gene- rator (PlatGen) в автоматическом режиме. Данная программа создает файлы списков соединений различных форматов, например NGC и EDIF. Кроме того, программа Platform Generator формирует файл директив синтеза аппаратной платформы разра- батываемой системы. Для верификации аппаратной части проектируемой системы необходимо подго- товить спецификацию моделей компонентов, которые входят в ее состав. Специфи- кация моделирования базируется на основе аппаратной платформы разрабатываемой системы. В этой спецификации указывается тип используемой модели для каждого процессорного ядра, периферийного устройства и других модулей, входящих в со- став аппаратной части микропроцессорной системы. Создание спецификации моде- лей компонентов осуществляется с помощью средств редактирования управляющей оболочки XPS. На основе спецификации моделирования программа Simulation Model Generator (SimGen) формирует файлы соответствующих моделей, представленных в виде опи- саний на языках HDL высокого уровня VHDL, Verilog или скомпилированных моду- лей. Кроме HDL-описаний моделей программа Simulation Model Generator позволяет создавать файлы сценариев моделирования. В качестве основных средств верификации аппаратной части разрабатываемой системы могут использоваться пакеты программных средств HDL-моделирования ModelSim или ISE Simulator. Совместно с EDK применяется специализированная ре- дакция системы моделирования ModelSim - ModelSim Xilinx Edition (ХЕ), ориенти- рованная на интеграцию с программным обеспечением фирмы Xilinx. В рамках ука- занных пакетов может быть осуществлено как функциональное, так и полное (вре- менное) моделирование аппаратной части разрабатываемой системы. При этом функциональное моделирование может проводиться на поведенческом и структур- ном уровне. Размещение и трассировка проекта разрабатываемой системы в кристаллах се- мейств FPGA, а также конфигурирование ПЛИС и программирование конфигураци-
252 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС онных ПЗУ/ППЗУ производится с помощью программных средств iMPACT, которые входят в состав стандартных САПР фирмы Xilinx серии ISE. Конфигурация программной платформы разрабатываемой системы определяется спецификацией Microprocessor Software Specification (MSS). В этой спецификации указываются следующие данные: « опции микропроцессорных ядер и модулей периферийных устройств; информация о драйверах периферийных устройств и стандартных устройств вво- да/вывода; информация об используемых библиотеках; информация о программах обработки прерываний. Файл спецификации MSS имеет текстовый формат. Для его подготовки может использоваться любой текстовый редактор. Достаточно удобно для этих целей при- менять встроенный текстовый редактор, который входит в состав интегрированной среды разработки XPS. Кроме того, управляющая оболочка XPS предоставляет инте- рактивные средства генерации спецификации MSS. Наиболее эффективным инстру- ментом создания спецификации программной платформы разрабатываемой системы является мастер Base System Build Wizard. На основе спецификации программной части разрабатываемой системы про- грамма Library Generator (LibGen) конфигурирует необходимые библиотеки, проце- дуры обслуживания прерываний и драйверы для используемых периферийных моду- лей и стандартных устройств ввода/вывода. Прикладные программы для проектируемой микропроцессорной системы могут разрабатываться как с применением языков высокого уровня C/C++, так и непосред- ственно на языке ассемблера. Создание и правка исходных модулей приложений в процессе их отладки может осуществляться в рамках различных текстовых редакто- ров, в частности с помощью встроенного текстового редактора, который входит в состав интегрированной среды разработки проекта XPS. Преобразование исходных модулей прикладных программ в исполняемый код выполняется с помощью средств GNU Compiler Tools, которые входят в состав паке- та Xilinx EST. Средства GNU Compiler Tools последовательно осуществляют компи- ляцию исходных модулей в объектные файлы и компоновку объектных модулей в исполняемый код. Подробная структура средств компиляции и компоновки приклад- ных программ GNU Compiler Tools представлена на рис. 11.2. В состав средств GNU Compiler Tools входят: препроцессор; компилятор С; компилятор C++; ассемблер MicroBlaze; ассемблер PowerPC; компоновщик MicroBlaze; компоновщик PowerPC. Препроцессор осуществляет преобразование исходного текста прикладных про- грамм на основании специальных директив препроцессора, которые располагаются в исходных модулях. В соответствии с этими директивами препроцессор может, в ча- стности, выполнять развертывание макросов, а также включать содержимое одних файлов в состав других.
ГЛАВА 11 253 Исходные файлы C/C++ Исполняемый код Исполняемый код MicroBlaze PowerPC Рис. 11.2. Структура средств компиляции и компоновки прикладных программ GNU Compiler Tools Компилятор транслирует исходные тексты прикладных программ, обработанные препроцессором, в коды ассемблера. Компилятор С выполняет преобразование моду- лей прикладных программ, написанных на языке С, генерируемых препроцессором. Компилятор C++ необходим для трансляции файлов, сформированных препроцессо- ром, которые содержат текст программ на языке C++. Ассемблер преобразовывает программные модули, представленные в кодах ас- семблера, в объектные файлы, содержащие машинный код. Ассемблер MicroBlaze выполняет трансляцию в объектный код микропроцессорного ядра MicroBlaze, а ас- семблер PowerPC - в объектный код аппаратного процессорного ядра PowerPC. Компоновщик осуществляет связывание всех относящихся к разрабатываемому приложению объектных файлов, сгенерированных ассемблером, подключает необхо- димые библиотечные модули и формирует исполняемый код. Для записи исполняе- мого кода прикладных программ используется формат ELF (Executable and Link Format). В зависимости от типа применяемого в основе разрабатываемой системы микропроцессорного ядра генерация исполняемого кода осуществляется соответст- венно компоновщиком MicroBlaze или компоновщиком PowerPC . Для отладки разрабатываемых прикладных программ в составе средств Xilinx EST имеется два инструмента: GNU Debugger (GDB) и Xilinx Microprocessor Debugger (XMD). Первый инструмент осуществляет отладку на уровне инструкций процессорного ядра и поэтому может использоваться для отладки программ, которые не имеют обращений к периферийным устройствам. Отладчик Xilinx Microprocessor Debugger применяется совместно с инструментом GNU Debugger и позволяет провес- ти полную верификацию разрабатываемых приложений, в том числе и на аппаратном уровне. После успешного завершения процесса отладки прикладных программ испол- няемый код приложений может быть добавлен в загружаемую конфигурационную
254 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС последовательность кристаллов FPGA. Для присоединения к конфигурационной по- следовательности, соответствующей аппаратной части проектируемой микропроцес- сорной системы, исполняемого кода прикладных программ предназначена утилита Data2mem. Загрузка дополненной конфигурационной последовательности в ПЛИС или ПЗУ/ППЗУ осуществляется с помощью модуля программирования iMPACT, ко- торый входит в состав стандартных средств проектирования серии Xilinx ISE. 11.3. Краткая характеристика и пользовательский интерфейс управляющей оболочки Xilinx Platform Studio Графическая оболочка Xilinx Platform Studio средств Xilinx EST предназначена для организации эффективного управления проектированием встраиваемых микро- процессорных систем на основе ПЛИС серий FPGA в среде пакета Xilinx EDK. Она является основой интегрированной среды разработки проекта. Управляющая оболоч- ка предоставляет пользователю удобный интерфейс для эффективной работы с про- ектом и управления всеми процессами в ходе проектирования. Запуск всех про- граммных модулей, входящих в состав средств Xilinx EST, может осуществляться непосредственно в среде оболочки Xilinx Platform Studio. Управляющая оболочка XPS выполняет следующие функции: управление проектом; создание и редактирование спецификации аппаратной части разрабатываемой системы MHS; подготовку спецификации программной платформы микропроцессорной систе- мы MSS; формирование и модификацию исходных файлов прикладных программ; управление всеми процессами в ходе проектирования; предоставление доступа ко всем инструментам, которые входят в состав средств Xilinx EST. Подробная структура основного окна Xilinx Platform Studio представлена на рис. 11.3. В составе структуры основного окна управляющей оболочки XPS можно выде- лить следующие основные элементы: заголовок окна; главное меню; оперативную панель управления; » встроенное окно проекта разрабатываемой системы; встроенное окно консольных сообщений программных модулей, входящих в со- став средств Xilinx EST; панель для размещения рабочих окон средств редактирования; строку состояния. Некоторые из перечисленных элементов могут быть выключены в текущей кон- фигурации. Для рационального использования всех инструментов пользовательского интерфейса рекомендуется установить режим отображения всех элементов окна Xilinx Platform Studio, используя команды пункта View основного меню.
ГЛАВА 11 255 Главное Окно проекта Оперативная меню разрабатываемой системы панель управления Заголовок окна j(g% Xilinx Platform Studio - C:\Prcject\222\systwn4rmp [(definition) (Platform Studio]] gjftle l Edit View _ Project Ieoh Options Window Help - : J sA,IOlx| -Ж| ;,1.:й»:1й?;1:^.| J*1 ' System Applications Right Click for Options Ш System BSP -1 I® Proiect Files MHS File system mhs MSS File' system.mss PBD File system pbd UCF File data\$y$tem ucf iMPACT Command File: etcXdownload emd Implementation Options File etc\fast_runtime.opt „ Bitgen Options File: etcXbitgen.ut +; 1^ Proiect Options ;+l tjt] Reference Files ВЙЙЙДА: Platform SfudS El E) El El @ El S \ РОЙ ' A Software Design ! Generating software libraries 1 : r ... and Board Support Packages ' '> . . Hardware Design Customize System - Add processor and peripherals [definition] [P. (Console Log) Project Opened. ddJlMV Oufrrrt А то™ Л Егж / i -:, Закладки страниц окна Окно консольных Строка Панель размещения рабочих консольных сообщений сообщений состояния окон средств редактирования Puc. 11.3, Основное окно управляющей оболочки Xilinx Platform Studio В заголовке окна Xilinx Platform Studio отображается полное имя файла описания текущего открытого проекта, которое включает путь доступа к рабочему каталогу проекта. Главное меню управляющей оболочки пакета обеспечивает доступ ко всем ко- мандам, необходимым для работы с проектом. Каждый пункт главного меню откры- вает всплывающее меню, в котором находится соответствующая группа команд. Всплывающее меню File содержит команды создания, открытия, сохранения и за- крытия проектов и файлов. Кроме того, в эту группу включены команды печати и за- вершения работы. В выпадающем меню Edit представлены команды редактирования спецификаций аппаратной и программной платформ проектируемой системы, а так- же исходных модулей прикладных программ. Здесь же расположена команда уста- новки и изменения параметров объектов, которые используются при графическом представлении спецификации аппаратной платформы. Во всплывающем меню View сгруппированы команды, определяющие вид окна Xilinx Platform Studio. Строки это- го меню указывают, какие элементы окна будут отображаться на экране, а какие скрыты. В этом же меню находятся команды, предназначенные для управления мас- штабом и регенерацией изображения в окне редактора диаграмм. Выпадающее меню Project содержит команды работы с проектом, которые, в частности, позволяют включать в проект и удалять из проекта модули исходных описаний прикладных программ, импортировать файлы спецификаций аппаратной и программной плат- форм разрабатываемой системы. Выпадающее меню Tools предоставляет команды
256 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС активизации инструментов разработки встраиваемых микропроцессорных систем. Во всплывающем меню Options находятся команды установки параметров проекта и на- строек компилятора. Кроме того, здесь же расположены команды генерации пользо- вательских кнопок на оперативной панели управления и установки режима синхро- низации файлов, открытых в редакторе диаграмм, при изменении спецификации ап- паратной платформы проектируемой системы. Выпадающее меню Window содержит команды работы с окнами текстового и графического редактора (редактора диа- грамм). Расположенные здесь команды позволяют создавать необходимое количест- во рабочих окон и устанавливать их взаимную конфигурацию. В этом же меню пред- ставлены команды переключения между открытыми окнами редактирования. Пункт Help основного меню предоставляет справочную информацию о программах пакета и открывает прямой доступ к ресурсам Web-сайта xilinx.com, при условии, что исполь- зуемый компьютер оснащен выходом в Internet. При работе с графическим редактором диаграмм главное меню управляющей оболочки содержит дополнительный пункт - Add. Соответствующее этому пункту всплывающее меню содержит команды, используемые в процессе создания и редак- тирования спецификации аппаратной части проектируемой системы в форме струк- турных схем (диаграмм PBD). Следует обратить внимание на то, что не все команды доступны в тот или иной момент работы с программой. Заблокированные команды отображаются серым цве- том. Xilinx Platform Studio автоматически определяет область доступности каждой команды, что позволяет исключить ее неправильное использование. Такой механизм, позволяет избежать ошибок в процессе проектирования, вызванных выполнением недопустимых операций. Оперативная панель управления содержит кнопки быстрого доступа, которые дублируют наиболее часто используемые команды Xilinx Platform Studio. Эта панель фактически состоит из шести отдельных панелей, на каждой из которых расположена соответствующая группа кнопок, скомпонованных по функциональному признаку: кнопки, предназначенные для работы с файлами и печати; кнопки, дублирующие команды редактирования; • кнопки, предназначенные для управления масштабом и регенерацией изображе- ния в окне редактора диаграмм; кнопки, открывающие доступ к справочной системе средств проектирования и ресурсам Web-сайта поддержки; кнопки активизации инструментов Xilinx EST; - кнопки, используемые при работе с редактором диаграмм. Состояние кнопок оперативной панели зависит от типа операций, осуществляе- мых в текущий момент времени. Кнопки, которые не имеют отношения к выполняе- мым в данный момент времени операциям, являются недоступными и отображаются серым цветом. Например, кнопки редактирования доступны только при работе с тек- стовым или графическим редактором. Если не открыто ни одно окно редактирования, то эта панель инструментов находится в неактивном состоянии. В этом случае все элементы данной панели отображаются серым цветом. Окно проекта разрабатываемой системы представляет развернутую информацию о структуре разрабатываемой системы, исходных данных и параметрах проекта. Это встроенное окно имеет две страницы, снабженных закладками: System и Applications
ГЛАВА 11 257 (см. рис. 11.3). Чтобы выбрать нужную страницу окна проекта разрабатываемой сис- темы, необходимо поместить курсор мыши на соответствующую закладку и щелк- нуть левой кнопкой мыши. Страница System является главной и наиболее часто ис- пользуется при работе с проектом. Она предоставляет пользователю не только ис- черпывающие сведения о проекте разрабатываемой системы, но средства управления процессом проектирования. Страница Applications предназначена для работы с про- ектом прикладной микропроцессорной программы. Информация в окне проекта разрабатываемой системы может быть представлена в сжатом или развернутом виде. При сжатой форме отображения данных в окне про- цессов показаны лишь названия основных разделов: System BSP; Project Files; Reference Files; Project Options. В разделе System BSP представлены все компоненты, которые входят в состав проектируемой системы. Раздел Project Files содержит информацию об основных файлах проекта: спецификациях аппаратной и программной платформ, временных и топологических ограничениях проекта. Раздел Reference Files предоставляет доступ к вспомогательным файлам проекта: отчетам о выполнении процедур и журнальным файлам (Log), в которых фиксируется информация о ходе выполнения всех процес- сов. В разделе Project Options отображаются установленные значения основных па- раметров проекта. Развернутая форма имеет вид ветвящейся иерархической структуры, каждый узел которой представляет определенный компонент проектируемой микропроцес- сорной системы, файл или параметр проекта. Для перехода от сжатого формата к подробному необходимо последовательно развернуть каждый узел структуры, поме- ченный знаком «+», щелкнув на нем левой кнопкой мыши. Повторный щелчок мыши приводит узел, обозначенный знаком «-», в исходное состояние. Управляющая обо- лочка XPS предоставляет пользователю два способа управления файлами проекта. Первый способ заключается в использовании команд всплывающего контекстно- зависимого меню, активизируемого щелчком правой кнопки мыши на строке с на- званием файла. Второй, самый простой и быстрый способ открытия файла - двойной щелчок левой кнопкой мыши на строке с его названием в окне проекта разрабаты- ваемой системы. Окно консольных сообщений имеет 3 страницы с закладками Output, Warnings и Errors. Страница Output является основной (используется наиболее часто в работе с проектом) и предназначена для вывода информационных сообщений о запуске и ходе выполнения процедур. На странице Warnings отображаются предупреждения, сопро- вождаемые идентификационными кодами. Страница Errors используется для вывода сообщений об ошибках, которые генерируются программами, входящими в состав средств проектирования Xilinx EST. Встроенный текстовый редактор управляющей оболочки Xilinx Platform Studio предназначен для создания файлов спецификаций аппаратной и программной плат- форм разрабатываемой системы, исходных модулей прикладных программ и их по- следующей корректировки. Интегрированный текстовый редактор может иметь не- сколько одновременно открытых рабочих окон. Эти окна располагаются внутри па- 9—2062
258 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС нели размещения окон редактирования (см. рис. 11.3). Вид расположения рабочих окон на панели (каскадный или неперекрывающийся) устанавливается с помощью команд выпадающего меню Window. Строка состояния, расположенная в нижней части окна Xilinx Platform Studio, служит для вывода сообщений о текущих выполняемых командах. Часть строки со- стояния используется при работе со встроенным редактором диаграмм. В этом фраг- менте отображаются координаты текущего расположения курсора (номер строки и позиции) в активном рабочем окне редактора диаграмм. 11.4. Этапы проектирования микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx с применением ядер семейства MicroBlaze Процесс разработки встраиваемых микропроцессорных систем на основе ядер семейства MicroBlaze, предназначенных для реализации в ПЛИС семейств FPGA фирмы Xilinx, можно интерпретировать в виде двух маршрутов, каждый из которых представляет собой совокупность последовательно выполняемых этапов проектиро- вания. Первый маршрут образует последовательность этапов разработки аппаратной части встраиваемой микропроцессорной системы. Второй маршрут содержит после- довательность этапов проектирования программных средств. В более наглядной форме процесс проектирования встраиваемых микропроцессорных систем на основе ядер семейства MicroBlaze иллюстрирует рис. 11.4. Маршрут проектирования аппаратной части разрабатываемой микропроцессор- ной системы включает в себя следующие этапы: формирование спецификации аппаратной платформы разрабатываемой микро- процессорной системы; генерацию HDL-описаний и списка соединений аппаратной платформы проекти- руемой системы; - подготовку спецификации моделирования аппаратной части разрабатываемой микропроцессорной системы; генерацию моделей IP-компонентов, используемых в составе проекта, для после- дующей верификации разрабатываемой системы; синтез аппаратной платформы проектируемой системы; функциональное моделирование аппаратной части встраиваемой микропроцес- сорной системы; размещение и трассировку проекта в кристаллах семейств FPGA; полное (временное) моделирование разрабатываемой микропроцессорной системы; загрузку конфигурационной последовательности в кристалл FPGA и программи- рование конфигурационных ПЗУ/ППЗУ. Не все из перечисленных этапов проектирования являются обязательными. В процессе разработки может не проводиться моделирование аппаратной части сис- темы. Поэтому можно исключить этапы подготовки спецификации моделирования, генерации моделей, функционального и временного моделирования. При этом следу- ет все же учитывать, что моделирование аппаратной части системы позволяет повы- сить эффективность процесса проектирования в целом за счет более раннего обнару- жения возможных ошибок.
ГЛАВА 11 259 Рис. 11.4. Этапы проектирования встраиваемых микропроцессорных систем на основе ядер семейства MicroBlaze, реализуемых в ПЛИС семейств FPGA фирмы ХШпх Маршрут разработки программных средств состоит из следующих этапов: создания спецификации программной платформы разрабатываемой системы; формирования библиотек, драйверов и процедур обслуживания прерываний в соот- ветствии со спецификацией программной платформы проектируемой системы; разработки исходных модулей прикладных программ (приложений) на языке ассемблера или языках высокого уровня C/C++ для проектируемой микропроцес- сорной системы; « компиляции исходных модулей прикладных программ; компоновки программ, генерации исполняемого кода; преобразовании исполняемого кода программ в загружаемый код кристаллов FPGA; загрузки исполняемого кода программ во внешнюю программную память; комплексной отладки прикладных программ для проектируемой системы с использованием аппаратных и программных средств. Все перечисленные этапы разработки встраиваемых микропроцессорных систем на основе ядер семейства MicroBlaze выполняются с помощью комплекса средств проектирования Xilinx EDK. Прежде чем перейти непосредственно к детальному
260 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС изучению представленных этапов, необходимо определить понятие проекта, которое будет использоваться в последующих главах. 11.5. Структура проекта в САПР встраиваемых микропроцессорных систем Xilinx Embedded System Tools Под проектом в САПР Xilinx Embedded System Tools понимается совокупность модулей (файлов), которые содержат информацию, необходимую для выполнения всех этапов процесса разработки встраиваемых микропроцессорных систем на базе ПЛИС фирмы Xilinx. В структуре проекта Xilinx EST можно выделить следующие группы модулей: исходные описания аппаратной и программной платформ проектируемой систе- мы в графической или текстовой форме; IP-компоненты, разработанные пользователем; библиотеки, драйверы и процедуры обработки прерываний; прикладное программное обеспечение проектируемой микропроцессорной сис- темы; документацию, сопровождающую проект; промежуточные результаты, используемые в качестве исходных данных для последующих этапов проектирования; - отчеты о выполнении отдельных этапов проектирования; описания тестовых воздействий, необходимых для моделирования проектируе- мой системы; окончательные результаты проектирования, используемые для конфигурирова- ния ПЛИС. Все модули проекта располагаются в рабочем каталоге (папке), включающем в себя несколько подкаталогов, каждый из которых содержит соответствующую груп- пу файлов. Изначально в состав нового проекта входит файл с расширением ХМР, в котором указываются параметры проекта, и пустые файлы спецификаций аппарат- ной и программной платформ. Затем к проекту добавляются модули описания аппа- ратной платформы проектируемого устройства и исходные модули прикладных про- грамм. Далее после выполнения каждого этапа процесса разработки микропроцес- сорной системы в проект включаются результаты, полученные на этом этапе. Кроме того, разработчик может включить в проект необходимую текстовую документацию.
12. ПРОЕКТИРОВАНИЕ ВСТРАИВАЕМЫХ 32-РАЗРЯДНЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ЯДЕР СЕМЕЙСТВА MICROBLAZE В настоящей главе рассматривается поэтапное выполнение процесса разработки встраиваемых микропроцессорных систем, в качестве основы которых используется ядро семейства MicroBlaze. При этом подробно изложена последовательность необ- ходимых операций для создания нового проекта в САПР Xilinx EST и осуществления основных этапов проектирования. Весь ход процесса разработки поясняется на при- мере проекта простейшего 32-разрядного контроллера системы сбора и обработки данных. Разрабатываемый контроллер предназначен для приема данных, поступаю- щих на входы параллельного порта ввода/вывода, их обработки и дальнейшей пере- дачи полученных результатов через последовательный интерфейс RS-232 в цен- тральный компьютер. Структурное представление архитектуры проектируемого кон- троллера показано на рис. 12.1. Рис. 12.1. Архитектура проектируемого контроллера системы сбора и обработки данных В состав архитектуры входят следующие функциональные блоки: микропроцессорное ядро MicroBlaze; программная и оперативная память, реализуемые на основе блочной памяти ПЛИС Block SelectRAM; контроллер интерфейса программной памяти, подключенной к шине ILMB; контроллер интерфейса оперативной памяти, подключенной к шине DLMB; ядро универсального последовательного асинхронного приемопередатчика; • ядро параллельного интерфейса ввода/вывода. Изучая материал, представленный в данной главе, следует учитывать, что опи- сываемый стандартный метод проектирования микропроцессорных систем не явля- ется самым эффективным. Но, несмотря на это, он позволяет получить отчетливое представление о содержании и выполнении каждого этапа проектирования. В боль- шинстве случаев на практике с целью упрощения и ускорения процесса разработки целесообразно использовать мастер создания новых системных платформ Base System Build Wizard, который будет представлен в следующей главе.
262 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 12.1. Создание нового проекта встраиваемой микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio Работа с комплексом средств автоматизированного проектирования Xilinx Embedded Development Kit начинается с запуска управляющей оболочки - Xilinx Platform Studio. Для этого следует использовать традиционный метод активизации программ в среде Windows 2000/ХР, воспользовавшись кнопкой Пуск (Start). После нажатия кнопки Пуск (Start) в открывшейся панели меню необходимо выбрать стро- ку Программы (Programs), а затем в предложенном списке выбрать группу программ Xilinx Platform Studio 7. И, в которой нужно выделить строку Xilinx Platform Studio, и щелкнуть на ней левой кнопкой мыши. При успешном выполнении указанных опе- раций на экране монитора отображается основное окно управляющей оболочки Xilinx Platform Studio, подробная структура которого рассмотрена в гл. 11. Для создания нового проекта следует выполнить команду File основного меню управляющей оболочки Xilinx Platform Studio, а затем во всплывающем меню вы- брать строку New Project, как показано на рис. 12.2. В результате указанных действий открывается всплывающее меню следующего уровня иерархии, строки которого пре- доставляют разработчику два механизма подготовки нового проекта. Ж (Console Log) Create New Platform Ж: > J: X. - > . . ; Puc. 12.2. Последовательность действий по созданию нового проекта в САПР Xilinx Embedded Development Kit При выборе строки Base System Builder (рис. 12.2) запускается мастер формиро- вания новых системных платформ Base System Build Wizard, который позволяет про- водить весь процесс разработки нового проекта в интерактивном режиме. Данный метод будет подробно рассмотрен в следующей главе. Далее описывается стандарт- ный способ создания нового проекта разрабатываемой микропроцессорной системы, доступ к которому открывает строка Platform Studio во всплывающем меню, пока-
ГЛАВА 12 263 занном на рис. 12.2. При выборе этой строки на экран монитора выводится диалого- вая панель, вид которой представлен на рис. 12.3. В этой диалоговой панели обяза- тельно должны быть определены следующие исходные данные для создания нового проекта: название проекта; диск и раздел, в которых предполагается расположить рабочий каталог проекта; семейство ПЛИС, на базе которого разрабатывается система; тип кристалла, используемого для реализации проектируемой системы; тип корпуса выбранной ПЛИС; • категория быстродействия выбранного кристалла. Кроме того, в этой же панели можно также указать дополнительно следующую необязательную информацию: название уже существующего файла спецификации аппаратной платформы встраиваемой микропроцессорной системы MHS (Microprocessor Hardware Specification), который может использоваться, например, в качестве шаблона в создаваемом проекте; • возможность использования в новом проекте депозитария собственных (разрабо- танных пользователем) IP-ядер периферийных модулей, библиотек и драйверов; полное название каталогов, которые используются в качестве депозитария IP- компонентов, библиотек и драйверов. Рис. 12.3. Диалоговая панель, содержащая исходные данные для создания нового проекта В первую очередь рекомендуется указать полное название файла создаваемого проекта, включающее путь доступа к разделу (папке), в котором будет располагаться рабочий каталог проекта. Полное наименование файла проекта указывается в поле редактирования Project File (рис. 12.3). При определении расположения рабочего ка- талога нового проекта рекомендуется для хранения всех разрабатываемых проектов создать в корневом разделе одного из дисков используемого компьютера специально предназначенную для этих целей папку, например C:\Project. Таким образом, рабочий
264 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС каталог нового проекта должен создаваться внутри этой папки. В качестве имени ра- бочего каталога целесообразно указывать название формируемого проекта. При этом рекомендуется задавать мнемонические имена проектов и их рабочих каталогов, что- бы впоследствии было удобнее ориентироваться при поиске требуемого проекта. По умолчанию в поле редактирования Project File предлагается в качестве нового проек- та файл system.xmp, располагающийся в корневом каталоге диска, на котором нахо- дится комплекс средств автоматизированного проектирования Xilinx EDK. Опреде- лить место расположения создаваемого проекта можно двумя способами: используя клавиатуру или панель навигации по дискам компьютера. При выборе первого мето- да следует поместить курсор на поле редактирования Project File и щелкнуть левой кнопкой мыши, после чего ввести с клавиатуры имя диска, каталога и название файла проекта. При этом указываемый каталог на диске должен быть создан заранее. Чтобы воспользоваться вторым способом выбора каталога, следует нажать кнопку Browse, расположенную справа от поля редактирования Project File (см. рис. 12.3). В от- крывшейся диалоговой панели навигации (рис. 12.4) следует с помощью мыши вы- брать требуемый диск и каталог, а затем создать новую папку, которая будет исполь- зоваться в качестве рабочего каталога нового проекта. Для этого нужно расположить курсор на пиктограмме Si, которая находится в верхней части диалоговой панели навигации, и щелкнуть левой кнопкой мыши. При этом в текущем разделе создается пустой каталог с названием Новая папка. Platform Studio Project ши in'............................ О embedded jzontr < Q] sampled_data_controller /. : ' .............................. “......... ’ ^<4. r.. Platform Studio Project (X.xmp) ......... .7-,:/...I.,...;: jyib." c ... . . .. T.. , , J.'.. »» Puc. 12.4. Выбор места расположения создаваемого проекта на диске Для изменения названия новой папки следует прежде всего выделить его, распо- ложив курсор на соответствующей строке списка имен разделов и щелкнув левой кнопкой мыши. Затем следует набрать текст нового названия с клавиатуры, завершив его ввод нажатием клавиши Enter. Далее следует выполнить операцию выбора новой папки, рассмотренную выше, и подтвердить сделанный выбор нажатием кнопки ОК (рис. 12.4). После закрытия панели навигации выбранное полное название нового проекта автоматически отображается в поле редактирования Project File. В качестве
ГЛАВА 12 265 примера создадим проект контроллера системы сбора и обработки данных с названи- ем system_controller, расположив его рабочий каталог в папке C:\Project. Семейство ПЛИС, тип кристалла, тип корпуса ПЛИС и категория быстродейст- вия кристалла определяются с помощью соответствующих полей выбора, располо- женных внутри встроенной панели Target Device (см. рис. 12.3). Для определения семейства ПЛИС, на базе которого проектируется встраиваемая микропроцессорная система, следует воспользоваться кнопкой управления выпа- дающим списком, расположенной в правой части поля выбора семейства Architecture (см. рис. 12.3). При нажатии на эту кнопку на экране монитора отображается полный список семейств ПЛИС, поддерживаемых средствами проектирования Xilinx EST (рис. 12.5). Рис. 12.5. Выбор семейства ПЛИС для реализации создаваемого проекта встраиваемой микропроцессорной системы Чтобы выбрать требуемое семейство ПЛИС, необходимо поместить курсор мы- ши на соответствующую строку выпадающего списка и щелкнуть левой кнопкой мыши. Если нужное семейство не представлено в отображаемой части списка, то следует воспользоваться элементами прокрутки, которые расположены с правой сто- роны списка (рис. 12.5). После выбора одной из строк списка название соответст- вующей серии ПЛИС автоматически отображается в поле выбора семейства Architecture. Для примера, в создаваемом проекте system_controller укажем семейство Spartan-З, исходя из того, что для аппаратной реализации разрабатываемого контрол- лера будет использоваться отладочная плата из инструментального комплекта Spartan-3 Starter Kit. В поле выбора типа кристалла, предназначенного для реализации проектируемой микропроцессорной системы, Device Size автоматически отображается тип ПЛИС, установленный по умолчанию для выбранного семейства. Для его изменения необхо- димо выполнить последовательность действий, аналогичную процедуре установки семейства ПЛИС. Вначале нужно нажать кнопку активизации выпадающего списка
266 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС доступных кристаллов выбранного семейства. Эта кнопка расположена в правой час- ти поля выбора типа кристалла Device Size (рис. 12.6). Рис. 12.6. Выбор типа кристалла, предназначенного для реализации проектируемой микропроцессорной системы В предложенном списке нужно найти строку, содержащую требуемый тип кристал- ла, поместить на нее курсор мыши и щелкнуть левой кнопкой. При необходимости для просмотра всего списка ПЛИС можно использовать инструменты прокрутки, располо- женные в правой части выпадающего списка. Выделенный элемент списка автоматиче- ски отображается в поле выбора типа кристалла Device Size. Для реализации проекта system_controller, создаваемого в качестве примера, выберем кристалл XC3S200, так как на используемой отладочной плате установлена ПЛИС данного типа. Тип корпуса ПЛИС, предназначенной для реализации проекта встраиваемой микропроцессорной системы, указывается в поле выбора Package (см. рис. 12.3, 12.5- 12.6). Для того чтобы получить доступ к полному списку типов корпусов, в которых выпускается требуемый кристалл, следует воспользоваться кнопкой активизации вы- падающего списка, расположенной в правой части поля выбора Package. В открыв- шемся списке (рис. 12.7) нужно отыскать строку, в которой представлено условное обозначение искомого типа корпуса ПЛИС, поместить на нее курсор мыши и щелк- нуть левой кнопкой. После этого выбранный тип корпуса микросхемы автоматически отображается в поле Package. В качестве примера в новом проекте system_controller выберем кристалл в корпусе FT256. Для определения категории быстродействия кристалла, на базе которого плани- руется реализация проектируемой микропроцессорной системы, следует воспользо- ваться полем выбора Speed Grade (см. рис. 12.3, 12.5-12.7). При нажатии на кнопку активизации выпадающего списка, расположенную в правой части этого поля выбо- ра, на экран выводятся обозначения возможных градаций по быстродействию для используемого типа ПЛИС (рис. 12.8). Требуемая категория быстродействия кри- сталла указывается щелчком левой кнопки мыши на строке этого выпадающего спи- ска, в которой содержится условное обозначение соответствующего класса быстро-
ГЛАВА 12 267 действия ПЛИС. Для реализации проекта system_controller выберем кристалл XC3S200, имеющий класс быстродействия -4. Create New Project < " a ** X- : ExisHns MHS to Architecture ' Browse Grade Peripheral Repb^ory Directory (Advanced £ J Г User . 4Ql OQ._i and library files. '• :к:'!Z- T. >”'ft V,. 7/’.7 Puc. 12.7. Выбор типа корпуса ПЛИС, предназначенной для реализации проектируемой микропроцессорной системы I Create New Project ' btriiAKp ' . ... „ "дthecwentdra^ I C:\Projecl\system_controller\syste 7; Browse.;, f ^;-f:'Jxc3s200 '’ г ^-^rriZ.y- '.7'U _ ft256 j;j&| rf5 :'.... '. .....;' I „5 Browse ... Puc. 12.8. Выбор категории быстродействия кристалла, предназначенного для реализации проектируемой микропроцессорной системы При создании нового проекта можно импортировать файл спецификации аппа- ратной платформы встраиваемой микропроцессорной системы MHS из других про- ектов. Чтобы указать название уже существующего файла MHS, необходимо помес- тить курсор мыши на поле редактирования Existsing MHS to Import (см. рис. 12.3, 12.5-12.8) и щелкнуть левой кнопкой мыши, после чего ввести с клавиатуры полное
268 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС имя соответствующего файла, включая путь доступа к нему. Для поиска соответст- вующего файла спецификации аппаратной части MHS можно также воспользоваться диалоговой панелью навигации по дискам компьютера. Для ее активизации следует нажать кнопку Browse, расположенную справа от поля редактирования Existsing MHS to Import (см. рис. 12.3,12.5-12.8). В открывшейся диалоговой панели навигации, вид которой аналогичен показанному на рис. 12.4, следует с помощью мыши выбрать требуемый диск, каталог и название файла, после чего подтвердить сделанный выбор нажатием кнопки ОК. После закрытия панели навигации полное название импорти- руемого файла спецификации аппаратной платформы встраиваемой микропроцес- сорной системы MHS автоматически отображается в поле редактирования Existsing MHS to Import. Если в новом проекте предполагается применение пользовательских IP-ядер пе- риферийных модулей, библиотек и драйверов, то во встроенной панели дополни- тельных параметров Advanced Option (см. рис. 12.3,12.5-12.8) следует прежде всего включить опцию User Peripheral Repository search path for IP, driver and library files. Для этого нужно щелкнуть левой копкой мыши на поле индикатора состояния, кото- рый расположен слева от названия указанной опции. После этого станет доступным поле редактирования названий каталогов, в которых должен проводиться поиск IP- ядер периферийных модулей, библиотек и драйверов. Названия каталогов могут быть введены непосредственно в это поле (после его активизации) с помощью клавиатуры. При вводе нескольких названий каталогов они должны разделяться точкой с запятой. Требуемые каталоги могут быть также указаны с помощью панели навигации по дис- кам компьютера, которая выводится на экран при нажатии на кнопку Browse, распо- ложенную справа от поля редактирования. Процедура определения всех необходимых параметров создаваемого проекта за- вершается нажатием кнопки ОК, находящейся в нижней части панели установки па- раметров нового проекта (см. рис. 12.3,12.5-12.8). Если при указании параметров но- вого проекта не было задано название импортируемого файла спецификации аппа- ратной части встраиваемой микропроцессорной системы, то после нажатия кнопки ОК на экран выводится диалоговая панель, вид которой показан на рис. 12.9. В этой панели содержится предупреждение об отсутствии названия импортируемого файла MHS и запрос подтверждения создания нового проекта с пустым файлом MHS. При отрицательном ответе (нажатии кнопки Нет) осуществляется возврат к диалоговой панели, показанной на рис. 12.3. pCilinx Platform Studio_____ - .XX YouJ . / ! \ ' Do you Puc. 12.9. Панель запроса подтверждения создания нового проекта с пустым файлом MHS Для формирования нового проекта необходимо утвердительно ответить на этот запрос, нажав кнопку Да в этой диалоговой панели (рис. 12.9). В этом случае на эк- ране отображается информационная панель, в которой содержится уведомление о способах добавления IP-ядер в спецификацию аппаратной платформы проектируе- мой микропроцессорной системы. Вид этой информационной панели представлен на
ГЛАВА 12 269 рис. 12.10. Для ее закрытия следует воспользоваться кнопкой ОК, расположенной в нижней части панели. Рис. 12.10. Информационная панель, уведомляющая о способах добавления IP-ядер в спецификацию аппаратной платформы проектируемой микропроцессорной системы В случае успешного создания нового проекта его название отображается в строке заголовка окна Xilinx Platform Studio, которое приобретает вид, показанный на рис. 12.11. Во встроенном окне проекта разрабатываемой системы, на странице System, в разделе Project Files отображается список названий пустых исходных фай- лов проекта. Раздел Project Options содержит информацию об установленных значе- ниях основных параметров проекта. Я : АррЫ101В j №tform Software Design I Software Apphcation ..DeveiQDnwnt - Generattng software libraries and Board Support Packages Customize System «Add processor and peripheral - Create custom IP ..-Cormoneni Й System BSP (Й Project Fifes 0 0 0 m 0 0 0 Assigning default drivers to peripherals Ready MHS File' system_controller mhs MSS File' system_controlfef.m$$ PBD File sy$tem_controller pbd UCF File data\system_controller.ud iMPACT Command File etc\download cmd Implementation Options File1 etcVastjuntime opt „ Bitgen Options File etcAbilgenut 7; $ Proiect Options • Device xc3s200f1256-4 ♦ Nethst TopLevel • Implementation XPS • HDL VHDL • Sim Model-BEHAVIORAL - (§) Reference Files !+j I® Log Files ® ® Report Files fidrf.', । Hardware Design Puc. 12.11. Вид основного окна управляющей оболочки Xilinx Platform Studio после создания нового проекта Если необходимо внести изменения в значения основных параметров проекта, то нужно выбрать в главном меню управляющей оболочки XPS пункт Options, а затем во всплывающем меню строку Project Options. В результате на экран вы- водится диалоговая панель Project Options, показанная на рис. 12.12, которая по- зволяет установить и отредактировать значения всех параметров проекта. Для от-
270 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС крытия этой панели можно также воспользоваться аналогичной командой из кон- текстно-зависимого всплывающего меню, которое появляется при щелчке правой кнопкой мыши на строке, содержащей значение одного из параметров проекта. Самым быстрым способом доступа к панели установки параметров является двойной щелчок левой кнопкой мыши на строке Project Options во встроенном окне проекта разрабатываемой системы. г .-.—г Specify Makefile to use instead of XPS Generated Makefile. Puc. 12.12. Диалоговая панель установки параметров проекта (страница Device and Repository) Диалоговая панель установки параметров проекта содержит 3 страницы, снаб- женные закладками с их названиями: Device and Repository, Hierarchy and Flow и HDL and Simulation. Каждая из этих страниц содержит соответствующую группу па- раметров. Страница Device and Repository позволяет изменить семейство ПЛИС, тип кристалла, тип корпуса ПЛИС и категорию быстродействия кристалла, а также на- звание каталогов, в которых должен проводиться поиск IP-ядер периферийных моду- лей, библиотек и драйверов. Установка значений этих параметров выполняется теми же способами, что и в диалоговой панели, представленной на рис. 12.3, 12.5-12.8. Кроме того, на странице Device and Repository предусмотрена возможность опреде- ления названия собственного пользовательского командного (Make) файла, содержа- щего все необходимые опции и директивы управления процессом проектирования. Указанный файл будет использоваться вместо Д/а£е-файла, генерируемого средства- ми проектирования Xilinx EST. Полное название альтернативного командного Make- файла, включающее путь доступа к нему, указывается в поле редактирования Custom Makefile. Определение имени файла может осуществляться с помощью клавиатуры (после активизации поля редактирования) или панели навигации по дискам компью- тера, которая выводится на экран при нажатии кнопки с пиктограммой в виде много- точия (...), расположенной справа от поля редактирования Custom Makefile. На странице Hierarchy and Flow диалоговой панели Project Options представлены параметры, определяющие иерархию, средства синтеза и способ управления процес-
ГЛАВА 12 271 сом размещения и трассировки проекта в кристалле. Вид этой страницы приведен на рис. 12.13. Project Options . Dеvice and Repository ' ISEXST •;»..w,,—. . . F0e]CAProject\$ystem_controlleAprojn<3v\syj ... I ‘ J • ....... .. , ... : ISEF Puc. 12.13. Страница Hierarchy and Flow диалоговой панели установки параметров проекта Иерархический уровень разрабатываемого проекта устанавливается с помощью двух кнопок с зависимой фиксацией, которые расположены во встроенной панели Design Hierarchy. Если создаваемый проект соответствует верхнему уровню иерар- хии, то в нажатом состоянии должна находиться кнопка This is the top level of my design. В случае, когда разрабатываемый проект является одним из модулей, входя- щим в состав системы (проекта более высокого уровня иерархии), должна быть вы- брана кнопка This is a sub-module in my design. При этом становится активным поле редактирования Top Instance, в котором с помощью клавиатуры можно указать пози- ционное обозначение компонента, представляющего проектируемый модуль, в со- ставе проекта системы верхнего уровня иерархии. По умолчанию считается, что соз- даваемый проект соответствует верхнему уровню иерархии, т. е. выбрана кнопка This is the top level of my design. Поле выбора Synthesis Tool позволяет указать средства синтеза, которые будут использоваться при выполнении текущего проекта. Для просмотра всех доступных инструментов синтеза и выбора наиболее подходящего следует воспользоваться кнопкой активизации выпадающего списка, которая расположена в правой части по- ля Synthesis Tool. По умолчанию используются средства синтеза Xilinx Synthesis Tool (XST), которые входят в состав систем автоматизированного проектирования серии Xilinx ISE. Способ управления процессом размещения и трассировки проекта разрабатывае- мой системы в кристалле определяется с помощью двух кнопок с зависимой фикса- цией, которые расположены во встроенной панели Implementation Tool Flow. Если выбрана кнопка XPS (Xflow), то этап размещения и трассировки проекта осуществля- ется в среде управляющей оболочки САПР EST, Xilinx Platform Studio. В случае вы- бора кнопки ISE (ProjNav) процесс размещения и трассировки выполняется в среде
272 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС управляющей оболочки средств проектирования серии Xilinx ISE, Project Navigator. При этом проект, разрабатываемый средствами EST, может быть включен в виде мо- дуля в состав проекта, выполняемого в среде САПР серии Xilinx ISE. Для этого нуж- но включить опцию Add modules to existing NPL file, расположив курсор на соответст- вующем поле индикатора (рис. 12.13) и щелкнув левой кнопкой мыши. Затем в поле редактирования NPL File следует указать полное название соответствующего файла проекта (с расширением NPL) для пакета Foundation ISE. Имя файла проекта может задаваться теми же способами, которыми задается и название командного фала Cus- tom Makefile на странице Device and Repository. Страница HDL and Simulation диалоговой панели Project Options, вид которой представлен на рис. 12.14, содержит 3 группы кнопок с зависимой фиксацией и два поля редактирования, определяющие значения параметров моделирования проекта. Первая группа кнопок с зависимой фиксацией, расположенная во встроенной панели HDL, предназначена для выбора языка описания аппаратуры HDL (Hardware Description Language), который используется в процессе генерации моделей и описа- ний аппаратной части проектируемой системы. С помощью этих кнопок разработчик может выбрать один из языков высокого уровня: VHDL или Verilog. По умолчанию используется язык VHDL. ^Project Options Й D evice ard Repository | Hierarchy andFlow HDL and Simulation ' E® directory of compedklib) И the libraries have not been compiled Compile f' r Simulation Models-"^ OK | |ChpiBKa Puc. 12.14. Страница HDL and Simulation диалоговой панели установки параметров проекта Вторая группа кнопок с зависимой фиксацией, находящаяся внутри встроенной панели Simulator Compile Script, позволяет указать систему моделирования, для кото- рой будет сформирован соответствующий файл сценария. Если в активном состоянии зафиксирована кнопка ModelSim, то будет создан файл сценария моделирования для системы ModelSim ХЕ. При выборе кнопки NCsim файл сценария формируется для одноименной системы моделирования. Кнопка None позволяет отключить генерацию файла сценария моделирования. В качестве системы моделирования, выбранной по умолчанию, используется пакет ModelSim ХЕ. Тип формируемой модели определяется с помощью третьей группы кнопок с за- висимой фиксацией, расположенной во встроенной панели Simulation Models. При выборе кнопки Behavioral создается функциональная модель разрабатываемой сис-
ГЛАВА 12 273 темы на поведенческом уровне. Кнопка Structural позволяет сформировать модель на структурном уровне. Для генерации полной (временной) модели необходимо зафик- сировать кнопку Timing. По умолчанию генерируется поведенческая модель проек- тируемой системы (в активном состоянии находится кнопка Behavioral). В процессе моделирования встраиваемых микропроцессорных систем, разраба- тываемых с помощью комплекса средств Xilinx EDK, используются две группы биб- лиотек Xilinx Library и EDK Library. Прежде чем перейти непосредственно к верифи- кации проекта, необходимо скомпилировать эти библиотеки для выбранной системы моделирования. При этом можно указать названия каталогов, в которых планируется разместить скомпилированные библиотеки. Для определения названий этих катало- гов следует воспользоваться полями редактирования EDK Library и Xilinx Library со- ответственно, которые расположены внутри встроенной панели Simulation Libraries Path (см. рис. 12.14). Все выполненные изменения параметров проекта вступают в силу только после нажатия кнопки ОК в нижней части диалоговой панели (см. рис. 12.12-12.14). После определения всех необходимых параметров создаваемого проекта можно перейти к следующему этапу разработки встраиваемой микропроцессорной системы на основе ядра семейства MicroBlaze - созданию спецификации аппаратной плат- формы. Но прежде чем перейти непосредственно к изучению процесса подготовки спецификации аппаратной платформы проектируемой системы, необходимо позна- комиться с синтаксисом соответствующего файла, который будет рассмотрен в сле- дующем разделе. 12.2. Синтаксис файла спецификации аппаратной платформы разрабатываемой микропроцессорной системы, реализуемой на базе ПЛИС семейств FPGA фирмы Xilinx Спецификация аппаратной платформы встраиваемой микропроцессорной систе- мы MHS (Microprocessor Hardware Specification) представляет собой файл с расшире- нием MHS, в котором в текстовом формате описывается конфигурация и параметры аппаратных средств проектируемой системы. Язык описания спецификации аппарат- ной платформы имеет много общего с языками описания аппаратуры HDL высокого уровня VHDL и Verilog. В частности, интерфейсные цепи разрабатываемой системы и ее компонентов описываются в виде портов. Как и в языках HDL высокого уровня, понятие сигнала соответствует физической цепи, которая соединяет компоненты микропроцессорной системы. Каждый компонент, включаемый в состав спецификации аппаратной платформы, описывается с помощью следующей конструкции: BEGtN <идентификатор_компонента> Команда1 <параметр1 .команды 1> = <значение_ параметрам [,<параметр2_командыМ = <значение_ параметра2>,.... <параметрМ_команды> = <значение_ параметрами Командам <параметр1_командыМ> = <значение_ параметрам [,<параметр2_командыМ> = <значение_ параметра2>,.... <параметрК_командыМ> = <значение_параметра^] END В приведенной конструкции квадратными скобками выделены параметры ко- манд, наличие которых зависит от типа команды и не является обязательным.
274 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Ключевое слово BEGIN обозначает начало описания нового компонента систе- мы. Далее следует совокупность команд, с помощью которых указываются парамет- ры компонента, включаемого в состав спецификации. При необходимости к данной совокупности добавляются команды, задающие границы адресного пространства, ко- торое используется описываемым компонентом. Кроме того, здесь же присутствует группа команд, определяющих подключение данного компонента к шинам и цепям разрабатываемой системы. Общее число команд N в этой конструкции обусловлива- ется в первую очередь типом применяемого компонента. Количество параметров, указываемых в каждой команде, определяется типом этой команды. В дальнейшем параметры команд будем называть ключами, чтобы не путать с параметрами компо- нентов, включаемых в состав разрабатываемой системы. Блок описания компонента проектируемой системы завершается ключевым словом END. В текущей версии спецификации аппаратной платформы используется 3 коман- ды: PARAMETER, PORT и BUS-INTERFACE. С помощью команды PARAMETER определяются значения различных параметров спецификации и применяемых ком- понентов. Кроме того, эта команда используется для указания диапазона адресного пространства, используемого компонентами разрабатываемой микро- процессорной системы. Все параметры, определяемые командой PARAMETER, мож- но разделить на две группы: глобальные и локальные. Глобальные параметры отно- сятся ко всей спецификации аппаратной платформы. Команды, которые определяют значения глобальных параметров, располагаются вне блоков описания компонентов BEGIN-END. Примером глобального параметра является параметр VERSION, кото- рый указывает номер версии спецификации аппаратной платформы встраиваемой микропроцессорной системы. Значение этого параметра обычно задается в начале файла MHS. Формат команды, определяющей номер версии спецификации аппарат- ной платформы, выглядит следующим образом: PARAMETER VERSION = <номер_версии_МНЗ> Например, в командной строке PARAMETER VERSION = 2.1.0. указан номер вер- сии спецификации MHS, принятый в САПР Xilinx EDK 7.1 i. Локальные параметры относятся только к соответствующим компонентам проек- тируемой системы. Команды, определяющие значения локальных параметров, распо- лагаются внутри блоков описания компонентов BEGIN-END. Значение параметра HW_VER указывает номер версии используемого IP-компонента. Команда, с помо- щью которой определяется значение этого параметра, имеет следующий формат: PARAMETER HW.VER = <номер_версии_1Р-компонента> Номера версий соответствующего IP-компонента указаны в файле документации для этого компонента. В качестве примера можно привести команду PARAMETER HW_VER = 1.00.а, которая указывает на то, что в соответствующем блоке BEGIN- END описывается экземпляр компонента версии 1.00.а. С помощью параметра INSTANCE задается позиционное обозначение (идентифи- катор) описываемого экземпляра используемого IP-компонента. Для определения значения этого параметра следует включить в состав соответствующего блока описа- ния BEGIN-END командную строку, формат которой имеет следующий вид: PARAMETER INSTANCE = <идентификатор„зкземпляра_1Р-компонента>
ГЛАВА 12 275 Например, командная строка PARAMETER INSTANCE ~ uartl определяет иден- тификатор uartl для описываемого экземпляра IP-компонента, который представляет собой последовательный асинхронный приемопередатчик. Диапазон адресов памяти, используемый описываемым экземпляром некоторого IP-компонента проектируемой системы, задается в виде базового и максимального значений адреса. Размер адресного пространства, выделяемого для компонента мик- ропроцессорной системы, должен быть равен двум в степени N. При этом последние N бит в значении базового адреса должны быть равны нулю. Значение базового адре- са определяется с помощью параметра C_BASEADDR. Формат команды, определяю- щей значение этого параметра, выглядит следующим образом: PARAMETER C_BASEADDR = <значение_базового_адреса> Значения адреса, как правило, задаются в шестнадцатеричном представлении. Например, командная строка PARAMETER C_BASEADDR= OxFFFFOOOO выделяет для описываемого экземпляра компонента диапазон адресного пространства, начи- нающийся с адреса FFFF0000. Верхняя граница адресного пространства памяти, используемого компонентом, указывается в виде значения параметра C-HIGHADDR. Команда, предназначенная для определения значения этого параметра, имеет следующий формат: PARAMETER C.HIGHADDR = <значение_верхней_границы_выделяемого_адресного_пространства> Примером использования команды, определяющей верхнюю границу адресного пространства памяти, выделяемого для экземпляра некоторого компонента, является строка PARAMETER C_HIGHADDR= OxFFFFOOFF. Команда PORT предназначена для описания взаимосвязей между компонентами проектируемой системы, а также внешнего интерфейса системы. Эта команда может быть как глобальной, так и локальной. Глобальная команда PORT используется для описания внешних портов микропроцессорной системы, а также для определения значений постоянных сигналов. Глобальные команды PORT располагаются вне бло- ков описания компонентов BEGIN-END. Для описания интерфейсных (внешних) портов разрабатываемой микропроцессорной системы наиболее часто используется следующий формат команды PORT: PORT <идентификатор_порта> = идентификаторj^ennДсигнала)>, О1Р=<тип_порта_(сигнала)>, VEC=[n:m], 5Ю15=<категория_ порта(сигнала)> С помощью ключа DIR указывается тип порта (сигнала), соответствующий на- правлению передачи данных. Для обозначения входного порта используется одно из следующих значений ключа DIR: INPUT, IN, I. В командах, описывающих выходные порты, ключ DIR должен принимать одно из трех значений: OUTPUT, OUT, О. При описании двунаправленного интерфейсного порта указывается одно из двух возмож- ных значений ключа DIR: INOUT или 10, Необязательный ключ VEC позволяет опи- сывать с помощью команды PORT многоразрядные порты, которые представляются в виде векторов (массивов). При использовании ключа VEC значения пит задают на- чальный и конечный индексы вектора, которые определяют разрядность порта. При- менение команды PORT для описания интерфейсных портов проектируемой системы иллюстрируют следующие примеры: командная строка PORT Sys_reset = sys_rst, DIR=IN описывает входной порт Sys_reset, с которым ассоциируется сигнал sys^rst;
276 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС • командная строка PORT Gp_io = gpiojo, DIR=INOUT, VEC=[0:3I] определяет 32-разрядный двунаправленный порт Gp_io, с которым ассоциируется сигнал векторного типа gpiojcr, Ключ SIGIS применяется для указания категории, к которой относится сигнал, ассоциируемый с описываемым портом. В текущей версии спецификации MHS пре- допределены 3 категории сигналов и соответствующие им значения ключа SIGIS'. CLK соответствует группе сигналов синхронизации; • INTERRUPT соответствует группе сигналов прерывания; RST соответствует группе сигналов сброса. Например, командная строка PORT Sys_clock = sys-dk, DIR=IN, SIGIS=CLK опи- сывает входной порт Sy sc lock, с которым ассоциируется тактовый сигнал sys-dk. Для определения значений постоянных сигналов применяется формат команды PORT, который имеет следующий вид: PORT <идентификатор_постоянного_сигнала> = <значение_сигнала>, О1Р=<тип_порта_(сигнала)> Значение сигнала может задаваться в двоичном или шестнадцатеричном пред- ставлении. Например, в командной строке PORT constl = 0Ы010, DIR=OUTPUTf VEC=[0:3] значение постоянного сигнала constl указывается в двоичном формате, а в команде PORT const2 = OxC, DIR=OUTPUT, VEC-[0:3] - в шестнадцатеричном. С помощью локальных команд PORT описывается подключение портов компо- нентов микропроцессорной системы. Эти команды не имеют параметров (ключей) определяющих тип и размерность сигналов. Локальные команды PORT располагают- ся внутри блоков описания компонентов BEGIN-END. Формат локальных команд PORT выглядит следующим образом: PORT <идентификатор_порта_1Р-компонента> = идентификатор _цепи(сигнала)> Если какой-либо порт IP-компонента должен оставаться неподключенным, то в соответствующей команде PORT вместо идентификатора цепи указывается пара двойных апострофов Для обозначения цепей питания и земли зарезервированы идентификаторы net_vcc и net_gnd соответственно. Для многоразрядных портов, опи- сываемых с помощью векторов, идентификаторы net_vcc и net_gnd автоматически расширяются в соответствии с требуемой разрядностью. Использование локальной команды PORT демонстрируют приведенные ниже примеры. Команда PORT Clk = sys_clk описывает подключение порта Clk некоторого IP- компонента к цепи sys_clk. Команда PORT In-reset = net-gnd описывает подключение порта In reset некото- рого IP-компонента к цепи «земля». Команда PORT Out_en - ““ описывает порт Out_en, который находится в непод- ключенном состоянии. Команда BUS-INTERFACE используется для описания взаимосвязей компонен- тов, осуществляемых на основе шинной архитектуры. Для подключения к шинам различные компоненты микропроцессорной системы используют одни и те же груп- пы цепей (сигналов). При использовании команды PORT для их описания потребова- лось бы достаточно большое количество командных строк, которые повторялись бы для каждого компонента, что привело бы к существенному увеличению времени под- готовки и объема файла спецификации аппаратной платформы. Избежать этого по-
ГЛАВА 12 277 зволяет применение команды BUS-INTERFACE для описания подключения компо- нентов к шинам проектируемой микропроцессорной системы. Формат команды BUS-INTERFACE выглядит следующим образом: BUSJNTERFACE <тип_шинного_интерфейса> = <идентификатор_шины> Тип шинного интерфейса в команде BUS-INTERFACE указывается в виде соот- ветствующего условного обозначения. Для различных вариантов (режимов) подклю- чения компонентов к стандартным шинным интерфейсам, применяемым во встраи- ваемых микропроцессорных системах на основе ядер фирмы Xilinx, зарезервированы следующие условные обозначения: SDCR соответствует подключению компонента к шине DCR в подчиненном (Slave) режиме; • SLMB соответствует подключению компонента к шине LMB в подчиненном (Slave) режиме; MSOPB соответствует подключению компонента к шине ОРВ в ведущем- подчиненном (Master-slave) режиме; SOPB соответствует подключению компонента к шине ОРВ в подчиненном (Slave) режиме; MPLB соответствует подключению компонента к шине PLB в ведущем (Master) режиме; MSPLB соответствует подключению компонента к шине PLB в ведущем- подчиненном (Master-slave) режиме; • SPLB соответствует подключению компонента к шине PLB в подчиненном (Slave) режиме. Например, командная строка BUS-INTERFACE SOPB = myopb описывает под- ключение компонента в подчиненном режиме к шине myopb, которая соответствует стандарту ОРВ. В тесте спецификации аппаратной платформы разрабатываемой микропроцес- сорной системы могут располагаться комментарии. Комментарием считается строка, начинающаяся с символа #. Комментарий может занимать отдельную строку или располагаться в командной строке. В последнем случае комментарием считается та часть строки, которая следует после символа #. Применение комментариев повышает информативность файла спецификации аппаратной платформы и облегчает поиск требуемых разделов или компонентов. В качестве примеров ниже приведен коммен- тарий, занимающий полную строку и комментарий, расположенный непосредственно в строке, содержащей команду. # Assign constant signals................. PARAMETER C.HASJPR = 1 # Interrupt Pending Register present Типовая структура спецификации аппаратной платформы проектируемой микро- процессорной системы, как правило, содержит следующие разделы: команду, указывающую номер версии спецификации MHS; описание внешнего интерфейса (глобальных портов) разрабатываемой системы; определение портов, подключаемых к цепям питания и земля; декларацию и определение значений постоянных сигналов; блоки описания микропроцессорного ядра и компонентов, включаемых в состав разрабатываемой системы.
278 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 12.3. Создание спецификации аппаратной платформы разрабатываемой микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio Процесс создания и редактирования спецификации аппаратной платформы про- ектируемой микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio может осуществляться в трех режимах: текстовом, графическом и ин- терактивном. Так как спецификация MHS представляет собой текстовый файл, то для его подготовки и модификации можно использовать текстовый редактор, который входит в состав средств проектирования Xilinx EST. Но создавать новую специфика- цию аппаратной платформы с чистого листа в текстовом режиме сложно и трудоем- ко. При наборе текста команд файла MHS велика вероятность появления различных ошибок. Текстовый режим целесообразно использовать в основном для редактирова- ния значений отдельных параметров или в тех случаях, когда новая спецификация аппаратной платформы формируется на основе уже существующего файла MHS. Графический метод подготовки спецификации аппаратной платформы заключа- ется в использовании редактора структурных схем Processor Block Diagram Editor (PBD Editor), который является одним из инструментов САПР Xilinx EST. Этот спо- соб отличается большей наглядностью по сравнению с текстовым методом. Проекти- руемая система представляется в редакторе PBD Editor в виде структурной схемы, элементами которой являются IP-компоненты. Значения всех необходимых парамет- ров этих компонентов определяются с помощью контекстно-зависимых всплываю- щих меню. Для создания с нуля новой спецификации аппаратной платформы удобнее всего воспользоваться интерактивным методом. При использовании этого способа состав проектируемой системы, взаимосвязи компонентов и значения всех параметров оп- ределяются в диалоговом режиме с помощью соответствующей многостраничной панели. Чтобы приступить к формированию новой спецификации аппаратной плат- формы в интерактивном режиме необходимо выполнить команду Project основного меню управляющей оболочки Xilinx Platform Studio, а затем во всплывающем меню выбрать строку Add/Edit Cores. Можно также воспользоваться аналогичной командой из контекстно-зависимого всплывающего меню, отображаемого на экране при щелч- ке правой кнопкой мыши на строке MHS File, которая находится на странице System встроенного окна проекта разрабатываемой системы, в разделе Project Files. В ре- зультате выполненных операций на экран выводится диалоговая панель, вид которой показан на рис. 12.15. Панель диалога создания и редактирования спецификации аппаратной платфор- мы проектируемой системы содержит 5 страниц, снабженных закладками с их назва- ниями: Peripherals, Bus Connections, Addresses, Ports, Parameters. Страница Periphe- rals позволяет определить состав компонентов, заносимых в спецификацию проекти- руемой системы, и указать их общие параметры. Вся информация о компонентах, включаемых в спецификацию MHS, представляется в форме таблицы, которая со- держит 3 колонки (рис. 12.15). Для каждого экземпляра компонента, входящего в со- став разрабатываемой системы, отводится отдельная строка таблицы. Первоначально при создании новой спецификации в этой таблице представлена только строка с на- званиями колонок, как показано на рис. 12.15.
ГЛАВА 12 279 Add/Edit Hardware Platform Specifications РеИрЬдгЫ? rfer OiwtoOnly PowerPCOn{yj: :£ у'J - Efther Probessoj.' C. LMB r OCM ..;'U j bram_block chipscopejcon chip$cope_ila chip$cope_opb_iba chip$cope_plbjba chip$cope_vio clock_module_ref dcm_module dcrjntc dsbram_if_cntlr fcb2f$l_bridge fitjimer i$bram_if_cntlr jtagppc_cntlr lmb_bramjtcntlr mch_opb_sdram microblaze opb2dcr_bridge □pb2plb_bridge opb_arbiter Puc. 12.15, Диалоговая панель создания и редактирования спецификации аппаратной платформы проектируемой системы (страница Peripherals) В ячейках, расположенных в колонке с названием Peripherals, указывается иден- тификатор типа компонента, добавленного в состав спецификации. Эти ячейки за- полняются автоматически при внесении нового компонента в спецификацию MHS. В колонке HW Ver содержится информация о версии аппаратных средств для каждо- го компонента спецификации. Если какой-либо IP-компонент представлен в несколь- ких версиях, то соответствующая ячейка этого столбца представляет собой поле вы- бора, в правой части которого находится кнопка управления выпадающим списком возможных вариантов. При нажатии на эту кнопку на экран выводится список дос- тупных версий данного компонента. Для выбора необходимой версии следует щелк- нуть левой кнопкой мыши на соответствующей строке этого списка, после чего но- мер этой версии будет отображаться в таблице. В ячейках, относящихся к столбцу с названием Instance, указывается идентификатор экземпляра компонента, включаемо- го в состав разрабатываемой микропроцессорной системы. Каждая ячейка, располо- женная в этой колонке, представляет собой поле редактирования. Когда новый эк- земпляр компонента включается в состав спецификации MHS, средства проектиро- вания автоматически присваивают ему некоторый идентификатор. Для изменения имени экземпляра компонента нужно прежде всего активизировать соответствую-
280 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС щую ячейку, расположив на ее поле курсор и щелкнув левой кнопкой мыши. Затем, используя клавиатуру, ввести текст идентификатора. В правой части страницы Peripherals диалоговой панели создания и редактиро- вания спецификации аппаратной платформы расположено встроенное окно, в кото- ром отображается список доступных IP-компонентов. Над этим встроенным окном расположены 4 группы кнопок, которые предназначены для управления фильтром списка отображаемых названий IP-компонентов. С помощью этих кнопок можно до- биться того, чтобы во встроенном окне отображались названия только тех IP- компонентов, которые удовлетворяют заданным условиям. Если в нажатом состоя- нии зафиксирована кнопка Show All, то во встроенном окне отображается список всех доступных IP-компонентов. Для того чтобы ограничить список компонентами, отно- сящихся к определенному процессорному ядру, следует воспользоваться группой кнопок с зависимой фиксацией Processor. Если необходимо вывести список названий компонентов, подключаемых к заданному типу шины, то нужно зафиксировать в на- жатом состоянии соответствующую кнопку в группе Bus. Для отображения списка названий компонентов, относящихся к определенной функциональной группе, следу- ет в группе кнопок с зависимой фиксацией Component Filter нажать соответствую- щую кнопку. Чтобы выбрать требуемый IP-компонент, необходимо поместить курсор мыши на соответствующую строку списка и щелкнуть левой кнопкой. Если нужный тип компонентов не представлен в отображаемой части списка, то следует воспользо- ваться элементами прокрутки, которые расположены с правой стороны списка (см. рис. 12.15). Можно сразу выделить группу компонентов, удерживая нажатой клави- шу CTRL или Shift при щелчке левой кнопкой мыши на строках списка. Для того что- бы экземпляры компонентов, выбранных из предложенного списка, были добавлены в спецификацию MHS, нужно нажать кнопку «Add, которая расположена в диало- говой панели между таблицей и списком (см. рис. 12.15). После этого в таблицу бу- дут добавлены строки, соответствующие экземплярам выделенных компонентов. Ес- ли какой-либо компонент был ошибочно включен в спецификацию, то для его удале- ния нужно прежде всего выделить соответствующую строку таблицы, расположив на ней курсор и щелкнув левой кнопкой мыши. Затем необходимо нажать кнопку Delete», находящуюся несколько ниже кнопки «Add, в результате чего на экран будет выведена диалоговая панель, в которой содержится запрос подтверждения уда- ления компонента из спецификации аппаратной платформы (рис. 12.16). В этой па- нели также отображается предупреждение о том, что вместе с удаляемым экземпля- ром компонента будет утеряна вся информация о его параметрах и подключении к шинам. ХШпн Platform Studio /|\ fye you sure you wane to delete theper jpheral^)fiy . f* \ All peripheral port4 bus connectionsandparameter;^ЙЙ^||;а150М deleted. / . - r ' ;Wf'; jжм ' Рис. 12.16. Панель запроса подтверждения удаления компонента из спецификации аппаратной платформы
ГЛАВА 12 281 При нажатии кнопки ОК, расположенной в нижней части панели запроса (см. рис. 12.16), все выделенные строки таблицы будут удалены. Для предотвращения удаления выбранных компонентов следует воспользоваться кнопкой Отмена (Cancel). В качестве примера для включения в состав спецификации MHS созданного про- екта контроллера system_controller выберем следующие IP-компоненты: microblaze, lmb_bram_if_cntlr, bramjblock, opb_uartlite, opb_gpio. Нажатием кнопки «Add до- бавляем экземпляры выделенных компонентов в состав формируемой таблицы. Для компонента lmbj>ramjf_cntlr повторяем перечисленные операции, чтобы добавить еще один экземпляр в спецификацию MHS. В строке таблицы, содержащей парамет- ры экземпляра микропроцессорного ядра microblaze, устанавливаем номер версии используемого IP-компонента - 4.00. а и изменяем его идентификатор на cpu_mb. Эк- земплярам компонентов контроллеров интерфейса программной и оперативной па- мяти lmb_bram_if_cntlr присваиваем идентификаторы instjbus_cntlr и data_bus_cntlr соответственно. Модулю блочной памяти bram_block присваиваем идентификатор inst_data_bram. В строке таблицы, представляющей параметры экземпляра ядра уни- версального последовательного асинхронного приемопередатчика opb_uartlite изме- няем идентификатор на uart_port. Для экземпляра ядра параллельного интерфейса ввода/вывода выбираем номер версии используемого IP-компонента - 3.01.а и ука- зываем идентификатор in_data_port. По завершении редактирования указанных выше параметров компонентов спецификации аппаратной платформы контроллера систе- мы сбора и обработки данных страница Peripherals приобретает вид, показанный на рис. 12.17. Рис. 12.17. Окончательный вид страницы Peripherals при подготовке спецификации аппаратной платформы контроллера системы сбора и обработки данных
282 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС После того как в состав спецификации аппаратной платформы проектируемой системы включены все необходимые компоненты, следует описать их взаимодейст- вие на основе шинной архитектуры. Для этого нужно перейти к странице с названием Bus Connections. Данная страница предназначена для формирования конфигурации шин разрабатываемой системы. Подключение компонентов к шинам проектируемой системы описывается в форме таблицы, которая располагается в левой части диало- говой панели (рис. 12.18). «Add Connecter j b. ! l/' tX.AJU inst_data_brarn PO... inst_data_bramPO... sMave (M. SJ MSHonnectionA dcr„ v29. vl.. 00.. a. dsocm_v10_v1_00_b dsocm_v10_v2_00_a fcb_v10_v1_00_a fsl_v20_v1_00_b fsl_v20_v2_00_a isocm_v10_v1_00_b cpu_nibiopb insLbus„crtlf simb data_bus_cntlrslmb uart_port soph ' in_.data_.port sopb Other to poihllconhecHon» Puc. 12.18. Страница Bus Connections диалоговой панели создания и редактирования спецификации аппаратной платформы проектируемой системы В первой колонке этой таблицы представлены все компоненты, которые были включены в состав спецификации MHS, используя страницу Peripherals. Следующие столбцы этой таблицы соответствуют шинам разрабатываемой системы. Первона- чально при формировании новой спецификации аппаратной платформы не определен состав шин микропроцессорной системы. Поэтому в таблице присутствует только первая колонка, как показано на рис. 12.18. Чтобы добавить описания шин в состав спецификации MHS, нужно воспользоваться списком, который представлен во встроенном окне, расположенном в правой части страницы Bus Connections диалого- вой панели. В этом списке содержатся идентификаторы всех доступных стандартов шин, которые могут использоваться в архитектуре микропроцессорных систем, про- ектируемых на основе ядер MicroBlaze и PowerPC. В предложенном списке нужно найти и выделить строку, содержащую требуемый тип шины, поместить на нее кур- сор мыши и щелкнуть левой кнопкой мыши. При необходимости для просмотра всех вариантов стандартов шин можно использовать инструменты прокрутки, располо- женные в правой части списка. Для выделения группы шин нужно удерживать нажа-
ГЛАВА 12 283 той клавишу CTRL или Shift при щелчке левой кнопкой мыши на соответствующих строках списка. Для того чтобы описания шин, соответствующих выбранным из предложенного списка стандартам, были включены в спецификацию MHS, нужно нажать кнопку «Add, расположенную на странице Bus Connections диалоговой панели между таб- лицей и списком (см. рис. 12.18). В результате выполненных действий в таблицу ав- томатически добавляются столбцы, которые соответствуют типам шин, отмеченным в списке. При этом в верхней части таблицы появляется строка, в которой отобража- ются идентификаторы шин, установленные по умолчанию. Для того чтобы изменить названия шин, следует воспользоваться командой Edit Name, которая находится в контекстно-зависимом всплывающем меню. Это меню от- крывается щелчком правой кнопки мыши при расположении курсора в ячейке табли- цы, содержащей изменяемый идентификатор шины. В результате выполнения коман- ды Edit Name на экране отображается диалоговая панель редактирования идентифи- катора шины, показанная на рис. 12.19. В поле редактирования этой диалоговой панели приводится текущее название шины. Ввод нового идентификатора шины осуществляется с помощью клавиатуры и завершается нажатием кнопки ОК, которая расположена в нижней части диалоговой панели (рис. 12.19). Вслед за подтвержде- нием новое название шины автоматически отображается в соответствующей ячейке таблицы. Change Instance Рис. 12.19. Вид диалоговой панели редактирования идентификатора шины Если какая-либо шина была ошибочно включена в состав спецификации MHS, то для ее удаления нужно использовать команду Delete Bus, которая располагается в том же контекстно-зависимом всплывающем меню, в котором располагается и команда Edit Name. При выборе команды Delete Bus появляется панель запроса подтвержде- ния удаления шины из спецификации аппаратной платформы, вид которой показан на рис. 12.20. В этой панели также содержится предупреждение о том, что вместе с удаляемым экземпляром шины будет утеряна вся информация о его параметрах. При утвердительном ответе на запрос (нажатии кнопки ОК) выбранная шина будет уда- лена из спецификации MHS. Рис. 12.20. Панель запроса подтверждения удаления шины из спецификации аппаратной платформы
284 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС После того как завершено определение состава и названий шин разрабатываемой микропроцессорной системы, необходимо указать способ подключения компонентов к этим шинам. Для этого следует поочередно в каждом столбце сформированной на странице Bus Connections таблицы поместить курсор в ячейки, соответствующие подключаемым к этой шине компонентам, и щелкнуть левой кнопкой мыши. Данные ячейки располагаются на пересечении столбца, который соответствует используемой для подключения шине, и строки, содержащей идентификатор подключаемого эк- земпляра компонента. Большинство компонентов спецификации MHS может быть сопряжено с шиной только того типа, для которой он предназначен. Этот тип, как правило, указывается в идентификаторах таких компонентов. Например, компонент OPB_UARTLITE представляет собой последовательный асинхронный приемопере- датчик, предназначенный для подключения к шине, которая соответствуют специфи- кации ОРВ (On-chip Peripheral Bus). В случае отсутствия ошибок в выборе шины и компонента при щелчке левой кнопкой мыши в соответствующей ячейке таблицы отображается одно из трех возможных условных обозначений варианта подключения к шине. Подключение компонента, функционирующего в ведущем (Master) режиме, обозначается символом М, в подчиненном (Slave) - символом S, в ведущем- подчиненном (Master-slave) - символами MS. Сопряжение модулей внутренней блочной памяти ПЛИС Block SelectRAM с кон- троллером описывается в форме таблицы, которая находится на странице Bus Connections под списком стандартов шин. Эта таблица содержит 3 колонки. В колон- ке с названием Cntlr Port указывается идентификатор порта контроллера, к которому подключается модуль блочной памяти. В ячейках, расположенных в колонке BRAM Port, необходимо указать порт модуля блочной памяти, через который осуществляет- ся сопряжение с контроллером. Каждая из ячеек этого столбца представляет собой поле выбора, в правой части которого находится кнопка управления выпадающим списком. Для определения требуемого порта блочной памяти необходимо нажать эту кнопку и выбрать из предложенного списка тип порта, расположив курсор на строке с его названием и щелкнув левой кнопкой мыши. Колонку Connector образуют ячей- ки, в которых указывается идентификатор, используемый для обозначения подклю- чения блочной памяти. Каждая из этих ячеек является полем редактирования, в кото- ром отображается идентификатор, присваиваемый по умолчанию. Для изменения этого идентификатора необходимо активизировать соответствующую ячейку, распо- ложив на ней курсор и щелкнув левой кнопкой мыши, а затем ввести требуемый текст с помощью клавиатуры. Выполнение процедуры включения описания шин в состав спецификации MHS продемонстрируем на примере проекта контроллера system_controller. Из списка, представленного во встроенном окне, которое расположено в правой части страницы Bus Connections, выбираем следующие типы шин: 1тЬ_у10 и opb_y20. Используя кнопку «Add, включаем экземпляры выбранных типов шин в состав спецификации аппаратной платформы. Для шины стандарта 1тЬ_у10 следует повторить указанные операции, так как необходимы два экземпляра данного типа: для шины команд и ши- ны данных. С помощью команды Edit Name, которая находится в контекстно- зависимом всплывающем меню, изменяем идентификаторы шин, установленные по умолчанию. Для шины команд и шины данных задаем идентификаторы instr_bus и datajbus соответственно, а для шины ОРВ - идентификатор opb_bus_mb. Затем осу-
ГЛАВА 12 285 ществляем подключение элементов спецификации MHS к данным шинам, поочеред- но щелкнув левой кнопкой мыши в ячейках таблицы, которые располагаются на пе- ресечении столбца, соответствующего используемой шине, и строки, содержащей идентификатор подключаемого экземпляра компонента. К шине команд (instr_bus) должны быть подключены микропроцессорное ядро (cpu_mb ilmb) и контроллер ин- терфейса программной памяти (inst_bus_cntlr slmb), к шине данных (data_bus) - мик- ропроцессорное ядро (cpu_mb dlmb) и контроллер интерфейса оперативной памяти (data _bus__cntlr slmb), к шине opb_bus_mb - микропроцессорное ядро (cpu_mb iopb и cpu_mb dopb), ядро универсального последовательного асинхронного приемопере- датчика (uart_port sopb) и ядро параллельного интерфейса ввода/вывода (in_data_port sopb). Далее указываем порты модуля внутренней блочной памяти ПЛИС Block SelectRAM, посредством которых осуществляется подключение к контроллерам про- граммной и оперативной памяти. Для сопряжения с контроллером программной па- мяти выбираем порт А блочной памяти Block SelectRAM и присваиваем внутренней шине, соединяющей данную память с контроллером, идентификатор inst__port. Для подключения к контроллеру оперативной памяти выделяем соответственно порт В и назначаем соответствующей внутренней шине идентификатор data_port. После вы- полнения всех перечисленных операций страница Bus Connections должна выглядеть так, как показано на рис. 12.21. | Add/Edit Hardware Platform Specifications ’Peripherals < Bus | Ri^t click on any bus instance (cdlurnnl^ad^) fora c^extiTienu. : СрЦ_тЬ climb cpujmbilrnb cpu mbiopb inst_bus_cntlr slmb datajjus^cntlr slmb uart port$opb in data por sopb isocm_ v10_v1 _00_b isocm_v10_v2_00_a lmb_Yl0_v1_00_a opb_v20_v1_10_a opb_v20_v1_10_b opb_v20_v1_10_c plb_v34_?1_T)1_a CntlrPort BRAM Port ___________________________________________ inst_bus_,cntlr bramjjort inst_data_bram PORTA I inst port . datajx!5_cntlrbram_port inst_data_bram PORTB jrjSS23B33I № м м (point tbpbihtl commons ;< . Source OK./ 7“1 Справка Puc. 12.21. Окончательный вид страницы Bus Connections при подготовке спецификации аппаратной платформы контроллера системы сбора и обработки данных После завершения описания внутренних соединений элементов разрабатываемой системы с помощью шин нужно открыть страницу Addresses диалоговой панели соз- дания и редактирования спецификации аппаратной платформы проектируемой сис-
286 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС темы. Используя данную страницу, следует указать границы адресного пространства, выделяемого каждому компоненту разрабатываемой микропроцессорной системы. Вся информация о значениях адресов задается в форме таблицы, которая включает в себя 10 колонок (рис. 12.22). Add/Edit Hardware Platform Specifications Press F1 for more information Prefix data_bus_cntlr in datajxrrt inst_bus_cndr opbjbusjnb 0x00000000 OxOQOOlfff 0X40000000 0x40000fff 0x00000000. 0x40600000 0x40600fff 8 KB jJ.OxSQG 4 KB 8 KB J^JOxSOO UNSPEC... 0x200 «кв. .. I. •. iiigii Generate addresses for peripherals that do not have lock checkbox checked j Generate AddresseT] Puc. 12.22. Вид страницы Addresses при подготовке спецификации аппаратной платформы контроллера системы сбора и обработки данных В ячейках, образующих колонку с названием Instance, отображаются идентифи- каторы экземпляров компонентов, которые были включены в состав разрабатывае- мой микропроцессорной системы на странице Peripherals. В ячейках, расположенных в колонке с названием Base Address, указываются значения базового адреса компо- нентов, для которых выделяется адресное пространство. Каждая ячейка, относящаяся к столбцу Base Address, представляет собой поле редактирования соответствующего параметра. Поэтому для изменения значения базового адреса достаточно активизиро- вать соответствующую ячейку и ввести новое значение, используя клавиатуру. В ячейках, которые входят в состав колонки с названием High Address, отображаются значения, определяющие верхнюю границу адресного пространства, выделяемого для соответствующего компонента. Эти значения вычисляются автоматически на ос- новании базового адреса и размера выделяемого адресного пространства. В ячейках, относящихся к столбцу с названием Size, указывается размер адресного пространства, которое выделяется для соответствующих периферийных компонентов. Каждая ячейка этой колонки представляет собой поле выбора, в правой части которого рас- положена кнопка управления выпадающим списком допустимых значений этого па- раметра. Определение размера выделяемого адресного пространства для каждого пе- риферийного компонента осуществляется путем выбора соответствующей строки в выпадающем списке. При этом следует помнить, что размер диапазона адресного пространства, которое резервируется для некоторого элемента спецификации, дол- жен соответствовать значению, указанному в документации для этого компонента. Минимальное значение этого параметра для каждого периферийного компонента
ГЛАВА 12 287 отображается в соответствующих ячейках столбца Min.Size. Кнопка Generate Address предоставляет возможность запуска программы автоматического распределения ад- ресного пространства для тех компонентов, которые не отмечены маркером в ячей- ках, образующих колонку Lock. Для примера на рис. 12.22 показан вид страницы Addresses при подготовке спе- цификации аппаратной платформы контроллера системы сбора и обработки данных. Для элементов instjbus_cntlr и data_bus_cntlr в качестве базового адреса указываем значение 0x00000000, а в качестве размера выделяемого адресного пространства- значение 8 Кбайт. Компонентам универсального последовательного асинхронного приемопередатчика uart_port и параллельного интерфейса ввода/вывода in_data__port выделим по 4 Кбайт адресного пространства, установив значения базового адреса 0x40600000 и 0x40000000 соответственно. Далее нужно перейти к следующему шагу - описанию подключения тех портов компонентов спецификации, которые не сопряжены со стандартными шинами. Эта процедура осуществляется с помощью страницы Port диалоговой панели создания и редактирования спецификации аппаратной платформы проектируемой системы. Вся необходимая информация о подключении портов компонентов, которые не связаны с основными шинами, заносится в две таблицы, расположенные в левой части страни- цы Ports диалоговой панели создания и редактирования спецификации аппаратной платформы проектируемой системы (рис. 12.23). jAdd/EditHardware Mattel Peripherals | Bus Connections | Addresses • Ports | Parameters | •P 7; 7:'Ш7" я ® 4 ' :? Ports Connections: J- X] j-. F Show ports with default connections oris J Delete uart_poFt OPB_Clk Interrupt RX TX inst_data_bram inst_bus_cntlr LMB_Clk Internal Ports Connections: Я /. / : -I^aried7:-: External | / -:P /W: < 7::i'.7'Я77/ j’ in_data_port OPB_Clk IP2INTC Irpi GPIOJO GPIOJn GPIO_d_out GPIO t out GPIO2J0 GPIO2Jn GPI02_d_out GPIO2 t out Connect data_bus_cntlr LMB.CIk cpu_mb T.| .-J Jd ' Puc. 12.23. Страница Ports диалоговой панели создания и редактирования спецификации аппаратной платформы проектируемой системы
288 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Таблица External Port Connections предназначена для описания подключений внешних портов разрабатываемой микропроцессорной системы. Эта таблица содер- жит 6 колонок: Port Name, Net Name, Polarity, Range, Class, Sensitivity. Таблица Internal Port Connections содержит информацию о внутренних связях между компо- нентами, включенными в состав спецификации. В состав этой таблицы входят 7 ко- лонок: Instance, Port Name, Net Name, Polarity, Range, Class, Sensitivity. Каждая стро- ка таблицы Internal Port Connections содержит описание подключения соответст- вующего порта одного из компонентов проектируемой системы. Первоначально при создании новой спецификации в каждой из указанных таблиц представлена только строка с названиями колонок, как показано на рис. 12.23. В ячейках, относящихся к столбцу с названием Instance, отображается идентифи- катор экземпляра компонента, включенного в состав спецификации MHS, разрабаты- ваемой микропроцессорной системы, к которому принадлежит описываемый порт. Ячейки, расположенные в колонке с названием Port Name, содержат идентификатор подключаемого порта. В ячейках, образующих колонку с названием Net Name, ука- зывается название цепи, к которой подключается соответствующий порт. Каждая ячейка, расположенная в этой колонке, представляет собой поле редактирования. Первоначально при выборе некоторого порта в этих ячейках отображается иденти- фикатор цепи, предлагаемый автоматически средствами проектирования. Для изме- нения имени цепи нужно прежде всего активизировать соответствующую ячейку, расположив на ее поле курсор и щелкнув левой кнопкой мыши. Затем, используя клавиатуру, ввести текст идентификатора. Ячейки, составляющие колонку Polarity, содержат информацию о типе порта (сигнала) в соответствии с направлением передачи данных. Если описываемый порт является входным, то в данной ячейке отображается символ I. Для обозначения вы- ходного порта в ячейке Polarity используется символ О. При описании подключения двунаправленного порта в данной ячейке отображается сочетание символов, соответ- ствующих двум предыдущим типам порта (входному и выходному), -10. Ячейки, которые входят в состав колонки с названием Range таблицы External Port Connections, используются для определения номеров разрядов внешних интер- фейсных портов, которые представлены в форме векторов. Каждая ячейка, относя- щаяся к этой колонке, является полем редактирования. Для того чтобы указать зна- чения начального и конечного индексов, необходимо активизировать соответствую- щую ячейку и воспользоваться клавиатурой. Вводимые значения начального и конечного индекса векторов разделяются двоеточием. В таблице Internal Port Connections, в ячейках, составляющих колонку с названием Range, отображаются но- мера разрядов портов компонентов, которые представлены в форме векторов. В ячейках, которые расположены в колонке Class, содержится условное обозна- чение категории, к которой относится сигнал, ассоциируемый с описываемым пор- том. Если сигнал, ассоциируемый с портом, соответствует группе сигналов синхро- низации, то в соответствующей ячейке данного столбца содержится обозначение CLK. Для сигналов, относящихся к категории сигналов прерывания, используется ус- ловное обозначение INTERRUPT. Принадлежность к группе сигналов сброса фикси- руется кодовым обозначением RST. Последняя колонка таблиц, Sensitivity, заполняется только для тех портов, с кото- рыми ассоциированы сигналы прерывания. В ячейках этого столбца отображается
ГЛАВА 12 289 условное обозначение активного уровня или фронта для сигнала прерывания, с кото- рым ассоциируется описываемый порт. Возможны следующие 4 варианта условного обозначения активного события: EDGE_FALLING соответствует порту, управляемому спадом сигнала; - EDGE_RISING соответствует порту, управляемому фронтом сигнала; • LEVEL_HIGH соответствует порту, для которого активным является высокий логический уровень сигнала; LEVEL-LOW соответствует порту, для которого активным является низкий логический уровень сигнала. В правой части страницы Ports диалоговой панели создания и редактирования спецификации аппаратной платформы находится встроенное окно, в котором ото- бражается список всех доступных портов компонентов, включенных в состав проек- тируемой системы. Этот список разделен на секции, в начале каждой из которых ука- зывается название экземпляра компонента, а затем перечисляются его порты. Чтобы выбрать требуемый порт компонента, необходимо поместить курсор мыши на соот- ветствующую строку списка и щелкнуть левой кнопкой мыши. Если нужный экземп- ляр компонента или порт не представлен в отображаемой части списка, то следует воспользоваться элементами прокрутки, которые расположены с правой стороны списка (см. рис. 12.23). Для выделения группы портов компонентов следует удержи- вать нажатой клавишу CTRL или Shift при щелчке левой кнопкой мыши на строках списка. Поле выбора Ports Filter, расположенное над встроенным окном списка, по- зволяет быстро найти порты требуемого компонента. При нажатии на кнопку управ- ления, расположенную в правой части этого поля выбора, на экране отображается полный список экземпляров компонентов, включенных в состав спецификации аппа- ратной платформы. При выборе одной из строк выпадающего списка идентификатор экземпляра соответствующего компонента и названия его доступных портов автома- тически отображаются в видимой части встроенного окна. Чтобы добавить описание порта в таблицу External Port Connections, следует воспользоваться кнопкой Add Port, которая предназначена для включения в состав спецификации аппаратной платформы описаний внешних портов проектируемой системы. При нажатии на кнопку Add Port на экране появляется диалоговая панель, вид которой показан на рис. 12.24. Эта панель позволяет определить все параметры создаваемого внешнего порта. В поле редактирования Port Name (рис. 12.24) после его активизации необходимо указать идентификатор нового внешнего порта, исполь- зуя клавиатуру. Поле выбора Port Polarity позволяет определить тип создаваемого порта. Для этого следует нажать кнопку управления выпадающим списком, располо- женную в правой части указанного поля выбора, и выбрать из предложенных вариан- тов тип, соответствующий направлению передачи данных через этот порт (IN - вход- ной, OUT - выходной или INOUT - двунаправленный). С помощью поля выбора Port Class нужно указать категорию, к которой относится сигнал, ассоциируемый с созда- ваемым портом. Возможные варианты категорий были представлены выше. Если сигнал, ассоциируемый с портом, не принадлежит ни к одной из рассмотренных ка- тегорий, то в поле выбора Port Class следует оставить без изменений вариант None, который предлагается по умолчанию. В случае если новый порт сопряжен с сигналом прерывания, необходимо указать активный уровень или фронт для этого сигнала, ис- пользуя поле выбора Port Sensitivity. Для портов, сигналы которых относятся к дру- 10—2062
290 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС гим категориям, данное поле выбора находится в недоступном состоянии. Чтобы указать название цепи, к которой должен быть подключен новый внешний порт, сле- дует воспользоваться полем редактирования и выбора Connected to. Идентификатор соответствующей цепи может быть непосредственно занесен в данное поле (после его активизации) с помощью клавиатуры или выбран из выпадающего списка. После того как определены все параметры создаваемого порта, следует нажать кнопку ОК, расположенную в нижней части диалоговой панели (рис. 12.24). Вслед за этим в таб- лице External Port Connections появляется новая строка, содержащая описание нового внешнего порта. Рис. 12.24. Панель создания описания внешнего порта в спецификации аппаратной платформы Если какой-либо внешний порт был ошибочно включен в спецификацию, то для его удаления нужно прежде всего выделить соответствующую строку таблицы External Port Connections, расположив на ней курсор и щелкнув левой кнопкой мы- ши. Затем необходимо нажать кнопку Delete, находящуюся над кнопкой Add Port, в результате чего на экран будет выведена диалоговая панель, в которой содержится запрос подтверждения удаления выбранного порта из спецификации аппаратной платформы (рис. 12.25). При утвердительном ответе на запрос (нажатии кнопки ОК, расположенной в нижней части панели запроса) выбранные строки таблицы External Port Connections и описание подключения соответствующих портов будут удалены из спецификации MHS. Xilinw Platform Studio Are you ^ure you want to delete the ports(s)? Рис. 12,25. Панель запроса подтверждения удаления порта из спецификации аппаратной платформы Чтобы включить описания портов компонентов в таблицу Internal Port Connections (и соответственно в спецификацию MHS), следует в списке, располо- женном во встроенном окне, выделить строки, содержащие их идентификаторы. По- сле этого нужно нажать кнопку «Add, которая расположена в диалоговой панели между таблицей Internal Port Connections и списком (см. рис. 12.23). После этого
ГЛАВА 12 291 в таблицу Internal Port Connections будут добавлены строки, в которых должна рас- полагаться информация о подключении выбранных портов элементов проектируемой системы. Для удаления какого-либо порта компонента, ошибочно включенного в специ- фикацию, нужно выделить соответствующую строку таблицы Internal Port Connections и нажать кнопку Delete, находящуюся под кнопкой «Add, в результате чего на экран будет выведена диалоговая панель, в которой содержится запрос под- тверждения удаления выбранного порта компонента из спецификации аппаратной платформы (см. рис. 12.25). При утвердительном ответе на запрос (нажатии кнопки ОК, расположенной в нижней части панели запроса) выбранные строки таблицы Internal Port Connections и описание подключения соответствующих портов будут удалены из спецификации MHS. Для подключения порта к некоторой цепи системы или для изменения подклю- ченной цепи нужно выделить соответствующую строку в таблице Internal Port Connections, после чего воспользоваться кнопкой Connect, которая расположена под кнопкой Delete (см. рис. 12.23). При нажатии этой кнопки на экран выводится диало- говая панель, представленная на рис. 12.26. Рис. 12.26. Вид диалоговой панели подключения порта к цепи в спецификации аппаратной платформы В поле редактирования/выбора Net name to connect ports with с помощью клавиа- туры указывается идентификатор цепи, к которой должен быть подключен выбран- ный порт. Можно также выбрать название существующей цепи из выпадающего спи- ска, доступ к которому открывает кнопка управления, расположенная в правой части поля Net name to connect ports with. Все выполненные изменения вступают в силу после нажатия кнопки ОК, распо- ложенной в нижней части диалоговой панели (рис. 12.26), после чего автоматически отображаются в таблице Internal Port Connections (см. рис. 12.23). Если введенное имя цепи уже существует, то на экране появляется диалоговая панель предупрежде- ния, вид которой показан на рис. 12.27. В этой панели содержится запрос о подклю- чении выбранного сигнала к существующей цепи. При утвердительном ответе (нажа- тии кнопки О К) выбранный порт будет подключен к указанной цепи. Рис. 12.27. Вид диалоговой панели запроса подключения порта к указанной цепи
292 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Если какой-либо порт некоторого компонента спецификации аппаратной плат- формы должен быть подключен непосредственно только к внешней интерфейсной цепи разрабатываемой системы, то в таблице Internal Port Connections следует выде- лить строку, содержащую описание подключения данного порта. Затем нужно на- жать кнопку Make External, которая расположена над кнопкой «Add. После этого соответствующая строка будет добавлена в таблицу описания внешних портов External Port Connections. Для того чтобы зафиксировать все изменения, выполненные на страницы Ports, спелую нажать кнопку Применить (Apply), расположенную в нижней части диалого- вой панели создания и редактирования спецификации аппаратной платформы проек- тируемой системы. В качестве примера, внесем в спецификацию аппаратной платформы контролле- ра микропроцессорной системы сбора и обработки данных описание взаимосвязей портов компонентов, не связанных со стандартными шинными интерфейсами. В спи- ске, отображаемом во встроенном окне в правой части страницы Ports, выделим идентификаторы портов компонентов проектируемой системы, с которыми ассоции- рованы сигналы синхронизации и сброса, и с помощью кнопки «Add добавим их в таблицу Internal Port Connections. Далее подключим все порты, с которыми ассоции- рованы сигналы синхронизации, к цепи system_clk, а порты, с которыми ассоцииро- ваны сигналы сброса, - к цепи system_rst, используя кнопку Connect. После этого, повторно используя кнопку «Add, добавим в таблицу Internal Port Connections пор- ты ядра универсального асинхронного последовательного приемопередатчика и па- раллельного интерфейса ввода/вывода. Порты последовательного приемопередатчика uart_port, с которыми ассоцииро- ваны сигналы принимаемых и передаваемых данных, подключим к внешним цепям проектируемой системы uartRX и uartTX соответственно, а порт параллельного ин- терфейса ввода/вывода in_data_port, с которым ассоциированы сигналы входных данных, соединяем с внешней шиной in_data. При этом для внешнего порта in_data в ячейке Range указываем в качестве номеров младшего и старшего разрядов порта со- ответственно значения 0 и 7. Все перечисленные порты последовательного и параллельного интерфейсов вво- да/вывода подключим к внешним портам проектируемой системы, выделив соответ- ствующие строки в таблице Internal Port Connections и воспользовавшись кнопкой Make External. Затем, используя кнопку Add Port, включим в состав спецификации аппаратной платформы (в таблицу описания внешних портов External Port Connections) описания двух внешних портов с идентификаторами systemRst и systemClk, которые подклю- чаются к цепям сброса .yyste/njrst и синхронизации system_clk соответственно. При создании этих портов указываем условные обозначения категорий, к которым отно- сятся ассоциируемые с ними сигналы: RST для systemRst и CLK для systemClk. Окон- чательное содержание таблиц описания подключения портов на странице Ports при подготовке спецификации аппаратной платформы контроллера системы сбора и об- работки данных представлено на рис. 12.28.
ГЛАВА 12 293 jW№tl Add/Edit Hardware Platform Specifications s»» 1 system j:lk in_data $ystem_clk J system_dk .-systemjst SYSjfck • • J system_rst LMQ^Clk • system _dk SYsSst/viSystemjst J :,7;Л; dO Ж А | inst_data_bram Instance ; << Add Г datajjijs inst_bu$_cntlr LMB_Clk data_bus cntir LMB_Clk uartTX dW^B/luartRX Puc. 12.28. Окончательный вид страницы Ports при подготовке спецификации аппаратной платформы контроллера системы сбора и обработки данных in_data system_dk system_r$t uart_port OPB.Cik Interrupt RX TX 1.JIB® ' ' ' “ '* *'? 5 \ ^lOjn': : i opbbus O:i<: ;s4: iEL/ma Tft. л apbjxttjnb nsfr-bu? initrjxjs g/: system _dk in_data_port □PB.CIk IP2INTC_lrpt GPIOJO GPIOJn GP10_d_out GP1O t out GPIO21O GPIO2~ in GPI022d_out GPI02j_out cpu mb CLK INTERRUPT DBG.STOP MB Halted Завершив ввод описания подключения портов, следует перейти к последней странице диалоговой панели создания и редактирования спецификации аппаратной платформы. Страница Parameters позволяет определить значения различных индиви- дуальных параметров тех экземпляров компонентов, которые были занесены ранее в спецификацию аппаратной платформы проектируемой системы. Вид этой страницы показан на рис. 12.29. В левой части страницы Parameters представлена таблица редактирования, в ко- торую должны заноситься параметры компонентов, значения которых необходимо изменить. В правой части данной страницы расположено поле выбора, кнопка управ- ления которого открывает доступ к выпадающему списку идентификаторов экземп- ляров компонентов, включенных в состав спецификации MHS. При щелчке левой кнопкой мыши на одной из строк этого списка во встроенном окне, которое находит- ся непосредственно под полем выбора, отображается таблица, содержащая две ко- лонки. В первой колонке (Parameter) перечисляются все параметры выбранного эк- земпляра компонента, а во второй (Value) - значения этих параметров, установлен-
294 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС ные по умолчанию. Для того чтобы получить исчерпывающую информацию о назна- чении параметров выбранного компонента и их допустимых значениях, следует об- ратиться к документации, в которой содержится детальное описание данного компо- нента. Кнопка Open PDF Doc, расположенная правее поля выбора, позволяет открыть соответствующий документ (в формате PDF) непосредственно из среды управляю- щей оболочки Xilinx Platform Studio. При этом предполагается, что на используемом компьютере установлена программа Acrobat Reader™ фирмы Adobe Systems Incorporated®. I Add/Edit Hardware Platform Specifications 8192 0 8192 0 0x00000000 OxSFFFFFFF 0 32 0x00000000 0X3FFFFFFF 0 Edit Parameters assigned to I P Jnstance rh MHS These parameter values will Parameter C_NUMBER_OF_PC_BRK C_NUMBER_OF_RD_ADDR_BRK C_NUMBER_OF_WR_ADDR_BRK (^INTERRUPT JSJDGE C_EDGE_I5J>0SITIVE C.FSL.LINKS C_FSL_DATA_5IZE CJCACHE.BASEADDR C_ICACHE_HIGHADDR CJJSEJCAOHE............. C_ALLOW_ICACHE_WR C_CACHEJ3YTE_5IZE CJCACHEJJSE.FSL C_DCACHE_BASEADDR CJXACHEJHIGHADDR C_USE„DCACHE C_ALLOW_DCACHE_WR C_DCACHE_8YTE_SI2E C_DCACHE USE FSL Puc. 12.29. Страница Parameters диалоговой панели создания и редактирования спецификации аппаратной платформы проектируемой системы Чтобы установить значения параметров компонентов, отличающиеся от приня- тых по умолчанию, необходимо прежде всего включить названия этих параметров в таблицу редактирования, которая находится в левой части страницы Parameters. Для этого следует выделить соответствующие строки в таблице, которая открыта во встроенном окне, а затем нажать кнопку «Add (рис. 12.29). Для выделения группы параметров можно воспользоваться клавишей CTRL или Shift при щелчке левой кнопкой мыши на строках таблицы. При необходимости для просмотра всех параметров выбранного компонента можно использовать инструменты прокрутки, расположенные в правой части встро-
ГЛАВА 12 295 енного окна. Если требуется исключить некоторые параметры из таблицы редактиро- вания, то нужно выделить соответствующие им строки и нажать кнопку Del, которая расположена под кнопкой «Add, После этого на экране появляется диалоговая па- нель, содержащая запрос подтверждения удаления выбранных параметров компонен- та из спецификации аппаратной платформы (рис. 12.30). При нажатии кнопки ОК, расположенной в нижней части панели запроса (рис. 12.30), все выделенные строки таблицы редактирования будут удалены. Для предотвращения удаления выбранных параметров компонентов следует воспользоваться кнопкой Отмена (Cancel), XilirtH Platform Studio Puc. 12.30. Панель запроса подтверждения удаления выбранных параметров компонентов из спецификации аппаратной платформы Таблица редактирования значений параметров содержит две колонки с теми же названиями, что и таблица, расположенная во встроенном окне. Но в отличие от по- следней все ячейки таблицы редактирования, составляющие столбец Value представ- ляют собой поле редактирования значений параметров. Для изменения значения ка- кого-либо параметра следует активизировать соответствующую ячейку в колонке Value таблицы редактирования (поместив на нее курсор и щелкнув левой кнопкой мыши) и ввести новое значение, используя клавиатуру. Процедуру определения значений индивидуальных параметров компонентов, включенных в состав спецификации MHS, продемонстрируем на примере проекта контроллера системы сбора и обработки данных. Вначале изменим значения пара- метров ядра универсального асинхронного последовательного приемопередатчика. Для этого в поле выбора компонента зафиксируем идентификатор uart_port. Затем выделим все параметры, содержащиеся в таблице, которая расположена в правой части страницы Parameters, и, нажав кнопку «Add, скопируем их в таблицу ре- дактирования. С помощью клавиатуры устанавливаем следующие значения пара- метров компонента uart_port\ тактовая частота 50 МГц (C_CLK_FREQ = = 50000000), 8 бит данных (C_DATA_BITS = 8), скорость передачи данных 9600 бит/с (C_BAUDRATE = 9600), контроль четности (нечетности) отсутствует (C_USE_PARITY = 0, C_ODD_PARITY = 0). Окончательный вид таблицы редак- тирования параметров ядра универсального асинхронного последовательного приемопередатчика показан на рис. 12.31. Аналогичным образом изменяем значения отдельных параметров ядра парал- лельного интерфейса ввода/вывода, зафиксировав в поле выбора компонента иден- тификатор in_data _j)ort. Данный компонент конфигурируем как входной (CJSJBIDIR = О, C_ALLJNPUTS = 1) 8-разрядный (C_GPIO_WIDTH - 8) парал- лельный порт (рис. 12.32).
296 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Рис. 12.31. Установка параметров ядра универсального асинхронного последовательного приемопередатчика при подготовке спецификации аппаратной платформы контроллера системы сбора и обработки данных Рис. 12.32. Установка параметров ядра параллельного интерфейса ввода/вывода при подготовке спецификации аппаратной платформы контроллера микропроцессорной системы сбора и обработки данных
ГЛАВА 12 297 Все выполненные изменения в диалоговой панели создания и редактирования спецификации аппаратной платформы проектируемой системы вступают в силу (за- носятся в файл MHS) только после нажатия кнопки Применить (Apply) или ОК, ко- торые находятся в нижней части этой панели. Использование кнопки ОК приводит к закрытию рассматриваемой диалоговой панели. После завершения работы с диалоговой панелью создания и редактирования спе- цификации аппаратной платформы проектируемой системы рекомендуется открыть сформированный файл MHS в текстовом редакторе и проверить значения всех уста- новленных параметров. Для этого следует во встроенном окне проекта разрабаты- ваемой системы, на странице System, в разделе Project Files расположить курсор мы- ши на строке MHS File и дважды щелкнуть левой кнопкой. После этого в панели для размещения рабочих окон открывается новое окно встроенного текстового редакто- ра, в котором отображается сформированная в диалоговом режиме спецификация ап- паратной платформы. При необходимости в текст спецификации с помощью клавиа- туры могут быть внесены различные изменения, в том числе, значений параметров, идентификаторов компонентов и цепей (сигналов). Для того чтобы выполненные из- менения вступили в силу, следует сохранить файл MHS на жестком диске, выполнив команду Save из всплывающего меню File. Для примера откроем в текстовом режиме спецификацию аппаратной части кон- троллера системы сбора и обработки данных, которая была автоматически сформи- рована после выполнения всех рассмотренных выше операций. Созданная специфи- кация MHS должна выглядеть следующим образом (для большей информативности файл system_controller.mhs дополнен комментариями, которые поясняют назначение разделов спецификации): # Номер версии спецификации MHS PARAMETER VERSION = 2.1.0 # Описание внешних портов проектируемой системы PORT uartTX = uartTX, DIR = О PORT uartRX = uartRX, DIR = I PORT in-data = in.data, VEC = [0:7], DIR -1 PORT systemClk = system.clk, DIR = IN, SIGIS = CLK PORT systemRst - system_rst, DIR = IN, SIGIS = RST # Описание параметров и подключения ядра универсального # последовательного асинхронного приемопередатчика BEGIN opbjjartlite PARAMETER INSTANCE = uart_port PARAMETER HW.VER = 1.00.b PARAMETER C.BASEADDR = 0x40600000 PARAMETER C_HIGHADDR = 0x40600fff PARAMETER C_.DATA.BITS = 8 PARAMETER C_CLK FREQ = 50_000_000 PARAMETER C.BAUDRATE = 9600 PARAMETER C_USE_PARITY = 0 PARAMETER CODD.PARITY = 0 BUSJNTERFACE SOPB = opb_bus_mb PORT OPB_Clk = system.dk PORT RX = uartRX PORT TX = uartTX
298 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС END # Описание параметров и подключения контроллера интерфейса шины ОРВ BEGIN opb_v20 PARAMETER INSTANCE = opb_bus_mb PARAMETER HW.VER = 1.10.C PORT OPB_Clk = system.clk PORT SYS.Rst = system_rst END # Описание параметров и подключения контроллера интерфейса шины # команд ILMB BEGINImb_v10 PARAMETER INSTANCE = instr.bus PARAMETER HW_VER = LOO.a PORT LMB-CIk = system_clk PORT SYS.Rst = system.rst END # Описание параметров и подключения модуля блочной памяти BEGIN bram„block PARAMETER INSTANCE = inst_data_bram PARAMETER HW_VER = 1.00.a BUSJNTERFACE PORTA = inst_port BUS-INTERFACE PORTB = data_port END # Описание параметров и подключения контроллера интерфейса # программной памяти BEGIN Imb-bramjf-cntlr PARAMETER INSTANCE = inst_bus_cntlr PARAMETER HW.VER = 1,00.b PARAMETER C.BASEADDR = 0x00000000 PARAMETER C.HIGHADDR = 0x00001 fff BUSJNTERFACE SLMB = instr.bus BUS-INTERFACE BRAM.PORT = inst_port END # Описание параметров и подключения ядра параллельного # интерфейса (порта) ввода/вывода BEGIN opb_gpio PARAMETER INSTANCE = in_data_port PARAMETER HW.VER = 3.01 ,b PARAMETER C.BASEADDR = 0x40000000 PARAMETER CHIGHADDR = 0x40000fff PARAMETER C_GPIO_WIDTH = 8 PARAMETER C_ALL_INPUTS = 1 PARAMETER C_IS_BIDIR = 0 BUS-INTERFACE SOPB = opb_bus_mb PORT OPB_Clk = system. _clk PORT GPIOJn = in.data END # Описание параметров и подключения контроллера интерфейса Оперативной памяти
ГЛАВА 12 299 BEGIN lmb_bramjf_cntlr PARAMETER INSTANCE = data_bus_cntlr PARAMETER HW.VER = 1 .OO.b PARAMETER C.BASEADDR = 0x00000000 PARAMETER C.HIGHADDR = 0x00001 fff BUSJNTERFACE SLMB = data.bus BUSJNTERFACE BRAM.PORT = data_port END # Описание параметров и подключения контроллера интерфейса # шины данных DLMB BEGIN Imb.vIO PARAMETER INSTANCE = data.bus PARAMETER HW.VER = 1 .OO.a PORT LMB.CIk = system.dk PORT SYS.Rst = system rst END # Описание параметров и подключения микропроцессорного ядра # MicroBlaze BEGIN microblaze PARAMETER INSTANCE = cpu.mb PARAMETER HW.VER = 4.00.a BUS.INTERFACE DLMB = data.bus BUSJNTERFACE ILMB = instr.bus BUS-INTERFACE DOPB = opb_bus„mb BUS-INTERFACE IOPB = opb_bus_mb PORT CLK = system-dk END Редактор структурных схем Processor Block Diagram Editor (PBD Editor) позволя- ет отобразить в графической форме созданную архитектуру аппаратной платформы проектируемой системы. Для этого нужно во встроенном окне проекта разрабаты- ваемой системы, на странице System, в разделе Project Files расположить курсор мы- ши на строке PBD File и дважды щелкнуть левой кнопкой или выполнить команду View Block Diagram, доступ к которой предоставляет всплывающее меню Project. В результате указанных действий в панели для размещения рабочих окон открывает- ся окно редактора структурных схем PBD Editor, которое содержит графическое представление спецификации аппаратной платформы разрабатываемой системы. Чтобы получить всю информацию о параметрах какого-либо компонента, шины или цепи аппаратной платформы, достаточно поместить курсор мыши на соответствую- щий элемент структурной схемы. Эта информация отображается в виде всплываю- щей подсказки. Для изменения параметров элементов схемы или идентификаторов компонентов, шин и цепей следует воспользоваться командами контекстно- зависимых всплывающих меню, которые выводятся на экран при щелчке правой кнопкой мыши на соответствующем изображении в окне редактора PBD Editor. Схемотехническое представление сформированной архитектуры (аппаратной платформы) контроллера системы сбора и обработки данных, открытое в PBD Editor, показано на рис. 12.33.
300 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС I systemRst>- | systemClk^ | in data>— I uartRXy-i |uartRX| Puc. 12.33. Схемотехническое представление архитектуры проектируемого контроллера системы сбора и обработки данных в редакторе структурных схем PBD Editor Подготовив спецификацию аппаратной платформы, можно приступить к выпол- нению этапов генерации списка соединений разрабатываемой микропроцессорной системы, синтеза, размещения и трассировки проекта в кристалле FPGA. Но прежде чем перейти к рассмотрению очередного этапа проектирования, необходимо выпол- нить еще одну процедуру, связанную с формированием описания аппаратной части разрабатываемой системы. Для получения законченного описания аппаратных средств проектируемой микропроцессорной системы необходимо, кроме специфика- ции MHS, подготовить дополнительную информацию о топологических и временных ограничениях, которая используется средствами синтеза, размещения и трассировки проекта в кристалле. 12.4. Подготовка файла временных и топологических ограничений проекта аппаратной платформы разрабатываемой микропроцессорной системы Дополнительная информация, используемая программами синтеза, размещения и трассировки проекта аппаратной части разрабатываемой микропроцессорной сис- темы в кристалле, задается в форме файла временных и топологических ограничений User Constraints File (UCF). Этот файл имеет текстовый формат, каждая строка кото- рого представляет собой выражение, описывающее соответствующий параметр (ог- раничение проекта). Для создания файла временных и топологических ограничений и внесения информации в него можно использовать встроенный текстовый редактор управляющей оболочки Xilinx Platform Studio или специальные программы Constraints Editor и РАСЕ (Pinout and Area Constraints Editor), которые входят в состав
ГЛАВА 12 301 систем проектирования серии Xilinx ISE. Способы создания и редактирования фай- лов ограничений средствами пакетов проектирования серии Xilinx ISE подробно рас- смотрены в [1]. Поэтому далее кратко описывается только процесс подготовки файла временных и топологических ограничений при использовании интегрированного текстового редактора управляющей оболочки Xilinx Platform Studio. Для создания файла UCF во встроенном текстовом редакторе XPS следует вы- брать пункт основного меню File, после чего в появившемся всплывающем меню ак- тивизировать команду New. В результате выполненных действий открывается новое окно редактирования. Ввод выражений, описывающих временные и топологические ограничения проекта, осуществляется с помощью клавиатуры. После завершения процесса редактирования необходимо сохранить выполненные изменения файла ог- раничений, используя команду Save As из всплывающего меню File. При этом на эк- ране монитора отображается стандартная диалоговая панель сохранения файла, в ко- торой необходимо выбрать соответствующий раздел на диске и указать полное на- звание формируемого файла ограничений. Вновь созданный файл UCF должен располагаться в разделе data рабочего каталога проекта разрабатываемой микропро- цессорной системы. В качестве имени файла ограничений нужно указать название файла проекта создаваемой системы, а в качестве расширения - ucf. В файлах ограничений проектов встраиваемых микропроцессорных систем наи- более часто применяются два типа выражений. Ограничения первого типа позволяют установить соответствие между внешними цепями проектируемой системы и номе- рами выводов ПЛИС. Выражения второго типа используются для определения мак- симального значения периода сигнала синхронизации. Синтаксис этих выражений ограничений был представлен в разд. 8.3 при рассмотрении процесса разработки микропроцессорных систем на основе ядра PicoBlaze. Учитывая, что, приступая сра- зу к изучению проектирования 32-разрядных систем на базе ядер семейства MicroBlaze, данная глава могла быть пропущена, далее приводится формат и описа- ние наиболее часто используемых выражений ограничений. Параметр LOC позволяет осуществить закрепление выводов перед трассировкой, а также явно указать конфигурируемый логический блок (Configurable Logic Block, CLB) для реализации элементов проекта. Для привязки внешних цепей проектируе- мой системы (подключаемых к контактам кристалла) к требуемым выводам ПЛИС используется следующий формат выражения: NET <название_цепи> ЮС=<номер_вывода_ПЛИС>; Форма записи номера вывода ПЛИС в этом выражении зависит от типа исполь- зуемого корпуса микросхемы. Для корпусов, относящихся к категории BGA (Ball Grid Array), номер вывода указывается в том же виде, в каком он представлен в до- кументации. При использовании корпусов других типов номер вывода ПЛИС, ука- занный в документации, в выражении ограничения LOC сопровождается префик- сом Р. В качестве примеров топологических ограничений, используемых для указа- ния соответствия внешних цепей разрабатываемой микропроцессорной системы и номеров выводов ПЛИС, приводятся следующие выражения: NET clock.sys L0C=C5; NET date_read LOC=P10;
302 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Максимальное значение периода сигнала синхронизации для соответствующей цепи разрабатываемой микропроцессорной системы задается с помощью параметра PERIOD. Полный формат соответствующего выражения ограничения имеет вид NET <название_цепи_синхронизации> РЕ^ОО=<длительность_периода> [<единицы_измерения>] [{HIGH | Ю\Л/}[<длительность_первой_фазы_периода> [<единицы_измерения>] ]];, где значение HIGH или LOW указывает логический уровень сигнала в первой фазе периода, а элементы, указанные в квадратных скобках, являются необязательными. По умолчанию установлены в качестве единиц измерения длительности наносекун- ды, нс (ns), и одинаковая продолжительность состояний высокого и низкого уровня периода синхросигнала, в результате чего получается сокращенный формат записи NET <название_цепи_синхронизации> PERIOD - <длительность_периода> ; например, NET clock PERlOD=10ns; Таким образом, значение параметра PERIOD накладывает ограничение на время распространения сигналов по цепям и логике, подключенных между выходом одного и входом другого синхронного элемента (триггера, регистра или ОЗУ), которые так- тируются одним и тем же сигналом синхронизации. В качестве примера, иллюстрирующего процедуру формирования временных и топологических ограничений разрабатываемой системы, рассмотрим процесс созда- ния файла UCF для проекта контроллера системы сбора и обработки данных, специ- фикация аппаратной платформы которой подготовлена в предыдущем разделе. При подготовке файла ограничений учитывается, что для реализации этого контроллера используется отладочная плата из инструментального комплекта Spartan-3 Starter Kit, основным элементом которой является ПЛИС семейства Spartan-3 XC3S200 в корпу- се FT256. В качестве источника тактового сигнала в этом модуле используется квар- цевый генератор с частотой 50 МГц. Поэтому для глобальной цепи синхронизации systemClk должно быть указано значение периода, равное 20 нс. Так как выход квар- цевого генератора на отладочной плате подключен к выводу T9 ПЛИС XC3S200, то этот контакт кристалла должен выполнять функцию входа тактового сигнала systemClk. Для реализации функции входа сигнала принимаемых данных uartRX ядра универсального асинхронного последовательного приемопередатчика назначается вывод ПЛИС Т13, а для выполнения функции выхода сигнала передаваемых данных uartTX - вывод R13, так как именно с этими контактами кристалла соединены соот- ветствующие входы микросхемы, выполняющей преобразование уровней сигналов последовательного интерфейса RS-232. Входные цепи ядра параллельного интерфей- са ввода/вывода in_data<0> - in_data<7>, на которые поступают сигналы входных данных, подключим к восьми ползунковым переключателям, расположенным на от- ладочной плате. С помощью этих переключателей будут формироваться входные тестовые данные. Соответствующие выходы переключателей подключены к выводам К13, К14, ИЗ, J14, Н13, Н14, G12 и F12 ПЛИС XC3S200. Для формирования сигнала сброса микропроцессорной системы systemRst можно использовать одну из кнопок, расположенных на отладочной плате, например кнопку BTN3, подключенную к вы- воду L14 ПЛИС XC3S200. С учетом всех приведенных выше замечаний окончатель- ное содержимое файла временных и топологических ограничений для контроллера системы сбора и обработки данных system_control!er.ucf должно выглядеть следую- щим образом:
ГЛАВА 12 303 Net systemCIk PERIOD = 20ns; Net uartRX LOC=T13; Net uartTX L0C=R13; Net in_data<0> LOC=K13; Net in_data<1> LOC=K14; Net in_data<2> L0C=J13; Net in_data<3> L0C=J14; Net in_data<4> LOC=H13; Net in_data<5> LOC=H14; Net in_data<6> LOC=G12; Net in_data<7> L0C=F12; Net systemCIk L0C=T9; Net systemRst L0C=L14; После завершения подготовки спецификации MHS и соответствующего файла временных и топологических ограничений можно перейти к следующему этапу про- ектирования, в результате выполнения которого должен быть сформирован список соединений аппаратной платформы встраиваемой микропроцессорной системы. 12.5. Формирование списка соединений аппаратной платформы разрабатываемой микропроцессорной системы Данный этап включает в себя две фазы. В первой фазе осуществляется генерация модулей HDL-описаний в соответствии с подготовленной спецификацией аппарат- ной платформы проектируемой микропроцессорной системы. Вторая фаза представ- ляет собой процедуру синтеза аппаратной части встраиваемой микропроцессорной системы, в процессе которой производится трансформация исходных модулей HDL- описания в список цепей (netlist), выполненный на низком логическом уровне. Эле- менты низкоуровневого описания, формируемого в процессе синтеза, должны соот- ветствовать архитектуре семейства ПЛИС, выбранного для реализации проекта. Син- тезированный список цепей должен быть максимально адаптирован к ресурсам ис- пользуемого кристалла, что обеспечивает его наиболее эффективное отображение средствами размещения и трассировки на физическом уровне. В процессе синтеза выполняется оптимизация полученного списка цепей в соответствии с выбранным критерием. Основным результатом фазы синтеза является формирование файла NGC, который представляет собой описание проекта аппаратной части разрабатываемой микропроцессорной системы на низком логическом уровне. Процедура синтеза вы- полняется теми средствами, которые были выбраны при определении параметров проекта с помощью опции Synthesis Tool. В качестве инструмента синтеза, приме- няемого по умолчанию, используются средства Xilinx Synthesis Tool (XST), которые являются составной частью систем автоматизированного проектирования серии Xilinx Foundation ISE. Этап генерации списка соединений аппаратной платформы разрабатываемой микропроцессорной системы выполняется в автоматическом режиме. Для активиза- ции этого процесса следует выбрать команду Generate Netlist из всплывающего меню Tools управляющей оболочки - Xilinx Platform Studio или воспользоваться кнопкой быстрого доступа JSll, расположенной на оперативной панели управления XPS. Ин- формация о ходе выполнения каждой фазы рассматриваемого этапа проектирования
304 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС отображается во встроенном окне консольных сообщений, на странице с закладкой Output. В случае обнаружения ошибок соответствующие сообщения выводятся на странице Errors окна консольных сообщений, а предупреждения - на странице Warnings. При успешном завершении всех процедур данного этапа создается файл NGC, который содержит результаты синтеза проекта аппаратной платформы разрабаты- ваемой микропроцессорной системы. Для примера запустим процесс генерации списка соединений аппаратной плат- формы контроллера системы сбора и обработки данных system-Controller, нажав кнопку быстрого доступа ЛШ на оперативной панели управления XPS. Выполнение данного этапа может занять несколько минут, в зависимости от производительности используемого компьютера. Если все исходные описания разрабатываемого контрол- лера были введены без ошибок, то процесс генерации списка соединений должен за- вершиться успешно. Об этом уведомляют следующие строки в заключительной сек- ции консольных сообщений: Number of errors : 0 Done. Очередным этапом разработки встраиваемой микропроцессорной системы с ис- пользованием ядер семейства MicroBlaze, является функциональное моделирование аппаратной части. Этот процесс выполняется в рамках пакета моделирования ModelSim и практически не отличается от моделирования цифровых устройств с ап- паратной реализацией операций, проектируемых на основе ПЛИС фирмы Xilinx. Вы- полнение этапов функционального и временного моделирования рассмотрено в [1]. Кроме того, этапы моделирования не являются строго обязательными, поэтому пере- ходим непосредственно к этапу реализации проекта аппаратной платформы в кри- сталле семейств FPGA. 12.6. Реализация проекта аппаратной части разрабатываемой микропроцессорной системы в кристалле FPGA Этап реализации (Implementation) проекта аппаратной части встраиваемой мик- ропроцессорной системы, реализуемой на базе ПЛИС семейств FPGA, включает в себя 3 фазы: трансляции (Translate), отображения логического описания проекта на физические ресурсы кристалла (МАР), размещения и трассировки (Place and Route). В процессе трансляции выполняется объединение всех списков соединений в форма- те EDIF, входящих в состав проекта, и информации обо всех ограничениях, которая содержится в файле UCF (User Constraints File). Результатом фазы трансляции явля- ется формирование логического описания проекта в терминах примитивов Xilinx низкого уровня с учетом временных и топологических ограничений, выполненного в формате NGD (Native Generic Database). Во второй фазе рассматриваемого этапа ло- гическое описание проекта, полученное на предыдущем шаге, проецируется на физи- ческие ресурсы кристалла FPGA выбранного типа. При этом выполняется оптимиза- ция в соответствии с выбранным критерием и заданными ограничениями. В процессе размещения и трассировки выбирается наилучшее расположение конфигурируемых логических блоков, реализующих соответствующие функции проектируемой систе- мы, и выполняются необходимые соединения с учетом временных и топологических ограничений.
ГЛАВА 12 305 В результате выполнения рассматриваемого этапа создается двоичный файл, ко- торый описывает использование физических ресурсов кристалла для реализации компонентов (функций) аппаратной части разрабатываемой микропроцессорной сис- темы и выполнения необходимых соединений между ними. Этот файл затем приме- няется в качестве исходного для генерации конфигурационной последовательности ПЛИС. Процесс реализации проекта аппаратной части разрабатываемой микропроцес- сорной системы выполняется средствами пакета САПР Foundation ISE. Управление этим процессом может осуществляться как в среде XPS, так и непосредственно в рамках оболочки пакета Foundation ISE, Навигатора проекта (Project Navigator). Тре- буемый способ управления процессом реализации проекта разрабатываемой системы выбирается при установке параметров проекта EDK с помощью группы кнопок с за- висимой фиксацией Implementation Tool Flow (см. рис. 12.13). Если для управления процессом реализации проекта аппаратной части встраи- ваемой микропроцессорной системы был выбран первый способ (непосредственно из оболочки Xilinx Platform Studio), то для выполнения этого этапа следует выбрать ко- манду Generate Bitstream из всплывающего меню Tools или нажать кнопку на оперативной панели управления XPS. Далее все необходимые процедуры выполня- ются в автоматическом режиме, включая формирование конфигурационной последо- вательности, загружаемой в кристалл. При этом используются значения параметров программ трансляции, компоновки, размещения и трассировки, а также генерации конфигурационной последовательности, установленные по умолчанию. Информаци- онные сообщения этих программ выводятся на странице Output встроенного окна консольных сообщений XPS, а предупреждения и сообщения об ошибках на страни- цах Warnings и Errors соответственно. При выборе второго способа, когда управление процессом реализации проекта осуществляется с помощью Навигатора проекта пакета Foundation ISE, разработчик может установить требуемые параметры соответствующих процедур, например вы- брать критерий оптимизации при размещении и трассировки проекта аппаратной части в кристалле. В этом случае прежде всего необходимо скопировать файл NGC, содержащий результаты синтеза аппаратной платформы разрабатываемой системы, в рабочий каталог соответствующего проекта для пакета Foundation ISE. Этот проект автоматически создается средствами XPS в разделе, указанном в параметрах проекта Xilinx EDK (в поле редактирования NPL File). Рекомендуется создавать рабочий ка- талог проекта Foundation ISE в том же разделе, где находятся все файлы проекта встраиваемой микропроцессорной системы. Процесс копирования файла NGC вы- полняется с помощью команды Export to ProjNav, которая находится во всплываю- щем меню Tools. Далее нужно активизировать графическую оболочку пакета Foundation ISE - На- вигатор проекта. Для этого следует не закрывая окна XPS, дважды щелкнуть левой кнопкой мыши на пиктограмме SMI, расположенной на Рабочем столе ПК, или ис- пользовать альтернативный метод активизации программ в среде Windows 2000/ХР. В последнем случае нужно нажать кнопку Пуск, после чего в открывшейся панели необходимо выбрать строку Программы, а затем в предложенном списке выбрать группу программ Xilinx ISE 7. И, в которой следует выделить строку (выполнить ко- манду) Project Navigator. При успешном выполнении указанных операций на экране монитора отображается основное окно Навигатора проекта, структура которого де-
306 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС тально рассмотрена в разд. 8.3 и в [1]. Затем необходимо открыть проект аппаратной части разрабатываемой микропроцессорной системы, который был создан автомати- чески средствами Xilinx EDK. Для этого следует выбрать пункт File главного меню Навигатора проекта, после чего в появившемся всплывающем меню выполнить ко- манду Open Project, в результате исполнения которой на экране отображается стан- дартная диалоговая панель открытия существующего проекта. В этой панели необхо- димо указать рабочий каталог и название проекта, которые были заданы в парамет- рах проекта Xilinx EDK. После закрытия диалоговой панели во встроенном окне исходных модулей (файлов) проекта (Sources in Project) отображаются строки с на- званием проекта, параметрами ПЛИС, используемой для реализации разрабатывае- мой системы, и названием файла NGC с результатами синтеза аппаратной платфор- мы, который был сформирован на предыдущем этапе. При выделении строки с на- званием файла NGC в окне исходных модулей, во встроенном окне процессов (Processes for Source), открывается список процедур, необходимых для выполнения этапа реализации. Представленный в окне процессов список процедур соответствует основным фазам данного этапа, которые были перечислены выше. На рис. 12.34 в ка- честве примера приведен вид рабочей области Навигатора проекта при открытии проекта аппаратной части контроллера системы сбора и обработки данных. 0 system_controller.ise £!•□ xc3s200-4ft256 El R) system_controller (CAProiect\system_controller\implementation\sy$tem_controller. ngc) [^1 C: \Project\$y stem_controller\implementation\sy stem_controller. bmm M odule View | S napshot View ~ Add Existing Source □ Create New Source View Design Summary e; Design Utilities S User Constraints Implement Desigrr □ • Q Generate Programming File Pl Programming File Generation Report «Generate PROM, ACE, or JTAG File Configure Device (iMPACT) •tk Process View 1 j <"/ Рис. 12.34. Вид рабочей области управляющей оболочки пакета Foundation ISE - Навигатора проекта при открытии проекта аппаратной части разрабатываемой микропроцессорной системы В список исходных модулей проекта аппаратной части встраиваемой микропро- цессорной системы в САПР Foundation ISE необходимо включить файл временных и топологических ограничений UCF, сформированный ранее. Для этого следует вы- брать пункт Project основного меню Навигатора проекта, а затем в появившемся всплывающем меню выполнить команду Add Source или Add Copy of Source. Испол- нение этих команды начинается с вывода стандартной диалоговой панели открытия файла, в которой нужно указать название и расположение требуемого файла ограни-
ГЛАВА 12 307 чений UCF, находящегося в разделе data рабочего каталога проекта разрабатываемой микропроцессорной системы. При использовании команды Add Source этот файл добавляется в состав текуще- го проекта САПР Foundation ISE, но не переписывается в его рабочий каталог. Ко- манда Add Copy of Source выполняет аналогичную функцию и отличается только тем, что файл UCF, включаемый в состав проекта, копируется в рабочий каталог текущего проекта. Для управления всеми процедурами этапа реализации, выполняемыми в автома- тическом режиме, используются соответствующие параметры. Их значения могут быть заданы поочередно для каждой фазы в отдельности, например перед ее активи- зацией, или сразу для всего процесса в целом. Целесообразно сразу установить зна- чения параметров всех процедур. Для этого следует выделить в окне процессов (см. рис. 12.34) строку с названием этапа Implement Design, после чего нажать кнопку £31, расположенную на оперативной панели Навигатора проекта, или воспользо- ваться командой Properties контекстно-зависимого всплывающего меню, которое вы- водится при щелчке правой кнопкой мыши. В результате открывается диалоговая па- нель параметров, которая содержит 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 (рис. 12.35). [Process. Properties ' ' ; ISWgwoEIiMffiS JNetlist Translation Type ; ' jB^cro Search Perth " ‘I ^Create I/O Pads from Ports i<;;: j Preserve Hierarchy on Sub v [other NgdbulldCommandLineOptions Timestamp C:\Projectteystem_controller £1 Advanced display level Ц: OK Puc. 12.35. Диалоговая панель параметров процесса реализации проекта аппаратной части разрабатываемой микропроцессорной системы (страница Translate Properties) Назначение большинства параметров, представленных на этих страницах, де- тально рассмотрено в [1]. Поэтому далее подробно обсуждаются только те параметры процесса реализации, на которые рекомендуется обратить особое внимание при вы- полнении данного этапа разработки встраиваемой микропроцессорной системы. На странице Translate Properties, содержащей параметры процедуры трансляции проекта аппаратной части разрабатываемой микропроцессорной системы, для пара- метра Use LOC Constraints должно быть установлено значение «включено». В этом
308 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС случае в процессе трансляции будут учитываться топологические ограничения, уста- навливаемые с помощью выражений LOC = ..., которые присутствуют в файле UCF. Открыв страницу MAP Properties (рис. 12.36), на которой сгруппированы пара- метры процедуры распределения ресурсов CLB кристалла для реализации проекти- руемой системы, можно с помощью параметра Optimization Strategy (Cover Mode) выбрать стратегию оптимизации, осуществляемой во время выполнения данной фа- зы. На этой фазе производится назначение функциональных генераторов CLB для реализации соответствующих функций аппаратной части разрабатываемой микро- процессорной системы. В выпадающем списке возможных значений этого параметра представлено 4 строки: Area, Speed, Balanced, Off. Значение Area, установленное по умолчанию, определяет в качестве критерия оптимизации - минимизацию количест- ва используемых таблиц преобразования (LUT) и, следовательно, количество конфи- гурируемых логических блоков. При выборе значения Speed целью оптимизации яв- ляется уменьшение задержек распространения сигналов за счет сокращения количе- ства уровней логики. Значение Balanced позволяет сочетать рассмотренные выше стратегии оптимизации. Использование значения Off запрещает оптимизацию при распределении ресурсов CLB кристалла. Process Properties " Post-Map Static Timing Report Propertie$|Po$t-Place Route Static TimingReport Properties ,. Incremental Design Properties ] Simulation Properties . • ....... TransM!f^ppeitie^^'W^f||i;:^ . Extra Effort Starting Ptecer Cost Table (1-100) Register Duplication ; Trim Unconnected Signals Replicate Allow Map tO Input Functions T: Optimization Strategy (Cover Made) - л. - - Generate Detailed MAP Report . ".Лг MAP Guide Design File (.ncd) Й'А N/A NZA E. 4_ Area J None E Tor Inputs and Outputs ;100 Registers/Latches into IGBs CLB Pack Factor Percentage Map Slice Logic into UnusedBlockRAMs Other Map Command Line Options / ; Puc. 12.36. Страница MAP Property диалоговой панели параметров для процесса реализации проекта аппаратной платформы разрабатываемой микропроцессорной системы Далее следует перейти к странице Place and Route Properties (рис. 12.37), которая объединяет параметры управления процедурами размещения и трассировки проекта аппаратной части разрабатываемой микропроцессорной системы. Здесь с помощью параметра Place and Route Effort Level (Overall) можно указать требуемый уровень
ГЛАВА 12 309 эффективности процедур размещения и трассировки проекта в кристалл. Этот пара- метр позволяет за счет выбора более совершенных алгоритмов размещения и трасси- ровки (соответственно за счет увеличения времени выполнения рассматриваемого этапа) достичь более высоких результатов. И наоборот, выбирая менее сложные ал- горитмы, можно сократить время выполнения процесса размещения и трассировки, но получить результаты, далекие от оптимальных. Для сложных проектов снижение времени, необходимого для выполнения размещения и трассировки, может привести к появлению неразведенных цепей и увеличению задержек распространения сигна- лов. В выпадающем списке возможных значений этого параметра представлено 3 элемента, расположенные в порядке возрастания уровня эффективности результа- тов размещения и трассировки: Standard, Medium, High. Значение Standard позволяет минимизировать время размещения и трассировки за счет низкого уровня оптимиза- ции этих процессов. При выборе значения High достигаются наилучшие результаты, но требуется максимальное время для выполнения всех процедур. Можно также ус- тановить различный уровень эффективности для каждой фазы этого процесса, ис- пользуя параметры Placer Effort Level (Overrides Overall Level) и Router Effort Level (Overrides Overall Level), которые предназначены для раздельной установки уровня эффективности процедур размещения и трассировки соответственно. [Process Properties я Post-Map Static Timing Report^parties | Post-Place & RouteStafc TirningRepcrrt ... Translate Properties .. : Map Properties / P|acp& Route Properties -|$tand-ard Value Place & Route iprt None None NZA Normal Place and Route None n..~ к OtiSrHaSSSSS’ , | i: Справка Puc. 12.37. Страница Place and Route Properties диалоговой панели параметров размещения и трассировки проекта аппаратной платформы разрабатываемой микропроцессорной системы Выбирая значение параметра Extra Effort (Highest PAR level only), можно преду- смотреть возможность выделения дополнительного времени для выполнения проце- дур размещения и трассировки, необходимого для удовлетворения различных вре- менных ограничений проекта. Этот параметр используется только в случае, если для Place and Route Effort Level (Overall) задано значение High. По умолчанию установ- лено значение None, которое запрещает выделение дополнительного времени. При
310 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС выборе других значений (Normal или Continue on Impossible) допускается увеличение времени выполнения процедур размещения и трассировки. Значение параметра Place and Route Mode позволяет выбрать режим выполнения процесса размещения и трассировки. Для данного параметра рекомендуется исполь- зовать значение Normal Place and Route, установленное по умолчанию. Это значение соответствует нормальному режиму трассировки и размещения, при котором выпол- няются все процедуры с учетом параметров, указанных разработчиком или установ- ленных по умолчанию. При выборе значения Reentrant Route осуществляется много- кратное повторение процедур трассировки с целью оптимизации результатов. Но этот режим можно устанавливать только в том случае, если хотя бы один раз полно- стью пройдена стадия размещения и трассировки. Для того чтобы средствами размещения и трассировки принимались во внимание временные ограничения проекта, указанные в файле UCF, необходимо выбрать для параметра Use Timing Constraints значение «включено». После установки всех требуемых значений параметров для процедур реализации проекта следует подтвердить их нажатием кнопки ОК в нижней части диалоговой панели (см. рис. 12.35-12.37). Далее следует активизировать процесс реализации в полном объеме двойным щелчком левой кнопки мыши на строке Implement Design в окне процедур Навигатора проекта (см. рис. 12.34). Информация о ходе его выпол- нения отображается в окне консольных сообщений данной управляющей оболочки. Завершение выполнения каждой фазы этого процесса отмечается соответствующей пиктограммой в строке с ее названием в окне процессов и сопровождается отчетом о полученных результатах. Для просмотра отчета о выполнении фазы трансляции сле- дует дважды щелкнуть левой кнопкой мыши на строке Translation Report, Доступ к отчету о результатах отображения логического описания проекта на физические ре- сурсы кристалла осуществляется двойным щелчком левой кнопки мыши на строке MAP Report. В этом отчете рекомендуется обратить внимание на раздел Design Summary, который представляет статистику ресурсов ПЛИС, используемых для реа- лизации проекта аппаратной части разрабатываемой микропроцессорной системы. После завершения заключительной фазы (Place-and-Route) процесса реализации сле- дует открыть отчет о ее выполнении, дважды щелкнув левой кнопкой мыши на стро- ке Place-and-Route Report в окне процессов Навигатора проекта (см. рис. 12.34), и убедиться в отсутствии неразведенных цепей и сообщений об ошибках. Кроме то- го, целесообразно проверить отчет Pad Report, который описывает назначение всех выводов кристалла после загрузки конфигурационных данных проекта. В этом отчете следует проконтролировать выполнение директив закрепления выводов, которые бы- ли внесены в файл временных и топологических ограничений. В качестве примера скопируем файл NGC проекта контроллера системы сбора и обработки данных system_controller в рабочий каталог одноименного проекта в САПР Foundation ISE C:\Project\system_controller\ProjNav\, воспользовавшись коман- дой Export to ProjNav из всплывающего меню Tools управляющей оболочки XPS. По- сле этого, открыв данный проект в Навигаторе проекта, добавим в его состав файл временных и топологических ограничений system_controller.ucf, который должен на- ходиться в папке C:\Project\system_controller\data. Затем, выделив в окне исходных модулей Навигатора проекта строку с названием файла верхнего уровня иерархии system_controller.ngc, активизируем процесс реализации аппаратной платформы про-
ГЛАВА 12 311 екта контроллера системы сбора и обработки данных system_controller, дважды щелкнув левой кнопкой мыши на строке Implement Design в окне процедур Навига- тора проекта (рис. 12.34). При достижении успешных результатов размещения и трассировки можно перейти непосредственно к этапу формирования конфигурационной последовательности для про- екта аппаратной платформы разрабатываемой микропроцессорной системы. 12.7. Генерация конфигурационной последовательности для проекта аппаратной части разрабатываемой 32-разрядной микропроцессорной системы Процесс создания конфигурационной последовательности для ПЛИС семейств FPGA выполняется средствами пакета Foundation ISE в автоматическом режиме. Все необходимые директивы конфигурирования и последующей активизации кристалла задаются с помощью параметров рассматриваемого процесса перед его выполнением. Вызов диалоговой панели, в которой расположены эти опции, осуществляется уже привычными способами. В окне процессов (см. рис. 12.34) щелчком левой кнопки мыши следует выделить строку Generate Programming File, после чего нажать кнопку ЦЙ JSso, расположенную на оперативной панели управления Навигатора проекта, или воспользоваться командой Properties контекстно-зависимого всплывающего меню, которое выводится при щелчке правой кнопки мыши. Диалоговая панель параметров процесса генерации конфигурационной последовательности, вид которой показан на рис. 12.38, содержит 4 страницы, снабженные закладками, на которых указаны их на- звания: General Options, Configuration Options, Startup Options, Readback Options. Подробная информация о назначении параметров, представленных на этих страни- цах, приведена в [1]. Рис. 12.38. Диалоговая панель параметров процесса генерации конфигурационной последовательности для проекта аппаратной части разрабатываемой микропроцессорной системы (страница General Options)
312 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС На странице General Options, содержащей основные параметры процесса генера- ции конфигурационной последовательности, следует убедиться, что для параметра Create Bit File установлено значение «включено». Этот параметр используется для управления процессом создания двоичного файла последовательного битового пото- ка (bitstream). Далее необходимо открыть страницу Startup Options, где расположены парамет- ры управления фазой активизации логики после конфигурирования кристалла (рис. 12.39), и выбрать источник сигнала синхронизации, используемого в процессе конфигурирования. Выбор источника сигнала синхронизации осуществляется с по- мощью параметра Start-Up Clock. Выпадающий список содержит 3 возможных зна- чения: CCLK, User Clock, JTAG Clock. Если формируемый файл конфигурационной последовательности предназначен для последующего программирования ППЗУ, то для параметра Start-Up Clock следует установить значение CCLK. При этом в качест- ве сигнала синхронизации процесса активизации логики будет использоваться такто- вый сигнал CCLK, вырабатываемый внутри кристалла FPGA. Значение JTAG Clock следует выбирать при загрузке конфигурационной последовательности непосредст- венно в кристалл FPGA в режиме периферийного сканирования через JTAG-порт. Этот режим целесообразно использовать в процессе отладки проектируемой микро- процессорной системы. Рис. 12.39. Страница Startup Options диалоговой панели параметров процесса генерации конфигурационной последовательности для проекта аппаратной части разрабатываемой микропроцессорной системы Для установки защиты от копирования конфигурационных данных нужно акти- визировать страницу Readback Options, которая представляет параметры, используе- мые в процессе обратного считывания конфигурационных данных из кристалла (рис. 12.40). Параметр Security предназначен для выбора требуемого варианта защи- ты конфигурационных данных. В выпадающем списке представлены 3 возможных значения этого параметра: Enable Readback and Reconfiguration, Disable Readback, Disable Readback and Reconfiguration. Значение Enable Readback and Reconfiguration,
ГЛАВА 12 313 принятое по умолчанию, разрешает обратное считывание загруженной конфигураци- онной последовательности и реконфигурирование кристалла. Выбор значения Disable Readback запрещает чтение конфигурационных данных из кристалла FPGA. Значение Disable Readback and Reconfiguration устанавливает защиту от считывания конфигурационной последовательности и реконфигурирования кристалла. Рис. 12.40. Страница Readback Options диалоговой панели параметров процесса генерации конфигурационной последовательности для проекта аппаратной части разрабатываемой микропроцессорной системы Установив требуемые значения параметров процесса генерации конфигурацион- ной последовательности, следует подтвердить их нажатием кнопки ОК в нижней час- ти диалоговой панели (см. рис. 12.38-12.40). Затем для активизации процесса форми- рования файла конфигурирования необходимо дважды щелкнуть левой кнопкой мы- ши на строке Generate Programming File, расположенной в окне процедур Навигатора проекта (см. рис. 12.34). Информация о ходе его выполнения отображается в окне консольных сообщений и строке состояния Навигатора проекта. При успешном за- вершении этого процесса, отмеченном соответствующей пиктограммой в строке Generate Programming File в окне процессов, создается файл конфигурационного би- тового потока (имеющий расширение .bit) для аппаратной части разрабатываемой микропроцессорной системы. После окончания этапа реализации можно закрыть ок- но Навигатора проекта и вернуться в среду управляющей оболочки XPS для выпол- нения дальнейших этапов разработки. Далее необходимо скопировать полученный файл конфигурационного битового потока из рабочего каталога проекта САПР Foundation ISE в раздел проекта Xilinx EDK. Для этого следует активизировать пункт Tools основного меню управляющей оболочки XPS и в появившемся всплывающем меню выбрать команду Import from ProjNav. При этом на экран выводится диалоговая панель, вид которой показан на рис. 12.41. В этой панели, в поле редактирования BIT File, необходимо указать пол- ное название копируемого конфигурационного файла, включающее полный путь доступа к нему, а также, в поле редактирования ВММ File, полное имя файла, кото-
314 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС рый описывает содержимое блочной памяти ПЛИС. Название bm/n-файла состоит из имени файла верхнего уровня иерархии проекта и суффикса _bd. Как правило, назва- ния указанных файлов автоматически отображаются в соответствующих полях ре- дактирования при открытии диалоговой панели. При необходимости названия этих файлов могут быть изменены с помощью клавиатуры после активизации соответст- вующего поля редактирования. Для поиска этих файлов можно также воспользовать- ся кнопками с пиктограммой в виде многоточия (...), которые расположены справа от каждого поля редактирования. При нажатии на эти кнопки на экран выводится стан- дартная диалоговая панель открытия файла, используя которую нужно выбрать тре- буемые файлы. Копирование указанных файлов выполняется сразу после нажатия кнопки ОК, расположенной в нижней части диалоговой панели, представленной на рис. 12.41. Рис. 12.41. Диалоговая панель копирования файла конфигурационной последовательности в рабочий каталог проекта Xilinx EDK В качестве примера активизируем процесс генерации конфигурационной после- довательности для проекта аппаратной части контроллера системы сбора и обработ- ки данных, предварительно установив для параметра Start-Up Clock значение JTAG Clock. В результате успешного выполнения данного процесса в рабочем каталоге проекта САПР C:\Project\system_controller\ProjNav\ создается файл system_control- ler.bit. Этот файл нужно импортировать в проект XPS, используя команду Import from ProjNav из всплывающего меню Tools, и заполнив соответствующую диалоговую па- нель, как показано на рис. 12.41. На этом фактически завершается процесс проектирования аппаратной платфор- мы встраиваемой микропроцессорной системы на основе 32-разрядных ядер семей- ства MicroBlaze. Сформированный файл конфигурационной последовательности не- обходимо дополнить информацией о содержимом блочной памяти ПЛИС, на основе которой реализуется ППЗУ программ. Разработка программного обеспечения микропроцессорной системы, выполняе- мой на основе ядер семейства MicroBlaze и реализуемой в ПЛИС семейств FPGA фирмы Xilinx, начинается с создания спецификации программной платформы. Про- цесс формирования спецификации программных средств осуществляется с помощью САПР Xilinx EST, Но прежде чем перейти непосредственно к рассмотрению процес- са подготовки спецификации программной платформы, необходимо познакомиться с синтаксисом соответствующего файла.
ГЛАВА 12 315 12.8. Синтаксис и структура файла спецификации программной платформы разрабатываемой 32-разрядной микропроцессорной системы, реализуемой на базе ПЛИС семейств FPGA фирмы Xilinx Спецификация программной платформы встраиваемой микропроцессорной сис- темы Microprocessor Software Specification (MSS) представляет собой файл с расши- рением MSS. Данный файл имеет текстовый формат и содержит описание конфигу- рации и параметров программных компонентов проектируемой системы (ОС, биб- лиотек и драйверов). Спецификация MSS определяет драйверы для каждого периферийного модуля, стандартные устройства ввода/вывода и программы обработ- ки прерываний. Спецификация программных средств микропроцессорной системы является исходной информацией для генератора библиотек Library Generator (Libgen). Язык и структура описания программных средств встраиваемой микропроцес- сорной системы в общих чертах напоминает язык описания спецификации аппарат- ной платформы MHS. Каждый компонент, включаемый в состав спецификации программных средств встраиваемой микропроцессорной системы MSS, описывается с помощью конструк- ции, которая начинается с ключевого слова BEGIN и заканчивается ключевым сло- вом END. Формат этой конструкции выглядит следующим образом: BEGIN <тип_компонента_спецификации_М55> parameter <параметр1> = <значение_ параметрам [,<параметр1_1> = <значение_ параметра! _1>] parameter <параметр2> = <значение_ параметра2> [,<параметр2_!> = <значение_ параметра2_1>] parameter <параметрМ> = <значение_ параметра^ [,<параметр2_Н> = <значение_ параметра2_И>] END В приведенной конструкции квадратными скобками выделены параметры ко- манды parameter, наличие которых зависит от типа команды и не является обяза- тельным. Блок описания каждого компонента в спецификации программной платформы разрабатываемой микропроцессорной системы открывает строка, содержащая клю- чевое слово BEGIN. В этой же строке указывается тип описываемого компонента, который соответствует одному из видов программных средств или процессора. Тип компонента спецификации MSS определяется с помощью соответствующего ключе- вого слова. В рассматриваемой версии спецификации программных средств для этого зарезервированы 4 варианта ключевого слова: OS (Operating System), driver, library, processor. Ключевое слово OS используется в том случае, если блок описывает пара- метры ОС. Например, следующий блок определяет такие параметры, как идентифи- катор микропроцессорного ядра, тип и версию используемой ОС, идентификаторы стандартных устройств ввода/вывода: BEGIN OS parameter PROCJNSTANCE = microblaze.core parameter OS_NAME - standalone parameter OS_VER = 1 .OO.a parameter STDIN = uartlite_core parameter STDOUT = uartlite_core END
316 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС При описании драйвера некоторого IP-компонента проектируемой микропроцес- сорной системы указывается ключевое слово driver. В качестве примера ниже приво- дится блок описания параметров драйвера для параллельного порта ввода/вывода, подключенного к шине ОРВ. BEGIN DRIVER PARAMETER HWJNSTANCE = opb_gpio_core PARAMETER DRIVER-NAME = gpio PARAMETER DRIVER.VER = 1.00.a PARAMETER LEVEL =1 END Если описываемый компонент спецификации MSS представляет собой библио- теку, то применяется ключевое слово library. Например, в следующем блоке указы- ваются параметры используемой библиотеки XilMfs: BEGIN LIBRARY parameter LIBRARY-NAME = XilMfs parameter LIBRARY.VER = 1 .OO.a parameter NUMBYTES = 100000 parameter BASE_ADDRESS = 0x80f00000 END Для описания параметров микропроцессорного ядра в заголовке блока указыва- ется ключевое слово processor. Например, в приведенном ниже блоке определяются следующие параметры процессора: обозначение экземпляра компонента микропро- цессорного ядра, идентификатор и версия соответствующего драйвера. BEGIN PROCESSOR parameter HWJNSTANCE - microblaze„core parameter DRIVER-NAME = cpu parameter DRIVER_VER = 1.00.a parameter XMDSTUBJPERIPHERAL = myjtag END В строках, которые следуют после ключевого слова BEGIN, располагается сово- купность команд parameter, с помощью которых указываются параметры программ- ного компонента, включаемого в состав спецификации MSS. Общее число команд N в этой конструкции обусловливается в первую очередь типом описываемого про- граммного компонента. Количество параметров, определяемых в каждой команде parameter, зависит от типа этой команды. В большинстве случаев в каждой строке, содержащей команду parameter, определяется значение одного параметра. Но также могут использоваться командные строки, в которых задаются значения двух пара- метров. Например, в команде, описывающей программу обработки прерывания, ука- зывается не только ее название, но и идентификатор соответствующего порта (сигна- ла) прерывания. Описание каждого компонента спецификации программной плат- формы проектируемой системы завершается ключевым словом END. Команда parameter является основной и наиболее часто используемой в специ- фикации программных средств, поэтому рассмотрим ее подробнее. Прежде всего следует обратить внимание на то, что все параметры, определяемые командой parameter, можно разделить на две группы: глобальные и локальные. Глобальные па- раметры относятся ко всей спецификации программной платформы в целом. Коман-
ГЛАВА 12 317 ды parameter, которые определяют значения глобальных параметров, располагаются вне блоков описания программных компонентов BEGIN-END. К группе глобальных относятся параметры описания версии спецификации MSS и программ обработки прерываний для глобальных портов системы. Значение глобального параметра VERSION указывает номер версии формата спецификаций Platform Specification Format (PSF) встраиваемой микропроцессорной системы. Значение этого параметра обычно задается в начале файла MSS. Формат команды, определяющей номер версии спецификации программной платформы, выглядит следующим образом: parameter VERSION = <номер_версии_М55> Например, в командной строке parameter VERSION = 2.2.0. указан номер версии формата спецификации MSS, используемый в САПР Xilinx EDK 7.1 i. Глобальный параметр INT__HANDLER используется для описания программы об- служивания прерывания, ассоциируемого с соответствующим внешним портом про- ектируемой системы. Формат выражения, в котором определяется значение этого па- раметра, имеет следующий вид: parameter INT_HANDLER = <идентификатор_программы_обработки_прерывания>) INT.PORT = <иден- тификатор_внешнего_сигнала(порта)_прерывания> Например, командная строка parameter INT_HANDLER = int_handl_proc, INT .PORT = Sys Jnterrupt устанавливает в качестве процедуры обслуживания прерывания, ассоциируемого с внешним портом Sys_Interrupt, программу int_handl_ргос. Локальные параметры спецификации MSS относятся только к соответствующим компонентам программной платформы проектируемой системы. Команды, опреде- ляющие значения локальных параметров, располагаются внутри блоков описания программных компонентов BEGIN-END. Рассмотрим подробнее наиболее часто ис- пользуемые локальные параметры. С помощью параметра HW_INSTANCE указывается позиционное обозначение (идентификатор) экземпляра IP-компонента, с которым ассоциируется описываемый программный компонент. Данный параметр используется при описании драйверов (DRIVER) и процессора (PROCESSOR). Для определения значения этого параметра следует включить в состав соответствующего блока описания BEGIN - END команд- ную строку, формат которой имеет следующий вид: parameter HWJNSTANCE = <идентификатор„экземпляра_1Р-компонента> В этом выражении в качестве значения параметра HW_JNSTANCE должен указы- ваться тот же идентификатор, что задан для соответствующего экземпляра IP- компонента в спецификации аппаратной части проектируемой системы. Например, для описания драйвера последовательного асинхронного приемопередатчика, кото- рый обозначен в спецификации MHS как uart_port, в соответствующий блок BEGIN DRIVER-END спецификации программных средств нужно включить командную строку parameter HWJNSTANCE = uart_port. Значение параметра PROC_INSTANCE указывает позиционное обозначение (идентификатор) экземпляра микропроцессорного ядра, с которым ассоциируется описываемая ОС. Указываемый идентификатор должен совпадать с позиционным
318 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС обозначением соответствующего экземпляра микропроцессорного ядра в специфика- ции MHS. Формат выражения, используемого в блоке описания BEGIN OS-END для определения значения этого параметра, выглядит следующим образом: parameter PROCJNSTANCE = <идентификатор_экземпляра_микропроцессорного_ядра> Параметр OS_NAME предназначен для указания используемой ОС. Для опреде- ления значения этого параметра необходимо в блок описания ОС BEGIN OS-END добавить следующее выражение: parameter OS_NAME = <обозначение_используемой_операционной_системы> Если разрабатываемое программное обеспечение встраиваемой микропроцессор- ной системы не предусматривает использование какой-либо ОС, то для параметра OS_NAME следует указать значение standalone. Номер версии применяемой ОС задается в форме значения параметра OSJVER. Для определения значения этого параметра в блоке описания BEGIN OS - END должна присутствовать командная строка, формат которой имеет следующий вид: parameter OS_VER = <номер_версии_операционной_системы> Номер версии ОС указывается в формате k.mn.a. где к, т, п являются цифровыми символами, а - алфавитным символом. Параметр DRIVER_NAME используется для назначения каждому компоненту спецификации аппаратной части проектируемой системы соответствующего драйве- ра. Формат команды, определяющей значение этого параметра, выглядит следующим образом: parameter DRIVER_NAME = <название _драйвера_устройства> Так как драйвера, некоторых устройств имеют несколько версий, необходимо уточнить номер используемой версии драйвера, применяя параметр DRIVER_VER. Выражение, используемое для определения значения параметра DRIVER_VER, имеет следующий формат: parameter DRIVER_VER = <номер_версии_драйвера_устройства> Номер версии драйвера задается в том же формате, в котором задается и номер версии ОС. Локальный параметр INTJHANDLER используется для описания программы об- служивания прерывания, ассоциируемого с соответствующим портом периферийного устройства. Формат командной строки, в которой устанавливается значение этого параметра, имеет следующий вид: parameter INT_HANDLER = <идентификатор_программы_обработки_прерывания> INT_PORT = <иден- тификатор_сигнала(порта)_прерывания„периферийного_устройства> В этой командной строке должен быть указан тот же идентификатор порта пре- рывания периферийного устройства, что и в спецификации аппаратной части проек- тируемой системы для этого компонента. Для описания используемой библиотеки необходимо указать ее название и номер версии. Название применяемой библиотеки задается с помощью параметра L1BRARY_NAME. В блок описания используемой библиотеки BEGIN LIBRARY-END должна быть включена командная строка, определяющая значение этого параметра, которая имеет следующий формат:
ГЛАВА 12 319 parameter LIBRARY_NAME = <название_ используемой_библиотеки> Номер версии применяемой библиотеки определяется с помощью параметра LIBRARY_VER. Значение этого параметра указывается в том же формате, в котором указан и номер версии ОС. Для этого используется выражение следующего вида: parameter LIBRARY_VER = <номер_версии_библиотеки> Для идентификации стандартных устройств ввода и вывода в блоке описания оп- ций ОС используются параметры STDIN и STDOUT соответственно. В качестве зна- чений этих параметров указываются идентификаторы периферийных IP- компонентов, выполняющих роль стандартных устройств ввода и вывода. Формат командной строки для определения параметров STDIN и STDOUT выглядит следую- щим образом: parameter STDIN = <идентификатор_устройства„ввода> parameter STDOUT = <идентификатор_устройства_вывода> Например, строки parameter STDIN = uart_RS232 parameter STDOUT = uart_RS232 определяют в качестве стандартных устройств ввода и вывода последовательный асинхронный приемопередатчик uart_RS232. В блоке описания микропроцессорного ядра используется ряд специфических параметров. Параметр XMDSTUB-PERIPHERAL позволяет задать идентификатор пе- риферийного устройства, используемого для осуществления процесса отладки. Фор- мат выражения, определяющего значение этого параметра, имеет следующий вид: parameter XMDSTUB.PERIPHERAL = <идентификатор_устройства„отладки> Параметр COMPILER предназначен для выбора компилятора, который должен применяться для компиляции используемых библиотек и драйверов. Значение этого параметра должно соответствовать типу микропроцессорного ядра. При использова- нии стандартного компилятора для ядра MicroBlaze необходимо в качестве значения параметра COMPILER указать mb-gcc. Формат соответствующей командной строки выглядит следующим образом: parameter COMPILER - <тип_компилятора> С помощью параметра ARCHIVER выбирается программа архивации объектных файлов в библиотеки. Выбор архиватора зависит от типа используемого микропро- цессорного ядра. Чтобы указать стандартный архиватор для ядра MicroBlaze, в каче- стве значения параметра ARCHIVER следует задать mb-ar, используя командную строку следующего формата: parameter ARCHIVER = <название_программы_архивации> В блоке описания процессора могут также применяться параметры COMPI- LER-FLAGS и EXTRA-COMPILER_FLAGS, которые задают опции компиляции драй- веров и библиотек. При использовании стандартного компилятора и архиватора дан- ные параметры не рекомендуется указывать. Значение параметра CORE_CLOCK_FREQ_HZ определяет тактовую частоту микропроцессорного ядра. Формат выражения, в котором указывается это значение, имеет следующий вид:
320 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС parameter CORE_CLOCK_FREQ_HZ = <значение_тактовой_частоты_микропроцессорного_ядра> Значение тактовой частоты задается в герцах. В тесте спецификации программных средств, так же как и в спецификации аппа- ратной платформы разрабатываемой микропроцессорной системы, могут использо- ваться комментарии. Применение комментариев делает структуру файла MSS более прозрачной и облегчает поиск параметров, значение которых необходимо скорректи- ровать. Комментарием считается часть любой строки, которая следует после символа #. Комментарий может занимать полную строку, если в начале ее указан символ #. Примеры комментариев различного вида в файле MSS демонстрируют следующие командные строки: #-------Assign drivers--------------— parameter DRIVER_NAME = uartlite # DRIVER for RS-232 Типовая структура спецификации программной платформы проектируемой мик- ропроцессорной системы, как правило, содержит следующие разделы: • команду, указывающую номер версии спецификации MSS; описание используемой ОС; определение параметров микропроцессорного ядра; блоки описания драйверов периферийных устройств разрабатываемой микро- процессорной системы; блоки описания используемых библиотек. 12.9. Создание спецификации программных средств разрабатываемой 32-разрядной микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio Процесс создания и редактирования спецификации программной платформы проектируемой микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio может осуществляться в двух режимах: текстовом и интерактивном. Так как файл спецификации MSS имеет текстовый формат, то для его подготовки и внесения изменений можно использовать любой текстовый редактор, например кото- рый входит в состав средств проектирования Xilinx EST. Однако процедура создания абсолютно новой спецификации программной платформы в текстовом редакторе за- нимает достаточно много времени и не исключает появления различных ошибок. Текстовый режим целесообразно использовать в основном для редактирования зна- чений отдельных параметров или в тех случаях, когда новая спецификация про- граммных средств разрабатываемой микропроцессорной системы формируется на основе уже существующего файла MSS. Более эффективным способом создания с нуля новой спецификации программ- ной платформы является интерактивный метод. При использовании этого метода описание программных компонентов проектируемой системы и определение значе- ний всех параметров выполняются в табличной форме с помощью соответствующей многостраничной диалоговой панели. Чтобы приступить к формированию новой спецификации аппаратной платформы в интерактивном режиме, необходимо выполнить команду Project основного меню управляющей оболочки Xilinx Platform Studio, а затем во всплывающем меню вы- брать строку Software Platform Settings. Можно также воспользоваться аналогичной
ГЛАВА 12 321 командой из контекстно-зависимого всплывающего меню, отображаемого на экране при щелчке правой кнопкой мыши на строке, в которой указан идентификатор мик- ропроцессорного ядра, находящейся на странице System встроенного окна проекта разрабатываемой системы, в разделе System BSP. Результатом выполнения указан- ных выше операций является вывод на экран диалоговой панели, вид которой пред- ставлен на рис. 12.42. |Software Platform Settings xJ Drivers j.-- ' -2 ’'г''f Peripheral . ? Д ь HW Ver : Instance . apb_bu$jT)b Imb_bram_if_cntlr Д. inst_bus_cntlr opb_gpic o.oi.b in_data_port : 1фЬ l.OO.b "V idatOus_cntlr . microblaze 'И -'• cpu_mb 'V' Driver <Jb /' I Version | Д E л? / uartlite opbarb bram jjl.OO.a gpio jJz.OO.a bram ЖЫ5ЖЙ1 cpu l.OO.a Libraries?.Touse a library. markthe ch? sckbox Use | Library .. | Version дей 4 ; r. - -"M | xilnet 2.00.a il Г xilmfs i.oo,a j““ xilfile 'l.OO.a if xilfatfs l.OO.a Ml | Iwip 2.00.a mJ Q‘,; ” Kernel and Operating Systems РгрС:Ж:/.. os Д ' - 1 cpujnb Д/Т.ДльТ; standalone 2^11.£)0^' Отмена ^ f| Справка Puc. 12.42. Диалоговая панель создания и редактирования спецификации программных средств проектируемой системы (страница Software Platform) Панель диалога создания и редактирования спецификации программных средств проектируемой системы содержит 3 страницы, снабженные закладками с их назва- ниями: Software Platform, Processor, Driver Parameters and Interrupt Handlers, Library/OS Parameters. Страница Software Platform позволяет указать состав компонентов, заносимых в спецификацию программной платформы проектируемой системы (драйверов, биб- лиотек, ОС), и определить значения их общих параметров. Все сведения о компонен- тах, включаемых в спецификацию MSS, заносятся в соответствующие таблицы, рас- положенные на этой странице (рис. 12.42). Для каждого типа программных средств, используемых в разрабатываемой системе, предусмотрена своя таблица. Каждому компоненту отводится отдельная строка соответствующей таблицы. В таблицу Drivers заносится информация о драйверах всех периферийных устройств, которые были включены в состав спецификации аппаратной платформы разрабатываемой системы. Эта таблица содержит 5 колонок. В ячейках, расположен- ных в колонке с названием Peripheral, указываются идентификаторы типа компонен- тов, которые перечислены в спецификации MHS. В колонке HW Ver содержится ин- 11—2062
322 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС формация о версии аппаратных средств для каждого компонента, указанного в пре- дыдущей колонке. В ячейках, относящихся к столбцу с названием Instance, указыва- ется идентификатор экземпляра компонента, включенного в состав спецификации MHS разрабатываемой микропроцессорной системы. В ячейках, которые относятся к столбцу Driver, указывается драйвер для соответствующего экземпляра компонента. Каждая ячейка этого столбца представляет собой поле выбора, в правой части кото- рого находится кнопка управления выпадающим списком возможных вариантов. При нажатии на эту кнопку на экран выводится список доступных драйверов для соответ- ствующего типа периферийного устройства. Для выбора необходимого варианта сле- дует щелкнуть левой кнопкой мыши на соответствующей строке этого списка, после чего название выбранного драйвера будет отображаться в таблице. Колонка с назва- нием Version содержит сведения об используемых версиях драйверов. Если какой- либо драйвер представлен в нескольких версиях, то соответствующая ячейка этого столбца представляет собой поле выбора, в правой части которого находится кнопка управления выпадающим списком возможных вариантов. При нажатии на эту кнопку на экран выводится список существующих версий данного драйвера. Для выбора не- обходимой версии следует щелкнуть левой кнопкой мыши на соответствующей строке этого списка, после чего номер этой версии будет отображаться в текущей ячейке таблицы. При открытии диалоговой панели создания и редактирования спе- цификации программных средств проектируемой системы все ячейки в таблице Drivers заполняются автоматически на основании информации, содержащейся в спе- цификации аппаратной части микропроцессорной системы. Для изменения автома- тически назначенного драйвера или его версии следует воспользоваться кнопкой управления выпадающим списком в ячейках, расположенных в колонках Driver и Version соответственно. Таблица Libraries позволяет определить состав и версии применяемых библио- тек. Каждая строка этой таблицы содержит основную информацию о соответствую- щей библиотеке. Данная таблица включает в себя 3 колонки. В ячейках, которые со- ставляют столбец Library, перечисляются названия всех доступных библиотек. В колонке Use указывается информация об использовании соответствующей библио- теки. Каждая ячейка этого столбца представляет собой поле индикатора состояния. Для того чтобы добавить описание библиотеки в спецификацию программных средств, нужно перевести индикатор в состояние включено (отмеченное маркером), расположив на его поле курсор и щелкнув левой кнопкой мыши. Ячейки, образую- щие столбец Version, позволяют выбрать версию используемой библиотеки. Выбор версии библиотеки осуществляется тем же способом, которым осуществляется и вы- бор версии драйвера. В таблице Kernel and Operating Systems указывается ОС для каждого экземпляра микропроцессорного ядра. В первой колонке этой таблицы (Proc Inst) отображается идентификатор экземпляра микропроцессорного ядра. В ячейках, составляющих вто- рую колонку (OS), необходимо выбрать требуемую ОС, воспользовавшись кнопкой активизации выпадающего списка. В третьей колонке (OS Version) содержатся сведе- ния о номере версии выбранной ОС. Если используемая ОС имеет несколько версий, то соответствующая ячейка этого столбца представляет собой поле выбора, в правой части которого находится кнопка управления выпадающим списком возможных ва- риантов. Определив состав компонентов спецификации MSS и значения их общих
ГЛАВА 12 323 параметров, нужно перейти к следующей странице диалоговой панели создания и ре- дактирования спецификации программных средств проектируемой системы. Страница Processor, Driver Parameters and Interrupt Handlers используется для определения значений параметров процессора и драйверов периферийных устройств. Вид этой страницы показан на рис. 12.43. ^Software Platform Settings . ‘ 7 ‘ : . .v -. 7 ; 50000000 3 Archiver used to archive libraries for,.. Extra compiler flags used tn BSP and !i... ( . Debug peripheral to be used with xm... ...... :' '......... r ’ Я(прМ7Ж 7-377' peripher, mb-gcc mb-ar -g none j gg ДД Д|Д| J >7 -— xmdstub peripheral Puc. 12.43. Страница Processor Driver Parameters and Interrupt Handlers диалоговой панели создания и редактирования спецификации программных средств проектируемой системы На этой странице представлены две таблицы, которые имеют аналогичную структуру. Значения основных параметров микропроцессорного ядра заносятся в таблицу Processor Parameters. В колонке Instance этой таблицы отображается иден- тификатор экземпляра микропроцессорного ядра, под которым перечисляются его параметры. В ячейках столбца Current Value указываются текущие значения соответ- ствующих параметров микропроцессорного ядра. Ячейки, входящие в состав колонки Default Value, содержат значения параметров, установленные по умолчанию. В столбце Туре отображается тип значений соответствующих параметров. В ячейках, которые образуют колонку Description, приводятся краткие комментарии, поясняю- щие назначение параметров. Таблица Driver Parameters and Global Interrupt Handlers предназначена для опре- деления значений параметров драйверов периферийных устройств, которые были включены в состав спецификации аппаратной платформы микропроцессорной сис- темы. В первой колонке этой таблицы перечисляются идентификаторы периферий- ных устройств и параметры их драйверов (если таковые имеются). Остальные колон- ки этой таблицы выполняют те же функции, что и в таблице Processor Parameters.
324 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС После определения всех параметров процессора и драйверов периферийных уст- ройств нужно перейти к странице с названием Library/OS Parameters, вид которой представлен на рис. 12.44. jsoftware Platform Settings S oftware PIqtf orrn) Processor. Driver Parameters and Interrupt HandlersD-l Library/0S Parameters| . Library and QS Parameters Instance • /Ij Z Q: L-3 cpuj^b: standalone Current Value Default Value | typ^ : O enable_5^Jntrusive j^ra, f? enable j;wjntrusive_. ... - - ffprofilejimer ~77: need xil malloc false uart_port [uart Jjort false ггйсгоЫаге ехсврЦо6^уе... | ((XEX... bool .. peripher. bOOl array Enable S/W Intrusive Profiling on Har... stdout peripheral Is xil_malloc required ? ... „:. . ; .... / /у-; Puc. 12.44. Страница Library/OS Parameters диалоговой панели создания и редактирования спецификации программных средств проектируемой системы Данная страница применяется для установки требуемых значений параметров библиотек и ОС. Определение значений этих параметров осуществляется в таблич- ной форме. Таблица Library and OS Parameters имеет ту же структуру, что и таблицы Processor Parameters и Driver Parameters. В первой колонке таблицы Library and OS Parameters отображается идентификатор микропроцессорного ядра и название вы- бранной ОС. Ниже перечисляются параметры ОС, значения которых указываются в ячейках столбца Current Value. Для установки требуемых значений следует активи- зировать соответствующую ячейку в колонке Current Value и ввести значение пара- метра, используя клавиатуру, или воспользоваться кнопкой, расположенной в правой части этих ячеек, которая открывает доступ к выпадающему списку возможных ва- риантов. После того как указаны все программные компоненты и определены значения их параметров, следует подтвердить выполненные изменения в диалоговой панели соз- дания и редактирования спецификации программной платформы проектируемой сис- темы нажатием кнопок Применить (Apply) или ОК, которые находятся в нижней час- ти этой панели (см. рис. 12.42-12.44). При этом вся информация, заданная в таблич- ной форме, записывается в виде соответствующих команд в файл спецификации MSS. Использование кнопки ОК приводит к закрытию рассматриваемой диалоговой панели. В качестве примера создадим спецификацию программных средств для проекта контроллера системы сбора и обработки данных, разработка аппаратной части кото-
ГЛАВА 12 325 рой рассмотрена в предыдущих разделах. Для этого нужно заполнить все указанные выше таблицы так, как это показано на рис. 12.42- 12.44. Значение тактовой частоты процессорного ядра устанавливаем равным 50 МГц, что соответствует частоте квар- цевого генератора, установленного на используемой отладочной плате из инструмен- тального комплекта Spartan-3 Starter Kit. После закрытия диалоговой панели создания и редактирования спецификации программной платформы рекомендуется проверить содержимое файла system_controller.mss. Чтобы открыть этот файл, нужно во встро- енном окне проекта разрабатываемой системы, на странице System, в разделе Project Files, расположить курсор на строке MSS File и дважды щелкнуть левой кнопкой мыши. Содержимое файла system_controller.mss для проекта контроллера системы сбора и обработки данных должно выглядеть следующим образом: PARAMETER VERSION = 2.2.0 BEGIN OS PARAMETER OS.NAME = standalone PARAMETER OS_VER = 1.00.a PARAMETER PROCJNSTANCE = cpu_mb PARAMETER stdin = uarL.port PARAMETER stdout = uart.port END BEGIN PROCESSOR PARAMETER DRIVER-NAME = cpu PARAMETER DRIVER.VER = 1.00.a PARAMETER HWJNSTANCE = cpu.mb PARAMETER COMPILER = mb-gcc PARAMETER ARCHIVER = mb-ar PARAMETER CORE.CLOCK_FREQ.HZ = 50000000 END BEGIN DRIVER PARAMETER DRIVER-NAME = bram PARAMETER DRIVER.VER = 1.00.a PARAMETER HWJNSTANCE = inst_bus_cntlr END BEGIN DRIVER PARAMETER DRIVER-NAME = bram PARAMETER DRIVER.VER = 1.00.a PARAMETER HWJNSTANCE = data_bus_cntlr END BEGIN DRIVER PARAMETER DRIVER-NAME = uartlite PARAMETER DRIVER.VER = 1.00.b PARAMETER HWJNSTANCE = uart_port END BEGIN DRIVER PARAMETER DRIVER-NAME = gpio PARAMETER DRIVER.VER = 2.00.a PARAMETER HWJNSTANCE = in_data_port END BEGIN DRIVER PARAMETER DRIVER-NAME = opbarb
326 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС PARAMETER DR1VER_VER = 1.02.а PARAMETER HWJNSTANCE = opb_bus_mb END На основании сформированной спецификации программных средств далее вы- полняется генерация соответствующих драйверов и библиотек. 12.10. Генерация программной платформы разрабатываемой 32-разрядной микропроцессорной системы, реализуемой на основе ПЛИС семейств FPGA фирмы Xilinx Процесс генерации программной платформы встраиваемой 32-разрядной микро- процессорной системы, реализуемой в ПЛИС семейств FPGA фирмы Xilinx, выпол- няется в автоматическом режиме. Для его запуска необходимо в основном меню управляющей оболочки Xilinx Platform Studio выделить пункт Tools, после чего в от- крывшемся всплывающем меню выбрать команду Generate Libraries and BSPs. Кроме того, с этой же целью можно воспользоваться кнопкой быстрого доступа 20, распо- ложенной на оперативной панели управления XPS. В результате выполнения указан- ных операций генератор библиотек Library Generator (Libgen) на основании инфор- мации, приведенной в спецификации программных средств MSS, формирует компо- ненты программной платформы разрабатываемой микропроцессорной системы (драйверы, библиотеки, программы обслуживания прерываний). При этом в рабочем каталоге проекта XPS автоматически создается раздел, название которого совпадает с идентификатором (позиционным обозначением) используемого микропроцессорного ядра. В этом разделе автоматически формируется 4 каталога с названиями code, include, lib и libsrc, которые предназначены для записи различных компонентов про- граммной платформы. Раздел code используется для хранения файлов, которые со- держат код, используемый в процессе отладки. В разделе include представлены заго- ловочные файлы для драйверов периферийных устройств, которые включены в со- став проектируемой системы. Каталог lib содержит библиотечные файлы. В раздел libsrc записываются вспомогательные файлы, используемые для компиляции библио- тек и драйверов. В качестве примера активизируем процесс генерации компонентов программной платформы для проекта контроллера системы сбора и обработки данных, нажав кнопку находящуюся на оперативной панели управления XPS. Если на преды- дущем этапе спецификация MSS была сформирована без ошибок, то в рабочем ката- логе этого проекта C:\Project\system_controller\ будет создана папка cpu_mb, содер- жащая все необходимые файлы драйверов, библиотек и программ обслуживания пре- рываний. После успешного завершения процесса генерации программной платформы можно перейти к разработке прикладного программного обеспечения для проекти- руемой микропроцессорной системы. 12.11. Создание проекта прикладной программы для разрабатываемой 32-разрядной микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio Каждая прикладная программа для встраиваемой микропроцессорной системы, реализуемой на основе 32-разрядного ядра семейства MicroBlaze, разрабатывается
ГЛАВА 12 327 в виде соответствующего программного проекта (Software project). Такой проект мо- жет включать в себя следующие компоненты: файлы, содержащие исходный текст прикладной программы (source files); заголовочные файлы (header files); файл директив для компоновщика (linker script). В то же время проект прикладной программы является составной частью проекта разрабатываемой микропроцессорной системы в САПР Xilinx EST. Управление соз- данием, компиляцией и компоновкой прикладных программ осуществляется в среде XPS с помощью страницы Applications встроенного окна проекта разрабатываемой системы. Первоначальный вид этой страницы показан на рис. 12.45. Рис. 12.45. Вид страницы Applications встроенного окна проекта разрабатываемой системы при создании новой прикладной программы Процесс создания нового проекта прикладной программы можно активизировать одним из трех возможных способов: посредством команды основного меню, кнопки быстрого доступа и контекстно-зависимого всплывающего меню соответственно. При использовании первого способа следует выделить пункт Project в основном ме- ню управляющей оболочки Xilinx Platform Studio, после чего в открывшемся всплы- вающем меню выбрать команду Add SW Application Projec. Второй способ заключа- ется в нажатии кнопки быстрого доступа JSl, расположенной на оперативной пане- ли управления XPS. Чтобы воспользоваться третьим способом, следует на странице Applications встроенного окна проекта разрабатываемой системы выделить строку Software projects и щелкнуть правой кнопкой мыши. При этом на экран выводится контекстно-зависимое всплывающее меню, в котором нужно выбрать команду Add New Project. В результате выполненных операций на экран выводится диалоговая па- нель создания нового проекта прикладной программы, вид которой показан на рис. 12.46.
328 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Рис. 12.46. Диалоговая панель создания нового проекта прикладной программы для разрабатываемой микропроцессорной системы В этой диалоговой панели нужно активизировать поле редактирования Project Name (рис. 12.46), поместив на него курсор и щелкнув левой кнопкой мыши, после чего ввести название создаваемого проекта прикладной программы, используя кла- виатуру. При этом необходимо учитывать, что название проекта не должно содер- жать пробелов и других символов-разделителей. Далее при необходимости (в много- процессорных системах) следует в поле выбора Processor указать идентификатор микропроцессорного ядра, для которого предназначена разрабатываемая программа. Возможные варианты идентификаторов перечислены в выпадающем списке, который открывается при нажатии кнопки в правой части поля выбора Processor. Процедура определения всех необходимых параметров создаваемого проекта завершается нажа- тием кнопки ОК, находящейся в нижней части диалоговой панели (рис. 12.46). В качестве примера создадим проект тестовой программы TestApp для контроллера системы сбора и обработки данных. После ввода названия приложения и закрытия диалоговой панели создания нового проекта прикладной программы страница Applications встроенного окна управляющей оболочки Xilinx Platform Studio приоб- ретает вид, показанный на рис. 12.47. - Default: cpu_mb_bootloop Default: cpu_mb_xmdstub El В$|Н Project: TestApp Processor: cpu_mb Executable: C:\Proiect\system_controller\TestApp\executable.elf Compiler Options ; [J] Sources Headers Puc. 12.47. Вид страницы Applications встроенного окна управляющей оболочки Xilinx Platform Studio после создания нового проекта прикладной программы TestApp
ГЛАВА 12 329 На этой странице полужирным шрифтом выделена строка с названием созданно- го проекта прикладной программы, после которой перечисляются его основные па- раметры и структурные модули. В строке Processor отображается идентификатор микропроцессорного ядра, для которого предназначена разрабатываемая программа. Строка Executable информирует о расположении каталога, в который должен записы- ваться файл, содержащий исполняемый код создаваемой прикладной программы. Строка Compiler options позволяет получить информацию о значениях параметров компилятора и при необходимости изменить эти значения. Для просмотра текущих значений ключевых параметров компилятора достаточно расположить курсор на пиктограмме в виде знака «+», расположенной в начале этой строки, и щелкнуть ле- вой кнопкой мыши. При этом во встроенном окне проекта управляющей оболочки XPS, на странице Applications, появляются дополнительные строки, в которых ото- бражаются текущие значения основных параметров компилятора. Чтобы установить или изменить значения параметров компилятора, следует дважды щелкнуть левой кнопкой мыши на строке Compiler options или воспользоваться командой Set Compiler options из контекстно-зависимого всплывающего меню. Это меню отобра- жается на экране при щелчке правой кнопкой мыши на строке Compiler options. В результате на экран выводится диалоговая панель, вид которой представлен на рис. 12.48. Рис. 12.48. Диалоговая панель установки параметров компилятора для разрабатываемой прикладной программы (страница Environment) Панель диалога установки параметров компилятора для разрабатываемой при- кладной программы содержит 4 страницы, снабженные закладками с их названиями: Environment, Optimization, Directories, Advanced. На странице Environment отобража- ется информация о командной строке запуска компилятора и режиме функциониро- вания компилируемой программы, исполняемом (Executable) или отладочном
330 Зотов В Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС (XmdStub). Кроме того, эта страница позволяет указать стартовый адрес компили- руемой программы и размер стека при отсутствии файла директив для компилятора и компоновщика (linker script). Значение стартового адреса задается с помощью кла- виатуры в поле редактирования Program Start Address. Для определения размера сте- ка предназначено поле редактирования Stack Size. При наличии файла директив для компилятора и компоновщика значения стартового адреса и размера стека, указанные на этой странице, игнорируются. Страница Optimization диалоговой панели установки параметров компилятора используется для выбора уровня оптимизации разрабатываемой прикладной про- граммы и управления записью отладочной информации в исполняемый код. Вид этой страницы показан на рис. 12.49. Рис. 12.49. Страница Optimization диалоговой панели установки параметров компилятора для разрабатываемой прикладной программы Уровень оптимизации компилируемой программы устанавливается с помощью поля выбора Optimization Level, которое находится во встроенной панели Optimization parameters рассматриваемой страницы (рис. 12.49). Значение Level 3 соответствует максимальному уровню оптимизации. Управление генерацией отладочной информа- ции в процессе формирования исполняемого кода прикладной программы осуществ- ляется с помощью трех кнопок с зависимой фиксацией, которые расположены во встроенной панели Debug options. Если зафиксирована кнопка Do not generate debug symbols, то отладочная информация не будет включаться в исполняемый код разраба- тываемой прикладной программы. Для формирования отладочного кода необходимо нажать кнопку Create symbols for debugging. Страница Directories диалоговой панели установки параметров компилятора для разрабатываемой прикладной программы (рис. 12.50) позволяет указать каталоги, в которых находятся заголовочные файлы, библиотеки, файлы, используемые компо-
ГЛАВА 12 331 новщиком, и раздел, в который записывается файл, содержащий сгенерированный исполняемый код. Set Compiler settings for the project: TestApp , a Ц^фЯЙ^;/:' j ''I". ; vf ; QUput : • |ТГ\Ргс^^ ..r Puc. 12.50. Страница Directories диалоговой панели установки параметров компилятора для разрабатываемой прикладной программы Встроенная панель Search Paths предоставляет возможность определения путей доступа к различным файлам, используемым в процессе компиляции прикладной программы. Для определения пути доступа к библиотечным файлам предназначено поле редактирования Library. Путь доступа к заголовочным файлам может быть ука- зан в поле редактирования Include. Полные названия файлов, используемые при ком- поновке прикладной программы, приводятся во встроенной панели Linker Options. В поле редактирования Linker Script определяется название файла директив для ком- поновщика. Для поиска соответствующего файла можно воспользоваться стандарт- ной диалоговой панелью открытия файла, которая отображается на экране при нажа- тии на кнопку с пиктограммой в виде многоточия (...), находящуюся справа от поля редактирования Linker Script. Названия библиотек, используемых в процессе компо- новки прикладной программы, перечисляются в поле редактирования Libs to link. Встроенная панель Output Information предназначена для определения названия ре- зультирующих файлов. В поле редактирования Output ELF File указывается иденти- фикатор файла, в который записывается исполняемый код разрабатываемой при- кладной программы. Страница Advanced позволяет определить дополнительные параметры компиля- тора и компоновщика, которые не представлены на других страницах рассматривае- мой диалоговой панели. Вид этой страницы представлен на рис. 12.51. Все внесенные изменения на страницах диалоговой панели установки парамет- ров компилятора для разрабатываемой прикладной программы вступают в силу при нажатии кнопки ОК, находящейся в нижней части этой панели (см. рис. 12.48-12.51). После установки необходимых значений параметров компиляции и компоновки раз-
332 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС рабатываемой программы следует включить в состав проекта прикладной программы необходимые исходные файлы. Для этого надо дважды щелкнуть левой кнопкой мыши на строке Sources, которая расположена на странице Applications встроенного окна управляющей оболочки Xilinx Platform Studio. При этом на экран выводится стандартная диалоговая панель открытия файла. Аналогичную функцию выполняет команда Add File из контекстно-зависимого всплывающего меню, которое отобража- ется на экране при щелчке правой кнопкой мыши на строке Sources. Рис. 12.51. Страница Advanced диалоговой панели установки параметров компилятора для разрабатываемой прикладной программы Используя панель диалога открытия файла, следует в рабочем каталоге проекта XPS создать раздел, название которого должно совпадать с именем разрабатываемой программы. Например, для тестовой программы, проект которой был создан выше, нужно сформировать каталог TestApp. Далее в стандартной диалоговой панели необ- ходимо войти в созданный раздел и в поле редактирования названия файла ввести с клавиатуры идентификатор исходного модуля, включаемого в состав программного проекта. Название файла должно иметь расширение, соответствующее типу созда- ваемого исходного модуля. Например файл, содержащий исходный текст программы на языке С, должен иметь расширение .с. Если включаемый файл еще не существует, на экран выводится запрос о необходимости его создания. При утвердительном отве- те на этот запрос в выбранном разделе создается пустой файл с указанным названи- ем, а на странице Applications под строкой Sources появляется строка с названием но- вого исходного модуля, включающим полный путь доступа к нему. После этого можно перейти к формированию содержимого исходных файлов. В качестве примера
ГЛАВА 12 333 добавим в состав созданного программного проекта TestApp файл TestApp.с, который будет содержать исходный текст тестовой программы. 12.12. Формирование исходных модулей прикладной программы для разрабатываемой 32-разрядной микропроцессорной системы Для того чтобы открыть исходный файл в интегрированном текстовом редакторе средств проектирования Xilinx EST, следует дважды щелкнуть левой кнопкой мыши на строке с его названием, представленной на странице Applications. При этом в управляющей оболочке XPS открывается новое рабочее окно редактирования, на за- кладке которого указано название выбранного файла. В этом окне с помощью кла- виатуры формируется исходный текст прикладной программы. После завершения редактирования исходного файла необходимо сохранить его, используя команду Save из всплывающего меню, которое открывается при выборе пункта File основного ме- ню управляющей оболочки XPS. Создание исходного текста прикладной программы проиллюстрируем примером тестовой программы для контроллера системы сбора данных system_controller. Эта программа должна выполнять циклическое чтение данных, поступающих из парал- лельного порта ввода/вывода, сравнение их с верхним и нижним пороговыми значе- ниями и при выходе за их пределы формировать соответствующие сообщения, кото- рые через последовательный порт RS-232 передаются вместе с данными на персо- нальный компьютер. Для отображения поступающих данных и сообщений на экране монитора персонального компьютера может использоваться программа HyperTermi- nal, которая входит в состав ОС Windows 2000 и Windows ХР. Исходный текст тесто- вой программы выглядит следующим образом: II ***** Тестовая программа TestApp.c ***** // Включаемые файлы //============:================:=^==============:===:==== include «xparameters.h» include «xutil.h» include «xgpioj.h» //==========================================:=:=======:== И Определение функции чтения данных из входного порта //.===================================:=:====^========:= Xuint32 ReadFromGPInput(Xuint32 BaseAddress) { Xuint32 data = XGpiojnGetDataReg (Base Address, 1); return data; //================«========;========M===^=ZX^==^======== II Текст основной программы //==x=:=======:.======================================== int main (void) int i; int lowjevel = 25; // Значение нижнего допустимого уровня int highJevel = 150; II Значение верхнего допустимого уровня
334 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС print(«-- Старт тестовой программы \п\г»); for (i=1; i < 1000000; i++) { Xuint32 data = ReadFromGP!nput(XPAR_IN_DATA_PORTJ3ASEADDR); if( data < lowjevel) xil_printf{«3Ha4eHne параметра меньше нижнего допустимого уровня: Ох %х\п\г», data); else if( data > highjevel) xil_printf(« Значение параметра больше верхнего допустимого уровня: Ох %х\п\г», data); } print(«-- Завершение работы тестовой программы --\п\г»); return 0; } В начале файла Те st Арр. с, после перечисления включаемых заголовочных фай- лов, определяется функция ReadFromGPInput, которая осуществляет чтение данных из параллельного порта ввода/вывода. Далее следует исходный текст основной про- граммы main. Прежде чем приступить к компиляции и компоновке прикладной программы, не- обходимо подготовить файла директив для компоновщика (linker script). 12.13. Создание файла директив для компоновщика (linker script) Для управления процессом компиляции и компоновки исполняемого файла раз- рабатываемой программы используется файл директив linker script. Типовая структу- ра исполняемого файла прикладной программы для встраиваемой микропроцессор- ной системы, реализуемой на основе ядра MicroBlaze, показана на рис. 12.52. Эта структура включает в себя 7 секций. .text Text Section .rodata Read-Only Data Section .sdata2 Small Read-Only Data Section .data Read-Write Data Section .sdata Small Read-Write Data Section .sbss Small Uninitialized Data Section .bss Uninitialized Data Section Рис. 12.52. Типовая структура исполняемого файла прикладной программы для встраиваемой микропроцессорной системы, реализуемой на основе ядра семейства MicroBlaze В секции .text содержится исполняемый код программы. Секция .rodata включает в себя данные, предназначенные только для чтения, длина которых составляет более 8 байт. Секция sdata2 содержит данные, используемые только для чтения, размер ко- торых не превышает 8 байт. В секции .data размещаются данные, предназначенные для чтения и записи, длина которых составляет более 8 байт. Секция sdata включает в себя перезаписываемые данные, размер которых не превышает 8 байт. Секция .sbss
ГЛАВА 12 335 содержит неинициализированные данные, длина которых составляет менее 8 байт. В секции .bss размещаются неинициализированные данные, размер которых превы- шает 8 байт. Требуемый порядок размещения секций в исполняемом файле прикладной про- граммы описывается в виде файла директив для компилятора и компоновщика (linker script). В начале этого файла определяется размер стека и диапазон адресов для каж- дого типа памяти микропроцессорной системы. Далее поочередно с помощью соот- ветствующих ключевых слов описываются рассмотренные выше секции. Файл директив для компилятора может быть создан с помощью различных тек- стовых редакторов, в том числе с помощью встроенного редактора управляющей оболочки XPS. Но более эффективным является интерактивный метод подготовки файла директив. Чтобы воспользоваться этим способом, нужно выполнить команду Generate Linker Script из всплывающего меню Tools. При этом на экран выводится диалоговая панель, вид которой показан на рис. 12.53. [Generate Linker Script .text .rodata .sdata2 ,sbss2 .data .ehjrame .sdata .sbss .bss IMxddtiodaao " " J^QOOOOQQO/ 0x00000000 0x00000000 oxoooooooo oxoooooooo 0x00000000 0X00000000 0x00000000 inst_bus_cntlr_data_bu5_cntlr inst_bus_cntlr_data_bus_cntlr inst_bus_cntlr_data_bus_cntlr in5t_bus_cntlr_data_bus_cntlr inst_bus_cntlr_data_bus_cntlr inst_bus_cntlr_data_bus_cntlr inst_bus_cntlr_data_bus_cntlr inst_bus_cntlr_data_bus_cntlr inst_bu5_cntlr_data_bu5_cntlr Н еар and Sectton [Heap Stack 0x400 0x400 Memories View- inst_bus_cntlr_data_bus_cntlr inst_bu5_cntlr_data_bus_cntlr rnst_bus_cntlr_data_bus_cntlr : 0x00000000 8K....... Tip - жй ELF fife USed fo populate Section ::... 1 Output Linker ^ptt|cAProjecKs^^ Add Section Cancel Puc. 12.53. Диалоговая панель исходных данных для создания файла директив Linker Script Во встроенном окне Sections View этой диалоговой панели отображается инфор- мация о секциях файла, содержащего исполняемый код программы. Чтобы добавить новую секцию, следует воспользоваться кнопкой Add Sections, которая расположена под встроенным окном Sections View. Для удаления секции в окне Sections View сле- дует выделить строку с ее названием и нажать кнопку Delete Sections. Данные о раз- мере и расположении стека отображаются во встроенном окне Heap and Stack View. Информация об используемых типах памяти представлена во встроенном окне Memories View. В поле выбора/редактирования Output Linker Script указывается рас- положение создаваемого файла директив linker script. Сформированный файл должен располагаться в том разделе, который был указан в параметрах компилятора. Обычно для этих целей используется папка, в которой хранятся исходные файлы прикладной программы. При открытии диалоговой панели исходных данных для создания файла директив в ней отражаются параметры, автоматически предлагаемые средствами Xilinx EST. Чтобы запустить процесс автоматической генерации файла директив
336 Зотов В. Ю, Проектирование встраиваемых микропроцессорных систем на основе ПЛИС linker script, достаточно нажать кнопку Generate, которая находится в нижней части диалоговой панели (рис. 12.53). В качестве примера, сформируем файл директив для компиляции и компоновки тестовой прикладной программы TestApp. Для этого выполним команду Generate Linker Script из всплывающего меню Tools управляющей оболочки XPS. После этого в диалоговой панели, представленной на рис. 12.53, воспользуемся кнопкой Generate. В результате выполненных действий в папке C:\Project\system_controlier\TestApp ав- томатически создается файл TestApp ^linker script, содержимое которого выглядит следующим образом: у***********************************************************************/ /* 7 /* This file is automatically generated by linker script generator.7 Г 7 /* Version: Xilinx EDK 7.1 EDK_H. 10.4 7 /* 7 /* Copyright (c) 2004 Xilinx, Inc. All rights reserved. 7 /* 7 /* Description : MicroBlaze Linker Script 7 /* 7 у***********************************************************************/ .STACK-SIZE = DEFINED(-STACK-SIZE) ? _STACK_SIZE: 0x400; _HEAP_SIZE = DEFINED(_HEAP-SIZE) ? _HEAP_SIZE : 0x400; /* Define Memories in the system 7 MEMORY { inst_bus_cntlr_dataj3us_cntlr: ORIGIN = 0x00000000, LENGTH = 0x00001 FFF } /* Specify the default entry point to the program 7 ENTRY(_start) /* Define the sections, and where they are mapped in memory 7 SECTIONS .text: { __text_start =.; *(.text) *(.text.*) *(.gnu.linkonce.t*) __text_end =.; } > inst_bus_cntlr_data_bus„cntlr .rodata: { _rodata_start - *(. rodata) *(.rodata.*) *(.gnu.linkonce.r*) _rodata_end =.; } > inst-bus„cntlr_data_bus_cnt!r .sdata2: { . = ALIGN(8); _sdata2_start =.;
ГЛАВА 12 337 *(.sdata2) . = ALIGN(8); _sdata2_end =.; } > insLbus_cntlr„data_bus_cntlr .sbss2: { _sbss2_start - *(.sbss2) _sbss2_end = } > inst„bus_cntlr_data_bus_cntlr .data: { . = ALIGN(4); __data_start = ‘(.data) ‘(.data.*) ‘(.gnu.linkonce.d*) _data_end = } > inst_bus_cntlr_data_bus_cntlr .sdata: { . = ALIGN(8); _~sdata_start = ‘(.sdata) _sdata_end =.; } > instj3us_cntlrjjata_bus„cntlr .sbss: { . - ALlGN(4); _sbss_start =.; ‘(.sbss) . = ALIGN(8); _sbss_end = } > inst_bus_cntlr_data_bus_cntlr .bss: { . = ALIGN(4); _bss_start = ‘(.bss) ‘(COMMON) . = ALlGN(4); _bss_end -.; } > inst_bus_cntlr„data„bus_cntlr .ehjrame: { _ehjrame_start =.; ‘(.ehjrame) _ehjrame.end =.; } > inst_bus_cntlr_data_bus_cntlr PROVIDE („SDA_BASE_ = _sdata_start + (_sbss_end - _sdata_start / 2)); PROVIDE (_SDA2_BASE_ =_sdata2_start +(_sbss2_end -_sdata2_start /2)); /* Generate Stack and Heap definitions */ bss_stack: { . = ALIGN (8); _heap =.;
338 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Jieap.start = .heap; .+= _HEAP„SIZE; . += _STACK_SIZE; . = ALIGN(8); _stack = _stack = _stack; } > inst_bus_cntlr_data_bus_cntlr 12.14. Компиляция и компоновка прикладной программы для разрабатываемой 32-разрядной микропроцессорной системы После создания всех необходимых исходных файлов можно приступить к ком- пиляции и компоновке прикладной программы. Запуск этого процесса осуществляет- ся одним из трех способов. Первый способ заключается в использовании команды Build All User Applications из всплывающего меню Tools. Вторым способом активиза- ции процедур компиляции и компоновки является нажатие кнопки быстрого доступа расположенной на оперативной панели управления XPS. Чтобы воспользовать- ся третьим способом, следует расположить курсор на строке с названием программ- ного проекта на странице Applications и щелкнуть правой кнопкой мыши. Затем в появившемся контекстно-зависимом всплывающем меню нужно выбрать команду Build Project. Процесс компиляции и компоновки прикладной программы выполняется в авто- матическом режиме. Информация о его результатах отражается на странице Output встроенного окна консольных сообщений управляющей оболочки XPS. При обнару- жении ошибок сведения о них выводятся на странице Errors. В случае успешного за- вершения процедур компиляции и компоновки создается файл executable.elf, который содержит исполняемый код прикладной программы. Полученный файл используется для дополнения файла конфигурационной последовательности, который был сфор- мирован на этапе реализации аппаратной части разрабатываемой микропроцессорной системы. Чтобы скомпилировать и скомпоновать тестовую программу для контроллера системы сбора и обработки данных, воспользуемся кнопкой быстрого доступа dSl, расположенной на оперативной панели управления XPS. При отсутствии ошибок в исходном тексте программы в разделе C:\Project\system_controller\TestApp\ создается файл executable.elf в который записывается соответствующий исполняемый код. 12.15. Запись исполняемого кода прикладной программы в конфигурационную последовательность проекта аппаратной части микропроцессорной системы и загрузка конфигурационных данных в кристалл FPGA Для включения исполняемого кода прикладной программы в конфигурационную последовательность ПЛИС, реализующую функции аппаратной части микропроцес- сорной системы, следует выбрать пункт Tools основного меню управляющей оболоч- ки XPS. При этом на экран выводится соответствующее всплывающее меню, в кото- ром нужно выполнить команду Update Bitstream. Аналогичную функцию выполняет
ГЛАВА 12 339 &ЯНГ| кнопка быстрого доступа 223, которая находится на оперативной панели управления XPS. При исполнении данной команды в конфигурационной последовательности проекта микропроцессорной системы производится перезапись содержимого блоч- ной памяти ПЛИС. Информация о выполнении процесса преобразования конфигура- ционной последовательности отображается на странице Output встроенного окна консольных сообщений. При отсутствии ошибок создается новый файл конфигура- ционной последовательности download.bit, который записывается в раздел imple- mentation рабочего каталога проекта разрабатываемой микропроцессорной системы. Этот файл может непосредственно использоваться для конфигурирования кристалла FPGA. Управление процессом загрузки конфигурационных данных в ПЛИС может осу- ществляться двумя способами: непосредственно из оболочки XPS или в среде про- граммы iMPACT, которая входит в состав САПР серии Xilinx ISE. Загрузка конфигу- рационной последовательности проекта разрабатываемой микропроцессорной систе- мы в ПЛИС осуществляется с помощью программы iMPACT и загрузочного JTAG- кабеля, подключаемого к параллельному порту (LPT) или к последовательной шине (Universal Serial Bus, USB) компьютера. При выборе первого способа управления этим процессом программа iMPACT запускается в пакетном режиме с помощью ко- мандного файла download.cmd. Этот командный файл по умолчанию должен распо- лагаться в разделе etc рабочего каталога проекта встраиваемой микропроцессорной системы. Для его создания можно воспользоваться встроенным текстовым редакто- ром управляющей оболочки XPS. Содержимое командного файла download.cmd вы- глядит следующим образом: setMode -bscan setCable -р auto identify assignfile -p 1 -file implementation/download.bit program -p 1 quit Второй способ управления загрузкой конфигурационных данных в ПЛИС заклю- чается в автономном запуске программы iMPACT. После старта этой программы ав- томатически запускается мастер, который позволяет выполнить конфигурирование ПЛИС в интерактивном режиме. Этот способ подробно рассмотрен в разд. 8.5 и в [1]. Для того чтобы загрузить конфигурационную последовательность из управляю- щей оболочки XPS, следует выполнить команду Tools основного меню, а затем в со- ответствующем всплывающем меню выбрать строку Download. Процесс загрузки конфигурационных данных можно активизировать также с помощью кнопки быстро- го доступа которая расположена на оперативной панели управления XPS. Вы- полнение процесса конфигурирования кристалла отображается на странице Output встроенного окна консольных сообщений управляющей оболочки XPS. Процессы генерации файлов «прошивки» конфигурационных ПЗУ/ППЗУ и про- граммирования ППЗУ серий XC18V00 и Platform Flash с помощью модуля iMPACT рассмотрены в разд. 8.6 и 8.7. Перед формированием файла программирования ПЗУ/ППЗУ следует обратить внимание на то, чтобы при создании конфигурационной последовательности аппаратной части проектируемой системы был выбран с помо-
340 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС щью параметра Start-Up Clock соответствующий источник сигнала синхронизации, используемого в процессе конфигурирования. В заключение рассмотрим завершающие этапы процесса разработки встраивае- мых микропроцессорных систем на примере контроллера системы сбора и обработки данных. Прежде всего, дополним конфигурационную последовательность ПЛИС, реализующую функции аппаратной части контроллера, описанием содержимого про- граммной памяти, соответствующего исполняемому коду тестовой программы 6ЯЯг| TestApp, нажав кнопку быстрого доступа ИЯ на оперативной панели управления XPS. В результате в папке C:\Project\system_controller\implementation будет создан файл конфигурационной последовательности разработанной системы download.bit. Кроме того, в папке C:\Project\system_controller\etc с помощью встроенного текстово- го редактора управляющей оболочки XPS сформируем командный файл download.cmd для программы iMPACT. Для проверки функционирования аппаратной части разработанной системы сбо- ра данных и тестовой программы TestApp воспользуемся отладочной платой из инст- рументального комплекта Spartan-3 Starter Kit. Прежде всего к этой плате необходи- мо подключить загрузочный кабель, а также кабель, соединяющий разъем интерфей- са RS232 с разъемом последовательного порта ПК. Далее следует подать напряжение питания на отладочную плату. После этого следует активизировать приложение HyperTerminal (Hypertrm.exe) и создать новое подключение, указав соответствующий COM-порт компьютера и установив требуемые параметры протокола передачи дан- ных. Учитывая значения параметров последовательного асинхронного приемопере- датчика, которые были заданы при создании спецификации аппаратной платформы проектируемой системы MHS, необходимо установить следующие настройки СОМ- порта: скорость передачи, равную 9600 бит/с; количество передаваемых бит данных - 8; количество стоповых бит - 1; контроль на четность или нечетность отсутствует. Выполнив с помощью кнопки быстрого доступа на оперативной панели управления XPS загрузку конфигурационной последовательности тестового проекта, следует убедиться в его работоспособности. Для этого, варьируя положение движков восьми ползунковых переключателей, расположенных на отладочной плате, имити- руем изменение входных тестовых данных. При выходе значений входных данных за пределы заданного допустимого диапазона они отображаются в окне программы HyperTerminal. сопровождаясь соответствующими предупреждениями. Рассмотренный процесс разработки систем на основе ядер семейства MicroBlaze может быть существенно ускорен за счет применения мастера Base System Builder Wizard. В последних версиях САПР Xilinx EDK данный инструмент интерактивного формирования большинства компонентов проекта может теперь использоваться для создания систем не только на основе ограниченного числа поддерживаемых инстру- ментальных модулей, но и на основе плат с произвольной конфигурацией, разраба- тываемых пользователем. Поэтому в следующей главе будет представлен процесс проектирования встраиваемых микропроцессорных систем с применением мастера Base System Builder Wizard.
13. РАЗРАБОТКА ВСТРАИВАЕМЫХ 32-РАЗРЯДНЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ЯДЕР СЕМЕЙСТВА MICROBLAZE С ПОМОЩЬЮ МАСТЕРА BASE SYSTEM BUILDER WIZARD Использование мастера Base System Builder (BSB) Wizard не только ускоряет процесс разработки встраиваемых 32-разрядных микропроцессорных систем, делая его более наглядным, но и позволяет избежать возможных ошибок при создании раз- личных компонентов проекта. В настоящей главе рассматривается процесс сквозного проектирования микропроцессорных систем, выполняемых на основе ядер семейства MicroBlaze, с применением мастера BSB Wizard. 13.1. Выбор способа создания проекта разрабатываемой микропроцессорной системы в САПР Xilinx EST В новой версии средств автоматизированного проектирования Xilinx EST после запуска управляющей оболочки Xilinx Platform Studio на экран автоматически выво- дится диалоговая панель выбора способа создания проекта встраиваемой микропро- цессорной системы, вид которой показан на рис. 13.1. Г Do not show this dialog again / \; . OK | Cancel | Puc. 13.1. Диалоговая панель выбора способа создания проекта встраиваемой микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio С помощью этой панели пользователь может открыть один из существующих проектов или инициировать процесс создания нового проекта. Для того чтобы от- крыть существующий проект, следует зафиксировать в нажатом состоянии кнопку Open A Recent Project, которая находится во встроенной панели Recent Projects (рис. 13.1). В этой же панели расположено поле выбора названия открываемого про- екта, в правой части которого находится кнопка управления выпадающим списком возможных вариантов. Воспользовавшись этой кнопкой, в открывшемся списке нуж- но найти строку, в которой содержится название требуемого проекта, и выделить ее щелчком левой кнопки мыши. После закрытия выпадающего списка название соот- ветствующего проекта должно отображаться в поле выбора. Указанный проект будет
342 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС открыт после нажатия кнопки ОК, которая находится в нижней части диалоговой па- нели выбора проекта встраиваемой микропроцессорной системы (см. рис. 13.1). Чтобы приступить к созданию нового проекта, нужно воспользоваться кнопками с зависимой фиксацией, расположенными во встроенной панели Create a new XPS project using. Если в нажатом состоянии зафиксирована кнопка Blank XPS Project, то процесс создания и разработки нового проекта будет выполняться в обычном режи- ме, который подробно рассмотрен в предыдущей главе. Для того чтобы приступить к разработке проекта в интерактивном режиме, используя мастер В SB Wizard, следует выбрать кнопку Base System Builder Wizard, а затем нажать кнопку ОК, находящуюся в нижней части диалоговой панели выбора способа создания проекта встраиваемой микропроцессорной системы (см. рис. 13.1). При этом на экран монитора выводится диалоговая панель, вид которой представлен на рис. 13.2. Рис. 13.2. Диалоговая панель, содержащая исходные данные для создания нового проекта встраиваемой микропроцессорной системы В этой диалоговой панели в обязательном порядке должны быть определены следующие исходные данные для создания нового проекта: название проекта; диск и каталог, которые будут использоваться для хранения всех компонентов (файлов) этого проекта. Кроме того, в этой же панели, при необходимости, можно также указать сле- дующую дополнительную информацию: возможность использования в новом проекте депозитария собственных (разрабо- танных пользователем) IP-ядер периферийных модулей, библиотек и драйверов; полное название каталогов, которые используются в качестве депозитария IP- компонентов, библиотек и драйверов. В представленной диалоговой панели в первую очередь рекомендуется задать полное название файла создаваемого проекта, включающее путь доступа к разделу (папке), в котором будет располагаться рабочий каталог проекта. Полное наименова- ние файла проекта указывается в поле редактирования Project File (рис. 13.2). По умолчанию в поле редактирования Project File предлагается в качестве нового проек-
ГЛАВА 13 343 та файл system.xmp, располагающийся в корневом каталоге диска, на котором нахо- дится комплекс средств автоматизированного проектирования Xilinx EDK. При вы- боре места расположения файлов создаваемого проекта следует учитывать целесооб- разность размещения всех пользовательских проектов в специально сформированной для этих целей папке, например C:\Project. Рабочий каталог нового проекта должен создаваться внутри этой папки. Папка с проектами пользователя должна распола- гаться вне каталога, в котором содержатся средства проектирования Xilinx EDK. Та- ким образом, при обновлении версии системы автоматизированного проектирования расположение этой папки на диске изменяться не будет. Для определения места расположения создаваемого проекта можно воспользо- ваться двумя стандартными способами: используя клавиатуру или панель навигации по дискам компьютера. При выборе первого метода следует поместить курсор на по- ле редактирования Project File и щелкнуть левой кнопкой мыши, после чего ввести с клавиатуры имя диска, каталога и название файла проекта. При этом указываемый каталог на диске должен быть создан заранее. Чтобы воспользоваться вторым, более наглядным способом, нужно нажать кнопку Browse, расположенную справа от поля редактирования Project File (см. рис. 13.2). В открывшейся стандартной диалоговой панели навигации следует с помощью мыши выбрать требуемый диск и каталог, а за- тем подтвердить сделанный выбор нажатием кнопки ОК. Для создания нового разде- ла нужно расположить курсор на пиктограмме Й8, которая находится в верхней час- ти диалоговой панели навигации, и щелкнуть левой кнопкой мыши. При этом в те- кущем разделе создается пустой каталог с названием Новая папка. Для изменения названия нового каталога следует прежде всего выделить его, расположив курсор на соответствующей строке списка имен разделов и щелкнув левой кнопкой мыши. За- тем следует набрать текст нового названия папкГи с клавиатуры, завершив его ввод нажатием клавиши Enter. Далее следует выполнить операцию выбора новой папки, рассмотренную выше. После закрытия панели навигации выбранные параметры ав- томатически отображаются в поле редактирования Project File. В качестве примера создадим проект с названием controllerJo, расположив его рабочий каталог Controller Jo в папке C:\Project. Если в новом проекте предполагается применение пользовательских IP-ядер пе- риферийных модулей, библиотек и драйверов, то во встроенной панели дополни- тельных параметров Peripheral Repository Directory (Advanced Option) (см. рис. 13.2) следует прежде всего включить опцию User Peripheral Repository search path for IP, driver and library files. Для этого нужно щелкнуть левой копкой мыши на поле инди- катора состояния, который расположен слева от названия указанной опции. После этого станет доступным поле редактирования названий каталогов, в которых должен проводиться поиск IP-ядер периферийных модулей, библиотек и драйверов. Назва- ния каталогов могут быть введены непосредственно в это поле (после его активиза- ции) с помощью клавиатуры. При вводе нескольких названий каталогов они должны разделяться точкой с запятой. Требуемые каталоги могут быть также указаны с по- мощью панели навигации по дискам компьютера, которая выводится на экран при нажатии на кнопку Browse, расположенную справа от поля редактирования.
344 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Процедура определения всех необходимых параметров создаваемого проекта за- вершается нажатием кнопки ОК, находящейся в нижней части панели установки зна- чений исходных данных для нового проекта (см. рис. 13.2). 13.2. Формирование исходных файлов описания разрабатываемой 32-разрядной микропроцессорной системы с помощью мастера Base System Builder Wizard После закрытия диалоговой панели определения исходных данных для создавае- мого проекта встраиваемой микропроцессорной системы на экран автоматически вы- водится стартовая диалоговая панель мастера Base System Builder Wizard, вид кото- рой представлен на рис. 13.3. Рис. 13.3. Стартовая диалоговая панель мастера Base System Builder Wizard В этой диалоговой панели разработчику предлагается выбрать один из двух ва- риантов работы с мастером Base System Builder Wizard: приступить к созданию ис- ходных файлов описания нового проекта микропроцессорной системы или продол- жить уже начатую сессию работы с мастером BSB Wizard. Выбор требуемого вари- анта осуществляется с помощью двух кнопок с зависимой фиксацией. Чтобы инициировать процесс разработки новых исходных файлов описания проекта встраи-
ГЛАВА 13 345 ваемой микропроцессорной системы, следует нажать кнопку I would like to create a new design. Для продолжения начатой сессии с целью внесения изменений и допол- нений в исходные файлы проекта нужно переключить в нажатое состояние кнопку I would like to load an existing .bsb settings file (saved from a previous session). При этом становится активным поле редактирования, в котором нужно указать название файла с расширением .bsb, содержащего значения параметров, установленных для проекта в одном из предыдущих сеансов работы с мастером Base System Builder Wizard. Назва- ние соответствующего файла может быть введено непосредственно с клавиатуры или выбрано с помощью стандартной панели навигации, которая открывается при нажа- тии кнопки Browse, расположенной справа от поля редактирования. Выбрав требуе- мый вариант, следует нажать кнопку Next, которая находится в нижней части старто- вой диалоговой панели мастера Base System Builder Wizard (см. рис. 13.3). В резуль- тате этого на экран выводится следующая диалоговая панель, вид которой показан на рис. 13.4. Рис. 13.4. Диалоговая панель выбора типа отладочной платы, используемой для реализации разрабатываемой микропроцессорной системы Данная диалоговая панель позволяет указать тип инструментального модуля, предназначенного для реализации разрабатываемой микропроцессорной системы. Пользователь может выбрать одну из отладочных плат, серийно выпускаемых раз- личными фирмами-производителями и поддерживаемых средствами проектирования
346 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Xilinx EST, или собственную плату с произвольной конфигурацией. Для этой цели предназначены две кнопки с зависимой фиксацией, расположенные в диалоговой па- нели выбора типа отладочной платы (рис. 13.4). Если в нажатом состоянии находится кнопка I would like to create a system for the following development board, то для реали- зации проектируемой микропроцессорной системы предполагается использовать од- ну из серийно выпускаемых отладочных плат, для которых предусмотрена поддерж- ка средствами проектирования Xilinx EST. Если проект разрабатывается для инстру- ментального модуля, конфигурация которого определяется разработчиком, то следует нажать кнопку 1 would like to create a system for a custom board. Рассмотрим подробнее процесс подготовки исходных файлов описания встраи- ваемой микропроцессорной системы, которая выполняется на основе одного из се- рийно выпускаемых инструментальных модулей. При выборе конкретного типа отладочной платы необходимо в первую очередь указать название фирмы-произ- водителя. Для этого нужно воспользоваться полем выбора Board Vendor. В правой части этого поля находится кнопка управления выпадающим списком названий фирм-производителей, поддерживаемых Средствами проектирования Xilinx EST. В этом списке следует выбрать строку с требуемым названием, поместив на нее кур- сор и щелкнув левой кнопкой мыши. После закрытия выпадающего списка соответ- ствующее название фирмы-производителя отображается в поле выбора Board Vendor. Идентификатор используемой платы указывается с помощью поля выбора Board Name. В выпадающем списке, открываемом кнопкой управления в правой части это- го поля, представлены идентификаторы инструментальных модулей, которые выпус- каются выбранным производителем и поддерживаются средствами проектирования Xilinx EST. Поле выбора Board Revision позволяет определить версию указанной от- ладочной платы. Обозначения доступных версий плат содержатся в выпадающем списке, который выводится на экран при нажатии кнопки управления, расположен- ной в правой части поля выбора Board Revision. После выбора конкретного типа ин- струментального модуля во встроенной панели Board Description автоматически ото- бражается краткое описание конфигурации и возможностей этого модуля. В диалоговой панели определения типа отладочной платы, используемой для реализации разрабатываемой микропроцессорной системы, имеются также ссылки, открывающие доступ к Web-странице фирмы-производителя с помощью используе- мого обозревателя (например, Microsoft® Internet Explorer™) и позволяющие загру- зить все необходимые файлы описания выбранного инструментального модуля в ре- жиме on-line, не прерывая процесса разработки проекта. В качестве примера выберем для реализации проектируемой системы отладоч- ную плату из инструментального комплекта Spartan-3 Starter Kit. При этом диалого- вая панель выбора типа отладочной платы приобретает вид, показанный’на рис. 13.5. Выбор инструментального модуля, предназначенного для реализации разрабаты- ваемой микропроцессорной системы, завершается нажатием кнопки Next, находя- щейся в нижней части диалоговой панели (рис. 13.4, 13.5). При этом открывается очередная диалоговая панель мастера Base System Builder Wizard, которая представ- лена на рис. 13.6.
ГЛАВА 13 347 Base System Builder - Select Board &' I wouM likt to create -a- system for the folfo^Hd'development board . ;z.. Board V ~........................ “ “ -g ''Воага-Мегйу.;;yjjgp^^ ....... ""...... " .............. IB 7Л .'У' -': ', : ••••<;у? .. 7 •. <7-7 . .7.?. 7.<7. -. /\7 <СЛ Л 7 Л Л' уС •; 1 would Irketo create t system for a custom board• . ., -,? Puc. 13.5. Выбор типа инструментального модуля, предназначенного для реализации разрабатываемой микропроцессорной системы Эта диалоговая панель предназначена для выбора типа ПЛИС (если используется отладочная плата, конфигурация которой определяется разработчиком) и микропро- цессорного ядра, на основе которых выполняется проект встраиваемой системы. Ин- формация о целевом семействе ПЛИС, типе кристалла, типе корпуса ПЛИС и катего- рии быстродействия кристалла указывается с помощью соответствующих полей вы- бора, расположенных в верхней части диалоговой панели (рис. 13.6). Поле выбора Architecture предназначено для определения семейства ПЛИС, на базе которого проектируется встраиваемая микропроцессорная система. В правой части этого поля расположена кнопка управления выпадающим списком, при нажа- тии на которую на экране монитора отображается полный список семейств ПЛИС, поддерживаемых пакетом Xilinx EDK. Чтобы выбрать требуемое семейство ПЛИС, необходимо поместить курсор мыши на соответствующую строку выпадающего спи- ска и щелкнуть левой кнопкой мыши. После этого название соответствующей серии ПЛИС автоматически отображается в поле выбора семейства Architecture. Поле выбора типа кристалла Device Size, используется для определения типа ПЛИС, предназначенной для реализации проектируемой микропроцессорной систе- мы. Первоначально в этом поле автоматически отображается тип ПЛИС, установлен- ный по умолчанию для выбранного семейства. Для его изменения необходимо вы- полнить последовательность действий, аналогичную процедуре выбора семейства ПЛИС. Вначале нужно нажать кнопку активизации выпадающего списка доступных
348 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС кристаллов выбранного семейства. Эта кнопка расположена в правой части поля вы- бора типа кристалла Device Size (рис. 13.6). В предложенном списке нужно найти строку, содержащую требуемый тип кристалла, поместить на нее курсор мыши и щелкнуть левой кнопкой. Выделенный элемент списка автоматически отображает- ся в поле выбора типа кристалла Device Size. Рис. 13.6. Диалоговая панель выбора типа ПЛИС и микропроцессорного ядра, на основе которых выполняется проект разрабатываемой системы Тип корпуса ПЛИС, предназначенной для реализации проекта встраиваемой микропроцессорной системы, указывается в поле выбора Package. Для того чтобы получить доступ к полному списку типов корпусов, в которых выпускается требуе- мый кристалл, следует воспользоваться кнопкой активизации выпадающего списка, расположенной в правой части поля выбора Package. В открывшемся списке нужно отыскать строку, в которой представлено условное обозначение искомого типа кор- пуса ПЛИС, поместить на нее курсор мыши и щелкнуть левой кнопкой мыши. После этого условное обозначение выбранного типа корпуса микросхемы автоматически отображается в поле Package. Для определения категории быстродействия кристалла, на базе которого плани- руется реализация проектируемой микропроцессорной системы, следует воспользо-
ГЛАВА 13 349 ваться полем выбора Speed Grade (см. рис. 13.6). При нажатии на кнопку активизации выпадающего списка, расположенную в правой части этого поля выбора, на экран выводятся условные обозначения возможных градаций по быстродействию для ис- пользуемого типа ПЛИС. Требуемая категория быстродействия кристалла указывает- ся щелчком левой кнопки мыши на строке этого выпадающего списка, в которой со- держится условное обозначение соответствующего класса быстродействия ПЛИС. Если для реализации разрабатываемой микропроцессорной системы определена одна из серийно выпускаемых отладочных плат, поддерживаемых средствами проек- тирования Xilinx EST, то все перечисленные выше поля выбора находятся в неактив- ном состоянии. Эти поля используются только для отображения сведений о парамет- рах ПЛИС, которая используется в выбранном инструментальном модуле. Разработ- чик не может модифицировать эти параметры без изменения типа используемой отладочной платы. Выбор типа микропроцессорного ядра, на базе которого будет строиться разра- батываемая система, осуществляется с помощью двух кнопок с зависимой фиксаци- ей, расположенных в диалоговой панели, представленной на рис. 13.6. Если в нажа- том состоянии находится кнопка MicroBlaze, то в качестве основы проектируемой системы будет использоваться 32-разрядное конфигурируемое ядро семейства MicroBlaze. При переключении в нажатое состояние кнопки PowerPC разрабатывае- мая система будет базироваться на основе 32-разрядного аппаратного ядра PowerPC405. Так как это ядро присутствует только в ПЛИС семейств Virtex-II Pro и Virtex-4, то при выборе кристаллов других серий для реализации проектируемой сис- темы данная кнопка будет находиться в неактивном состоянии. Краткое описание ар- хитектуры и возможностей выбранного микропроцессорного ядра автоматически отображается во встроенной панели Processor Description (см. рис. 13.6). После определения типа инструментальной платы и микропроцессорного ядра, на основе которых проектируется встраиваемая система, можно перейти к следую- щему шагу в процессе создания исходных файлов описания микропроцессорной сис- темы, нажав кнопку Next, находящуюся в нижней части диалоговой панели, приве- денной на рис. 13.6. В результате этого на экран выводится очередная диалоговая па- нель мастера Base System Builder Wizard, вид которой показан на рис. 13.7. Эта диалоговая панель предназначена для определения основных параметров микропроцессорного ядра, на базе которого разрабатывается проектируемая система. Ее структура зависит от типа используемого ядра. Значение тактовой частоты квар- цевого генератора, формирующего исходный сигнал синхронизации в используемом инструментальном модуле, указывается в поле редактирования Reference Clock Frequency в мегагерцах. Для этого нужно сделать данное поле активным, поместив на него курсор и щелкнув левой кнопкой мыши, а затем воспользоваться клавиатурой. Указываемое значение параметра Reference Clock Frequency должно соответствовать частоте кварцевого генератора, который установлен в выбранном инструментальном модуле. При выборе серийно выпускаемой отладочной платы, поддерживаемой сред- ствами проектирования Xilinx EST, в поле редактирования автоматически отобража- ется значение частоты кварцевого генератора, используемого по умолчанию в соста- ве данного инструментального модуля.
350 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Base System Builder - Configure Processor Reference Clock Frequency: . ' Processor-Bus | Ж':йнД||^^ : Ensure that your board u cor^igured , ::i;:-ftqcessor Config ' , v::. p Debug IZF [On-сЫр НЛл/ debug mbdul^ ' ; . Г XMD with SA^ debug stub :.: I nstruction M emory; (Uses BRAM) Puc. 13.7. Диалоговая панель определения основных параметров микропроцессорного ядра MicroBlaze, используемого в качестве основы разрабатываемой системы Значение тактовой частоты микропроцессорного ядра определяется с помощью поля выбора Processor-Bus Clock Frequency (рис. 13.7). Выпадающий список возмож- ных значений этого параметра открывается при нажатии кнопки управления, распо- ложенной в правой части данного поля выбора. По умолчанию предлагается значе- ние тактовой частоты микропроцессорного ядра, равное значению частоты опорного кварцевого генератора Reference Clock Frequency. Поле выбора Reset Polarity позволяет установить активный уровень сигнала сброса для микропроцессорного ядра, поддерживающего такую опцию. Если воз- можность выбора отсутствует, то данное поле находится в неактивном состоянии и используется только для отображения информации об активном уровне сигнала сброса. Встроенная панель Debug Interface (рис. 13.7) содержит 3 кнопки с зависимой фиксацией, которые предназначены для выбора типа отладочных средств, исполь- зуемых в разрабатываемой микропроцессорной системе. Если в нажатом состоянии зафиксирована кнопка On-chip Debug H/W Module, то в состав разрабатываемой сис- темы будет включен аппаратный отладочный модуль, реализуемый на базе соответ-
ГЛАВА 13 351 ствующих ресурсов ПЛИС. Для того чтобы воспользоваться программными отладоч- ными средствами XMD (Xilinx Microprocessor Debugger), следует нажать кнопку XMD with S/W debug stub. Если не предполагается использовать отладочные средства, то нужно перевести в нажатое состояние кнопку No Debug. Управление использованием кеш-памяти в проектируемой микропроцессорной системе осуществляется с помощью встроенной панели Cache (см. рис. 13.7). Эта па- нель содержит группу кнопок с зависимой фиксацией. По умолчанию в нажатом со- стоянии зафиксирована кнопка No Cache, запрещающая использование кеш-памяти. Для разрешения применения кеш-памяти нужно переключить в нажатое состояние кнопку Enable ОРВ Cache. Кнопка Enable CacheLink предоставляет возможность ис- пользования интерфейса CacheLink. Встроенная панель Local Data and Instruction Memory (см. рис. 13.7) позволяет определить размер памяти команд и данных, которая реализуется на базе ресурсов блочной памяти ПЛИС Block SelectRAM. В данной панели расположено поле выбо- ра, выпадающий список которого содержит возможные значения объема блочной памяти, выделяемой для реализации памяти команд и данных. После выделения тре- буемого значения в предлагаемом списке оно автоматически отображается в поле выбора. Установив необходимые значения всех перечисленных выше параметров, следу- ет перейти к очередной диалоговой панели мастера Base System Builder Wizard, на- жав кнопку Next, находящуюся в нижней части диалоговой панели, представленной на рис. 13.7. Открывшаяся очередная диалоговая панель, вид которой показан на рис. 13.8, предоставляет разработчику возможность выбора устройств ввода/вывода, используемых в составе разрабатываемой системы, и определения их основных па- раметров. Следует обратить внимание на то, что состав списка устройств ввода/вывода, ко- торые представлены в этой диалоговой панели, зависит от конфигурации выбранного инструментального модуля. Например, при выборе отладочной платы из инструмен- тального комплекта Spartan-3 Starter Kit разработчик может использовать в качестве таких устройств последовательный асинхронный приемопередатчик интерфейса RS232 и параллельные порты ввода/вывода. Для включения какого-либо из представленных в диалоговой панели (рис. 13.8) устройств ввода/вывода в состав проектируемой системы, достаточно установить маркер в поле индикатора состояния, который расположен слева от названия этого устройства. Изменение состояния индикатора осуществляется щелчком левой кнопки мыши при расположении курсора в поле этого индикатора. Кнопка Data Sheet, рас- положенная справа от названия каждого устройства ввода/вывода, позволяет опера- тивно получить справочную информацию о параметрах выбранного IP-компонента. Чтобы добавить последовательный асинхронный приемопередатчик в состав разрабатываемой микропроцессорной системы, следует перевести индикатор RS232 в активное состояние, отмеченное маркером. Затем нужно определить значения па- раметров этого устройства, используя соответствующие поля выбора. Поле выбора Peripheral предназначено для выбора типа IP-компонента, выполняющего функции последовательного асинхронного приемопередатчика. Скорость передачи данных для этого устройства задается с помощью поля выбора Baudrate. Кнопка управления, расположенная в правой части этого поля, открывает выпадающий список значений
352 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС скорости передачи (измеряемых в битах в секунду), поддерживаемых выбранным устройством. Для установки количества битов данных, используемых в протоколе передачи, предназначено поле выбора Data Bits, выпадающий список которого со- держит возможные значения этого параметра. Вид контроля передаваемых и прини- маемых данных (четности или нечетности) определяется в поле выбора Parity. Инди- катор состояния Use Interrupt указывает, будет ли данное устройство использовать прерывание. Рис. 13.8. Диалоговая панель выбора устройств ввода/вывода, используемых в составе разрабатываемой системы, и определения их параметров Для включения в состав проектируемой системы параллельного порта вво- да/вывода, управляющего состоянием восьми светодиодных индикаторов, необходи- мо установить в активное состояние индикатор LEDs_8Bit. (рис. 13.8). При этом тип IP-компонента, выполняющего функции параллельного порта ввода/вывода, указы- вается в поле выбора Peripheral. В случае необходимости использования данным устройством прерывания нужно установить индикатор Use Interrupt в состояние «включено».
ГЛАВА 13 353 Чтобы добавить в состав разрабатываемой системы описание параллельного пор- та ввода/вывода, предназначенного для передачи данных в дисплейный модуль, вы- полненный на базе 7-сегментных светодиодных индикаторов, следует переключить в активное состояние индикатор LED SEGMENT (рис. 13.8) и установить требуемые значения параметров Peripheral и Use Interrupt. Выбор основных устройств ввода/вывода завершается нажатием кнопки Next, расположенной в нижней части диалоговой панели, показанной на рис. 13.8. При этом на экран выводится следующая диалоговая панель, которая позволяет включить в состав разрабатываемой микропроцессорной системы ряд дополнительных интер- фейсных устройств. Структура этой диалоговой панели определяется конфигурацией инструментального модуля, выбранного для реализации проектируемой системы. На рис. 13.9 показан вид этой диалоговой панели при использовании отладочной платы из инструментального комплекта Spartan-3 Starter Kit. Рис. 13.9. Диалоговая панель определения дополнительных интерфейсных устройств ввода/вывода, используемых в составе разрабатываемой системы Данный модуль позволяет разработчику включить в состав разрабатываемой системы дополнительно параллельные порты ввода/вывода, предназначенные для считывания состояния кнопок и ползунковых переключателей, расположенных на этой плате. Кроме того, рассматривая диалоговая панель предоставляет возможность 12—2062
354 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС включения в состав проектируемой системы интерфейса, предназначенного для ор- ганизации обмена данными с модулем внешней оперативной памяти с организацией 256 Кбайт х 32 разряда, который расположен на отладочной плате. Выбор дополнительных интерфейсных устройств ввода/вывода и интерфейса внешней памяти осуществляется теми же способами, которые используются и при выборе основных устройств, представленных в диалоговой панели, показанной на рис. 13.8. Очередная диалоговая панель мастера Base System Builder Wizard (рис. 13.10), которая открывается после нажатия кнопки Next, находящейся в нижней части диа- логовой панели, представленной на рис. 13.9, позволяет добавить в состав разрабаты- ваемой системы описание периферийных устройств. Рис. 13.10. Диалоговая панель определения периферийных устройств, используемых в составе разрабатываемой системы Чтобы включить в состав проектируемой системы IP-компоненты соответст- вующих периферийных устройств, следует нажать кнопку Add Peripheral (рис. 13.10). При этом на экран выводится панель выбора, вид которой представлен на рис. 13.11. В этой панели находится поле выбора, выпадающий список которого содержит иден- тификаторы доступных IP-компонентов периферийных устройств. Для включения требуемого IP-компонента в состав разрабатываемой микропроцессорной системы следует в этом выпадающем списке выделить строку, содержащую его обозначение, поместив на нее курсор и щелкнув левой кнопкой мыши. Затем нужно подтвердить сделанный выбор нажатием кнопки ОК, расположенной в нижней части диалоговой панели, представленной на рис. 13.11. После этого в разделе Peripheral диалоговой панели определения периферийных устройств добавляется соответствующая строка.
ГЛАВА 13 355 Выбрав поочередно все необходимые IP-компоненты соответствующих перифе- рийных устройств, следует нажать кнопку Next, находящуюся в нижней части диало- говой панели, представленной на рис. 13.10. Рис. 13.11. Диалоговая панель выбора IP-компонентов периферийных устройств, используемых в составе разрабатываемой системы Открывшаяся очередная диалоговая панель мастера Base System Builder Wizard используется для управления процессом создания тестовой прикладной программы и соответствующего файла директив компоновщика linker script. Вид этой диалоговой панели показан на рис. 13.12. Рис. 13.12. Диалоговая панель управления процессом создания тестовой прикладной программы и файла директив для компоновщика linker script
356 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Для того чтобы мастер Base System Builder Wizard впоследствии автоматически сформировал исходный текст тестовой прикладной программы и соответствующий файл директив компоновщика linker script, необходимо перевести во включенное со- стояние (отмеченное маркером) индикаторы, которые расположены во встроенной панели Sample Application Selection (рис. 13.12). Если необходимо создать програм- му, выполняющую проверку памяти и устройств ввода/вывода, то следует включить индикатор MemoryTest. Для генерации тестовой программы, выполняющей проверку периферийных устройств, нужно перевести во включенное состояние индикатор PeripheralTest. Каждая из этих тестовых программ оформляется в виде отдельного программного проекта (Software Project), который включает в себя также автоматиче- ски сформированный файл директив компоновщика linker script, В этой же диалого- вой панели нужно указать идентификаторы компонентов периферийных устройств, которые будут использоваться в качестве стандартных устройств ввода STDIN и вы- вода STDOUT. Поле выбора STDIN позволяет определить стандартное устройство ввода. Выпадающий список, открываемый с помощью кнопки, расположенной в пра- вой части этого поля выбора, содержит идентификаторы доступных периферийных устройств, которые могут быть задействованы в качестве стандартного устройства ввода. Поле выбора STDOUT предназначено для определения идентификатора ком- понента периферийного устройства, которое будет использоваться в качестве стан- дартного устройства вывода. Состояние указанных полей выбора, представленное на рис. 13.12, соответствует случаю, когда в роли стандартного устройства ввода и вы- вода выступает последовательный асинхронный приемопередатчик интерфейса RS-232. Процедура определения всех параметров, необходимых для формирования ис- ходного текста тестовых программ и соответствующих файлов директив компонов- щика linker script, завершается нажатием кнопки Next, находящейся в нижней части диалоговой панели, представленной на рис. 13.12. После закрытия этой панели на эк- ран выводится следующая диалоговая панель мастера Base System Builder Wizard, вид которой приведен на рис. 13.13. В процессе автоматической генерации файла директив для компоновщика linker script используется информация о выбранных устройствах памяти микропроцессор- ной системы, которые предназначены для хранения инструкций, данных и организа- ции стека соответственно. Эта исходная информация определяется с помощью соот- ветствующих полей выбора, которые расположены в нижней части диалоговой пане- ли, представленной на рис. 13.13. В поле выбора Instructions указывается идентификатор устройства памяти, ис- пользуемого для хранения команд программы. Поле выбора Data позволяет опреде- лить идентификатор устройства памяти, которое отводится под память данных. С помощью поля выбора Stack/Heap осуществляется назначение устройства памяти для организации стека. Если в составе проектируемой микропроцессорной системы не используются внешние (по отношению к ПЛИС) запоминающие устройства, то для хранения инструкций, данных и организации стека может применяться только память, которая реализуется на базе ресурсов блочной памяти ПЛИС Block SelectRAM. Процесс назначения устройств памяти завершается нажатием кнопки Next, находящейся в нижней части этой диалоговой панели (рис. 13.13), после чего на
ГЛАВА 13 357 экране появляется следующая панель мастера В SB Wizard, вид которой показан на рис. 13.14. Рис. 13.13. Диалоговая панель конфигурирования памяти для прикладной тестовой программы Данная панель позволяет осуществить запуск процесса автоматической генера- ции исходных файлов описания для проекта разрабатываемой микропроцессорной системы. Кроме того, в этой диалоговой панели отражаются основные сведения о конфигурации разрабатываемой системы и диапазонах адресного пространства памя- ти, которые выделены для периферийных устройств, включенных в состав специфи- кации аппаратной платформы. Прежде чем активизировать процесс генерации ис- ходных файлов описания для проекта разрабатываемой микропроцессорной системы, необходимо убедиться в достоверности установленных значений всех перечисленных выше параметров. В верхней части диалоговой панели, представленной на рис. 13.14, находится встроенное окно, в котором отображаются следующие сведения о конфигурации про- ектируемой системы: тип используемого микропроцессорного ядра; выбранное значение системной тактовой частоты; информация об используемых инструментах отладки программного обеспечения; объем используемой блочной памяти ПЛИС Block SelectRAM.
358 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Рис. 13.14. Панель запуска процесса автоматической генерации исходных файлов описания для проекта разрабатываемой микропроцессорной системы Информация об адресном пространстве, выделяемом автоматически мастером Base System Builder Wizard для периферийных устройств, которые входят в состав разрабатываемой микропроцессорной системы, отображается в соответствующих встроенных окнах диалоговой панели, показанной на рис. 13.14. Все компоненты разрабатываемой микропроцессорной системы распределены по группам в соответ- ствии с типом шины, к которой они подключены. Информация о компонентах каж- дой из этих групп отображается в табличной форме в отдельном встроенном окне диалоговой панели запуска процесса автоматической генерации исходных файлов для проекта разрабатываемой микропроцессорной системы. Все таблицы, представ- ленные во встроенных окнах этой диалоговой панели, имеют аналогичную структу- ру. Верхняя строка каждой таблицы содержит сведения о названии соответствующей шины и ее типе. В ячейках, образующих первую колонку таблицы - Core Name, ука- зываются названия типов IP-компонентов, входящих в состав микропроцессорной системы и подключенных к соответствующей шине. В ячейках, составляющих вто- рую колонку таблицы - Instance Name, отображаются идентификаторы соответст- вующих экземпляров IP-компонентов. Ячейки, входящие в состав колонки с названи-
ГЛАВА 13 359 ства для соответствующих экземпляров компонентов. В ячейках, которые образуют колонку с названием High Addr, представлены значения, определяющие верхнюю границу адресного пространства, выделяемого для соответствующего компонента. Если какие-либо из значений адресов, установленных автоматически в таблицах, не удовлетворяют требованиям конфигурации адресного пространства разрабатываемой микропроцессорной системы, то эти значения следует изменить после завершения работы мастера Base System Builder Wizard. Процесс редактирования может выпол- няться как в интерактивном, так и в текстовом режиме. Для изменения значений ад- ресов в интерактивном режиме нужно открыть страницу Peripherals панели диалога создания и редактирования спецификации аппаратной платформы проектируемой системы, воспользовавшись командой Add/Edit Cores из всплывающего меню Project управляющей оболочки Xilinx Platform Studio или кнопкой быстрого доступа JSlI на оперативной панели управления. Можно также воспользоваться аналогичной коман- дой из контекстно-зависимого всплывающего меню, отображаемого на экране при щелчке правой кнопкой мыши на строке MHS File, которая находится на странице System встроенного окна проекта разрабатываемой системы, в разделе Project Files. Работа с панелью редактирования спецификации аппаратной платформы проекти- руемой системы подробно рассмотрена в предыдущей главе. Запуск процесса автоматической генерации исходных файлов описания проекти- руемой микропроцессорной системы осуществляется с помощью кнопки Generate, которая расположена в нижней части диалоговой панели, представленной на рис. 13.14. После успешного завершения всех процедур формирования исходных файлов для проекта разрабатываемой системы на экране появляется финишная диа- логовая панель мастера Base System Builder Wizard, вид которой показан на рис. 13.15. В верхней части этой диалоговой панели содержится сообщение о завершении автоматического создания исходных модулей проекта встраиваемой микропроцес- сорной системы и результатах работы мастера Base System Builder Wizard. В цен- тральной части диалоговой панели находится встроенное окно, в котором отобража- ется список всех сформированных файлов проекта разрабатываемой системы. Иден- тификаторы сгенерированных файлов включают в себя полный путь доступа к ним. Мастер Base System Builder Wizard автоматически создает следующие исходные мо- дули проекта разрабатываемой микропроцессорной системы: файл спецификации аппаратной платформы встраиваемой микропроцессорной системы Microprocessor Hardware Specification (MHS); файл спецификации программных средств Microprocessor Software Specification (MSS); файл временных и топологических ограничений проекта аппаратной платформы разрабатываемой микропроцессорной системы (в полном объеме только для ин- струментальных модулей, которые поддерживаются средствами разработки Xilinx EST); файл fastjruntime, opt, содержащий значения параметров для запуска программ р азмещения и трассировки САПР серии Xilinx ISE (ISE BaseX или ISE Foundation) в пакетном режиме; файл директив linker script, который описывает порядок размещения секций в исполняемом файле прикладной тестовой программы; файл, содержащий исходный текст прикладной тестовой программы;
360 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС командный файл download.cmd, предназначенный для управления процессом за- грузки конфигурационной последовательности проекта разрабатываемой микро- процессорной системы в ПЛИС непосредственно из оболочки Xilinx Platform Studio (XPS). C:\Proiect\controller_io\data\controller_io.ucf CAProject\controIler_io\etc\download.cmd C:\Project\controller_io\etc\fast_runtime.opt Puc. 13.15. Диалоговая панель завершения работы мастера Base System Builder Wizard Под встроенным окном расположен индикатор состояния Save Settings File, кото- рый используется для управления сохранением всех значений параметров, установ- ленных в текущем сеансе работы с мастером Base System Builder Wizard. Если этот индикатор находится в состоянии «включено», то все выполненные настройки будут сохранены в файле с расширением bsb. Название этого файла совпадает с идентифи- катором проекта разрабатываемой микропроцессорной системы. Данный файл может использоваться для создания проекта новой системы, конфигурация которой незна- чительно отличается от конфигурации уже разработанной микропроцессорной сис- темы.
ГЛАВА 13 361 Если все указанные выше файлы сформированы успешно, то для завершения ра- боты мастера Base System Builder Wizard следует нажать кнопку Готово, которая на- ходится в нижней части диалоговой панели, представленной на рис. 13.15. В против- ном случае для внесения каких-либо изменений можно вернуться к предыдущим диалоговым панелям, воспользовавшись кнопкой Назад. После закрытия финишной панели диалога мастера Base System Builder Wizard на экран выводится диалоговая панель, которая позволяет выбрать вид дальнейшей работы с новым проектом (рис. 13.16). Рис. 13.16. Диалоговая панель выбора вида дальнейшей работы с новым проектом Эта диалоговая панель содержит 5 кнопок с зависимой фиксацией, каждая из ко- торых определяет содержание следующего шага работы с созданным проектом. Если в нажатом состоянии зафиксирована кнопка Open Add/Edit Cores dialog to Add/Edit HW components, то после закрытия панели выбора (см. рис. 13.16) на экран автомати- чески выводится диалоговая панель создания и редактирования спецификации аппа- ратной платформы проектируемой системы. Эту кнопку следует использовать в том случае, если необходимо включить в состав спецификации MHS дополнительные компоненты, которые не были представлены в диалоговых панелях мастера Base Sys- tem Builder Wizard. При выборе кнопки Configure Drivers and Libraries (SW Platform) открывается диалоговая панель создания и редактирования спецификации программной платформы проектируемой системы. Для того чтобы после завершения работы мастера Base System Builder Wizard приступить непосредственно к загрузке конфигурационной последовательности проекта системы в ПЛИС, следует зафикси- ровать в нажатом состоянии кнопку Download the design to a board and test the design. При этом все промежуточные этапы проектирования, рассмотренные подробно в предыдущей главе, будут выполнены автоматически. Если необходимо внести изме- нения в исходный текст тестовой программы, который был сформирован автомати- чески, то нужно зафиксировать в нажатом состоянии кнопку Edit the test application generated by BSB. Кнопка Start Using Platform Studio используется для передачи управления проектом оболочке XPS. Следует обратить внимание на то, что мастер BSB Wizard автоматически предлагает наиболее подходящий вариант дальнейшей работы с проектом. Так, например, после завершения сеанса работы мастера, пред- ставленного на рис. 13.1-13.15, предлагается открыть диалоговую панель создания и редактирования спецификации программной платформы (в нажатом состоянии нахо- дится кнопка Configure Drivers and Libraries (5W Platform). Переход к следующему этапу работы с проектом осуществляется нажатием кнопки ОК, расположенной в нижней части панели выбора (см. рис. 13.16). Следуя предложенному варианту даль-
362 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС нейшей работы с проектом, откроем диалоговую панель создания и редактирования спецификации программных средств, вид которой показан на рис. 13.17. На странице Processor, Driver Parameters and Interrupt Handlers этой диалоговой панели необходимо изменить значение тактовой частоты для микропроцессорного ядра, установленное по умолчанию равным 100 МГц, на 50 МГц, что соответствует частоте кварцевого генератора, используемого в составе отладочной платы Spartan-3 Starter Kit. Software Platform ЕЖс Processor Parameters Mb-gcc йоДММЬйЯ-д.......... peribher^i [Current Value Software Platform Settings 50000000 Driver ''' dpb^fb''r ГТ»Б_6р^ т ^gpioiLEOJSEGMENT : instance A -rSi cpuДй;й'.8 Рис. 13.17. Вид страницы Processor, Driver Parameters and Interrupt Handlers диалоговой панели создания и редактирования спецификации программных средств проекта разрабатываемой системы после успешного завершения работы мастера Base System Builder Wizard debugjnodule После закрытия диалоговой панели создания и редактирования спецификации программных средств страница System встроенного окна проекта разрабатываемой системы управляющей оболочки Xilinx Platform Studio приобретает вид, показанный на рис. 13.18. Прежде чем приступить к выполнению следующих этапов проектирования, ре- комендуется просмотреть содержимое исходных файлов, сформированных автомати- чески мастером Base System Builder Wizard, и при необходимости внести требуемые изменения значений параметров, используя текстовый редактор или соответствую- щие диалоговые панели. Спецификация аппаратной платформы встраиваемой микропроцессорной систе- мы, подготовленная на основании данных, которые были указанны в интерактивном
ГЛАВА 13 363 режиме с помощью диалоговых панелей, показанных на рис. 13.5-13.10, выглядит следующим образом: # # Created by Base System Builder Wizard for Xilinx EDK 7.1 Build EDK_H.10.4 # #Tue Jul 19 03:24:03 2005 # # Target Board: Xilinx Spartan-3 Starter Board Rev E # Family: spartan3 # Device: XC3S200 # Package: FT256 # Speed Grade: -4 # # Processor: Microblaze # System clock frequency: 50.000000 МГц # Debug interface: On-Chip HW Debug Module # On Chip Memory: 8 KB # #ш№штттшшштттт#штттшжш PARAMETER VERSION = 2.1.0 PORT fpga_0_RS232_RX_pin = fpga_0_RS232_RX, DIR = INPUT PORT fpga_0_RS232_TX_pin = fpga_0_RS232_TX, DIR = OUTPUT PORT fpga_0_LEDs_8Bit_GPIO_d_out_pin = fpga_0_LEDs_8BiLGPlO_d_out, DIR = OUTPUT, VEC = [0:7] PORT fpga_0_LED_7SEGMENT_GPIO_d_out_pin = fpga_0_LED_7SEGMENT_GPIOJ.out, DIR = OUTPUT, VEC = [0:11] PORT fpga_0_DIP_Switches_8Bit_GPIOJn_pin = fpga_0_DIP_Switches_8Bit_GPIOJn, DIR = INPUT, VEC = [0:7] PORT sys_clk_pin = sys_clk_s, DIR = INPUT, SIGIS = CLK PORT sys_rst_pin = sys_rst_s, DIR = INPUT BEGIN microblaze PARAMETER INSTANCE = microblaze.O PARAMETER HW_VER = 4.00.a PARAMETER C_DEBUG_ENABLED = 1 PARAMETER C_NUMBER_OF_PC_BRK = 2 PARAMETER C_NUMBER_OF_RD_ADDR_BRK = 1 PARAMETER C_NUMBER_OF_WR_ADDR_BRK = 1 BUSJNTERFACE DLMB = dlmb BUSJNTERFACE ILMB = ilmb BUSJNTERFACE DOPB = mb.opb BUSJNTERFACE IOPB = mb.opb PORT CLK = sys_clk_s PORT DBG.CAPTURE = DBG_CAPTURE_s PORT DBG_CLK = DBG_CLK_s PORT DBG.REG.EN = DBG_REG_EN_s PORT DBG_TDI = DBG_TDI_s PORT DBG_TDO = DBG_TDO„s PORT DBG.UPDATE = DBG_UPDATE_s END BEGIN opb_v20
364 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС PARAMETER INSTANCE = mb.opb PARAMETER HW„VER = 1.10.C PARAMETER C_EXT_RESET_HIGH = 1 PORT SYS.Rst = sys_rst_s PORT OPB-CIk = sys_clk_s END BEGIN opb_mdm PARAMETER INSTANCE = debug_module PARAMETER HW.VER = 2.00.a PARAMETER C_MB_DBG_PORTS = 1 PARAMETER C_USE_UART = 1 PARAMETER C_UART-WIDTH = 8 PARAMETER C„BASEADDR = 0x41400000 PARAMETER C.HIGHADDR = 0x4140ffff BUS INTERFACE SOPB = mb_opb PORT OPB-Clk = sys_clk_s PORT DBG-CAPTURE-0 = DBG_CAPTURE_s PORT DBG_CLK_0 = DBG_CLK_s PORT DBG_REG_EN-0 = DBG_REG_EN_s PORT DBG-TDL0 = DBG„TDI_s PORT DBG_TDO_0 = DBG_TDO_s PORT DBG-UPDATE-0 = DBGJJPDATE_s END BEGIN lmb_v10 PARAMETER INSTANCE = ilmb PARAMETER HW.VER = 1.00.a PARAMETER C_EXT_RESET_HIGH = 1 PORT SYS.Rst = sys_rst_s PORT LMB.CIk = sys_clk_s END BEGIN lmb_v10 PARAMETER INSTANCE = dlmb PARAMETER HW_VER = 1.00.a PARAMETER C-EXT_RESET_HIGH = 1 PORT SYS_Rst = sys_rst„s PORT LMB_Clk = sys_clk_s END BEGIN lmb_bramjf_cntlr PARAMETER INSTANCE = dlmb„cntlr PARAMETER HW_VER = 1.00.b PARAMETER C_BASEADDR = 0x00000000 PARAMETER C.HIGHADDR = 0x00001 fff BUSJNTERFACE SLMB = dlmb BUSJNTERFACE BRAM.PORT = dlmb_port END BEGIN lmb_bram_if_cntlr PARAMETER INSTANCE = ilmb_cntlr PARAMETER HW.VER = 1.00.b PARAMETER C.BASEADDR = 0x00000000 PARAMETER C.HIGHADDR = 0x00001 fff
ГЛАВА 13 365 BUSJNTERFACE SLMB = ilmb BUSJNTERFACE BRAM.PORT = ilmb_port END BEGIN bram.block PARAMETER INSTANCE = Imb.bram PARAMETER HW.VER = 1.00.a BUSJNTERFACE PORTA = ilmb_port BUSJNTERFACE PORTB = dlmb_port END BEGIN opbjjartlite PARAMETER INSTANCE = RS232 PARAMETER HW.VER = 1.00.b PARAMETER C.BAUDRATE = 9600 PARAMETER C.DATA.BITS = 8 PARAMETER C.ODD.PARITY = 0 PARAMETER C.USE.PARITY = 0 PARAMETER C.CLK.FREQ = 50000000 PARAMETER C.BASEADDR = 0x40600000 PARAMETER C.HIGHADDR = 0x4060ffff BUSJNTERFACE SOPB = mb.opb PORT OPB.CIk = sys.clk.s PORT RX = fpga_0.RS232_RX PORT TX = fpga_0_RS232_TX END BEGIN opb_gpio PARAMETER INSTANCE = LEDs_8Bit PARAMETER HW.VER = 3.01 ,b PARAMETER C.GPIO.WIDTH = 8 PARAMETER C_IS_DUAL = 0 PARAMETER C.IS.BIDIR = 0 PARAMETER C.ALLJNPUTS = 0 PARAMETER C.BASEADDR = 0x40000000 PARAMETER C.HIGHADDR = 0x4000ffff BUS.INTERFACE SOPB = mb.opb PORT OPB.CIk = sys.clk.s PORT GPIO.d.out = fpga.O_LEDs_8Bit_GPlO„d.out END BEGIN opb.gpio PARAMETER INSTANCE = LED.7SEGMENT PARAMETER HW.VER = 3.01.b PARAMETER C.GPIO.WIDTH = 12 PARAMETER C.lS_DUAL = 0 PARAMETER C.IS.BIDIR = 0 PARAMETER C.ALLJNPUTS = 0 PARAMETER C.BASEADDR = 0x40020000 PARAMETER C.HIGHADDR = 0x4002ffff BUS-INTERFACE SOPB = mb.opb PORT OPB.CIk = sys.clk.s PORT GPIO.d.out - fpga.O_LED_7SEGMENT_GPIO_d_out END
366 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС BEGIN opb_gpio PARAMETER INSTANCE = DIP_Switches_8Bit PARAMETER HW.VER = 3.01 .b PARAMETER C_GPIO_WIDTH = 8 PARAMETER CJS.DUAL = 0 PARAMETER C.IS.BIDIR = 0 PARAMETER C.ALLJNPUTS = 1 PARAMETER C.BASEADDR = 0x40040000 PARAMETER C.HIGHADDR = 0x4004ffff BUS-INTERFACE SOPB = mb.opb PORT OPB.CIk = sys.clk.s PORT GPIOJn = fpga_O_DIP_Switches JBit_GPIO_in END ; S ® System BSP Ж Ж В ® micr°blaze_0 Ж ...• Driver: cpu_v1-00_a /Ц ® ®1 HDL Ж : j- • Debug Peripheral: debug_module Ж F i I • OS: $tandalone_v1_00_a Ж.Й : Щ Generated Header: microblaze_0/include/xparameters.h Ж Ж S- *)«_ mb opb debug_module V ® < ilmb Ж ’ dlmb •; \ : dlmb_cntlr s ilmb_cntlr J . Ltl S lmb_bram B®RS232 : J 5 S ® LEDs„8Bit .Ж В ® LED ./SEGMENT ' Ж S S DIP_Switches_8Bit ; ЖЕ-®) ProjectFiles ;; Ж - ll MHS File: controllerJo.mhs : ‘ - § MSS File: cont roll erjo.mss Ц) PBD File: controlleno.pbd • D UCF File: data\controller_io.ucf ; 'D iMPACT Command File: etc\download.cmd лЖ L (i Implementation Options File: etc\fa$t_runtime,opt : Вitgen Options File: etc\bitgen_spartan3.ut $ Й"'Ё=Т Project Options :Ж:Ж : ” • Device: xc3s200f1256-4 ; Netlist TopLevel ti §5 • Implementation: XPS O= HDL VHDL 11 ; Ж.* Sim Model: BEHAVIORAL £ § E~®1 Reference Files > 5 ф -®1 Log Files Ё1 ®| Report Files Puc. 13.18. Вид страницы System встроенного окна проекта разрабатываемой системы управляющей оболочки Xilinx Platform Studio после успешного завершения работы мастера Base System Builder Wizard
ГЛАВА 13 367 Файл спецификации программных средств для проектируемой системы, сформи- рованный автоматически мастером Base System Builder Wizard в соответствии с теми значениями параметров, которые были установлены в диалоговых панелях, пред- ставленных на рис. 13.5-13.10, 13.17, содержит следующий текст: PARAMETER VERSION = 2.2.0 BEGIN OS PARAMETER OS.NAME = standalone PARAMETER OS.VER - 1.00.a PARAMETER PROCJNSTANCE = microblaze.O PARAMETER STDIN = RS232 PARAMETER STDOUT = RS232 END BEGIN PROCESSOR PARAMETER DRIVER-NAME = cpu PARAMETER DRIVER.VER = 1.00.a PARAMETER HWJNSTANCE = microblaze-0 PARAMETER COMPILER = mb-gcc PARAMETER ARCHIVER = mb-ar PARAMETER XMDSTUB.PERIPHERAL = debugjnodule END BEGIN DRIVER PARAMETER DRIVER-NAME = opbarb PARAMETER DRIVER.VER = 1.02.a PARAMETER HWJNSTANCE = mb_opb END BEGIN DRIVER PARAMETER DRIVER-NAME = uartlite PARAMETER DRIVER.VER = 1.00.b PARAMETER HWJNSTANCE = debug-module END BEGIN DRIVER PARAMETER DRIVER-NAME = bram PARAMETER DRIVER.VER = 1.00.a PARAMETER HWJNSTANCE = dlmb.cntlr END BEGIN DRIVER PARAMETER DRIVER-NAME = bram PARAMETER DRIVER.VER = 1.00.a PARAMETER HWJNSTANCE = ilmb.cntlr END BEGIN DRIVER PARAMETER DRIVER.NAME = uartlite PARAMETER DRIVER.VER = 1 .OO.b PARAMETER HWJNSTANCE = RS232 END BEGIN DRIVER PARAMETER DRIVER-NAME = gpio PARAMETER DRIVER.VER = 2.00.a PARAMETER HWJNSTANCE = LEDs_8Bit
368 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС END BEGIN DRIVER PARAMETER DRIVER.NAME = gpio PARAMETER DRIVER.VER = 2.00.a PARAMETER HWJNSTANCE = LED.7SEGMENT END BEGIN DRIVER PARAMETER DRIVER.NAME = gpio PARAMETER DRIVER.VER = 2.00.a PARAMETER HW.INSTANCE = DIP_Switches_8Bit END Файл временных и топологических ограничений для проекта аппаратной плат- формы разрабатываемой микропроцессорной системы, который соответствует кон- фигурации выбранного инструментального модуля - Spartan-3 Starter Kit, содержит следующие выражения: # This system.ucf file is generated by Base System Builder based on the # # settings in the selected Xilinx Board Definition file. Please add other # # user constraints to this file based on customer design specifications. # n XL XL1L1X XL XL XL XL 41JXXL 11 XL IL IL XL XL XX XL 11 XL XL XL 11 XL XL XL XL XX XL Jill XL IL XL XL IL XX XIXI XL XLU1L1L XL XL IX XL XIXI XLHXL 1L1L1L XL 11» XL XL IL XL Net sys_clk_pin LOC=T9; Net sys_rst_pin LOC=I14; # # System level constraints Net sys_clk_pin PERIOD = 20000 ps; Net sys.rst.pin TIG; # # FPGA pin constraints Net fpga.0_RS232_RX.pin L0C=t13; Net fpga_0_RS232„TX_pin L0C=r13; Net fpga_0_LEDs_8Bit_GPIO_d_out_pin<0> L0C=k12; Net fpga_0_LEDs_8Bit_GPIO_d_out_pin<1> LOC=p14; Net fpga_0_LEDs_8Bit_GPIO_d_out_pin<2> LOC=I12; Net fpga_0_LEDs_8Bit_GPIO_d_out_pin<3> LOC=n14; Net fpga.O_LEDs_8Bit_GPIO_d_out_pin<4> LOC=p13; Net fpga.O_LEDs_8Bit_GPIO_d_out_pin<5> LOC=n12; Net fpga_0_LEDs_8Bit_GPIO_d_out.pin<6> LOC=p12; Net fpga_0_LEDs_8Bit_GPIO_d_out_pin<7> L0C=p11; Net fpga_0_LED_7SEGMENT_GPIO_d_out_pin<0> LOC=e14; Net fpga_0_LED_7SEGMENT_GPIO_d_out_pin<1> LOC=g13; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<2> LOC=n15; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<3> L0C=p15; Net fpga_0_LED_7SEGMENT_GPIO_d_out_pin<4> L0C=r16; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<5> L0C=f13; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<6> LOC=n16; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<7> L0C=p16; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<8> LOC=d14; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<9> L0C=g14; Net fpga_0_LED_7SEGMENT.GPIO_d_out_pin<10> LOC=f 14; Net fpga.O_LED_7SEGMENT_GPIO_d_out_pin<11> LOC=e13; Net fpga_0_DIP_Switches_8Bit_GPIOJn_pin<0> L0C=k13;
ГЛАВА 13 369 Net fpga_0_DIP_Switches_8Bit_GP!OJn_pin<1> L0C=k14; Net fpga_0_DIP_Switches„8Bit_GPIO_in_pin<2> L0C=j13; Net fpga_0_DIP_Switches_8BiLGPIOJn_pin<3> L0C=j14; Net fpga_0_DIP_Switches_8Bit_GPIOJn_pin<4> L0C=h13; Net fpga_0_DIP_Switches_8Bit_GPIO_in_pin<5> L0C=h14; Net fpga_0„DIP_Switches_8Bit_GPIOJn_pin<6> L0C=g12; Net fpga„0_DIP_Switches_8Bit_GPIOJn„pin<7> LOC=f 12; Исходный текст тестовой прикладной программы TestApp_Memory.c, подготов- ленный мастером Base System Builder Wizard на основе сведений о конфигурации ин- струментального модуля, выбранного для реализации разрабатываемой микропро- цессорной системы, выглядит следующим образом: /* * Xilinx EDK 7.1 EDKJH.10.4 * * This file is a sample test application * * This application is intended to test and/or illustrate some * functionality of your system. The contents of this file may * vary depending on the IP in your system and may use existing * IP driver functions. These drivers will be generated in your * XPS project when you run the «Generate Libraries» menu item * in XPS. * * Your XPS project directory is at: * C:\Project\controller_io 7 // Located in: microblaze_0/inciude/xparameters.h include «xparameters.h» include «xutil.h» include «xgpioj.h» /* * Routine to write a pattern out to a GPIO * which is configured as an output * PARAMETER C_ALLJNPUTS = O 7 void WriteToGPOutput(Xuint32 BaseAddress, int gpio_width) { int i=0, j=0; volatile int delayed; int numTimes = 5; XGpio_mSetDataDirection(BaseAddress, 1,0x00000000); /* Set as outputs 7 while (numTimes > 0) { j = 1; for(i=0; i<(gpio_width-1); i++) { XGpiojnSetDataReg(BaseAddress, 1, j); j=j«i; for (delay=0; delayd 000000; delay++) { ; //wait
370 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС i = i; i = ~i; for(i=0; i<(gpio_width-1); i++) { XGpio_mSetDataReg(BaseAddress, 1, j); j=j«1; for (delay=0; delay<1000000; delay++) { ; //wait } } numTimes--; } } /* * Routine to read data from a GPIO * which is configured as an input * PARAMETER C_ALLJNPUTS = 1 7 Xuint32 ReadFromGPInput(Xuint32 BaseAddress) { Xuint32 data = XGpio_mGetDataReg(BaseAddress, 1); return data; } //===================================:==:=:==:============ int main (void) { print(«-- Entering main() --\r\n»); /* * MemoryTest routine will not be run for the memory at * 0x00000000 (dlmb.cntlr) * because it is being used to hold a part of this application program 7 WriteToGPOutput(XPAR_LEDS_8BIT_BASEADDR, 8); WriteToGPOutput(XPAR_LED J/SEGMENT-BASEADDR, 12); { Xuint32 data = ReadFromGPInput(XPAR_DIP_SWITCHES_8BIT_BASEADDR); xil_printf(«Data read from DlP_Switches_8Bit: Ox %x\r\n», data); } print{«— Exiting main() -\r\n»); return 0; Тестовая программа TestAppMemory выполняет проверку функционирования всех устройств ввода/вывода, которые были включены в состав проектируемой сис- темы. В начале файла TestApp_Memory.c, в форме комментариев, приведены краткие сведения о сформированной программе. Затем следуют директивы включения необ- ходимых заголовочных файлов. После этого определяется функция WriteToGP Output, которая выполняет запись данных в параллельный порт ввода/вывода, и функция ReadFromGPInput, которая осуществляет чтение данных из параллельного порта вво- да/вывода. Далее расположен исходный текст основной программы main. Исходный файл тестовой программы, создаваемый автоматически мастером Base System Builder Wizard, может использоваться в качестве шаблона в процессе разра- ботки оригинальных пользовательских прикладных программ. Для того чтобы до-
ГЛАВА 13 371 полнить сформированный исходный текст прикладной программы требуемыми опе- раторами, следует открыть данный файл в интегрированном текстовом редакторе управляющей оболочки XPS. При этом следует помнить, что все внесенные измене- ния в исходный текст прикладной программы вступают в силу только после сохране- ния файла на диске с помощью команд Save или Save As. При использовании для реализации проектируемой системы инструментальных плат, конфигурация которых определяется разработчиком, процесс подготовки моду- лей исходного описания с помощью мастера В SB Wizard имеет несколько незначи- тельных отличий. Во-первых, диалоговая панель включения устройств ввода/вывода в состав разрабатываемой системы при первом ее открытии не содержит информации о соответствующих доступных IP-компонентах (рис. 13.19). Рис. 13.19. Вид диалоговой панели включения устройств ввода/вывода в состав разрабатываемой системы при использовании отладочных плат с произвольной конфигурацией Для того чтобы включить в состав спецификации аппаратных средств проекти- руемой системы интерфейсное устройство, следует воспользоваться кнопкой Add Device, расположенной в верхней части этой диалоговой панели. При этом на экран выводится диалоговая панель выбора устройства ввода/вывода, вид которой показан на рис. 13.20. В данной диалоговой панели нужно вначале определить тип интерфейса вво- да/вывода, используя поле выбора Interface Туре, после чего в поле выбора/редакти- рования Device указать соответствующее название устройства. После подтверждения типа и названия выбранного устройства ввода/вывода нажатием кнопки ОК (рис. 13.20) в диалоговой панели, представленной на рис. 13.19, автоматически ото-
372 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС бражается информация о параметрах этого устройства. При необходимости следует установить требуемые значения параметров используемого устройства ввода/вывода теми же способами, которые применялись и при использовании серийно выпускае- мых отладочных плат. Рис. 13.20. Вид диалоговой панели выбора устройств ввода/вывода Второе отличие в работе мастера В SB Wizard проявляется в формировании фай- ла временных и топологических ограничений. Так как информация о подключении выводов ПЛИС на используемой плате отсутствует, то фактически создается шаблон файла UCF. В этом шаблоне содержатся все необходимые выражения ограничений, но отсутствуют номера выводов ПЛИС. Чтобы дополнить сформированный шаблон данными о привязке внешних интерфейсных цепей проектируемой системы к выво- дам ПЛИС, нужно воспользоваться интегрированным текстовым редактором управляющей оболочки XPS. 13.3. Формирование конфигурационной последовательности для проекта аппаратной части разрабатываемой 32-разрядной микропроцессорной системы Дальнейший процесс разработки аппаратной части проектируемой 32-разрядной микропроцессорной системы включает в себя последовательное выполнение сле- дующих этапов: формирование списка соединений аппаратной платформы встраиваемой микро- процессорной системы; реализация (Implementation) проекта аппаратной части встраиваемой микропро- цессорной системы; генерация конфигурационной последовательности ПЛИС. В предыдущей главе подробно рассмотрены процедуры выполнения каждого из перечисленных выше этапов. Для ускорения процесса разработки можно сразу акти- визировать процедуру генерации конфигурационной последовательности ПЛИС, не выполняя предшествующих этапов. Перед этим необходимо при установке парамет- ров проекта EDK с помощью группы кнопок с зависимой фиксацией Implementation Tool Flow выбрать управление процессом реализации проекта разрабатываемой сис- темы непосредственно из оболочки Xilinx Platform Studio (XPS). Чтобы приступить к формированию конфигурационной последовательности ПЛИС для аппаратной части разрабатываемой системы, следует выбрать команду Generate Bitstream из всплы- вающего меню Tools или нажать кнопку iBl на оперативной панели управления XPS. Далее все необходимые процедуры выполняются в автоматическом режиме,
ГЛАВА 13 373 включая все пропущенные этапы разработки. При этом необходимо обратить внима- ние на информационные сообщения соответствующих программ, которые выводятся на странице Output встроенного окна консольных сообщений XPS, а также на преду- преждения и сообщения об ошибках на страницах Warnings и Errors соответственно. При отсутствии ошибок после успешного создания файла конфигурационной после- довательности ПЛИС можно перейти к разработке программного обеспечения для проектируемой микропроцессорной системы. 13.4. Создание программного обеспечения для разрабатываемой 32-разрядной микропроцессорной системы После успешного создания мастером Base System Builder Wizard спецификации программной платформы встраиваемой микропроцессорной системы, проекта тесто- вой прикладной программы (Software project) и файла директив компоновщика (linker script) для завершения разработки программного обеспечения необходимо выполнить следующие процедуры: генерацию драйверов и библиотек; компиляцию и компоновку прикладной тестовой программы. Последовательный запуск и выполнение этих процедур детально рассмотрены в предыдущей главе. Чтобы ускорить процесс формирования программного обеспече- ния для разрабатываемой микропроцессорной системы, можно сразу инициировать процесс генерации исполняемого кода прикладной тестовой программы. Для этого необходимо в основном меню управляющей оболочки Xilinx Platform Studio выде- лить пункт Tools, после чего в открывшемся всплывающем меню выбрать команду Build All User Applications или воспользоваться кнопкой быстрого доступа рас- положенной на оперативной панели управления XPS. При этом перед выполнением компиляции и компоновки прикладной тестовой программы автоматически осущест- вляется генерация драйверов и библиотек в соответствии со спецификацией про- граммной платформы. Информация о ходе выполнения все перечисленных выше процедур и их резуль- татах отражается на странице Output встроенного окна консольных сообщений управляющей оболочки XPS. При этом необходимо убедиться в отсутствии ошибок, сведения о которых выводятся на странице Errors. В результате успешного заверше- ния процедур компиляции и компоновки создается файл executable, elf, который со- держит исполняемый код тестовой программы. 13.5. Включение исполняемого кода прикладной программы в конфигурационную последовательность проекта аппаратной части микропроцессорной системы и загрузка конфигурационных данных в кристалл FPGA Заключительными этапами процесса разработки встраиваемой микропроцессор- ной системы на основе ПЛИС с архитектурой FPGA фирмы Xilinx являются: запись исполняемого кода прикладной программы в конфигурационную после- довательность проекта аппаратной части микропроцессорной системы; загрузка конфигурационных данных в кристалл. Для дополнения конфигурационной последовательности ПЛИС, реализующей функции аппаратной части микропроцессорной системы, описанием содержимого
374 Зотов В. Ю, Проектирование встраиваемых микропроцессорных систем на основе ПЛИС программной памяти, соответствующего исполняемому коду прикладной тестовой программы, следует выполнить команду Update Bitstream из всплывающего меню Tools или нажать кнопку быстрого доступа jflll, которая находится на оперативной панели управления XPS. Обновленная конфигурационная последовательность запи- сывается в файл downloading который может непосредственно использоваться для конфигурирования кристалла FPGA. Автоматическое формирование мастером Base System Builder Wizard командного файла download.cmd позволяет осуществлять процесс загрузки конфигурационных данных в ПЛИС в пакетном режиме непосредственно из управляющей оболочки XPS. Чтобы выполнить конфигурирование кристалла FPGA для реализации функций разработанной микропроцессорной системы, необходимо подключить загрузочный кабель к порту JTAG-интерфейса ПЛИС и затем выполнить команду Download из всплывающего меню Tools или нажать кнопку быстрого доступа ЙМ, расположен- ную на оперативной панели управления XPS. Проверка функционирования создан- ной микропроцессорной системы производится с помощью тестовой программы пу- тем визуального контроля состояния светодиодных индикаторов и сообщений, ото- бражаемых на экране монитора компьютера в рабочем окне программы HyperTermi- nal. Порядок сопряжения компьютера и отладочной платы из инструментального комплекта Spartan-3 Starter Kit, а также настройка параметров подключения про- граммы HyperTerminal и протокола передачи данных детально рассмотрены в преды- дущей главе. Представленный выше материал наглядно демонстрирует преимущества исполь- зования мастера Base System Builder Wizard по сравнению с обычным способом под- готовки исходных файлов описания разрабатываемой системы.
14. АППАРАТНЫЕ СРЕДСТВА РАЗРАБОТКИ ВСТРАИВАЕМЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА СНОВЕ ПЛИС ФИРМЫ XILINX Для эффективного изучения сквозного проектирования встраиваемых микропро- цессорных систем на основе ядер семейств PicoBlaze и MicroBlaze рекомендуется воспользоваться серийно выпускаемыми универсальными инструментальными моду- лями, выполненными на основе ПЛИС семейств CPLD (Complex Programmable Logic Device) и FPGA (Field Programmable Gate Array). Процесс изготовления аппаратной части требует дополнительных временных затрат. Использование готовых инстру- ментальных средств позволяет не только ускорить процесс аппаратной реализации, но и избежать ошибок, вносимых при изготовлении печатной платы и монтаже ком- понентов. В настоящей главе приводится описание основных характеристик, струк- туры и функциональных возможностей недорогих отладочных плат, которые могут применяться как в процессе изучения основ проектирования встраиваемых микро- процессорных систем, так и в дальнейшей практической работе. В настоящей главе рассматриваются особенности инструментальных комплектов CoolRunner-II Design Kit™ и Spartan-3 Starter Kit™, а также приводится информация, необходимая в процессе их практического использования. 14.1. Инструментальный комплект CoolRunner-ll Design Kit 14.1.1. Назначение и основные характеристики инструментального комплекта CoolRunner-ll Design Kit Инструментальный комплект CoolRunner-II Design Kit, производимый фирмой Digilent Inc®, предназначен для практического изучения методов проектирования цифровых устройств и систем на основе ПЛИС семейств CPLD фирмы Xilinx и по- следующего программирования кристаллов. В дальнейшей работе инструментальный модуль может применяться в качестве отладочной платы. Использование аппаратно- го модуля позволяет параллельно проводить отладку проекта, реализуемого на осно- ве ПЛИС, и разработку печатной платы создаваемого устройства, что в конечном итоге позволяет значительно сократить общее время разработки. Фирмой Digilent Inc выпускается несколько конфигураций (версий) инструмен- тального комплекта CoolRunner-II Design Kit. В настоящей главе будут представлены два варианта этого комплекта. Первый вариант включает в себя инструментальный модуль Digilab ХС2, который содержит только ПЛИС ХС2С256 и интегрированную схему загрузочного кабеля. Во втором (более позднем) варианте используется отла- дочная плата Digilab XC2-XL, на которой помимо ПЛИС ХС2С256 установлен кри- сталл XC9572XL-10 в корпусе VQFP44, и автономный загрузочный JTAG-кабель Digilent JTAG3. В состав комплекта CoolRunner-II Design Kit входят: инструментальный модуль Digilab ХС2 или Digilab XC2-XL; кабель для подключения платы к параллельному порту компьютера (только для модуля Digilab ХС2); параллельный загрузочный кабель Digilent JTAG3 (только для модуля Digilab XC2-XL);
376 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС адаптер для подключения батареи питания, составленной из двух элементов типа АА; компакт-диск с новой версией системы проектирования ISE WebPACK, работа с которой подробно рассмотрена в [1]; CD-ROM, содержащий примеры тестовых проектов и информационно-справоч- ные материалы. Характерными особенностями отладочной платы Digilab ХС2 (Digilab XC2-XL) являются: использование ПЛИС ХС2С256 из семейства CoolRunner-II в корпусе TQFP144, обладающей достаточным количеством ресурсов и пользовательских выводов для реализации проектов средней сложности; наличие контактных площадок для подключения дополнительного кристалла из семейства CoolRunner-II или XC9500XL в корпусе VQFP44, позволяющего рас- ширить функциональные возможности модуля (только на плате Digilab ХС2); 11 линий, напрямую соединяющих пользовательские выводы кристаллов и тем самым предоставляющих возможность организации высокоскоростного обмена данными между ПЛИС, которые используются в инструментальном модуле (только на плате Digilab ХС2); переключаемая схема распределения сигналов JTAG-интерфейса, позволяющая реализовать режимы раздельного и совместного программирования ПЛИС в со- ставе цепочки периферийного сканирования; и применение интегрированной схемы загрузочного кабеля JTAG-интерфейса в со- ставе модуля, предоставляющей возможность выполнения операций программи- рования кристаллов и обратного считывания конфигурационных данных через параллельный порт компьютера с помощью обычного параллельного кабеля, ис- пользуемого для связи двух ПК (только на плате Digilab ХС2); наличие специального разъема JTAG-интерфейса, обеспечивающего возмож- ность применения для записи и обратного считывания конфигурационной после- довательности унифицированных загрузочных кабелей различного типа (только на плате Digilab ХС2); использование гибкой схемы подачи питания, обеспечивающей реализацию различных режимов работы для блоков ввода/вывода кристалла ХС2С256; полная разводка всех пользовательских выводов ПЛИС к контактным отверсти- ям, предназначенным для подключения дополнительных разъемов расширения на плате Digilab ХС2, или непосредственно к контактам разъемов расширения платы Digilab XC2-XL; возможность замены кварцевого генератора, который применяется для формиро- вания внешнего тактового сигнала ПЛИС, позволяющая выполнять на основе инструментального модуля проекты с частотами синхронизации в диапазоне от 32 кГц до 120 МГц (изначально на плате установлен кварцевый генератор с час- тотой 1,8432 МГц); наличие монтажного поля, выполненного в виде массива размерностью 18 х 46 отверстий с шагом 0,1 ” , предоставляющего широкие возможности для разме- щения «внешних» элементов проектируемого устройства;
ГЛАВА 14 377 возможность подключения к последовательному порту компьютера через разъем параллельного порта модуля, используемый для программирования кристаллов (только на плате Digilab ХС2); применение светодиодных индикаторов для визуального контроля напряжения питания и функционирования разрабатываемого устройства; наличие кнопки, подключенной к специальным выводам ПЛИС, обеспечиваю- щей возможность реализации некоторых функций «ручного» управления, на- пример, сброса устройства; габаритные размеры печатной платы инструментального модуля, составляющие 133 х 133 мм; полная совместимость со всем спектром средств проектирования и программи- рования серии Xilinx ISE (ISE WebPACK, ISE BaseX и ISE Foundation). 14.1.2. Структура инструментального модуля Digilab XC2 (Digilab XC2-XL) Внешний вид отладочных модулей Digilab ХС2 и Digilab XC2-XL отличается незна- чительно. В качестве примера, на рис. 14.1 показан вид инструментального модуля Digilab XC2-XL. Компоненты модулей смонтированы на 4-слойной печатной плате. Рис. 14.1. Внешний вид инструментального модуля Digilab XC2-XL
378 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Структурная схема рассматриваемых вариантов инструментального модуля по- казана на рис. 14.2. Блок загрузки конфигурационных данных Кнопка Кварцевый генератор Светодиодный । индикатор L Схема управления питанием ПЛИС семейства CoolRunner-II ХС2С256 в корпусе TQ144 Разъем А Разъем С Разъем □ Светодиодный индикатор Рис. 14.2. Структурная схема инструментального модуля Digilab ХС2 (Digilab XC2-XL) ПЛИСсемейства CoolRunner-II или XC9500XL в корпусе VQ44 Разъем В Основными элементами структуры модуля Digilab ХС2 (Digilab XC2-XL) яв- ляются: ПЛИС ХС2С256 семейства CoolRunner-II в корпусе TQFP144, на основе которой реализуется проектируемое устройство; • дополнительная ПЛИС XC9572XL семейства XC9500XL в корпусе VQFP44 (только для модуля Digilab XC2-XL); кварцевый генератор, предназначенный для формирования сигнала синхронизации; схема управления питанием; блок загрузки конфигурационных данных; элементы индикации и управления; разъемы расширения (только для модуля Digilab XC2-XL). Кроме перечисленных элементов, в структуру модуля Digilab ХС2 могут входить дополнительные компоненты, которые устанавливаются пользователем: ПЛИС семейства CoolRunner-II или XC9500XL в корпусе VQFP44; четыре 2-рядных 40-контактных разъема расширения. На структурной схеме (рис. 14.2) элементы, наличие которых зависит от версии инструментального модуля, показаны штриховыми линиями. Функциональные возможности используемых кристаллов рассматриваются далее в разделе, представляющем технические характеристики ПЛИС семейства Cool- Runner-IL Все пользовательские выводы кристаллов, установленных на плате инет-
ГЛАВА 14 379 рументального модуля, подключены к контактным отверстиям, предназначенным для установки 2-рядных 40-контактных штыревых разъемов (в модуле Digilab ХС2), или непосредственно к контактам разъемов расширения (в модуле Digilab XC2-XL). Та- кое решение позволяет выполнить коммутацию входов и выходов устройства, реали- зованного на базе ПЛИС, с компонентами, которые установлены на монтажном поле, и внешними цепями с помощью ленточных кабелей. Кроме того, в модуле Digilab ХС2 три пользовательских контакта кристалла ХС2С256 подключены непосредст- венно к выводам разъема DB-25 (В 14 - В16), который прежде всего предназначен для загрузки конфигурационных данных в ПЛИС и обратного считывания конфигураци- онных данных из кристалла. Тем самым разработчику предоставляется возможность организации обмена данными проектируемого устройства с последовательным пор- том компьютера через разъем DB-25. Для наглядности на рис. 14.3, 14.4 приведены схемы разводки пользовательских выводов ПЛИС инструментальных модулей Digilab ХС2 и Digilab XC2-XL соответственно. О о]. ПЛИСсемейства CoolRunner-II или XC9600XL в корпусе VQ44 11. ПЛИС семейства CoolRunner-II ХС2С256 в корпусе TQ144 Разъем В Рис. 14.3. Схема разводки пользовательских выводов кристаллов инструментального модуля Digilab ХС2 Тактовый сигнал, формируемый кварцевым генератором, подается на контакты GCK2 кристаллов (соответственно на вывод 38 для корпуса TQFP144 и на вывод 1 для корпуса VQFP44). Такое подключение обеспечивает возможность применения внутреннего делителя частоты ПЛИС семейства CoolRunner-II для получения сетки внутренних тактовых частот и методики CoolCLOCK для снижения потребляемой мощности. Для изменения частоты внешнего тактового сигнала ПЛИС достаточно извлечь ИС кварцевого генератора из панели и установить на ее место однотипный элемент с требуемым номиналом. Эта операция должна выполняться только при вы- ключенном питании инструментального модуля и строгом соблюдении назначения выводов устанавливаемой ИС.
380 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Рис. 14.4. Схема разводки пользовательских выводов ПЛИС инструментального модуля Digilab XC2-XL Схема управления питанием включает в себя 3 разъема для подключения раз- личных источников, коммутационные перемычки (Jumpers) JP1 - JP4, используемые для выбора режима, и два DC/DC-преобразователя, формирующих напряжения пита- ния ядра и блоков ввода/вывода ПЛИС (рис. 14.5, 14.6). Более подробно возможные режимы питания ПЛИС в инструментальных модулях Digilab ХС2 и Digilab XC2-XL рассматриваются в следующем разделе. EXT INT —faal jpi |Н ИМИ JP2 [я'ИИИИ JP3 ! JP4 Battery mode EXT INT L<L^M JP1 JP2 |и|ЙИ JP3 | В В— JP4 Transformer mode EXT INT 1”1Г~1 JP1 И—И |щ| JP3 —"a] JP4 EXT INT |иИШ JP1 LOMU jp2 I a HMM JP3 JP4 External mode Transformer mode with external V|Q2 Puc. 14.5. Схема управления питанием инструментального модуля Digilab ХС2
ГЛАВА 14 381 Bat Vreg [m jp2 JP3 jp4 Battery mode Bat Vreg ЕЛН JP2 JP3 [^B JP4 Wall-plug mode Bat Vreg № JP2 JP3 MS JP4 External mode Puc. 14.6. Схема управления питанием инструментального модуля Digilab XC2-XL Блок загрузки конфигурационных данных инструментального модуля Digilab ХС2 содержит встроенную схему загрузочного кабеля JTAG-интерфейса, переклю- чаемые перемычки JP5, JP6, позволяющие изменять состав цепочки ПЛИС, доступ- ных для программирования, разъем DB-25, предназначенный для подключения ин- тегрированной схемы загрузочного кабеля к параллельному порту компьютера, и специализированный разъем JTAG-интерфейса, предоставляющий возможность использования внешних унифицированных загрузочных кабелей. К этому разъему может быть подключен любой из загрузочных кабелей, поддерживаемых средствами программирования iMPACT САПР серии Xilinx ISE. В инструментальном модуле Digilab XC2-XL блок загрузки конфигурационных данных включает только разъем для подключения загрузочного кабеля JTAG- интерфейса Digilent JTAG3 и коммутационные перемычки JP5, JP6, предназначенные для изменения состава цепочки периферийного сканирования ПЛИС. Светодиодный индикатор, подключенный через резистор к выводу 92 кристалла ХС2С256, может использоваться в разрабатываемых проектах как элемент индика- ции. В модуле Digilab XC2-XL для этих же целей служит дополнительный светоди- одный индикатор, сопряженный с выводом 44 ПЛИС XC9572XL. Кроме того, в со- став рассматриваемых модулей входит еще один светодиодный индикатор, состояние которого указывает на отсутствие или наличие питающего напряжения (только при установке перемычки JP1 в положении INT в модуле Digilab ХС2). Подключение кнопки к контактам GSR обоих ПЛИС позволяет использовать ее для общего сброса проектируемой системы. Если эта кнопка должна выполнять дру-
382 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС гие функции, то указанные выводы кристаллов должны конфигурироваться как обычные пользовательские контакты ввода/вывода. 14.1.3. Организация питания инструментального модуля Digilab ХС2 (Digilab XC2-XL) В качестве источника питания инструментального модуля Digilab ХС2 (Digilab XC2-XL) могут использоваться: батарея элементов с общим напряжением от 3 до 3,6 В, подключаемая к двухкон- тактному разъему J7 (J2) с помощью соответствующего адаптера, входящего в состав комплекта; сетевой адаптер, формирующий на выходе напряжение постоянного тока в диа- пазоне от 5 до 9 В, которое подается на разъем питания power jack; 3 внешних источника постоянного тока, один из которых имеет выходное на- пряжение 1,8 В, а два других - в диапазоне от 1,5 до 3,3 В, подключаемых к че- тырехконтактному разъему J8. При использовании одного из перечисленных источников необходимо строго со- блюдать полярность подключения, указанную на печатной плате инструментального модуля, чтобы избежать выхода из строя его компонентов. Для питания ядра кристаллов CoolRunner-II необходимо напряжение 1,8 В, кото- рое формируется с помощью встроенного DC/DC-преобразователя VCOre Regulator или поступает от внешнего источника через контакт VCR разъема J8. Напряжение питания блоков ввода/вывода ПЛИС семейства CoolRunner-II в зависимости от тре- бований проекта может находиться в пределах от 1,5 до 3,3 В. Это напряжение может вырабатываться интегрированным DC/DC-преобразователем VI0 Regulator инстру- ментального модуля, поступать непосредственно от батареи, подключаемой к разъе- му J7, или подаваться от внешнего источника через контакты VIO1, VIO2 разъема J8. Пользовательские контакты кристалла ХС2С256 организованы в виде двух банков ввода/вывода, которые могут иметь раздельные источники питания VIOi и VI02 с раз- личным выходным напряжением. Инструментальный модуль Digilab ХС2 позволяет реализовать 4 возможных режима питания ПЛИС, используя перемычки JP1 - Л>4: применение батареи элементов (Battery mode); режим использования встроенных DC/DC-преобразователей (Transformer mode); применение внешних источников (External mode); режим совмещенного использования встроенных DC/DC-преобразователей и внешнего источника VIO2 (Transformer mode with external VIO2). В режиме Battery mode напряжение питания ядра кристаллов CoolRunner-II по- ступает с выхода встроенного DC/DC-преобразователя VCore Regulator, а для банков ввода/вывода подается одно и то же напряжение непосредственно с батареи, под- ключенной к разъему J7. Режим Transformer mode в первую очередь предназначен для случая применения внешнего сетевого адаптера. В этом режиме питание ядра и блоков ввода/вывода осуществляется напряжениями, вырабатываемыми интегриро- ванными DC/DC-преобразователями Vcore Regulator и VI0 Regulator. Режим Trans- former mode может быть реализован и при использовании батареи элементов пита- ния. В режиме External mode возможна реализация смешанного питания банков вво- да/вывода двумя различными напряжениями. В этом случае для питания ядра и блоков ввода/вывода ПЛИС применяется 3 внешних источника, подключенных
ГЛАВА 14 383 к разъему J8. Режим Transformer mode with external УЮ2 также позволяет реализовать различное питание блоков ввода/вывода, принадлежащих к разным банкам. При этом питание ядра и блоков ввода/вывода первого банка осуществляется напряжениями, поступающими с выходов встроенных DC/DC-преобразователей Vcore Regulator и Vio Regulator, а второго банка - от внешнего источника, подключенного к контакту VIO2 разъема J8. Инструментальный модуль Digilab XC2-XL поддерживает только первые 3 из рассмотренных выше режимов питания. Для этого варианта модуля режим использо- вания встроенных DC/DC-преобразователей обозначен как Wall-plug mode. Положение перемычек для каждого из рассмотренных режимов питания инстру- ментального модуля Digilab ХС2 (Digilab XC2-XL) показано на рис. 14.5 (14.6). Осо- бое внимание следует обратить на то, что при использовании сетевого адаптера с вы- ходным напряжением 5-9 В в качестве источника питания перемычка JP1 на плате Digilab ХС2 должна находиться в позиции INT. Несоблюдение этого предупреждения (установка перемычки JP1 в позицию ЕХТ при подключении сетевого адаптера) при- водит к повреждению элементов инструментального модуля. 14.1.4. Формирование цепочки периферийного сканирования ПЛИС в составе инструментального модуля Digilab ХС2 (Digilab XC2-XL) Схема блока загрузки конфигурационных данных инструментального модуля Digilab ХС2 показана на рис. 14.7. DB-26 Только Только ПЛИС IC2 Две ПЛИС ХС2С256 ПЛИС IC3 в корпусе Запрещенная VQ44 комбинация 81 II JP6 JP5 JP6 JP5 81 JP6 JP6 88 JP6 JP5 Рис. 14.7, Схема программирования ПЛИС инструментального модуля Digilab ХС2 Основой схемы встроенного загрузочного кабеля является ИС 74НС125, элемен- ты которой выполняют функцию согласования (буферизации) 5-вольтовых сигналов параллельного порта со входами JTAG-порта ПЛИС, которые соответствуют стан- дарту 3,3 В. Блок загрузки предоставляет возможность как раздельного программи- рования ПЛИС, установленных на плате инструментального модуля, так и совмест- ного конфигурирования в составе цепочки периферийного сканирования. Положение перемычек JP5, JP6 для каждого режима загрузки или считывания конфигурационной
384 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС последовательности приведено на рис. 14.7. Если цепочка периферийного сканиро- вания включает два кристалла, то первым является ХС2С256. Схема формирования цепочки периферийного сканирования инструментального модуля Digilab XC2-XL показана на рис. 14.8. Изменение состава цепочки перифе- рийного сканирования осуществляется с помощью коммутационных перемычек JP5, JP6, JP9, JP1O. Возможные комбинации положения перемычек для раздельного и со- вместного программирования ПЛИС представлены на рис. 14.8. Vdd Только ПЛИС IC1 в корпусе VQ44 Запрещенная комбинация Две ПЛИС Контакт 1 -► Только ПЛИС IC2 ХС2С266 г £ £ £ Рис. 14.8. Схема программирования ПЛИС инструментального модуля Digilab XC2-XL 14.1.5. Работа с инструментальным модулем Digilab ХС2 (Digilab XC2-XL) Работу с инструментальным модулем следует начинать с установки перемычек, предназначенных для выбора режима питания и состава цепочки периферийного сканирования ПЛИС. Далее нужно подключить кабель к разъему DB-25 отладочной платы и параллельному порту компьютера (только в модуле Digilab ХС2) или загру- зочный кабель к разъему JTAG-интерфейса. После этого можно подать питание на инструментальный модуль и активизировать средства программирования (программу iMPACT средств проектирования серии Xilinx ISE). При успешном выполнении ука- занных операций после обнаружения загрузочного кабеля производится автоматиче- ский поиск и инициализация цепочки периферийного сканирования ПЛИС, подклю- ченной к выбранному JTAG-порту. Информация об обнаруженной цепочке перифе- рийного сканирования ПЛИС отображается в графической форме в рабочей области основного окна и в текстовом виде в окне регистрации сообщений программы iMPACT. После этого можно приступать к выполнению операций программирования
ГЛАВА 14 385 кристаллов или обратного считывания конфигурационных данных, подробно рас- смотренных в [1]. 14.1.6. Краткая характеристика ПЛИС семейства CoolRunner-II, используемых в инструментальном модуле Digilab ХС2 (Digilab XC2-XL) Семейство CoolRunner-II представляет собой новое поколение ПЛИС с архитек- турой XPLA3 (extended Programmable Logic Array), использующих технологию FZP. В состав семейства CoolRunner-II входят 6 типов ПЛИС емкостью от 32 до 512 мак- роячеек (соответственно от 800 до 12 800 эквивалентных логических вентилей), вы- пускаемых по технологии EEPROM 0,18 мкм. Кристаллы этого семейства характеризуются такими особенностями, как: применение технологии FZP (Fast Zero Power), обеспечивающее достижение ми- нимального уровня потребляемой мощности в сочетании с высоким быстродей- ствием; возможность реализации проектов с системными частотами до 303 МГц; ультранизкое значение мощности, потребляемой в статическом режиме (не более 100 мкА); минимальная задержка распространения сигнала от входного контакта до выход- ного через комбинационную логику - 5 нс; функция раздельного управления длительностью фронтов выходных сигналов для каждого вывода ПЛИС, позволяющая снизить уровень помех на выходах кристалла; оптимизированная архитектура, обеспечивающая повышение эффективности процесса логического синтеза; увеличение быстродействия проектируемых устройств за счет использования триггеров, тактируемых фронтом и спадом сигнала синхронизации; применение усовершенствованной коммутационной матрицы Advanced Intercon- nect Matrix (AIM), обеспечивающее высокую скорость переключений при низкой потребляемой мощности; наличие встроенного делителя тактового сигнала с коэффициентами деления 2, 4, 6, 8, 10, 12, 14, 16; использование методики CoolCLOCK, позволяющей добиться снижения потреб- ляемой мощности за счет сочетания деления тактовой частоты и применения триггеров, тактируемых фронтом и спадом сигнала синхронизации; организация блоков ввода/вывода в виде банков в кристаллах с большим количе- ством ячеек; возможность выборочной установки в блоках ввода/вывода во входных цепях триггеров Шмидта, обеспечивающих снижение влияния помех; применение технологии DataGATE, позволяющее добиться дополнительного уменьшения потребляемой мощности за счет блокировки неактуальных или не- изменяющихся сигналов в ячейках ввода/вывода; четыре независимых уровня защиты конфигурационных данных от несанкцио- нированного копирования, обеспечивающие охрану прав интеллектуальной соб- ственности; расширенные возможности фиксации пользовательских выводов перед выполне- нием этапа реализации (Implementation) в сочетании с полной трассировкой про- екта; 13 -2062
386 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС • наличие сигнала разрешения синхронизации в каждой макроячейке; возможность асинхронного сброса или установки триггера макроячейки; возможность комплексного асинхронного тактирования элементов проектируе- мого устройства с использованием тактовых сигналов, формируемых внутри ло- гического блока, и 4 глобальных тактовых сигналов, поступающих с выводов кристалла; не менее 1 000 циклов перепрограммирования; гарантированный срок хранения запрограммированной конфигурации не менее 20 лет; полная поддержка протокола периферийного сканирования в соответствии со стандартом IEEE Std 1149.1 (JTAG); поддержка конфигурирования по стандарту IEEE Std 1532; * совместимость блоков ввода/вывода с логическими уровнями стандартов цифро- вых сигналов 1,5; 1,8; 2,5 и 3,3 В, позволяющая реализовывать устройства со смешанным питанием; возможность формирования выходов с открытым стоком; расширенный типовой ряд используемых корпусов, включающий Chip Scale Package (CSP), BGA, Fine Line BGA,TQFP, PQFP, VQFP и PLCC; возможность перепрограммирования в системе с напряжением питания 1,8 В; напряжение питания ядра кристалла составляет 1,8 В; совместимость всех кристаллов по выводам при использовании одинаковых корпусов. На рис. 14.9 представлена общая архитектура ПЛИС семейства CoolRunner-II. В структурном отношении она практически не отличается от типовой архитектуры семейств CPLD и включает в себя блоки ввода/вывода (Input/Output block, ЮВ), функциональные блоки (Function Block, FB) и быстродействующую переключающую матрицу AIM. Принципиальные отличия состоят в способе реализации этих струк- турных элементов. В состав каждого функционального блока входят программируемая PLA-матрица логических произведений и 16 независимых макроячеек. Использование PLA-мат- рицы позволяет оптимизировать разделение и совместное использование ресурсов кристалла при реализации проекта. Ее 40 прямых и инверсных входов, подключен- ных непосредственно к выходам переключающей матрицы, позволяют сформировать 56 термов, часть которых может использоваться в качестве управляющих сигналов для любой макроячейки функционального блока. Каждая макроячейка может быть сконфигурирована для выполнения как комбинаторной, так и регистровой функции, причем триггер, входящий в ее состав, может быть реализован как D- или Т-триггер или как защелка. Кроме того, он может быть сконфигурирован как триггер, такти- руемый фронтом и спадом сигнала синхронизации. Помимо входов, соединенных с выходами PLA-матрицы логических произведений, макроячейка содержит дополни- тельный, так называемый «быстрый» вход, подключенный непосредственно к блокам ввода/вывода. Коммутация сигналов, поступающих из блоков ввода/вывода, входных и выходных сигналов функциональных блоков осуществляется с помощью переклю- чающей матрицы AIM, обеспечивающей минимизацию потребляемой мощности в сочетании с высоким быстродействием. Блоки ввода/вывода предназначены для ор- ганизации интерфейса между внутренними сигналами кристалла и выводами ПЛИС.
ГЛАВА 14 387 Они выполняют функции буферизации всех входных и выходных сигналов, управле- ния выходами и формирования программируемого «общего» вывода. Цепи периферийного сканирования к 3 JTAG порт I/O Pin & Puc. 14.9. Архитектура ПЛИС семейства CoolRunner-ll ПЛИС XC2C256 в корпусе TQFP144, применяемая в инструментальном модуле Digilab ХС2, содержит 256 макроячеек (соответственно 16 функциональных блоков) и 111 пользовательских контактов ввода/вывода. Учитывая, что из семейства CoolRunner-II в корпусе VQ44 выпускаются только кристаллы ХС2С32 и ХС2С64, содержащие соответственно 32 и 64 макроячейки, то в качестве второй ПЛИС, уста- навливаемой на плате инструментального модуля Digilab ХС2, может использоваться один из этих элементов. Указанные кристаллы позволяют реализовать проекты, тре- бующие не более 33 пользовательских контактов ввода/вывода. Более подробная информация об архитектуре и параметрах ПЛИС семейства CoolRunner-II, а также кристалла XC9572XL семейства XC9500XL, используемого в составе модуля Digilab XC2-XL, представлена в [2]. 14.2. Инструментальный комплект Spartan-3 Starter Kit 14.2.1. Назначение и основные характеристики инструментального комплекта Spartan-3 Starter Kit Инструментальный комплект Spartan-3 Starter Kit предназначен в первую очередь для практического изучения методов проектирования цифровых устройств с аппа- ратной реализацией операций и разработки встраиваемых микропроцессорных сис- тем на основе ПЛИС семейств FPGA фирмы Xilinx. Функциональные возможности и конструктивное исполнение инструментального модуля позволяют не только выпол- нять отладку проектов, реализуемых на основе ПЛИС семейства Spartan-З, но и ис- пользовать его в качестве промышленного серийного варианта разрабатываемого устройства. Рассматриваемый модуль можно рекомендовать для аппаратной реализа- ции проектируемой системы при жестких требованиях, предъявляемых ко времени ее
388 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС разработки. Применение готового модуля позволяет значительно сократить суммар- ную длительность этого процесса за счет исключения этапов проектирования и изго- товления печатной платы разрабатываемого устройства и монтажа компонентов. Инструментальный модуль Xilinx Spartan-3 Starter Board™ может использоваться для реализации автономных систем управления, сбора и обработки цифровой ин- формации, встраиваемых цифровых устройств с различными компьютерными ин- терфейсами. Кроме того, данный модуль целесообразно применять в учебных лабо- раториях для изучения функционирования и проектирования микропроцессорных систем с различной архитектурой. Ресурсы инструментального модуля Xilinx Spartan- 3 Starter Board позволяют реализовать проекты встраиваемых микропроцессорных систем, выполняемых на основе как 8-разрядного ядра семейства PicoBlaze, так и 32- разрядного ядра семейства MicroBlaze. В частности, тестовый проект, включенный в состав комплекта, содержит наглядный пример реализации микропроцессорной сис- темы, выполненной на базе микропроцессорного ядра семейства MicroBlaze. В состав комплекта Spartan-3 Starter Kit входят: плата инструментального модуля Xilinx Spartan-3 Starter Board; сетевой адаптер с выходным стабилизированным напряжением 5 В и максималь- ным током нагрузки 1,6 А, предназначенный для питания инструментального модуля; универсальный загрузочный JTAG-кабель, предназначенный для конфигуриро- вания ПЛИС семейств CPLD, FPGA и ППЗУ серий XC18V00 и Platform Flash™, подключаемый к параллельному порту компьютера; комплект CD-ROM, содержащий полнофункциональную версию системы проек- тирования ISE WebPACK, оценочную версию САПР ISE Foundation, тестовый проект, иллюстрирующий применение ПЛИС семейств FPGA для реализации «системы на кристалле», и необходимую документацию. Характерными особенностями инструментального модуля Spartan-3 Starter Board являются: использование ПЛИС из семейства Spartan-З с объемом 200 тыс. системных вен- тилей в корпусе FT BGA 256, логические и трассировочные ресурсы которой в сочетании с большим количеством пользовательских выводов позволяют реали- зовать не только отдельные блоки проектируемой системы, но разрабатываемую систему в полном объеме; возможность поддержки на уровне проектов стандартных интерфейсов вычисли- тельных систем RS-232, PS/2 и VGA; подключение специальных и пользовательских выводов ПЛИС к контактам трех стандартных разъемов расширения, обеспечивающее возможность сопряжения с внешними устройствами; - внешнее высокоскоростное асинхронное статическое ОЗУ на основе SRAM ем- костью 1 Мбайт, расширяющее возможности оперативной памяти, реализуемой на основе соответствующих ресурсов ПЛИС; - применение в качестве ППЗУ для хранения конфигурационных данных ПЛИС FLASH-PROM серии Platform Flash, программируемой в системе; - наличие двух разъемов для подключения загрузочных кабелей различного типа, позволяющих выполнять операции конфигурирования ПЛИС и программирова-
ГЛАВА 14 389 ния ППЗУ через порт JTAG-интерфейса в различных режимах, а также обратного считывания конфигурационных данных; применение кварцевого генератора с частотой 50 МГц для формирования внеш- него тактового сигнала ПЛИС; наличие панели для установки дополнительного кварцевого генератора; включение в схему модуля преобразователя уровней RS-232, обеспечивающего возможность непосредственного подключения к последовательному порту ком- пьютера через разъем DB-9, установленный на плате (при реализации универ- сального асинхронного приемопередатчика UART на основе ПЛИС); присутствие на плате светодиодных индикаторов различного типа, обеспечи- вающих возможность визуального контроля напряжения питания, процесса кон- фигурирования кристалла и функционирования разрабатываемой системы; наличие восьми ползунковых переключателей и четырех кнопок, которые могут использоваться, например, для ручной установки режима работы реализуемой системы или в процессе отладки проектируемой системы, а также для тестирова- ния инструментального модуля и прикладного программного обеспечения; использование комплексной схемы управления питанием, выполняющей функ- ции формирования напряжений, необходимых для питания компонентов модуля, в том числе для блоков ввода/вывода и ядра кристалла FPGA и конфигурацион- ного ППЗУ; наличие кнопки, обеспечивающей реализацию режима принудительной загрузки конфигурационной последовательности в ПЛИС; полная совместимость со всем семейством систем проектирования и программи- рования кристаллов фирмы Xilinx (ISE WebPACK, ISE BaseX, ISE Foundation). 14.2.2. Структура инструментального модуля Spartan-3 Starter Board Внешний вид инструментального модуля Spartan-3 Starter Board показан на рис. 14.10. Компоненты модуля смонтированы на печатной плате с двухсторонним размещением компонентов. Рис. 14.10. Внешний вид инструментального модуля Spartan-3 Starter Board (вид сверху)
390 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Структурная схема рассматриваемого модуля изображена на рис. 14.11. Основ- ными элементами структуры модуля Spartan-3 Starter Board являются: ПЛИС XC3S200 в корпусе FTBGA256, на основе которой реализуется проекти- руемая система; программируемое в системе ППЗУ серии Platform Flash XCF02S, предназначен- ное для хранения конфигурационных данных ПЛИС; схема загрузки конфигурационных данных; схема управления конфигурированием ПЛИС; блок синхронизации, предназначенный для формирования внешних тактовых сигналов; схема формирования питающих напряжений; внешнее высокоскоростное ОЗУ; блок светодиодных индикаторов; 4-значный дисплей, выполненный на основе 7-сегментных светодиодных инди- каторов; блок ползунковых переключателей; блок кнопочных переключателей; схема преобразования уровней сигналов интерфейса RS-232; стандартные разъемы интерфейсов RS-232, PS/2 и VGA; три 40-контактных разъема расширения. Рис. 14.11. Структурная схема инструментального модуля Spartan-3 Starter Board Функциональные возможности инструментального модуля в значительной сте- пени определяются типом используемой ПЛИС. Основные технические характери-
ГЛАВА 14 391 стики кристалла XC3S200, установленного на плате Spartan-3 Starter Board, рассмат- риваются в следующем разделе. В состав схемы загрузки конфигурационных данных входят два разъема, которые предназначены для подключения загрузочных кабелей различного типа к JTAG- порту ППЗУ XCF02S и ПЛИС XC3S200. Выводы JTAG-портов конфигурационного ППЗУ и ПЛИС инструментального модуля скоммутированы соответствующим обра- зом, образуя единую цепочку периферийного сканирования, как показано на рис. 14.12. Таким образом, разработчику предоставляется возможность программи- рования ППЗУ и загрузки конфигурационных данных непосредственно в ПЛИС из компьютера через один разъем. Режим конфигурирования ПЛИС из компьютера це- лесообразно использовать на этапе отладки проекта. Разъем J5 позволяет использо- вать для операций конфигурирования и отладки универсальные загрузочные кабели, выпускаемые фирмой Xilinx: Parallel Cable IV (PC IV) и MultiPro Desktop Tool. Разъ- ем J7 используется для присоединения загрузочного кабеля Digilent JTAG3, который входит в инструментальный комплект Spartan-3 Starter Kit. Кроме того, данный разъ- ем позволяет использовать для загрузки и обратного считывания конфигурационных данных универсальный кабель Parallel Cable 3, который выпускался фирмой Xilinx до появления кабеля следующего поколения Parallel Cable IV. Рис. 14.12. Цепочка периферийного сканирования инструментального модуля Spartan-3 Starter Board Схема управления конфигурированием ПЛИС включает в себя набор коммута- ционных перемычек (Jumpers) Mode (J8), кнопку PROGRAM и светодиодный инди- катор DONE. Три переключаемые перемычки Mode предназначены для выбора ре- жима конфигурирования ПЛИС. С их помощью задаются значения сигналов на вхо- дах выбора режима конфигурирования МО, Ml, М2 кристалла XC3S200. При отсутствии перемычки (разомкнутой паре контактов разъема J8) сигнал на соответст- вующем входе устанавливается в состояние высокого логического уровня (логиче- ской единицы). Установка перемычки переключает сигнал на соответствующем вхо- де выбора режима в состояние низкого логического уровня. Описание различных комбинаций перемычек Mode и соответствующих режимов конфигурирования ПЛИС приведено в табл. 14.1.
392 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Таблица 14.1. Описание режимов конфигурирования ПЛИС XC3S200 в инструментальном модуле Spartan-3 Starter Board Режим конфигурирова- ния ПЛИС Положение перемы- чек Mode (комбина- ция сигналов на вхо- дах <М0:М1:М2>) Положение перемычки JP1 Описание режима конфигурирования ПЛИС Master Serial <0:0:0> 1-2 или 2-3 Автоматическая загрузка из конфигурацион- ного ППЗУ Platform Flash, установленного на плате Отсутствует Загрузка конфигурационной последователь- ности из внешнего источника, подключенно- го к разъемам расширения А2 или В1, в ве- дущем последовательном режиме Slave Serial <1:1:1> Отсутствует Загрузка конфигурационной последователь- ности из внешнего источника, подключенно- го к разъемам расширения А2 или В1, в подчиненном последовательном режиме Master Parallel Отсутствует Загрузка конфигурационной последователь- ности из внешнего источника, подключенно- го к разъему расширения В1, в ведущем па- раллельном режиме Slave Parallel <0:1:1> Отсутствует Загрузка конфигурационной последователь- ности из внешнего источника, подключенно- го к разъему расширения В1, в подчиненном параллельном режиме JTAG <1:0:1> Отсутствует Загрузка конфигурационной последователь- ности через JTAG-кабель, подключенному к одному из JTAG-разъемов модуля Рис. 14.13 в наглядной форме поясняет расположение перемычек для каждого режима конфигурирования ПЛИС. Master Serial rGNDi LUU! MO M1 М2 | | JP1 а) или | ЙР JP1 c) BMI JP1 Slave Serial rGNDi JS ЙЙЙ| MO M1 М2 ISrWSl jpi Master Parallel rGNDi MO M1 М2* jpi Slave Parallel rGNDT J8 Ills MO M1 М2 1ИЖЯ JP1 JTAG rGNDi ИПН i MO M1 М2 imEMi jpi Рис. 14.13. Расположение перемычек для каждого режима конфигурирования ПЛИС XC3S200 в инструментальном модуле Spartan-3 Starter Board
ГЛАВА 14 393 Кнопка PROGRAM позволяет выполнить принудительную загрузку конфигура- ционной последовательности в ПЛИС. Светодиодный индикатор DONE сигнализи- рует об успешном завершении процесса загрузки конфигурационной последователь- ности в кристалл. Блок синхронизации образуют кварцевый генератор с частотой 50 МГц и панель для установки дополнительного кварцевого генератора. Внешний тактовый сигнал, который формируется кварцевым генератором, установленным на плате инструмен- тального модуля, подается на один из восьми специально выделенных контактов кристалла, сопряженных с глобальными буферными элементами, а именно на GCLK0 (вывод T9 для корпуса FTBGA256). Так как выход каждого глобального буфера свя- зан (через глобальные тактовые мультиплексоры) с глобальной сетью тактовых ли- ний и цифровыми блоками управления синхронизацией (Digital Clock Manager, DCM) ПЛИС семейства Spartan-З, то такое решение оптимальным образом обеспечивает возможность применения модуля DCM для получения сетки внутренних тактовых частот, соответствующих требованиям реализуемого проекта. Цифровой блок управ- ления синхронизацией позволяет сформировать тактовые сигналы со сдвигом фаз на 90, 180 и 270°, с удвоенной частотой и с одним из возможных коэффициентов деле- ния (1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 9, 10, 11, 12, 13, 14, 15, 16) по от- ношению ко входному тактовому сигналу. Кроме того, применение схемы цифровой автоподстройки задержек (Delay Locked Loop, DLL), входящей в состав DCM, позво- ляет устранить временной перекос при распространении сигналов синхронизации как внутри кристалла, так и на уровне печатной платы инструментального модуля. В случае установки дополнительного кварцевого генератора, его выход оказывается также подключенным к глобальному тактовому входу ПЛИС - GCLK4 (вывод D9 для корпуса FTBGA256). Внешнее высокоскоростное ОЗУ выполнено на основе двух микросхем асин- хронной статической памяти SRAM IS61LV25616AL-10T, выпускаемых фирмой ISSI®. В разрабатываемых проектах встраиваемых микропроцессорных систем дан- ное ОЗУ может быть сконфигурировано в виде двух независимых массивов с организа- цией 256 Кбайт х 16 разрядов или в виде одного банка с организацией 256 Кбайт х 32. В случае конфигурации внешней памяти в форме двух независимых массивов, в каж- дом из них используются общие сигналы разрешения записи, разрешения выходов и сигналы на адресных входах. При этом каждый из массивов памяти управляется ин- дивидуальным сигналом выбора кристалла. Организация внешнего ОЗУ в виде одно- го банка с организацией 256 Кбайт х 32 идеально подходит для использования в про- ектах 32-разрядных микропроцессорных систем, которые выполняются на основе ядер семейства MicroBlaze. При этом внешнее запоминающее устройство может вы- полнять функции программной или оперативной памяти разрабатываемой микропро- цессорной системы. Комплексная схема формирования питающих напряжений включает в себя 3 DC/DC-преобразователя, вырабатывающих напряжения требуемых номиналов, и све- тодиодный индикатор POWER. Встроенные DC/DC-преобразователи формируют напря- жения питания 1,2 В для ядра кристалла семейства Spartan-З, а также напряжения 2,5 и 3,3 В, используемые в блоках ввода/вывода ПЛИС и другими компонентами инструмен- тального модуля. В качестве входного напряжения используется напряжение 5 В, посту-
394 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС пающее от сетевого адаптера. Светодиодный индикатор POWER предназначен для визу- ального контроля наличия или отсутствия входного напряжения. Блок индикации инструментального модуля содержит 8 светодиодов. Эти свето- диодные индикаторы подключены к пользовательским выводам ПЛИС и могут при- меняться в проекте разрабатываемой системы, например, для визуальной оценки вы- полнения алгоритма ее функционирования или в процессе тестирования инструмен- тального модуля. Четырехзначный дисплей, выполненный на основе 7-сегментных светодиодных индикаторов, предназначен для отображения алфавитно-цифровой информации в разрабатываемой микропроцессорной системе. В данном дисплее используется принцип динамической индикации. Все одноименные сегменты светодиодных инди- каторов соединены между собой и подключены к определенным пользовательским выводам ПЛИС. Выбор конкретного индикатора в дисплее осуществляется подачей напряжения низкого логического уровня на соответствующий управляющий вход дисплея. Все управляющие входы также подключены к пользовательским выводам кристалла FPGA. Блок кнопочных переключателей состоит из четырех кнопок без фиксации, со- пряженных с пользовательскими входами ПЛИС. Данные кнопки могут использо- ваться в проектируемых системах для выполнения различных функций, например, сброса, изменения режима. Блок ползунковых переключателей включает в себя 8 двухпозиционных пере- ключателей, позволяющих устанавливать высокий или низкий логический уровень сигнала на пользовательских входах ПЛИС, к которым они подключены. Большинство пользовательских выводов кристалла FPGA подключено к контак- там разъемов различного типа, установленных на плате инструментального модуля. Тем самым обеспечивается возможность реализации в проекте, выполняемом на ос- нове ПЛИС, ряда наиболее широко применяемых интерфейсов вычислительных сис- тем. Инструментальный модуль предоставляет в распоряжение разработчика разъе- мы интерфейсов RS-232, PS/2 и VGA. Для реализации асинхронного последователь- ного порта в соответствии с электрическими характеристиками интерфейса RS-232 в состав модуля включена схема преобразования уровней сигналов, выполненная на основе микросхемы МАХ3232 фирмы Maxim®. Часть пользовательских выводов ПЛИС разведена к контактам трех стандартных разъемов расширения, обеспечи- вающим возможность сопряжения с различными внешними периферийными устрой- ствами. Кроме того, конфигурация разъемов расширения позволяет подключать к ним напрямую следующие инструментальные модули, выпускаемые фирмами Xilinx и Digilent®: Xilinx Spartan-3 Starter Kit Expansion Boards; Digilent Expansion Boards; Digilent Breakout Probe Header (TPH1); Digilent Breadboard (DBB1); Digilent Wire-wrap Board (DWR1); - Digilent SPP, EPP, ECP Parallel Port (PIO1).
ГЛАВА 14 395 14.2.3. Краткая характеристика ПЛИС XC3S200, используемой е инструментальном модуле Spartan-З Starter Board Функциональные возможности ПЛИС XC3S200, используемой в инструменталь- ном модуле Spartan-З Starter Board, характеризуются такими показателями, как: логическая емкость кристалла составляет 480 конфигурируемых логических бло- ков (Configurable Logic Block, CLB) или 4 320 логических ячеек (Logic Cell, LC); 173 пользовательских контактов ввода/вывода; высокая производительность, допускающая реализацию проектов с системными частотами до 326 МГц; применение четырех цифровых блоков управления синхронизацией (DCM), вы- полняющих функции умножения, деления и сдвига фаз тактовых частот и обес- печивающих расширенные возможности управления тактовыми сигналами не только внутри кристалла, но и на уровне печатной платы проектируемой сис- темы; использование глобальной сети тактовых линий предоставляет возможность рас- пределения сигналов синхронизации внутри кристаллов с малыми разбегами фронтов; наличие двух видов внутренней оперативной памяти: распределенной Distributed RAM, реализуемой на базе 4-входовых таблиц преобразования (LookUp Table, LUT) конфигурируемых логических блоков, и встроенной блочной памяти Block RAM, которая может быть организована как двухпортовое ОЗУ ; максимальный объем внутренней распределенной оперативной памяти Distributed RAM составляет 30 Кбит; суммарная информационная емкость встроенной блочной памяти Block SelectRAM, организованной в виде секций ОЗУ по 18 Кбит, составляет 216 Кбит; возможность реализации быстрых внутренних интерфейсов к внешним высоко- производительным элементам памяти (ОЗУ или ПЗУ); применение специальной логики ускоренного переноса для выполнения высоко- скоростных арифметических операций; наличие 12 встроенных аппаратных умножителей, предназначенных для вычис- ления произведения двух 18-разрядных операндов; наличие цепочек каскадирования, обеспечивающих возможность реализации функций с большим количеством входных переменных; поддержка передачи данных с удвоенной скоростью Double Data Rate (DDR), от- крывающая широкие возможности для реализации высокоскоростных устройств цифровой обработки сигналов; использование технологии Selectl/O™, обеспечивающее поддержку 17 однопо- люсных и шести дифференциальных цифровых сигнальных стандартов ввод/вывода, в частности LVTTL, LVCMOS12, LVCMOS15, LVCMOS18, LVCMOS25, LVCMOS33, GTL, GTL+, SSTL2(I), SSTL2(II), SSTL18(I), HSTL(I), HSTL(III), HSTL18(I), HSTL18(II), HSTL18(III), PCI 3.3, LDT25, LVDS25, BLVDS25, LVDSEXT25, ULVDS25, RSDS25; применение в блоках ввода/вывода функции цифрового управления импедансом DCI (Digitally Controlled Impedance), позволяющей исключить необходимость ус- тановки на печатной плате разрабатываемого устройства большого количества внешних согласующих резисторов;
396 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС • полная поддержка протокола периферийного сканирования в соответствии со стандартом IEEE Std 1149.1 (JTAG); поддержка протокола конфигурирования, соответствующего стандарту IEEE Std 1532; неограниченное количество циклов загрузки конфигурационных данных; поддержка пяти режимов конфигурирования ПЛИС (Master Serial, Slave Serial, Master Parallel, Slave Parallel, JTAG). Основу архитектуры кристаллов Spartan-3 XC3S200 составляет регулярная мат- рица конфигурируемых логических блоков CLB, окруженных программируемыми блоками ввода/вывода (Input/Output block, ЮВ) (рис. 14.14). Кроме того, в нее входят блоки аппаратных умножителей Multiplier Blocks, цифровые блоки управления син- хронизацией DCM и блоки выделенной памяти Block RAM. Коммутация всех пере- численных выше архитектурных элементов осуществляется с помощью программи- руемых трассировочных ресурсов нового поколения. Трассировочные ресурсы ПЛИС семейства Spartan-З имеют иерархическую структуру, основным элементом которой является главная трассировочная матрица GRM (General Routing Matrix). Более под- робное описание элементов архитектуры кристаллов семейства Spartan-З представле- но в [2, 5]. Рис. 14.14. Структурное представление обобщенной архитектуры ПЛИС семейства Spartan-З
ГЛАВА 14 397 Функциональные возможности инструментального модуля наглядно демонстри- рует тестовый проект. Поэтому далее кратко рассматривается структура и основные характеристики компонентов тестового проекта. 14.2.4. Описание структуры тестового проекта Тестовый проект, включенный в состав инструментального комплекта Spartan-3 Starter Kit, выполнен с помощью комплекса средств проектирования встраиваемых микропроцессорных систем Xilinx EDK. Этот проект представляет собой образец разработки «системы на кристалле», реализующей в одном корпусе ПЛИС функции процессора и периферийных устройств. Основой этой системы является микропро- цессорное ядро семейства MicroBlaze. Структура системы, проектируемой на основе ПЛИС, показана на рис. 14.15. Рис. 14.15. Структура тестового проекта, реализуемого на основе ПЛИС инструментального модуля Spartan-3 Starter Board В состав системы, разработанной в рамках тестового проекта, входят следующие компоненты: микропроцессорное ядро MicroBlaze; модуль универсального асинхронного приемопередатчика UART (Universal Asynchronous Receiver-Transmitter); модули параллельного интерфейса ввода/вывода GPIO; ядро контроллера четырехзначного дисплея; таймер timer; контроллер прерываний interrupt controller; контроллер интерфейса внешней памяти EMC (External Memory Controller): * отладочный модуль MDM (Microprocessor Debug Module) " контроллер интерфейса VGA; ядро контроллера интерфейса клавиатуры PS/2. Модуль универсального асинхронного приемопередатчика, предназначенный для организации обмена данными между микропроцессорным ядром и внешними уст- ройствами (в частности, последовательным портом ПК) через интерфейс RS-232, конфигурируется со следующими параметрами протокола приема/передачи: максимальная скорость приема/передачи информации составляет 9 600 Кбит/с; формат передаваемых данных включает в себя стартовый бит, 8 информа- ционных бит. 1 столовый бит; • контроль четности (нечетности) не производится.
398 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Тестовый проект может быть загружен в ПЛИС инструментального модуля с по- мощью программы iMPACT, входящей в состав САПР серии Xilinx ISE, или в среде системы проектирования Xilinx EDK. Для программирования конфигурационного ППЗУ серии Platform Flash с помощью программы iMPACT предназначен файл new_S3_Master.mcs, который расположен в разделе download рабочего каталога тес- тового проекта. Процесс загрузки конфигурационной последовательности в рамках системы проектирования Xilinx EDK подробно рассмотрен в двенадцатой и трина- дцатой главах. Тестовая программа TestApp, загружаемая в программную память микропроцес- сорной системы выполняет проверку всех устройств ввода/вывода, которые включе- ны в ее состав. Результаты проверки отображаются с помощью средств индикации инструментального модуля и на экране внешнего дисплея VGA. 14.2.5. Использование инструментального модуля Spartan-З Starter Board Перед началом работы с инструментальным модулем следует подключить загру- зочный кабель, входящий в состав инструментального комплекта, к разъему JTAG- интерфейса платы, а также необходимые кабели к разъемам, предназначенным для обмена данными с внешними устройствами. В частности, при реализации прилагае- мого тестового проекта нужно подключить коммуникационный кабель к разъему по- следовательного порта DB-9 модуля и разъему соответствующего СОМ-порта ком- пьютера. Кроме того, необходимо, используя стандартный VGA-кабель, соединить разъем VGA-порта модуля со входом дисплея, соответствующего спецификации VGA или SVGA. После этого можно подать питание на инструментальный модуль, подключив выходной разъем сетевого адаптера, и активизировать средства програм- мирования (программу iMPACT, входящую в состав САПР серии Xilinx ISE). При успешном выполнении указанных операций после обнаружения загрузочного кабеля производится автоматический поиск и инициализация цепочки периферийного ска- нирования (включающей в себя ПЛИС и ППЗУ), подключенной к используемому JTAG-порту. Если информация об обнаруженной цепочке периферийного сканиро- вания, представленная в графической форме в рабочей области основного окна и в текстовом виде в окне регистрации сообщений программы iMPACT, соответствует конфигурации инструментального модуля, то можно приступать к выполнению опе- раций программирования ППЗУ или конфигурирования ПЛИС, а также обратного считывания конфигурационных данных или контрольной информации из ППЗУ.
Приложение 1. VHDL-ОПИСАНИЕ ИСПОЛНИТЕЛЬНОГО МОДУЛЯ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, РЕАЛИЗУЕМОГО НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-II, SPARTAN-IIE, VIRTEX, VIRTEX-E Приведенное ниже исходное VHDL-описание исполнительного модуля микро- процессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, имеет следующую структуру. В первой части располо- жены VHDL-описания компонентов, которые используются в составе описания объ- екта верхнего уровня иерархии KCPSM. Во второй части представлено собственно VHDL-описание исполнительного модуля KCPSM. - - Constant (К) Coded Programmable State Machine for Spartan-II and Virtex-E Devices - - Version: 1.00c - - Version Date: 14th August 2002 - - Format of this file. - - This file contains the definition of KCPSM and all the submodules which it - - required. The definition of KCPSM is placed at the end of this file as the order - - in which each entity is read is important for some simulation and synthesis tools. - Hence the first entity to be seen below is that of a submodule. - The submodules define the implementation of the logic using Xilinx primitives. - - These ensure predictable synthesis results and maximise the density of the implementation. - - The Unisim Library is used to define Xilinx primitives. It is also used during - - simulation. The source can be viewed at %XI LI NX %\vhdl\src\unisims\unisim_VCOMP.vhd - It is only specified in sub modules which contain primitive components. - - library unisim; - use unisim.vcomponents.all; Description of sub-modules and further low level modules. - Definition of an 8-bit bus 4 to 1 multiplexer with embeded select signal decoding. - -sell selOa selOb Y_bus - 0 0 x D0_bus - 0 1 x D1_bus - 1 x 0 D2_bus - 1 x 1 D3_bus
400 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - sell is the pipelined decode of instruction^, instruction-! 3, and instruction-! 5. - - selOa is code2 after pipeline delay. - selOb is instruction'll after pipeline delay. - - Requires 17 LUTs and 3 flip-flops. 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 data_bus_mux4 is Port ( D3_bus: in std_logic_vector(7 downto 0); D2_bus: in std_logic_vector(7 downto 0); D1_bus: in std_logic_vector(7 downto 0); D0_bus: in std_logic_vector(7 downto 0); instruction 5: in stdjogic; instructions: in stdjogic; instruction 1 3: in stdjogic; instruction! 2: in stdjogic; code2: in stdjogic; Y_bus: out stdjogic_vector(7 downto 0); elk: in stdjogic); end data_bus_mux4; architecture low_level_definition of data_bus_mux4 is - Internal signals signal upper_selection: std_logic_vector(7 downto 0); signal lower_selection: std_logic_vector(7 downto 0); signal decode_sel1 : stdjogic; signal sell : stdjogic; signal selOa : stdjogic; signal selOb : stdjogic; - Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of decodejut: label is«Е0»; begin -- Forming decode signals decodejut: LUT3 -translate_off generic map (INIT => X»E0») --translate_on port map( 10 => instruction^,
Приложение 1 401 И => instruction! 3, I2 => instruction^, О => decode_se!1); se!1_pipe: FD port map (D => decode_sel1, Q=> sell, C => clk); se!0a_pipe: FD port map (D => code2, Q => selOa, C => clk); selOb-pipe: FD port map (D => instruction!4, Q => selOb, C => clk); bus_width_loop: for i in 0 to 7 generate -- Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of high„mux_lut: label is «Е4»; attribute INIT of low_mux_lut : label is «Е4»; begin highjnuxjut: LUT3 - translated generic map (INIT => X»E4») -translate_on port map( 10 => selOb, 11 => D2_bus(i), I2 => D3_bus(i), 0 => uppecselection(i)); low_mux_lut: LUT3 --translated generic map (INIT -> X»E4») --translate_on port map( IO => selOa, 11 => D0_bus(i), I2 => D1_bus(i), 0 => lower„selection(i)); final.mux: MUXF5 port map( 11 => upper_selection(i), IO => lower_selection(i), S => sell, 0 => Y-bus(i)); end generate bus_width_loop; end lowjevel_definition;
402 Зотов В, Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - Definition of an 8-bit shift/rotate process - - This function uses 11 LUTs. - - The function contains an output pipeline register using 9 FDs. - - Operation - The input operand is shifted by one bit left or right. - - The bit which falls out of the end is passed to the carry_out. - - The bit shifted in is determined by the select bits - - codel codeO Bit injected - 00 carryjn 0 1 msbof input_operand 1 0 Isb of operand 1 1 inject_bit library IEEE; use IEEE.STD_LOGIC_1164.ALL; use 1EEE.STD_LOG1C_ARITH.ALL; use lEEE.STD_LOGIC_UNSfGNED.ALL; library unisim; use unisim.vcomponents.all; entity shift_rotate_process is Port ( operand: in std_logic_vector(7 downto 0); carryjn: in stdjogic; inject_bit: in stdjogic; shift_right: in stdjogic; codel: in stdjogic; codeO: in stdjogic; Y: out std_logic_vector(7 downto 0); carry_out: out stdjogic; elk: in stdjogic): end shift_rotate_process; architecture low_level_definition of shift_rotate_process is - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of high_mux_lut : label is «Е4»; attribute INIT of low_muxjut : label is «Е4»; attribute INIT of carry_out_muxjut : label is«Е4»; -- Internal signals signal upper_selection: stdjogic;
Приложение 1 403 signal lower.selection: stdjogic; signal mux.output : stdjogic_vector(7 downto 0); signal shiftJnJbit : stdjogic; signal carry.bit : stdjogic; begin -- 4 to 1 mux selection of the bit to be shifted in highjnuxjut: LUT3 --translate_off generic map (INIT => X»Е4») --translate.on port map( IO => codeO, 11 => operand(O), I2 => inject Joit, 0 -> upper_selection); low.muxjut: LUT3 --translate.off generic map (INIT => X»Е4») -translate_on port map( IO => codeO, 11 => carryjn, I2 => operand(7), 0 => lower_selection); final jnux: MUXF5 port map( 11 => upper_selection, IO -> lower_selection, S => codel, 0 => shiftjn.bit); - - shift left or right of operand bus_widthjoop: for i in 0 to 7 generate begin lsb_shift: if i=0 generate - - Attribute to define LUT contents during implementation - - The information is repeated in the generic map for functional simulation attribute INIT: string; a ttribute INIT of muxjut: label is «Е4»; begin muxjut: LUT3 --translate_off generic map (INIT => X»Е4») --translate_on port map( IO => shift-right, 11 => shift JnJait,
404 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 12 => operand(i+1), 0 => mux_output(i)); end generate Isb.shift; mid_shift: if i>0 and i<7 generate -- Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of muxjut: label is «Е4»; begin muxjut: LIIT3 --translate_off generic map (INIT => X»E4») --translate_on port map( IO => shift-right, 11 => operand(i-l), 12 => operand(i+1), 0 => mux_output(i)); end generate mid_shift; msb_ shift: if i=7 generate -- Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of muxjut: label is «Е4»; begin muxjut: LUT3 -translate_off generic map (INIT => X»Е4») -translate.on port map( IO => shift-right, II operand(M), 12 => shift _in_bit, 0 -> mux_output(i)); end generate msb„shift; pipeline_bit: FD port map (D -> mux_output(i). Q=>Y(i), C => elk); end generate bus_widthjoop; -- Selection of carry output carry_out_mux_lut: LUT3 -translate_off generic map (INIT => X»E4») --translate_on
Приложение 1 405 port map( IO => shift—right, 11 => operand(7), I2 => operand(O), 0 => carry_bit); pipeline_bit: FD port map (D => carry_bit, 0 -> carry_out, C=> clk); end lowjevei—def inition; - • Definition of an 8-bit logical processing unit - This function uses 8 LUTs (4 slices) to provide the logical bit operations. - - The function contains an output pipeline register using 8 FDs. Codel CodeO Bit Operation 0 0 LOAD Y <= second_operand 0 1 AND Y <= firsLoperand and second_operand 1 0 OR Y <~ firsLoperand or second_operand 1 1 XOR Y <= firsLoperand xor second_operand 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 logical_bus_processing is Port ( firsLoperand: in std_logic_vector(7 downto 0); second .operand: in std_logic_vector(7 downto 0); codel : in stdjogic; codeO: in stdjogic; Y: out std—logic—vector(7 downto 0); clk: in stdjogic); end logical„bus_processing; architecture lowjevejdefinition of logicai_bus_processing is -- Internal signals signal combinatorial JogicaLprocessing: std_logic_vector(7 downto 0); begin bus„width_loop: for i in 0 to 7 generate
406 Зотов В. Ю, Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of logical Jut: label is «6Е8А»; begin logical Jut: LUT4 -translate_off generic map (INIT => X»6E8A») -translate_on port map( 10 => second„operand(i), 11 => first_operand(i), I2 => codeO, I3 =>code1, О => combinatorialJogicaLprocessing(i)); pipeline_bit: FD port map (D => combinatorialjogical_processing(i), Q=>Y(i), C => elk); end generate bus_widthjoop; end lowjevel_definition; - Definition of an 8-bit arithmetic process - This function uses 10 LUTs and associated carry logic. - The function contains an output pipeline register using 9 FDs. - - Operation - - Two input operands are added or subtracted. - An input carry bit can be included in the calculation. - An output carry is always generated. - Carry signals work in the positive sense at all times. - codel codeO Bit injected - 00 ADD 0 1 ADD with carry - 1 0 SUB 1 1 SUB with carry library IEEE; use IEEE.STD_LOGICJ164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library unisim; use unisim.vcomponents.all;
Приложение 1 407 entity arithmetic_process is Port ( firsLoperand: in stdjogic_vector(7 downto 0); second_operand: in stdjogic_vector(7 downto 0); carryjn: in stdjogic; codel: in stdjogic; codeO; in stdjogic; Y: out stdjogic„vector(7 downto 0); carry_out: out stdjogic; clk: in stdjogic): end arithmetic_process; architecture lowJeveLdefinition of arithmetic_process is - - Internal signals signal carryjn_bit : stdjogic; signal carry_out_bit : stdjogic; signal modified_carry_out: stdjogic; signal half.addsub : std Jogic_vector(7 downto 0); signal fulLaddsub : std Jogic_vector(7 downto 0); signal carry„chain : stdjogic. vector(6 downto 0); - - Attributes to define LUT contents during implementation - - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of carryjnputjut: label is «78»; attribute INIT of carry.outputjut: label is «6»; begin - Selection of the carry input to add/sub carryjnputjut: LDT3 —translate—off generic map (INIT => X»78») --translate_on port map( 10 => carryjn, 11 => codeO, I2 => codel, О -> carryjn J)it); - - Main add/sub - codel Operation - 0 ADD Y <= firsLoperand + second_operand 1 SUB Y <= firsLoperand - second_operand bus_widthjoop: for i in 0 to 7 generate
408 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of arithmeticjut: label is «96»; begin lsb_carry: if i=0 generate begin arithmetic_carry: MUXCY port map( DI => first_operand(i), Cl -> carryjn Joit, S => half_addsub(i), 0 => carry_chain(i)); arithmeticjcor. XORCY port map( LI => half_addsub(i), Cl => carryjnjjit, 0 => full_addsub(i)); end generate lsb„carry; mid_carry: if i>0 and i<7 generate begin arithmetic_carry: MUXCY port map( DI => first_operand(i), Cl => carry_chain(i-1), S => half—addsub(i), 0 => carry_chain(i)); arlthmeticjcor. XORCY port map( LI => ha)Laddsub(i), Cl => carry„chain(i-1), 0 => fulLaddsub(i)); end generate mid_carry; msb_carry: if i=7 generate begin arithmetic„carry: MUXCY port map( DI => first_operand(i), Cl => carry_chain(i-1), S => half_addsub(i), 0 => carry_out_bit); arithmetic„xor: XORCY port map( LI => half_addsub(i), Cl => carry_chain(i-1), 0 => fulLaddsub(i)); end generate msb_carry; arithmeticjut: LUT3 -translate_off generic map (INIT -> X»96») -translate_on port map( IO => first_operand(i),
Приложение 1 409 И => second_operand(i), I2 => codel, О => half_addsub(i)); pipeline_bit: FD port map (D => full_addsub(i), Q => Y(i), C => elk); end generate bus_width_loop; -- Modification to carry output and pipeline carry_output_lut: LUT2 -translate_off generic map (INIT => X»6») -translate_on port map( IO -> carry_out..bit, 11 => codel, 0 -> modified_carry_out); pipeline_bit: FD port map (D => modified_carry_out, Q -> carry_out, C => elk); end lowJeveLdefinition; - Definition of the Zero and Carry Flags including decoding logic. - The ZERO value is detected using 2 LUTs and associated carry logic to - - form a wired NOR gate. A further LUT selects the source for the ZERO flag - which is stored in an FDRE. - - Definition of the Carry Flag 3 LUTs and a pipeline flip-flop are used to select the source for the - CARRY flag which is stored in an FDRE. - • Total size 11 LUTs and 5 flip-flops. 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 f lag Jogic is Port ( data: in stdjogic_vector(7 downto 0); instruction!5: in stdjogic;
410 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС instruction! 4: in stdjogic; instruction! 3: in stdjogic; instruction!2: in stdjogic; instructions: in stdjogic; instructions: in stdjogic; code : in stdjogic_vector(2 downto 0); shadow_zero: in stdjogic; shadow_carry: in stdjogic; shift„rotate_carry: in stdjogic; add_sub_carry: in stdjogic; reset: in stdjogic; T_state: in stdjogic; zerojlag: out stdjogic; carryjlag: out stdjogic; clk: in stdjogic); end f lag Jogic; architecture lowJeveLdefinition of flagJogic is -- Internal signals signal enable!a : stdjogic; signal enable! a_carry : stdjogic; signal enable! b : stdjogic; signal enable! b_carry : stdjogic; signal flag_en_op_sx_or_returni: stdjogic; signal enable2a : stdjogic; signal enable2a„carry : stdjogic; signal enable2b : stdjogic; signal enable2b_carry : stdjogic; signal flag_en_op_sx_sy_or_kk : stdjogic; signal flag_enable : stdjogic; signa! Iower_zero : stdjogic; signal upper_zero : stdjogic; signal lower_zero_carry : stdjogic; signal data.zero : stdjogic; signal next.zerojlag : stdjogic; signal carry^status : stdjogic; signal next_carryjlag : stdjogic; signal sX_op_decode : stdjogic; signal sX^operation : stdjogic; -- Attributes to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of enlajut : label is «F002»; attribute INIT of enibjut attribute INIT of en2ajut attribute INIT of en2bjut : label is «4»; : label is «1 OFF»; : label is «FE»; attribute INIT of flag_enablejut : label is «А8»; attribute INIT of !ower_zerojut : label is «0001»;
Приложение 1 411 attribute INIT of upper_zero_lut : label is «0001»; attribute INIT of zero_selectjut : label is «F4B0»; attribute INIT of operationjut : label is «2000»; attribute INIT of carry_statusjut: label is «ЕС20»; attribute INIT of carry.selectjut: label is «F4B0»; begin Decode instructions requiring flags to be enabled enlajut: LUT4 -translate_off generic map (INIT => X»F002») -translate_on port map( 10 => instructions, 11 => instructions, I2 => instruction^, I3 => instructions, O=> enablela); enibjut: LUT2 •translate_off generic map (INIT => X»4») -translate.on port map( 10 => instruction 13, 11 => instruction^, O=> enablelb); enlajnuxcy: MUXCY port map( DI => 'O', Cl => T, S => enablela, O=> enable1a_carry); en1b_cymux: MUXCY port map( DI => '01, Cl => enablel a_carry, S=> enablelb, O=> enablel b_carry); enablel Jlop: FD port map (D => enablel b_carry, Q => flag„en_op_sx_or_retumi, C => elk); en2ajut: LUT4 -translate.off generic map (INIT => X» 10FF») --translate_on port map( I0 => instruction! 2, 11 => instruction^, I2 => instructions, I3 => instruction 15, О => enable2a);
412 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС en2bJut: LUT3 -translate_off generic map (INIT => X»FE») "translate_on port map( IO => code(O), 11 => code(1), I2 => code(2), O=> enable2b); en2a_muxcy: MUXCY port map( DI => *0', Cl =>T, S => enable2a, 0 => enable2a_carry); en2b_cymux: MUXCY port map( DI => 'O', Cl => enable2a_carry, S => enable2b, О => enable2b_carry); enable2Jlop: FD port map (D => enable2b_carry, Q => flag_en„op„sx„sy_or_kk, C => elk); flag_enablejut: LUT3 -translate_off generic map (INIT --> X»A8») --translates port map( IO => Testate, 11 => flag_en_op_sx_sy_or_kk, I2 => flag_en_op-sx_or_returni, О => flag„enable); -- Detect all bits in data are zero using wired NOR gate lower_zerojut: LUT4 -translate.off generic map (INIT => X»0001») --translates port map( IO => data(O), 11 => data(1), 12 => data(2), 13 -> data(3), О => lower_zero); upper_zerojut: LUT4 -translate.off generic map (INIT => X»0001») -translates port map( IO => data(4), 11 => data(5), 12 => data(6), 13 => data(7),
Приложение 1 413 О => upper_zero); lower_zero_muxcy: MUXCY port map( DI => ’O', Cl => ’1’, S => lower_zero, 0 => lower_zero_carry); upper_zero_cymux: MUXCY port map( DI => 'O’, Cl => lower_zero_carry, S => upper_zero, 0 => data„zero); -- Select new zero status or the shaddow flag for a RETURNI zero„selectjut: LUT4 -translate_off generic map (INIT => X»F4B0») -translate_on port map( IO => instructions, 11 => instruction^, I2 => data.zero, I3 => shadow_zero, О => next_zerojlag); zerojlagjlop: FDRE port map (D => next_zerojlag, Q => zero Jag, CE => flag_enable, R => reset, C => clk); -- Select new carry status based on operation operationjut: LUT4 --translate_off generic map (INIT => X»2000») -translate_on port map( IO => instruction 12, 11 => instructionl 3, 12 => instructions, 13 => instructionl 5, О -> sX„op_decode); operation_pipe: FD port map (D => sX_op_decode, Q => sX_operation, C => clk); carry_statusjut: LUT4 --translate„off generic map (INIT => X»EC20») -translate„on port map( 10 => code(2),
414 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 11 => sX.operation, I2 => add.sub.carry, I3 => shift_rotate_carry, О => carry.status); -- Select new carry status based on operationor the shaddow flag for a RETURNI carry_select_lut: LUT4 -translate.off generic map (INIT => X»F4B0») --translate_on port map( IO => instruction 14, 11 => instruction 15, I2 => carry_status, I3 => shadow_carry, О => next_carryjlag); carryjlagjlop: FDRE port map (D => next_carry_flag, Q => carryJlag, CE => flag_enable, R => reset, C => elk); end lowjevel.defi nition; -- Definition of an 8-bit bus 2 to 1 multiplexer with built in select decode - Requires 9 LUTs. 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 data_bus_mux2 is Port ( D1_bus: in stdjogic_vector(7 downto 0); DO_bus: in std_logic_vector(7 downto 0); instruction!5: in stdjogic; instructions: in stdjogic; instruction! 3: in stdjogic; instruction! 2: in stdjogic; Y_bus: out stdjogic_vector(7 downto 0)); end data_bus_mux2; architecture lowjevel.definition of data_bus_mux2 is - Internal signals
Приложение 1 415 signal constant_sy_sel : stdjogic; - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of decodejut: label is «9800»; begin - Forming decode signal decodejut: LUT4 -translate_off generic map (INIT => X»9800») --translate_on port map( IO => instruction^, 11 => instruction 13, I2 => instruction 14, I3 => instruction 15, О => constant_sy_sel); - - 2 to 1 bus multiplexer bus.widthjoop: for i in 0 to 7 generate - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of muxjut: label is «Е4»; begin muxjut: LUT3 --translate.off generic map (INIT => X»E4») --translate_on port map( IO => constant_sy_sel, 11 => DO Jous(i), I2 => D1_bus(i), 0=>YJ)us(i)); end generate bus_width Joop; end lowjevel_definitlon; - Definition of an 3-bit bus 2 to 1 multiplexer -- Requires 3 LUTs. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSlGNED.ALL;
416 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС library unisim; use unisim.vcomponents.all; entity ALU_control_mux2 is Port ( D1_bus: in std_logic_vector(2 downto 0); DO_bus: in stdjogic_vector(2 downto 0); instructionl 5: in stdjogic; Y_bus: out std_logic_vector(2 downto 0)); end ALU_control_mux2; architecture lowJeveLdefinition of ALU_control_mux2 is begin - - 2 to 1 bus multiplexer bus_widthjoop: for i in 0 to 2 generate - Attribute to define LUT contents during implementation - - The information is repeated in the generic map for functional simulation attribute INIT: string; a ttribute INIT of muxjut: label is «Е4»; begin muxjut: ШТЗ -translate_off generic map (INIT => X»E4») -translate_on port map( IO -> instructionl 5, 11 => D0_bus(i), I2 => D1_bus(i), 0 => Y J)us(i)); end generate bus_widthjoop; end lowJeveLdefinition; - - Definition of an 8-bit dual port RAM with 16 locations - - including write enable decode. - This mode of distributed RAM requires 1 'slice1 (2 LUTs)per bit. - Total for module 18 LUTs and 1 flip-flop. 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 data_register_bank is Port ( address_A: in std_logic_vector(3 downto 0);
Приложение 1 417 Din_A_bus: in stdjogic_vector(7 downto 0); Dout_A_bus: out stdjogic„vector(7 downto 0); address.B: in std_logic_vector(3 downto 0); Dout.B.bus: out std_logic_vector(7 downto 0); instruction! 5: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; activejnterrupt: in stdjogic; T_state: in stdjogic; elk: in stdjogic): end data_register_bank; architecture lowjevel_definition of data_register_bank is - - Internal signals signal write_decode : stdjogic; signal register.write : stdjogic; signal register_enable : stdjogic; - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of decode Jut: label is «1455»; attribute INIT of gatingjut: label is «8»; begin -- Forming decode signal decode Jut: LUT4 -translate.off generic map (INIT => X»1455») -translate.on port map( IO => activejnterrupt, 11 => instruction! 3, I2 => instruction! 4, I3 => instruction! 5, О => write_decode); decode_pipe: FD port map (D => write.decode, Q => register_write, C => elk); gatingjut: LUT2 -translate.off generic map (INIT => X»8») -translate.on port map( IO => T.state, 11 => register.write, О => register.enable); bus.widthjoop: for i in 0 to 7 generate 14—2062
418 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - Attribute to define RAM contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of data_register_bit: label is «0000»; begin data_register_bit: RAM16X1D - translate_off generic map(INIT => X»0000») - translate_on port map ( D => Din_A_bus(i), WE => register_enable, WCLK=> elk, AO => address_A(0), A1 => address_A(1), A2 => address_A(2), A3 => address_A(3), DPRAO => addressJB(O), DPRA1 => address_B(1), DPRA2 => address_B(2), DPRA3 => add ress_B(3), SPO -> Dout_A_bus(i), DPO => Dout_B_bus(i)); end generate bus_width Joop; end lowjevel_definition; - - Definition of basic time T-state and clean reset - - This function forms the basic 2 cycle T-state control used by the processor. - - It also forms a clean synchronous reset pulse that is long enough to ensure - - correct operation at start up and following a reset input. - - It uses 1 LUT 3 flip-flops. 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 T_state_and_Reset is Port ( resetJnput: in stdjogic; intemal_reset: out stdjogic; T_state: out stdjogic; elk: in stdjogic); end T_state_and_Reset; architecture low_level_definition of T_state_and_Reset is
Приложение 1 419 - Internal signals signal reset_delay1 : stdjogic; signal reset_delay2 : stdjogic; signal not_T_state : stdjogic; signal internal_T_state: stdjogic; -- Attributes to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of invertjut: label is «1»; begin delayjIop1: FDS port map (D => 'O', Q => reset_delay1, S => resetJnput, C => clk); delayjIop2: FDS port map (D => reset_delay1, Q => reset„delay2, S => resetjnput, C => clk); invert Jut: LUT1 -translate_off generic map (INIT -> X»1») -translate_on port map( IO => internal_T_state, О => notjjstate); toggleJlop: FDR port map (D => not_T_state, Q => internal_T_state, R => reset_delay2, c=> clk); T.state <= InternalJLstate; internaLreset <- reset_delay2; end lowJeveLdefinition; Definition Interrupt logic and shadow Flags. Decodes instructions which set and reset the interrupt enable flip-flop. - Captures interrupt input and enables shadow flags - Total size 4 LUTs and 5 flip-flops.
420 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 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 interruptJogic is Port ( interrupt: in stdjogic; instruction! 5: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; instructions: in stdjogic; instructions: in stdjogic; instruction4: in stdjogic; zerojlag: in stdjogic; carryjlag: in stdjogic; shadow_zero: out stdjogic; shadow_carry: out stdjogic; activejnterrupt: out stdjogic; reset: in stdjogic; T_state: in stdjogic; elk: in stdjogic); end interruptJogic; architecture low_level_definition of interruptjogic is - Internal signals signal cleanJNT : stdjogic; signal interrupt_pulse : stdjogic; signal activejnterruptjntemal: stdjogic; signal enable_a : stdjogic; signal enable_a_carry : stdjogic; signal enable_b : stdjogic; signal update_enable : stdjogic; signal INT_enable_value : stdjogic; signal INT_enable : stdjogic; : label is «0080»; : label is «АВАА»; : label is «АЕ»; : label is «4»; - Attributes to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of pulsejut attribute INIT of enjojut attribute INIT of en.ajut attribute INIT of valuejut begin - - assignment of output signal activejnterrupt <= activejnterruptjntemal;
Приложение 1 421 - Decode instructions that set or reset interrupt enable en„a_lut: LUT3 --translate.off generic map (INIT => X»AE») --translate_on port map( IO => actlveJntenrupUntemal, 11 => instruction4, I2 => instructions, О => enables); en.bjut: LUT4 --translate_off generic map (INIT => X»ABAA») -translate_on port map( IO => activeJnterruptJntemal, 11 -> instruction! 3, I2 => instruction! 4, I3 => instruction 15, О => enable.b); en_a_muxcy: MUXCY port map( DI => '0\ Cl => I1, S => enable_a, О => enable_a_carry); en_b_cymux: MUXCY port map( DI => 'O't Cl => enable_a_carry, S enable_b, О => update.enable); valuejut: LUT2 -translate„off generic map (INIT => X»4») -translate„on port map( 10 -> active JnterruptJntemal, it => instructions, О => INT_enable_value); enable Jlop: FDRE port map (D => INT.enablej/alue, Q => INT.enable, CE => update_enable, R => reset, C => elk); -- Capture interrupt signal and generate internal pulse it enabled captureJlop: FDR port map (D => interrupt, Q -> clean^INT, R => reset, C => elk); pulse Jut: LUT4
422 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС -translate_off generic тар (INIT => Х»0080») --transla1e_on port тар( 10 => T.state, И => clean JNT, 12 => INT_enable, 13 => activejnterruptjntemal, 0 => interrupt_pulse); active Jiop: FDR port map (D => interrupt—pulse, Q => activejnterruptjntemal, R reset, C => clk); - - Shadow flags shadow-carryjlop: FDE port map (D => carry Jag, Q => shadow-carry, CE => activejnterruptjntemal, C=> clk); shadow_zero Jop: FDE port map (D => zero Jag, Q => shadow.zero, CE => activejnterruptjntemal, C => clk); end lowJeveLdefinition; - Definition of the Input and Output Strobes - - Uses 3 LUTs and 2 flip-flops library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STDJOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library unisim; use unisim.vcomponents.all; entity IO_strobe Jogic is Port ( instructionl 5: in stdjogic; instructionl 4: in stdjogic; instructionl 3: in stdjogic; active .interrupt: in stdjogic; T„state: in stdjogic; reset: in stdjogic; write_strobe: out stdjogic; read_strobe: out stdjogic; clk: in stdjogic); end IO_strobeJogic;
Приложение 1 423 architecture lowjevel_definition of IO_strobeJogic is - Internal signals signal IO_type : stdjogic; signal write_event: stdjogic; signal read.event : stdjogic; - Attributes to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of lOjypeJut: label is «8»; attribute INIT of write Jut : label is «1000»; attribute INIT of read Jut ; label is «0100»; begin lOjypeJut: LUT2 -translate_off generic map (INIT => X»8») -translate_on port map( I0 => instruction! 3, 11 => instruction!5, 0 -> lOjype); writejut: LUT4 -translate_off generic map (INIT -> X»1000») *-translate_on port map( IO -> active Jnlemjpt, 11 => T_state, I2 => instruction! 4, I3 => lOjype, 0 => write_event); writejlop: FDR port map (D => write_event, Q => write„strobe, R => reset, C => elk); readjut: LUT4 —transfate, off generic map (INIT => X»0100») -translate_on port map( I0 => activejnterrupt, 11 => Tstate, I2 => instruction! 4, I3 => lOjype, 0 => read_event); readjlop: FDR port map (D => read_event, Q => read_strobe,
424 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС R => reset, С => elk); end lowJeveLdefi nition; - Definition of RAM for stack - This is a 16 location single port RAM of 8-bits to support the address range - of the program counter The ouput is registered and the write enable is active low. - - Total size 8 LUTs and 8 flip-flops. library IEEE; use 1EEE.STD_LOGIC_1 164. ALL; use IEEE.STD_LOGIC_ARITH.ALL; use 1EEE.STD_LOGIC_UNSIGNED.ALL; library unisim; use unisim.vcomponents.all; entity stack_ram is Port ( Din: in stdjogic_veclor(7 downto 0); Dout: out std Jogic_vector(7 downto 0); addr: in std_logic_vector(3 downto 0); write_bar: in stdjogic; elk: in stdjogic); end stack_ram; architecture lowjevel_definition of stack_ram is - Internal signals signal ram_out : stdjogic_vector(7 downto 0); signal wiite_enable: stdjogic: begin invert, enable: INV - Inverter should be implemented in the WE to RAM portmapf l=>write_bar, 0 => write„enable); bus_width_loop: for i in 0 to 7 generate - - Attribute to define RAM contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of stack_ram_bit: label is «0000»; begin stack_ram_bit: RAM16X1S - translated
Приложение 1 425 generic map( INIT => Х»0000») -- translates port map ( D=> Din(i), WE => write_enabler WCLK=> clk, A0=>addr(0)t A1 => addr(1), A2=> addr(2)f A3=> addr(3), 0 => ram_out(i)); stack_ramjlop: FD port map (D => ram_ out(i), Q => Dout(i), C=> clk); end generate bus_width Joop; end lowJeveLdefinition; - Definition of a 4-bit special counter for stack pointer - including instruction decoding. - Total size 8 LUTs and 4 flip-flops. library IEEE; use 1EEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library unisim; use unisim.vcomponents.all; entity stack_counter is Port ( instructionl 5: in stdjogic; instructionl 4: in stdjogic; instructionl 3: in stdjogic; instruction^: in stdjogic; instructions: in stdjogic; instructions: in stdjogic; instruction?: in stdjogic; T_state: in stdjogic; flag_condition_met: in stdjogic; activejnterrupt: in stdjogic; reset: in stdjogic; stack_count: out stdjogic_vector(3 downto 0); clk: in stdjogic); end stack_counter; architecture lowJeveLdefinition of stack_counter is -- Internal signals
426 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС signal notjntemjpt : stdjogic; signal counLvalue : std_logic_vector(3 downto 0); signal next_count : std_logic_veclor(3 downto 0); signal count_carry : stdjogic_vector(2 downto 0); signal half_count : stdjogic_vector(3 downto 0); signal calljype : stdjogic; signal validjo.move : stdjogic; signal pp_decode_a : stdjogic; signal pp_decode_a_carry: stdjogic; signal pp_decode_b : stdjogic; signal push_or_pop_type : stdjogic; - Attributes to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of validjnovejut: label is «D»; attribute INIT of call Jut : label is «0200»; attribute INIT of pp.ajut : label is «F2»; attribute INIT of pp.bjut : label is «10»; begin invertjnterrupt: INV - Inverter should be implemented in the CE to flip flops port map( I => activejnterrupt, О => not Jnterrupt); -- Control logic decoding validjnoveJut: LUT2 -translatejjff generic map (INIT => X»D») -translate_on port map( I0 => instruction! 2, 11 => flag„conditionjnet, О => valid jo_move); call Jut: LUT4 --translate_off generic map (INIT => X»0200») --translate_on port map( I0 => instructions, 11 => instruction 13, I2 instruction! 4, I3 => instruction! 5, О => calljype); ppjdut: LUT3 “translate_off generic map (INIT => X»F2») --translate^on port map( 10 => instruction?, 11 => instructions, I2 => instructions,
Приложение 1 427 О => pp„decode_a); pp.bjut: LUT3 -transSate_off generic map (INIT => X»10») --translate.on port map( IO => instruction! 3, 11 => instruction 14, I2 -> instruction! 5, О => pp_decode_b); pp_a_muxcy: MUXCY port map( DI r0\ Cl => T, S => ppjfecode.a, О => pp_decode_a_carry); en„b_cymux: MUXCY port map( DI => 'O', Cl => ppjjecode_a_carry, S => pp_decode_b, О => push„or_pop_type ); count_width Joop: for i in 0 to 3 generate -- The counter begin register_bit: FDRE port map (D => next_count(i)f Q count„value(i)r R => reset, CE => notjnterrupt, C=> elk); lsb„count: if i=0 generate -- Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of count Jut: label is «6555»; begin count Jut: LUT4 -translate.off generic map (INIT => X»6555») “translate_on port map( IO => counLvalue(i), 11 => T_state, I2 => validjo.move, I3 => push.oLpop Jype, О => half_count(i)); count jnuxey: MUXCY
428 Зотов В, Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС port тар( DI => count_value(i)f Cl => 'О', S => half_count(i)r О => count_carry(i)); count_xor: XORCY port map( LI => half_count(i), Cl => ’O', О => next_count(i)); end generate Isb.count; mid„count: if i>0 and i<3 generate - Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of count Jut: label is «А999»; begin count Jut: LUT4 -translate.off generic map (INIT => X»А999») -translate_on port map( 10 => count_value(i), 11 =>T_state, I2 -> valid Jojnove, I3 => call Jype, О => half_count(i)); count_muxcy: MUXCY port map( DI => count„value(i)f Cl => count_carry(i-1), S => half_count(i), О => count„carry(i)); count_xor: XORCY port map( LI => halfjount(i), Cl => counLcarry(M), О -> next_count(i)): end generate mid_count; msb„count: if i=3 generate - Attribute to define LUT contents during implementation ” The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of countjut: label is «А999»; begin count Jut: LUT4 "translate_off generic map (INIT => X»A999»)
Приложение 1 429 -translate_on port map( Ю => count_value(i), 11 -> T_state, I2 => valid Jo_move, I3 => calLtype, 0 => halLcount(i)); counLxor: XORCY port map( LI => half_count(l), Cl => count_carry(i-1), О -> nexLcount(i)); end generate msb_count; end generate count_width.loop; stack_count <= count_value; end lowJeveLdefinition; - - Definition of an 8-bit program counter - - This function provides the program counter and all decode logic. - Total size 21 LUTs and 8 flip-flops. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use 1EEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGlC_UNSIGNED.ALL; library unisim; use unisim. vcomponents.all; entity program_counter is Port ( instruction 15: in stdjogic; instruction! 4: in stdjogic; instruction 13: in stdjogic; instruction^: in stdjogic; instruction 11: in stdjogic; instruction! 0: in stdjogic; instructions: in stdjogic; instruction?: in stdjogic; instructions: in stdjogic; constantj/alue: in std_1ogic_vector(7 downto 0); stack_value: in stdjogic_vector(7 downto 0); T_state: in stdjogic; activejnterrupt: in stdjogic; carryjlag: in stdjogic; zero Jlag: in stdjogic; reset: in stdjogic; flag_condition_met: out stdjogic; program_count: out stdjogic_vector(7 downto 0); elk: in stdjogic);
430 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС end program_counter; architecture lowJeveLdef inition of program_counter is -- Internal signals signal decode_a : stdjogic; signal decode_a_carry : stdjogic; signal decode J) : stdjogic; signal move_group : stdjogic; signal condition_metjntemal: stdjogic; signal normal_count : stdjogic; signal incrementjoad.value : stdjogic; signal not.enable : stdjogic; signal selectedJoad_value : std_logic_vector{7 downto 0); signal incjoad_value_carry : stdjogic_vector(6 downto 0); signal incjoad„value : stdjogic_vector(7 downto 0); signal selected_count_value : stdjogic_vector(7 downto 0); signal inc_count_value_carry : stdjogic_vector(6 downto 0); signal inc„count_value : stdjogic_vector(7 downto 0); signal count_value : stdjogic_vector(7 downto 0); - Attributes to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of decode_ajut : label is «Е»; attribute INIT of decode Jt) Jut : label is «10»; attribute INIT of condition Jut: label is «5АЗС»; attribute INIT of countjut : label is «2F»; attribute INIT of increment Jut: label is «1»; begin decode instructions condition Jut: LUT4 --translate_off generic map (INIT => X»5A3C») --translate_on port map( I0 => carryJlag, 11 => zeroJlag, I2 => Instruction! 0, I3 => instruction! 1, О => conditionjmetjntemal); flag.conditionjinet <= condition jnetjnternal; decode.ajut: LUT2 4ranslatB_off generic map (INIT => X»E») -translate_on port map( I0 => instruction?, I! => instructions,
Приложение 1 431 О => decode.a); decode.bjut: LUT3 -'translate_off generic map (INIT => X»10») --translate_on port map( IO => instructionl3, 11 => instructionl 4, 12 -> instructionl 5, О => decode Js); decode_a_muxcy: MUXCY port map( DI => 'O', Cl => T, S -> decoder, О => decode_a_carry); decode_b_cymux: MUXCY port map( DI => 'O’, Cl => decoders j^arry, S => decode.b, О => move,group ); countjut: LUT3 --translate„off generic map (INIT => X»2F») 4ranslate_on port map( 10 => instruction! 2. 11 -> conditionjnetjntemal, I2=> move_group, О => normaLcount); incrementjut: LUT2 -t ranslate_off generic map (INIT =>X»1») “translate_on port map( IO => instructions, 11 => instructions, О => incrementjoad j/alue); - Dual loadable counter with increment on load vector invert_enable: INV -- Inverter should be implemented in the CE to flip flops port map( I => Testate, О -> notenable); count_widthjoop: for i in 0 to 7 generate -- Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of value_select_mux: label is «Е4»; attribute INIT of counLselectjnux: label is «Е4»; begin value_select_mux: LUT3 -translate_off
432 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС generic map (INIT -> Х»Е4») --translate_on port map( 10 => instructions, 11 => stack_value(i), I2 => constanLvalue(i), 0 => selected_load_value(i)); count_select_mux: LUT3 -translate_off generic map (INIT => X»E4») --translate_on port map( IO -> normaLcount, 11 => inc_load_value(i), I2 => count_value(i), 0 => selected_count_value(i)); register_bit: FDRSE port map (D => inc_count_value(i), Q => count_value(i), R => reset, S -> activejntemjpt, CE => noLenable, C => elk); Isb_carry: if i=0 generate begin loadjnc_carry: MUXCY port map( DI => '0\ Cl => incrementjoad_value, S => selected Joad_value(l), О ~> inc_load_value_carry(i)); loadjnc_xor XORCY port map( LI => selectedJoad„value(i), Cl => incrementjoad_value, О => incjoad_value(i)); countjnc.carry: MUXCY port map( DI => '01, Cl => normaLcount, S => selected_count_value(i), О => inc_count„_value_carry(i)); count Jncjcor XORCY port map( LI => selected_count_value(i), Cl => normaLcount, О => inc_count_value(i)); end generate lsb_carry; mid_carry: if i>0 and i<7 generate begin loadjnc-carry: MUXCY port map( DI => 'O', Cl => inc_load_value_carry(i-1), S => selectedJoadjzalue(i),
Приложение 1 433 О => inc_loadvalue_carry(i)); loadjnc_xon XORCY port map( LI selected_load_.value(i)r Cl => inc_load_value_carry(i-1)f О => incjoad_value(i)); countjnc-cany: MUXCY port map( DI => 'O', Cl ~> inc_count_va!ue carry{M), S -> selected_count_yalue(i), О => inccount_value_carry(i)); countJnc_xor: XORCY port map( LI => selected_count_value(i), Cl “> inc_count_value carry(M), О => inc_count_value(i)); end generate mid_carry; msb_carry: if i=7 generate begin loadjnc_xor: XORCY port map( LI => selectedjoad value(i), Cl => incjoad_value_carry(i-1), О => inc_load_value(i)); countjnc. xor: XORCY port map( LI => selected_count„value(i), Cl => inc_counCvalue_carry(i-1), О -> inc_count_value(i)); end generate msb_carry; end generate count_widthjoop; program_count count_value; end lowJeveLdefinition; - Library declarations - Standard IEEE libraries library IEEE; use 1EEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; - Main Entity for KCPSM entity kcpsm is Port ( address: out std_logic_vector(7 downto 0); 15—2062
434 Зотов В, Ю, Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 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 stdJogiC-Vector(7 downto 0); interrupt: in stdjogic; reset: in stdjogic; elk: in stdjogic); end kepsm; - Start of Main Architecture for KCPSM architecture macroJevei_definition of kepsm is - Components used in KCPSM and defined in subsequent entities. component data_bus_mux4 Port ( D3_bus: in std_logic_vector(7 downto 0); D2_bus: in stdjogic_vector(7 downto 0); D1_bus: in stdjogicj/ector(7 downto 0); DO.bus: in std_logic_vector(7 downto 0); instructions: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; instruction! 2: in stdjogic; code2: in stdjogic: Y_bus: out stdJogicj/ector(7 downto 0); elk: in stdjogic); end component; component shift_rotate_process Port ( operand: in std _logic_vector(7 downto 0); carryjn: in stdjogic; inject-bit: in stdjogic; shift-right: in stdjogic; codel : in stdjogic; codeO: in stdjogic; Y; out stdjogicj/ector(7 downto 0); carry_out: out stdjogic; elk: in stdjogic); end component; component logicaLbus_processing Port (first-operand: in std_logic_vector(7 downto 0); second_operand: in std_logic_vector(7 downto 0); codel : in stdjogic; codeO: in stdjogic;
Приложение 1 435 Y: out stdjogic_vector(7 downto 0); elk: in stdjogic); end component; component arithmetic_process Port ( first.operand: in stdjogic_vector(7 downto 0); secondjjperand: in stdjogic_vector(7 downto 0); carryjn: in stdjogic; codel: in stdjogic; codeO: in stdjogic; Y: out stdjogic_veclor(7 downto 0); carry_oul: out stdjogic; elk: in stdjogic); end component; component flag Jogic Port ( data: in stdjogic_vector(7 downto 0); instruction! 5: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; instruction! 2: in stdjogic; instructions: in stdjogic; instructions: in stdjogic; code; in std Jogic_vector(2 downto 0); shadow_zero: in stdjogic; shadow_carTy: in stdjogic; shift_rotale_carry: in stdjogic; add_sub_carry: in stdjogic; reset: in stdjogic; Testate: in stdjogic; zero Jlag: out stdjogic; carry_f lag: out stdjogic; elk: in stdjogic); end component; component data_bus_mux2 Port ( D1_bus: in stdjogic_vector(7 downto 0); D0_bus: in stdjogic_vector(7 downto 0); instruction! 5: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; instruction! 2: in stdjogic; Y_bus: out stdjogic_vector(7 downto 0)); end component; component ALU_controLmux2 Port ( D1 _bus: in stdJogic_vector(2 downto 0); DO Jus: in std Jogic_vector(2 downto 0); instruction! 5: in stdjogic; YJaus: out stdjogic_vector(2 downto 0)); end component; component data„register_bank Port ( address. A: in stdjogic_vector(3 downto 0); Din_A_bus: in stdjogic_vector(7 downto 0);
436 Зотов S, Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Dout_A_bus: out stdjogic_vector(7 downto 0); address.B: in stdjogic_vector(3 downto 0); Dout_B_bus: out stdjogicj/ector(7 downto 0); instruction! 5: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; activejnterrupt: in stdjogic; T_state: in stdjogic; elk: in stdjogic): end component; component T_state„and„Reset Port ( resetJnput: in stdjogic; intemal_reset: out stdjogic; T.state: out stdjogic; elk: in stdjogic); end component; component interruptJogic Port ( interrupt: in stdjogic; instruction! 5: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; instructions: in stdjogic; instructions: in stdjogic; instruction4: in stdjogic; zerojlag: in stdjogic; carry Jlag: in stdjogic; shadow„zero: out stdjogic; shadow_carry: out stdjogic; activejnterrupt: out stdjogic; reset: in stdjogic; T_state: in stdjogic; elk: in stdjogic); end component; component IO_strobeJogic Port ( instruction!5: in stdjogic; instruction! 4: in stdjogic; instruction^: in stdjogic; activejnterrupt: in stdjogic; Testate: in stdjogic; reset: in stdjogic; write_strobe: out stdjogic; read^strobe: out stdjogic; elk: in stdjogic); end component; component stack_ram Port ( Din: in std Jog ic_veclor(7 downto 0); Dout: out stdjogic_vector(7 downto 0); addr: in std Jogic_vector(3 downto 0); write J>ar: in stdjogic; elk: in stdjogic); end component;
Приложение 1 437 component stack„counter Port ( instruction 15: in stdjogic; instructionl 4: in stdjogic; instruction! 3: in stdjogic; instructions: in stdjogic; instruction9: in stdjogic; instructions: in stdjogic; instruction?: in stdjogic; T.state: in stdjogic; flag_condition_met: in stdjogic; active Jnterrupt: in stdjogic; reset: in stdjogic; stack.count: out stdjogic_vector(3 downto 0); clk: in stdjogic); end component; component program_counter Port ( instruction! 5: in stdjogic; instruction! 4: in stdjogic; instruction! 3: in stdjogic; instruction! 2: in stdjogic; instruction! 1: in stdjogic; instruction 10: in stdjogic; instructions: in stdjogic; instruction?: in stdjogic; instructions: in stdjogic; constant_value: in stdjogic_vector(7 downto 0); stack_value: in stdjogic„vector(7 downto 0); T.state: in stdjogic; activeJnterrupt: in stdjogic; carryJlag : in stdjogic; zero Jlag: in stdjogic; reset: in stdjogic; flag.condition.met: out stdjogic; program.count: out stdjogic_vector(7 downto 0); clk: in stdjogic); end component; Signals used in KCPSM -- Fundamental control signals signal Testate : stdjogic; signal intemaLreset: stdjogic; - Register bank signals 16—2062
438 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС signal sX_registe г signal sY_register : stdjogic„vector(7 downto 0); : stdjogic_vector(7 downto 0); - ALU signals signal ALU^control : std _logic_vector(2 downto 0); signal second„operand : std_logic„vector(7 downto 0); signal logicaLresult : stdjogic_vector(7 downto 0); signal shift_and-rotate_result: stdjogic_vector(7 downto 0); signal shifLand_rotate_carry : stdjogic; signal arithmetic_result : stdjogic_vector(7 downto 0); signal arithmetic_carry : stdjogic; signal ALU_result : stdjogic_vector(7 downto 0); -- Flag signals signal carryJiag : stdjogic; signal zero.flag : stdjogic; - Interrupt signals signal shadow_carry_flag : stdjogic; signal shadow.zerojlag : stdjogic; signal activejnterrupt : stdjogic; - Program Counter and Stack signals signal program_count : std Jogic_vector(7 downto 0); signal stack_pop_data : std_logic_vector(7 downto 0); signal stack-pointer : stdjogic_vector(3 downto 0); signal flag_condition-met: stdjogic; -- Start of KCPSM circuit description begin - Connections to portJd, out_port, and address ports. out_port <= sX.register; port_id <= second_operand; address <= program.count; - - Reset conditioning and T-state generation basic_control: T_state_and_Reset port map ( resetjnput => reset,
Приложение 1 439 intemaLreset => intemaLreset, T.state -> T.state, clk => clk ); -- Interrupt logic and shadow flags interrupt_group: interruptJogic port map ( interrupt => interrupt, instructionl 5 => instruction^), instructionl 4 => instruction^ 4), instructionl 3 => instructional 3), instructions => instructionfS), instructions => instruction^), instruction4 => instruction^), zero Jlag => zeroJlag, carryJlag => carryJlag, shadow.zero => shadow.zeroJlag, shadow.carry -> shadow.carryjlag, active Jnterrupt => active Jnterrupt, reset => intemaLreset, T_state => T.state, clk => clk ); - I/O strobes strobes: lO.strobe Jogic port map ( instructionl5 => instruction^), instructions => instruction^), instructionl 3 => instruction^ 3), active Jnterrupt => active Jnterrupt, T.state => T.state, reset => intemaLreset, write.strobe => wnte.strobe, read.strobe read.strobe, clk => clk ); -- Data registers and ALU registers: data_register_bank port map ( address.A => instruction^1 downto 8), Din.A.bus => ALU.result, Dout_A_bus => sX.register, address.B => instruction^ downto 4), Dout.B.bus => sY.register, instructionl 5 => instruction^), instruction! 4 => instruction^ 4), instructionl 3 => instructional 3), active Jnterrupt => activeJnterrupt, T.state => T.state, clk => clk );
440 Зотов В, Ю, Проектирование встраиваемых микропроцессорных систем на основе ПЛИС operand-select: data_bus_mux2 port тар ( D1_bus => sYjegister, DO. bus => inst ruction(7 downto 0), instruction! 5 => instruction^ 5). instruction! 4 => instruction(14), instruction! 3 -> instruction)! 3), instruction 12 => instructional 2), Y_bus => second„operand); ALU-Control_select: ALU_control_mux2 port map ( D1 Jsus => instruction^ downto 0), D0_bus => instruction^ 4 downto 12), instruction! 5 => instruction) 15), Y_bus => ALU-Controf); logic .group: logicalj>us„processing port map ( first_operand => sX^register, second„operand => second_operand, code! => ALU_control(1)r codeO => ALU_control(oj, Y => logical_resull, elk => elk); arthimetic_group: arithmetic_process port map ( first_operand -> sX„register, second_operand => second_operandf carryjn => canyjlag, code! -> ALU_control(1), codeO => ALU_control(0), Y => arithmetic_resultf carry_out => arithmetic_carry, elk => elk); shift_group: shift„rotate_process port map ( operand => sX_register, carryjn => canyjlag, inject—bit => instruction^, shift-right => instruction (3), code! => instruction (2), codeO -> instruction)!), Y => shifLand-rotate_result, carry-out -> shift-and-rotate-Carry, elk => elk); ALU Jinal_mux: data_bus_mux4 port map ( D3_bus => shift.andjotate Jesuit, D2_bus => in_portt D1_bus => arithmetic_result, DO-bus => logical-result, instruction! 5 => instruction) 15), instruction! 4 => instruction)! 4), instruction! 3 => instruction)! 3), instruction! 2 instructional, code2 => ALU_control(2), Y_bus => ALU_result,
Приложение 1 441 elk => elk); flags: flag Jogic port map ( data => ALU_result, instruction! 5 => instruction}! 5), instruction! 4 => instruction^ 4), instruction 13 => instruction (13), instructions => instructional 2), instructions => instruction(S), instructions => instruction (6), code => ALU-Control, shadow_zero => shadowjreroJIag, shadow_carry => shadow_carry_flag, shifLrotate_carry => shift„and„rotate_carry, add_sub_cairy => arithmetic-carry, reset => intemaLreset, T-State => T.state, zero Jag => zerojag, carryJlag => carryJlag, elk => elk); -- Program stack stack_memory: stack_ram port map ( Din => program_count, Dout => stack-pop-data, addr=> stack-pointer, write_bar => T.state, elk => elk); stack_control: stack-counter port map ( instruction!5 => instruction}!5), instruction! 4 => instruction^ 4), instruction! 3=> instruction(!3), instruction! 2 => instructional 2), instructions => instruction^), instructions => instruction(B), instruction? => instruction}?), T-State => T.state, flag„condition_met => flag_condition„met, activejnterrupt => activejnterrupt, reset => internal-reset, stack-count => stack_pointerf elk => elk); -- Program Counter address.counter: program.counter port map ( instruction!5 ~> instruction(15), instruction! 4 => instruction}! 4), instruction^ => instruction(13),
442 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС instruction^ => instruction^ 2), instructionl 1 -> instructional), instruction! О => instruction! 10), instructions => instruction^), instruction? => instruction!?), instructions => instruction(6), constanLvalue => instruction!? downto 0), stack_value => stack_pop_data, T.state => T.state, active Jnterrupt => activeJnterrupt, carryjag => carryj lag, zerojlag => zero Jlag, reset => intemaLreset, flag_condition„met -> flag_condition_met, program count => program.count, clk=> clk); end macroJeveLdefinition; • End of top level description for KCPSM. END OF FILE KCPSM. VHD
Приложение 2. VHDL-ОПИСАНИЕ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ИСПОЛЬЗОВАНИЯ В ПРОЕКТАХ, ВЫПОЛНЯЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВА COOLRUNNER-II Исходное VHDL-описание микропроцессорного ядра PicoBlaze, предназначенно- го для использования в проектах, выполняемых на основе ПЛИС семейства CoolRunner-II, имеет иерархическую структуру. В настоящем приложении представ- лено описание всех иерархических модулей на языке VHDL в такой последователь- ности: вначале приведен текст VHDL-описания объекта верхнего уровня иерархии picoblaze, а затем описание всех компонентов следующего (более низкого) уровня иерархии. - Constant (К) Coded Programmable State Machine for CoolRunner-II Devices --Version: 1.00 - - Version Date : 15th August 2002 - - Start of design entry: 12th July 2002 ---------------------------picoblaze....................... - Main Entity for picoblaze library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSiGNED.ALL; entity picoblaze is Port ( address: out stdjogic_vector(7 downto 0); instruction: in std_logic_vector(15 downto 0); port_id: out std_logic_vector(7 downlo 0); write_strobe: out stdjogic; out_port: out stdjogic_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 picoblaze; architecture Behavioral of picoblaze is - Size of register bank, stack counter can be changed here constant register_bank,address: natural := 3; - 8 registers constant stack_counter_address: natural := 2; -- 4 program stack address - size of program counter should not be changed
444 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС constant program_counter„address: natural := 8; - 256 program word - - Decalare instruction set decoding - - program control group constant jump Jd: stdjogic_vector(4 downto 0) := «11010»; constant canJd: stdJogic j/ector(4 downto 0) := «11011»; constant return Jd: stdjogic_vector(4 downto 0) := «10010»; * logical group constant load_k_to_xjd: stdjogic_vector(4 downto 0) := «00000»; constant load_yjo_xjd: stdjogic_vector(4 downto 0) := «01000»; constant and„kjo_x_id: std_logic_vector(4 downto 0) := «00001»; constant and_yjo_x_id: stdJogicj/ector(4 downto 0) := «01001»; constant orj<jo_xjd: stdJogicj/ector(4 downto 0) := «00010»; constant or_yjo_xjd; stdjogic_vector(4 downto 0) := «01010»; constant xor_kjo_xjd: stdjogic_vector(4 downto 0) := «00011»; constant xor_yjo_xjd: stdjogic_vector(4 downto 0) > «01011»; - arithmetic group constant add_kjo_xjd: stdjogic_vector(4 downto 0)«00100»; constant add_yjo_xjd: stdjogic_vector(4 downto 0) := «01100»; constant addcy_kjo_xjd: stdjogic_vector(4 downto 0) := «00101»; constant addcy_yjo_xjd: stdjogic_vector(4 downto 0) := «01101»; constant sub_kjo_xjd: stdjogic_vector(4 downto 0) := «00110»; constant sub_yjo„x jd: std Jogic j/ector(4 downto 0) := «01110»; constant subcy_kjo_xjd: stdjogic_vector(4 downto 0) := «00111»; constant subcy_y_to_xjd: std Jogicj/ector(4 downlo 0) «01111»; - shift and rotate constant shift_rotatejd: stdjogic_vector(4 downto 0) := «10100»; “ added new instruction - flip - constant flipjd: stdjogic_vector(4 downto 0) := «11111»; - - input/output group constant input_pjo_xjd: stdjogic_vector(4 downto 0) := «10000»; constant input_yjo_xjd: stdjogic_vector(4 downto 0) := «11000»; constant output_pjo_xjd: stdjogic_vector(4 downto 0) := «10001»; constant output_yjo_xjd: stdjogic,vector(4 downto 0) := «11001»; •• interrupt group constant interruptJd: stdjogic„vector(4 downto 0) := «11110»; constant retumijd: std Jogicj/ector(4 downto 0) := «10110»; - flag constant zerojd: stdjogic_vector(1 downto 0) := «00»; constant noLzeroJd: stdjogic_vedor(1 downto 0) := «01»: constant carryJd: stdjogic_vector(1 downto 0) := «10»;
Приложение 2 445 constant not_carryjd: stdjogic_vector(1 downto 0) := «11»; - i nstruction( 14): 0 — constant for 2nd operand, 1 - content of sYY register. - Components used in picoblaze and defined in subsequent entities. « Input and Output Strobes component IO_strobe_logic Port (ijnput: in stdjogic; Loutpu!: in stdjogic; activeJnterrupt: in stdjogic; T.state: in stdjogic; reset: in stdjogic; write„strobe: out stdjogic; read_strobe: out stdjogic; clk: in stdjogic); end component; - An 8-bit arithmetic process component arithmetic_pnocess Port (firsLoperand: in stdjogic_vector(7 downto 0); second_operand: in stdjogtc _vector(7 downto 0); carryjn: in stdjogic; codel : in stdjogic; codeO: in stdjogic; Y: out stdjogic_vector(7 downto 0); carry_out: out stdjogic; clk: in stdjogic); end component; - Definition of an 8-bit shift/rotate process component shifts rotate Port (operand: in std Jogic„vector(7 downto 0); carryjn: in stdjogic; inject„bit: in stdjogic; shifty right: in stdjogic; codel: in stdjogic; codeO: in stdjogic; Y : out stdjogic_vector(7 downto 0); carry_out: out stdjogic; clk: in stdjogic); end component; - added new instruction - Definition of flip process
446 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС -component flip - Port (operand: in stdjogic_vector(7 downto 0); Y: out stdjogic_vector(7 downto 0); elk: in stdjogic); - end component; - Definition of an 8-bit logical processing unit component logical_bus_processing Port (first_operand: in stdjogic_vector(7 downto 0); second_operand: in stdjogicj/ector(7 downto 0); codel : in stdjogic; codeO: in stdjogic; Y: out stdjogic_vector(7 downto 0); elk: in stdjogic); end component; -- Reset conditioning and T-state generation component T,state„and„Reset Port ( resetjnput: in stdjogic; intemal_reset: out stdjogic; T_stat6: out stdjogic; elk: in stdjogic); end component; - Decoding and timing of write enable for register bank and clock enable for flags component register_andjlag_enable Port (ijogical: in stdjogic; Larithmetic: in stdjogic; i_shift_rotate: in stdjogic; ijlip: in stdjogic: Lretumi: in stdjogic; ijnput in stdjogic; - added new instruction activejnterrupt: in stdjogic; T_state: in stdjogic; register^ nable: out stdjogic; flag„enable: out stdjogic; elk: in stdjogic); end component; -- Carry Flag logic component carryJlagJogic Port (add_sub: in stdjogic; shift: in stdjogic; return!: in stdjogic; shiftcany: in stdjogic; add_sub_carry: in stdjogic;
Приложение 2 447 shadow.canry: in stdjogic; reset: in stdjogic; flag_enable: in stdjogic; carryJlag : out stdjogic; clk: in stdjogic); end component; - Zero Flag logic component zero Jlag Jogic Port (data: in std Jogic_vector(7 downto 0); retumi: in stdjogic; shadow_zero: in stdjogic; reset: in stdjogic; flag_enable: in stdjogic; zeroJlag: out stdjogic; clk: in stdjogic); end component; -- Definition of a Program Counter component program.counter Port (i Jump : in std Jogic; i_call : in stdjogic; Lretum : in stdjogic; Lretumi : in stdjogic; conditional : in stdjogic; lowjnstruction : in stdjogic_vector(7 downto 0); stack.value ; in std Jogic„vector(7 downto 0); flag_condition jnet: in stdjogic; T.state : in stdjogic; reset : in stdjogic; interrupt : in stdjogic; prograiTLCOunt : out stdjogic_vector(7 downto 0); clk : in stdjogic); end component; -- An 8-bit dual port RAM component register.bank genericfM: natural); Port (we : in stdjogic; d.bus : i n stdJogicj/ector(7 downto 0); wcik : in stdjogic: a : in stdJogic_vector(M-1 downto 0); dpra : in stdJogic_vector(M-1 downto 0); spo.bus: out stdjogic_vector(7 downto 0); dpo.bus: out stdjogic_vector(7 downto 0)); end component; - State,ram
448 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС component stack_ram generic(M: natural; N: natural); Port (Din; in stdJogic_vector(N-1 downto 0); Dout: out stdJogic_vector(N-1 downto 0); addr: in stdJogic_vector(M-1 downto 0); write_bar: in stdjogic; elk: in stdjogic); end component; - Address pointer for program stack component stack_counter generic (N: natural); Port (i.call: in stdjogic; Lretum: in stdjogic; Lretumi: in stdjogic; conditional: in stdjogic; T_state: In stdjogic; flag„condition_met: in stdjogic; active Jnterrupt: in stdjogic; reset: in stdjogic; stackj:ount: out stdJogic_vector(N-1 downto 0); elk: in stdjogic); end component; - Capture of interrupt signal component interrupLcaplure is Port (interrupt: in stdjogic; T_state: in stdjogic; reset: in stdjogic; interrupt_enable: in stdjogic; active Jnterrupt: out stdjogic; elk: in stdjogic): end component; -- Interrupt Enable and shaddow flags component interruptjogic is Port (iJnterrupt: in stdjogic; Lretumi: in stdjogic; instructionO: in stdjogic; active Jnterrupt: in stdjogic; canyjlag: in stdjogic; zerojlag: in stdjogic; reset: in stdjogic; interrupLenable: out stdjogic; shaddow_carry: out stdjogic; shaddow.zero: out stdjogic; elk; in stdjogic); end component:
Приложение 2 449 -- internal signals -- instruction decoding signals signal (Jump: stdjogic; signal i_call: stdjogic; signal i_retum: stdjogic; signal Lretumi: stdjogic; signal ijoad.k Jo_x: stdjogic; signal i Joad_yJo_x; stdjogic; signal i_and_kjo„x: stdjogic; signal Land_yjo_x: stdjogic; signal LorJcJojc: stdjogic; signal Lor_y Jo_x: stdjogic; signal i_xor_kjo_x: stdjogic; signal i_xor_yjo_x: stdjogic; signal i_add_k_to_x: stdjogic; signal Ladd_yjo_x: stdjogic; signal i_addcy_kjo_x: stdjogic; signal i„addcy_y_to_x: stdjogic; signal Lsub_kjo_x: stdjogic; signal i_sub„yjo_x: stdjogic; signal Lsubcy JcJojc: stdjogic; signal i_subcy_yjo_x: stdjogic; signal i_add_sub: stdjogic; signal Lcarryjiocarry: stdjogic; signal IJnpuLpJojc: stdjogic; signal i JnpuLyJojc: stdjogic; signal i_output_pjo_x: stdjogic; signal i_output_yjo j(: stdjogic; signal ijnterrupt: stdjogic; signal ^arithmetic: stdjogic; signal iJogical: stdjogic; signal i_shift„rotate: stdjogic; signal i Jnput: stdjogic; signal Loutput: stdjogic; -- added new instruction - signal ijlip: stdjogic; signal conditional: stdjogic; signal zero: stdjogic; signa! not_zero: stdjogic; signa! carry: stdjogic; signal not_carry: stdjogic; signal shift_right: stdjogic; signal shiftjn_bit: stdjogic;
450 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС signal shift_code1: stdjogic; signal shift_codeO: stdjogic; signal Iogical„code1: stdjogic; signal Iogical_code0: stdjogic; -- Fundamental control signals signal intemaLreset: stdjogic; signal T_state: stdjogic; -- Register bank signals signal sX^register ; stdjogic_vector(7 downto 0); signal sY_register : stdjogicjzector(7 downto 0); signal register_write„enable: stdjogic; -- ALU signals signal second_operand : stdjogic_vector(7 downto 0); signal logical_result : std_logic_vector(7 downto 0); signal shift_and_rotate^result: stdjogic_vector(7 downto 0); signal $hifLand_rotate_carry : stdjogic; signal arithmetic_result : stdjogic_vector(7 downto 0); signal arithmetic_carry : stdjogic; signal ALU_result : std_logic_vector(7 downto 0); signal flip_result: stdjogic_vector(7 downto 0); -- Flag signals signal canyjlag : stdjogic; signal zerojlag : stdjogic; signal flag„clock_enable : stdjogic; signal flag_condition_met: stdjogic; -- Interrupt signals signal shaddow_carryjlag: stdjogic; signal shaddow_zerojlag : stdjogic; signal interrupLenable : stdjogic; signal activejnterrupt : stdjogic; -- Program Counter and Stack signals signal program„count : stdjogic_vector(7 downto 0); signal stack_pop_data: stdjogic_vector(7 downto 0); signal stack_pointer : stdjogic_vector(stack_counter_address-1 downto 0); - Start of picoblaze circuit description
Приложение 2 451 begin - Connections to output port and port address ouLport <= sX.register; portjd <= second ^operand; - Input and Output Strobes IO_strobes: IO_strobeJogic port map (ijnput => iJnput, Loutput => Loutput, active Jnterrupt => active Jnterrupt, T_state => T.state, reset -> intemaLreset, write.strobe => write_strobe, read_strobe => read.strobe, clk => clk); - The ALU structure arithmetic_group: arithmetic_process port map (firsLoperand => sX.register, second_operand => second„operand, carryjn => carryJlag, codel => Ladd-sub, codeO => Lcarry.nocarry, Y => arithmetic.result, carry.out => arilhmetic.carry, clk => clk); shlfLgroup: shifLrotate port map (operand => sX.register, carryjn => carryjlag, injecLbit -> shiftjn.bit, shift-right => shift.right, codel => shift_codel, codeO => shift_codeO, Y => shift_and_rotate_resultt cany„out => shift_and_rotate_carry, clk => clk); - - added new instruction - flip_group: flip - - port map (operand => sX.register, Y => flip.result, clk => clk); logical_group: logicaLbus_processing port map (firsLoperand => sX.register, second.operand second.operand, codel => logical_code 1, codeO => logicaLcodeO,
452 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС Y -> logical .result clk => clk); - Reset conditioning and T-state generation basic_control: T,state_and_Reset port map (resetjnput => reset, intemaLreset => intemaLreset, T.state => T.state, clk => clk); reg.and.fiag.enables: register_and_flag_enable Port map (ijogical => Logical, i.arithmetic -> (.arithmetic, i.shift.rotate => i.shift.rotate, i.flip => iJlip, -- added new instruction Lreturni => i.retumi, ijnput => ijnput, activejntenrupt => activejnterrupt, T.state -> T.state, register.enable -> register^write.enable, flag_enable => Иад_с1оск_епаЬ1е, clk => clk); carry.logic: carry.flagjogic Port map (add.sub -> i.arithmetic, shift => Lshift.rotate, return! “> Lreturni, shift.carry => shift.and.rotate.carry, add.sub.carry => arithmetic.carry, shadow.carry => shaddow.carry.flag, reset => internal-reset, flag_enable => flag_clock_enable, carryJlag => carry_flag, clk => clk); zero.logic: zerojlagjogic port map (data => ALU_result, return! => Lreturni, shadow.zero => shaddow.zerojlag, reset => intemaLreset, flag_enable => f(ag_clock.enable, zero_flag => zero.flag, clk ~> clk); -- Program Counter prog.count: program„counter port map (ijump => ijump, i.call => i.call, Lretum => Lreturn, Lreturni -> i.retumi,
Приложение 2 453 conditional => conditional, lowjnstruction => instruction^? downto 0), stack_value => stack_pop_data, flag_condition„met => flag. condition_met, T_state => T-State, reset intemaLreset, interrupt => activeJnterrupt, program_count => program_count, elk => elk); address <= program_count; - - Register bank data_registers: register_bank generic map (register_bank .address) port map (we => register_write_enable, d_bus => ALU_result, wcik => elk, a => instruction^ 0 downto 8), dpra => instruction^ downto 5), spoj)us => sX_register, dpo.bus => sYjegister); - - Stack RAM stackmemory: stack_ram generic map (stack_counter_address, program_counter_address) port map (Din -> program, count, Dout => stack-pop-data, addr => stack-pointer, write_bar=> T.state, elk => elk); - Stack Counter stack_control: stack_counter generic map (stack_counter_address) Port map (i_call -> Leal I, Lretum => i_re1umf Lreturni -> Lretumi, conditional => conditional, T.state => T.state, flag-condition„met => flag-condition-met, active Jnterrupt => activejnterrupt, reset => intemaLreset, stack_count => stack-pointer, elk => elk); - Capture of interrupt signal getjnterrupt: interrupt.capture
454 Зотов В. /О. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС port map (interrupt => interrupt, T.state => T_s!ate, reset => intemaLreset, interrupLenable => interrupLenable, activejnterrupt => activejnterrupt, elk => elk); - Interrupt Enable and shaddow flags interrupLcontrol: interruptJogic port map ([„interrupt => ijnterrupt, Lretumi => Lretumi, instruct ionO => i nstruction(O), activejnterrupt => activejnterrupt, carry Jlag => carryJlag, zeroJlag => zeroJlag, reset => intemaLroset, interrupLenable => interrupLenable, shaddow.carry => shaddow.carryjlag, shaddow.zero => shaddow_zerojlagr elk => elk); -- set condition and flag signals conditional <= instruction 10); zero <= '1' when instruction^ downto 8) = zerojd else *0'; noLzero <= '1* when instruction^ downto 8> = not_zerojd else '0‘; carry <- T when instruction^ downto 8) = carryjd else 'O'; noLcarry <= ‘11 when instruction^ downto 8) = not_carryjd else 'O'; flag„condition_met <= (zero and zerojlag) or (noLzero and (not zeroJlag)) or (carry and carryJlag) or (noLcarry and (not carryJlag)); - set shift decoding bits shiftJght <= instruction^); shiftJn_bit <= instruct ion(0); shift_code1 <= instruction^); shifLcodeO <= instruction^); logicaLcodel <= instruction(12); logicaLcodeO <= instructional 1); -- set instruction decoding signals iJump <= T when instruction^5 downto 11)- jumpjd else 'O'; Lcall <= T when instruction^ 5 downto 11) = callJd else '0‘; Lreturn <= T when instruction^5 downto 11) = returnJd else ’O'; Lretumi <= T when instruction^ 5 downto 11) = returniJd else 'O'; iJoadJJojc <= '1' when instruction^5 downto 11) = load_kjo_xjd else 'O'; Uoad_yjo_x <= '11 when instructional5 downto 11) = load_yjo_xjd else 'O'; LandJUojc <= T when instruction^ downto 11) = and„kjo„xjd else 'O'; Land_y_to_x <= '1' when instructional5 downto 11) = and_yjo_xjd else 'O’; i_or_kjo_x <= '11 when instruction( 15 downto 11)= or_kjo_xjd else ’O'; Lor„yjo,x <= T when instruction^ 5 downto 11) = or_yjo_xjd else 'O'; i_xor_kjo_x <- '1' when instruction^ 5 downto 11) = xor_kjo..xjd else 'O';
Приложение 2 455 i_xor_y_to_x <= I1 when instruction^ 5 downto 11) = xor_y_to_xjd else 'O'; Ladd_k_to_x <= '11 when instnjction{15 downto 11) = add_k_to_xjd else 'O'; i_add_y_to.x <= '11 when instructional5 downto 11) = add_yjo_xjd else 'O'; i_addcy_k_to_x <= T when instruction) 15 downto 11) = addcy_k_to_x_id else ‘0J; Laddcy..y_.to _x <=1Г when instructional 5 downto 11) = addcy_yjo_x_id else 'O'; Lsub„k_to_x <= '1' when instruction^ 5 downto 11) = sub_k_to_xjd else '0‘; Lsub_y_to_x <= '11 when instructional5 downto 11) = sub_y_to_xjd else ‘O'; i_subcy_k_to_x <= '11 when instruction^ 5 downto 11)= subcy_k_to_xjd else r0J; i_subcy у to. x <= T when instructional 5 downto 11) = subcy_yjo„xjd else ’O'; Unput_pjo_x <= T when instruction^ 5 downto 11) = inpuLpJojcJd else 'O'; ijnput_y_to_x <= '1' when instruction^ 5 downto 11) = input_y_to_xjd else 'O'; i_output_p jo, x <= '11 when I nstruc!ion(15 downto 11) = output_p_to_x_id else 'O'; Loutput_y_to_x <= T when instruction^ 5 downto 11) = output_y_to_xjd else '0‘; iJnterrupt <= '11 when instruction)! 5 downto 11) = interruptJd else 'O'; Lshiftjrotate <= '11 when instruction 15 downto 11)= shift_rotatejd else 'O'; -- added new instruction ijlip <= '11 when instruction 15 downto 11) = flipjd else 'O'; i_add„sub <= instruction^ 2); Lcarry.nocarry <= instructional 1); Larithmetic <= i_add_k_to_x or Ladd„yjoj( or Laddcy_k_to_x or i_addcy_yjo_x or i_.sub_kjo_x or i_sub_y_to_x or i_subcy_k Jo_x or i_subcy_y_to_x; Logical <= i_load_kJo_x or i Joad.yJo_x or Land-k_to_x or i_and_yJo_x or i_or_kjo„x or Lor„y_to_x or i_xor_k_to_x or i_xor_yjo_x; ijnput <= IJnput_p Jo_x or i Jnput_yJoj<; Loutput <= LoutpuLpJoj or i_output_yJo_x; -- get ALU result ALUJoop: for i in 0 to 7 generate begin ALU_result(i) <= (shlft_and_rotate_result(i) and Lshiftjrotate) or (in_port(i) and ijnput) or (arithmetic_result(i) and Larithmetic) or (flip_result(i) and ijlip) - added new instruction or (logical jesult(i) and i-logical); end generate ALU .loop; - decode second operand second_operand <= sY_registerwhen instruction^ 4) = 'Г else instruction)? downto 0); end Behavioral; .....................arithmatic-------------------------------- - - Definition of an 8-bit arithmetic process " Operation - - Two input operands are added or subtracted. - An input carry bit can be included in the calculation. - - An output carry is always generated. - Carry signals work in the positive sense at al! times.
456 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - codel codeO Bit injected - 00 ADD 0 1 ADD with carry - 1 0 SUB 1 1 SUB with cany library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity arithmetic_process is Port ( first_operand: in stdjogic _vector(7 downto 0); second_operand: in std_logic_vector(7 downto 0); carryjn: in stdjogic; codel : in stdjogic; codeO: in stdjogic; Y: out std_logic_vector(7 downto 0); carry_out: out stdjogic; elk: in stdjogic); end arithmetic_process; architecture iowJeveLdefinition of arithmetic .process is - An 8'bit adder/subtractor component addsub8 Port ( first_operand: in std_logic_vector(7 downto 0); second_operand: in stdjogic_vector(7 downto 0); carryjn: in stdjogic; subtract: in stdjogic; Y; out std Jogic_vector(7 downto 0); carry_out: out stdjogic; elk: in stdjogic); end component; - Internal signals signal carry_in_bit : stdjogic; signal canry_out_bit : stdjogic; signal modified_carry j)ut: stdjogic; begin - Selection of the carry input to add/sub carry_in_bit <= (codel and (not codeO) and (not carryjn)) or (codel and codeO and (not carryjn)) or (codel and (not codeO) and carryjn) or ((not codel) and codeO and carryjn);
Приложение 2 457 - - Main add/sub add_sub_module: addsub8 port map ( first_operand => first_operand, second_operand => second_operand, carryjn => carryjn.bit, subtract -> codel, Y => Y, carry_out => carry_out_bit, elk => elk); - - Modification to carry output and pipeline modified_carry_out <= codel xorcarry_out_bit; pipelinejsit: process (elk) begin if clk’event and elk = '11 then carry_out <= modified_carry_out; end if; end process pipeline_bit; end lowjevel_definition; - - Definition of an 8-bit adder/subtractor - subtract Operation 0 ADD Y <= first_operand + second_operand 1 SUB Y <= firs t_op era nd-seco nd_ope rand library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity addsub8 is Port ( firsjoperand: in stdjogic_vector(7 downto 0); second_operand: in stdjogic_vector(7 downto 0); carryjn: in stdjogic; subtract: in stdjogic; Y: out std_logic_vector(7 downto 0); carry_oul: out stdjogic; elk: in stdjogic); end addsub8; architecture I ow_level_defi nition of addsub8 is 17—2062
458 Зотов В. /О. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС -- Internal signals signal half_addsub: std_logic_vector(7 downto 0); signal ful Laddsub: stdjogic_vector(7 downto 0); signal carry_chain: std Jogic_vector(6 downto 0); begin bus_widthjoop: for i in 0 to 7 generate begin lsb_carry: if i=0 generate begin carry„chain(i) <= carryjn when halLaddsub(i)- '11 else first„operand(i); fulLaddsub(i) <- half_addsub(i) xor carryjn; end generate Isb.carry; mid_cairy: if i>0 and i<7 generate begin carry_chain(i) <= carry_chain(M) when halt_addsub(!)= '1' else firsloperand(i); fulLaddsub(i) <= half_addsub(i) xor carry_chain(i-1); end generate mid_carry; msb_cany: if i-7 generate begin carry-out <= carry_chain(M) when half_addsub(i)= T else first_operand(i); full_addsub(i) <= half_addsub(i) xorcarry_chain(i-1); end generate msb_carry; half„addsub(i) <= (subtract and second_operand(i) and first_operand(i)) or (subtract and (not secondjoperand(i)) and (not first_operand(i))) or ((not subtract) and (not second„operand(i)) and first.operand(i)) or ((not subtract) and second_operand(i) and (not firsLoperand(i))); pipeline J)it: process (elk) begin if clk'event and elk = T then Y(i) <= full_addsub(i); end if; end process pipeline Jit; end generate bus.widthjoop; end lowjeveljefi nition; --------------------shift_rotate---------------------------- - Definition of an 8-bit shift/rotate process - Operation - - The input operand is shifted by one bit left or right. - The bit which falls out of the end is passed to the carry., out. - - The bit shifted in is determined by the select bits
Приложение 2 459 -- codel codeO Bit injected -00 carryjn 0 1 msb of input_operand 1 0 Isb of operand 1 1 inject_bit library IEEE; use lEEE.STD.LOGIC 1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity shiftjotate is Port (operand: in std_logic_vector(7 downto 0); canyjn: in std_logic; injecLbit: in stdjogic; shift_right: in stdjogic; codel: in stdjogic; codeO: in stdjogic; Y: out stdjogic_vector(7 downto 0); carry-out: out stdjogic; elk: in stdjogic); end shift_rotate; architecture lowJeveLdefinition of shiftjotate is - Interna! signals signal mux_output : stdJogic_vector(7 downto 0); signal shift_in_bit: stdjogic; signal carryJ)it : stdjogic; begin - Selection of the bit to be shifted in shift_in_bit <= (injectJ)it and codel and codeO) or (operand(O) and codel and (not codeO) and shiftjight) or (operand(7) and (not codel) and codeO and shift_right) or (operand(7) and codel and (not codeO) and (not shift_right)) or (operand(O) and (not codel) and codeO and (not shiftjight)) or (carryjn and (not codel) and (not codeO)); - shift left or right of operand mux_output <= (shift_in_bit & operand(7 downto 1)) when shiftjight = '11 else (operand(6 downto 0) & shiftjn.bit); bus.width Joop: for i in 0 to 7 generate begin pipeline:
460 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС process (elk) begin if (cl k'event and elk = '1 then Y(i) <= mux_output(i); end if; end process pipeline; end generate bus_width_loop; - - Selection of carry output carryJait <= (shift-right and operand(O)) or ({not shiftjight) and operand)?)); fd: process (elk) begin if (clk'event and elk = T) then carry_out <- carry_bit; end if; end process fd; end lowJeveLdefinition; -------------------logical-bus-pracessing..................... - Definition of an 8-bit logical processing unit - This function provide the logical bit operations. - The function contains an output pipeline register using 8 FDs. -- Codel CodeO Bit Operation - 0 0 LOAD Y <- second_operand - 0 1 AND Y <= first_operand and second„operand - 1 0 OR Y <= firsLoperand or second_operand - 1 1 XOR Y <= first_operand xorsecond_operand 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 logical_bus_processing is Port (first_operand: in std_logic_vector(7 downto 0); second_operand : in std_logic_vector(7 downto 0); codel: in stdjogic; codeO: in stdjogic; Y: out stdjogic _vector(7 downto 0);
Приложение 2 461 clk: in stdjogic); end logical_bus_pracessing; architecture lowjevel „definition of logicai_bus_processing is -- Interna! signals signal combinatorialJogicaLprocessing: stdjogic_vector(7 downto 0); signal sei: stdjogicj/ector(1 downto 0); begin sei <= codel & codeO; bus_width_loop: for I in 0 to 7 generate begin combinatorial JogicaLprocessing(i) <= (firsLoperand(i) xor second_operand(i)) when (codel = T and codeO - *1') else (first_operand(i) or second_operand(i)) when (codel = 11 and codeO = V) else (f irsLoperand(i) and second_operand(i)) when (codel - '0' and codeO = 1') else second_operand(i); pipeline_bit: process (clk) begin if clk'event and clk = '1'then Y(i) <= combinatorialJogicaLprocessing(i); end if; end process pipeiine_bit; end generate bus_widthJoop; end lowJeveLdefinition; -------------------------flip.................................. - Definition of an 8-bit flip process - - Operation - - The input operand is flipped library IEEE; use IEEE.STD_LOG1C_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity flip is Port (operand: in std_logic_vector(7 downto 0); Y: out std _logic_vector(7 downto 0); clk: in stdjogic);
462 Зотов В, Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС end flip; architecture lowJeveLdefinition of flip is begin bus_width Joop: for i in 0 to 7 generate begin FF: process (elk) begin if (clk'event and elk = T) then Y(i) <= operand(7-i); end if; end process FF; end generate bus_width_loop; end lowJeveLdefinition; --------------------------carryjlag Jogic......................... - Definition of the Carry Flag library IEEE; uselEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity carryjlag Jogic is Port (add_sub: in stdjogic; shift: in stdjogic; returni: in stdjogic; shift_carry: in stdjogic; add_sub_carry: in stdjogic; shadow_carry: in stdjogic; reset: in stdjogic; fiag_enable: in stdjogic; carryjlag: out stdjogic; elk; in stdjogic); end carryj lag Jogic; architecture low_level_definition of carryJlagJogic is Internal signals signal carry_status : stdjogic; signal nexLcanyJlag: stdjogic; begin carry_status <= (shift_carry and shift) or (add_sub_carry and add_sub); -- Select new carry status or the shaddow flag for a RETURNI
Приложение 2 463 next_carryJlag <= (shadow_carry and retumi) or (shadow_cany and carry_status) or (carry_status and (shift or add_sub)); carryJlagJIop: process (elk) begin if clk'event and elk = T then if reset = T then canyjlag <- ‘O'; else if flag_enable «'11 then carryJlag <= next_canyjlag; end if; end if; end if; end process carry Jlag Jlop; end lowJeveLdefinition; .........interrupLcapture-------------------------------- - Definition of interrupt signal capture - This function accepts the external interrupt signal and synchronises it to the - processor logic. It then forms a single cycle pulse provided that interrupts - - are currently enabled. library IEEE; uselEEE.STD LOGIC 1164. ALL; use IEEE.STD LOGIC.ARITHALL; use IEEE.STD.LOGIC_UNSIGNED.ALL; entity interrupLcapture is Port (interrupt: in stdjogic; T.state: in stdjogic; reset: in stdjogic; interrupLenable: in stdjogic; activeJnterrupt: out stdjogic; elk: in stdjogic); end interrupLcapture; architecture lowJeveLdefinition of interrupLcapture is - - Internal signals signal cleanJnterrupt : stdjogic; signal interro pLpulse : stdjogic; signal active J nterrupLpulse: stdjogic; begin input Jlop: process (elk) begin
464 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС if clk'event and elk = Т then if reset - 'Г then clean—interrupt <= '0T; else cleanjnterrupt <= interrupt; end if; end if; end process inputjiop; interrupLpulse <- (not active JnterrupLpulse) and interrupLenable and cleanjnterrupt and T_state; togglejlop: process (elk) begin if clk'event and elk = '11 then if reset - T then activeJnterrupLpulse <= '0‘; else activeJnterrupLpulse <= interrupLpulse; end if; end if; end process togglejlop; activejnterrupt <= activeJnterrupLpulse; end lowjevel-definition; ..................interrupt Jogic................................... - - Definition of interrupt enable and shaddow flags - This function decodes the ENABLE and DSIABLE INTERRUPT instructions as well as - - the RETURNI ENABLE and RETURNI DISABLE instructions to determine if future interrupts - - will be enabled. - It also provideds the shaddow flags which store the flag status at time of an -- interrupt. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STDJ,OGIC„ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity interruptjogic is Port (ij nterrupt: in stdjogic; Lretumi: in stdjogic; instructionO: in stdjogic; activejnterrupt: in stdjogic; carryjlag: in stdjogic; zero Jlag: in stdjogic; reset: in stdjogic; interrupLenable: out stdjogic; shaddow_carry: out stdjogic; shaddow_zero: out stdjogic; elk: in stdjogic);
Приложение 2 465 end interruptJogic; architecture lowJeveLdefinition of interruptJogic is -- Internal signals signal update_enable : stdjogic; signal new_enable_value: stdjogic; begin update_enable <= (iJnterrupt and (not activeJnterrupt)) or activeJnterrupt or Lreturni; new^enable.value <= instructionO and (not activeJnterrupt); int_enablejlop: process (clk) begin if clk’event and clk - *11 then if reset ='1'then interrupt_enable <= 'O'; else if update.enable = '1' then interrupt-enable <= new_enable„value; end if; end if; end if; end process int_enable Jlop; preserve_carryjlop: process (clk) begin if clk'event and clk = T then if activejnterrupt = '1' then shaddow.carry <= carryjlag; end if; end if; end process preserve.carryjlop; preserve_zerojlop: process (clk) begin if clk'event and clk = '11 then if activejnterrupt = T then shaddow.zero <= zero Jlag; end if; end if; end process preserve_zerojlop; end lowJeveLdefinition; ....-.......... IO_strobeJogic---------------------------- -- Definition of the Input and Output Strobes
466 Зотов В. Ю, Проектирование встраиваемых микропроцессорных систем на основе ПЛИС library IEEE; use I EEE.STD.LOG IC_1164. ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library unisim; use unisim.vcomponents.all; entity lO.strobeJogic is Port (i .input: in stdjogic; Loutput: in stdjogic; active Jnterrupt: in stdjogic; T_state: in stdjogic; reset: in stdjogic; write_strobe: out stdjogic; read_strobe; out stdjogic; elk: in stdjogic): end lO.strobeJogic; architecture lowJeveLdefinition of IO_strobeJogic is - Internal signals signal write.event: stdjogic; signal read.event : stdjogic; begin write_event <= Loutput and (not T_state) and (not activeJnterrupt); writejlop: process (elk) begin if clk’event and elk = '1' then if reset = T then write_strobe <= 'Ol; else write_strobe <= write.event; end if; end if; end process writejlop; read_event <= iJnput and (not T.state) and (not activeJnterrupt); read Jlop: process (elk) begin if clk’event and elk = *1' then if reset = T then read_strobe <= ’O'; else read.strobe <= read.event; end if; end if; end process readJlop; end lowJeveLdefinition;
Приложение 2 467 -------------------- program„counter----------------------- - Definition of an 8-bit program counter -- This function provides the control to the dual loadable counter library IEEE; use IEEE.STDJ.OGIC 1164. ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity program„counter is Port (ijump : in stdjogic; Lcall : in stdjogic; Lretum : in stdjogic; Lreturni : in stdjogic; conditional : in stdjogic; lowjnstruction : in std_logic_vector(7 downto 0); stack_value : in std_logic_vector(7 downto 0); flag_condition_met: in stdjogic; T_state : in stdjogic; reset ; in stdjogic; interrupt : in stdjogic; program_count : out std_logic„vector(7 downto 0); clk : in stdjogic); end program_counter; architecture lowJeveLdefinition of program_counter is - Internal signals signal move_group ; stdjogic; signal normal_count : stdjogic; signal seiectjoad_value: stdjogic; signal selectedjoad_value : stdjogic_vector(7 downto 0); signal count_value : std_logic_vector(7 downto 0); begin move_group <= ijump or Lcall or Lreturn or Lreturni; normaLcount <= (not move_group) or (move_group and (not flag_condition_met) and conditional); select Joad_value <= ijump or Lcall; selected_load_value <= lowjnstruction when select_load_value - T else stack_value; duaijoadable_counter: process (clk) begin if clk'event and clk = T then if interrupt = T then
468 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС count_value <= «11111111»; else if reset = '1' then count_value <= «00000000»; else if T_state = 'O' then if nomriaLcount = T then count_value <= countj/alue + 1; else if Lreturn = T then count_value selected_load_value +1; else count_value <= selected_load_value; end if; -- increment_load_value end if; - normaLcount end if; -- enable „bar end if; -- reset end if; - ce_3FF end if; -- elk end process dual Joadabie„counter; program_count <= count_value; end lowJeveLdef inition; ------------------register_and_flag_enable................................. - Definition of write enable for register bank and flags “ This function decodes all instructions which result in a value being stored - in the data registers and those cases in which the flags must be enabled. - The generation of a register enable pulse is prevented by an active interrupt condition. - The single cycle pulse timing of each enable is determined by the T-state. library IEEE; use IEEE.STD_LOG1C_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity register_and_flag_enable is Port (ijogical: in stdjogic; Larithmetic: in stdjogic; i_shift_rotate: in stdjogic; ijlip: in stdjogic; -- added new instruction Lreturni: in stdjogic; Unput: in stdjogic; activejnterrupt: in stdjogic; T_state: in stdjogic; registe cenable : out stdjogic; flag_enable: out stdjogic; elk: in stdjogic); end register_and_flag_enable; architecture lowjevejdefinition of register_andjlag_enable is
Приложение 2 469 “ Internal signals signal reg.instruction.decode : stdjogic; signal register.write.valid : stdjogic; signal return i_or.shift„decode: stdjogic; signal return i.or.shift.valid : stdjogic; signal arith_orjogical_decode: stdjogic; signal arith or logical_valid : stdjogic; begin “ Register enable - - added new instruction, uncomment this instruction and comment next instruction - - to enable the new instruction - regjnstruction_decode <- (i Jogical or Larithmetic or Lshift.rotate or i.inpu! or i.flip) and (not activeJnterrupt); regjnstruction_decode <= (i Jogical or Larithmetic or i_shrft_rotate or i .input) and (not activeJnterrupt); reg_pipeline_bit: process (elk) begin if clk'event and elk = T then register_write_valid <= regjnstruction.decode; end if; end process reg_pipeline_bit; register_enable <= register_write_valid and T_state; - Flag enable arith_orJogicaLdecode <= i Jogical or Larithmetic; flag_pipeline1_bit: process (elk) begin if clk'event and elk -'1'then arith_orJog IcaLvalid <= arith.orjogical.decode; end if; end process flag_pipeline1_bit; retumLor^shift-decode <= i_shift_rotate or Lretumi; flag_pipeline2_bit: process (elk) begin if clk'event and elk = T then retumi.or.shifLvalid <= retumi_or_shift_decode; end if; end process flag_pipeline2_bit; flag_enable <= (retumi.or.shift.valid and arith.orJogicaLvalid and T.state) or (retumi_or_shift_valid and (not arith.or.logical.valid) and T.state) or ((not retumi_or_shift„vaiid) and arith.orjogical.valid and T.state);
470 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС end lowJeveLdefinition; ---------------------registerjbank----------------------------- Definition of an 8-bit dual port RAM with 2 ** M locations (M-bit address) brary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity register_bank is generic(M: natural); Port (we : in stdjogic; d_bus : in std_logic_vector(7 downto 0); wcik : in stdjogic; a : in std_logic_vector(M-1 downto 0); dpra : in stdJogic_vector(M-1 downto 0); spo_bus: out std_logic_vector(7 downto 0); dpojjus: out std_logic_vector(7 downto 0)); end register_bank; architecture Behavioral of registerJbank is component ram_Nx1 generic(M; natural); Port (we: in stdjogic; d: in stdjogic; wcik: in stdjogic: a: in std_logic_vector(M-1 downto 0); dpra : in std_logic_vector(M-1 downto 0); spo: out stdjogic; dpo: out stdjogic); end component; begin bus_width Joop: for i in 0 to 7 generate begin data_register_bit: ram_Nx1 generic map (M) port map (d => d_bus(i), we => we, wcik => wcik, a-> a, dpra => dpra, spo => spoj)us(i), dpo => dpo_bus(i)); end generate bus_widthJoop; end Behavioral; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;
Приложение 2 471 use IEEE.STD_LOGICJJNSIGNED.ALL; entity ram_Nx1 is generic(M: natural); Port (we: in stdjogic; d: in stdjogic; wcik: in stdjogic; a: in std_logic_vector(M J downto 0); dpra: in std_logic_vector(M-1 downto 0); spo: out stdjogic; dpo: out stdjogic); end ram_Nx1; architecture Behavioral of ram_Nx1 is signal rambit: stdjogic_vector((2 ** M) -1 downto 0); begin fd: process (wcik) begin if (wclk'event and wcik = '1') then if we = T then rambit(convjnteger(a)) <= d; end if; end if; end process fd; dpo <= rambit(conv Jnteger(dpra)); spo <= rambit(convjnteger(a)); end Behavioral; -----------------------stack„counter---------------- - Definition of a N-bit special counter for stack pointer - - The counter is able to increment and decrement. ~ It can also hold current value during an active interrupt - - and decrement by two during a RETURN or RETURNI. library IEEE; use IEEE.STDJ.OGICJ164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity stack_counter is generic (N: natural); Port (Lcall: in stdjogic; Lreturn: in stdjogic; i_ returni: in stdjogic; -- i .interrupt: in stdjogic; conditional: in stdjogic; T_state: in stdjogic; flag_condition_met: in stdjogic;
472 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС activejnterrupt; in stdjogic; reset: in stdjogic; stack.count: out stdJogic.vector(N-1 downto 0); clk: in stdjogic); end stack„counter; architecture lowJeveLdefinition of stack_counter is -- Internal signals : stdjogic; : std Jogic_vector(N-1 downto 0); : std_logic_vector(N-1 downto 0); : std_logic_vector(N-2 downto 0); : stdJogic_vector(N-1 downto 0); signal notjnterrupt signal count.value signal next_count signal count_carry signal half.count signal valid.to.move : stdjogic; signal push.or_pop.type: stdjogic; begin - Inverter should be implemented in the CE to flip flops notjnterrupt <= not activejnterrupt; - - Control logic decoding valid Jo.move <= flag_condition_met or (not conditional); push.or.popjype <= Lcall or Lretum or Lreturni;- or i Jnterrupt; counLwidth Joop: for i in 0 to N-1 generate - The counter begin register_bit: process (clkt reset) begin if reset = I1 then count_value(i) <= '01; else if clk'event and clk = 1’ then if notjnterrupt = T then count.val ue(i) <= next—count(i); end if; end if; end if; end process register—bit; lsb_count: if i=0 generate begin halLcount(i) <- (push_or_pop_type and valid Jo_move and (not T.state) and counLvalue(i)) or (push jjrjxjpJype and (not valid Jo.move) and (not T.state) and (not count.value(i))) or ((not push_or_pop_type) and (not T.state) and (not count—value(i))) or (T.state and (not count.value(i))); count.carry(i) <= (not half.count(i)) and count.value(i); next—count(i) <- half—count(i);
Приложение 2 473 end generate Isb.count; mid.count: if i>0 and i<N-1 generate begin half_count(i) <= (Lcall and valid.to.move and (not T.state) and count_value(i)) or (Lcall and (not valid Jojnove) and (not T.state) and (not count.value(i))) or {(not Lcall) and (not T.state) and (not count_value(i))) or (T.state and count_value(i)); count.carry(i) <- {(not half.count(i)) and count.value(i)) or (half.count(i) and count.carry(i-l)); next.count(i) <= half.counl(i) xor count.cany(i-l): end generate mid.count; msb.count: if i=N-1 generate begin half.count(i) <= (Lcall and valid Jo.move and (not T.state) and count.value(i)) or (i.call and (not validJo.move) and (not T.state) and (not count.value(i))) or ((not i.call) and (not T.state) and (not count.value(i))) or (T.state and count.value(i)); next.count(i) <= half.count(i) xor count.carry(M); end generate msb.count; end generate count.width.loop; stack.count <= count.value; end lowJeveLdefinition; ---------------------stack.ram------------------------------------ - Definition of RAM for stack - This is a 2**M location single port RAM of N-bits to support the address range - - of the program counter The ouput is registered and the write enable is active low. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity stack.ram is generic(M: natural; N: natural); Port ( Din: in std_logic_vector(N-1 downto 0); Dout: out std_logic_vector(N-1 downto 0); addr: in std.logic_vector(M-1 downto 0); write.bar: in stdjogic; elk: in stdjogic); end stack.ram; architecture lowJeveLdefinition of stack.ram is component ram.xls generic(M: natural); Port ( d : in stdjogic; we : in stdjogic;
474 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС wcik : in stdjogic; а : in stdJogic_vector(M-1 downto 0); о : out stdjogic); end component; - - Internal signals signal ram_out : stdJogic_vector(N-1 downto 0); signal write_enable: stdjogic; begin - - Inverter should be implemented in the WE to RAM write_enable <= not write_bar; bus_width_loop: for i in 0 to N-1 generate - Attribute to define RAM contents during implementation -- The information is repeated in the generic map for functional simulation begin stack_ram_bit: ram_x1s generic map (M) port map ( d => Din(i), we => write_enable, wcik => elk, a => addr, о ~> ram_out(i)); stack.ramjlop: process (elk) begin if clk'event and elk = '1' then Dout(i) <~ ram_out(i); end if; end process stack_ram Jlop; end generate bus_widthjoop; end lowjevel_definition; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ram_x1 s is generic (M: natural); Port ( d : in stdjogic; we : in stdjogic; wcik : in stdjogic; a : in std_logic_vector(M-1 downto 0); о : out stdjogic); end ram_x1s;
Приложение 2 475 architecture Behavioral of ram_x1s is signal rambit: std_logic_vector((2**M)d downto 0); begin fd: process (wcik) begin if (wclk'event and wcik = 1') then if we = '1'then rambit(convjnteger(a)) <= d; end if; end if; end process fd; о <= rambit(conv_integer(a)); end Behavioral; ------------------------------T_state_and_Re$et - Definition of basic time T-state and clean reset -- This function forms the basic 2 cycle T-state control used by the processor. -- It also forms a clean synchronous reset pulse that is long enough to ensure -- correct operation at start up and following a reset input. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STDJ-OGIC_UNSIGNED.ALL; entity T_state_and_Reset is Port ( resetjnput: in stdjogic; intemaLreset: out stdjogic; T.state: out stdjogic; clk: in stdjogic); end T_state_and_Reset; architecture lowJeveLdefinition of T^state„and_Reset is - Internal signals signal reset_delay1 : stdjogic; signal reset„delay2 : stdjogic; signal not_T_state : stdjogic; signal intemal_T_state: stdjogic; begin delay Jlopl: process (clk) begin if clk'event and clk = '1' then
476 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС reset_delay1 <= resetjnput; end if; end process delay Jlopl; delayjlop2: process (elk) begin if clk’event and elk = T then reset„delay2 <= reset_delay1 or resetjnput; end if; end process delay_flop2; not_T_state <- not intemal_T_state; togglejlop: process (elk) begin if clk'event and elk = '11 then if (reset_delay2 = T) then internal_T_state <= ’O'; else internal_T_state <= not_T_state; end if; end if; end process togglejlop; Testate <= internal_T_state; internaLreset <= reset_delay2; end lowJeveLdefinition; .........................- zero Jlag Jogic —...... -- Definition of the Zero Flag -- The ZERO value is detected and stored in an FDRE. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity zerojlag Jogic is Port (data: in std_logic_vector(7 downto 0); returni: in stdjogic; shadow_zera: in stdjogic; reset: in stdjogic; flag_enable: in stdjogic; zerojlag: out stdjogic; elk: in stdjogic); end zerojlag Jogic; architecture lowjevel_definition of zerojlagjogic is - Internal signals
Приложение 2 477 signal lower_zero : stdjogic; signal upper_zero : stdjogic; signal lower_zero_carry: stdjogic; signal data.zero : stdjogic; signal next_zerojlag : stdjogic; begin -- Detect all bits in data are zero using wired NOR gate lower.zero <= (not data(3)) and (not data(2)) and (not data(1)) and (not data(O)); upper_zero <= (not data(7)) and (not data(6)) and (not data(5)) and (not data(4)); lower_zero_carry <= lower_zero; data„zero <= (upper.zero) and lower„zero_carry; -- Select new zero status or the shaddow flag for a RETURNI next„zerojlag <= (data.zero and (not retumi)) or (shadow_zero and retumi); zerojlagjlop: process (elk) begin if clk'event and elk = T then if (reset = T)then zerojlag <- 'O’; else if (flag_enable = *1') then zerojlag <= nexLzeroJIag; end if; end if; end if; end process zerojlagjlop; end lowJeveLdefinition;
ПРИЛОЖЕНИЕ 3. VHDL-ОПИСАНИЕ ИСПОЛНИТЕЛЬНОГО МОДУЛЯ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, РЕАЛИЗУЕМОГО НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-З, VIRTEX-II, VIRTEX-IIPRO, VIRTEX-4 В данном приложении представлен полный текст описания исполнительного мо- дуля микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-З, Virtex-П, Virtex-IIPRO, Virtex-4, на языке VHDL. Это описание выполнено в виде иерархической конструкции. Вначале (после комментариев) приведено VHDL- описание объекта верхнего уровня иерархии KCPSM3. Далее следуют описания всех используемых компонентов более низкого уровня иерархии. - PicoBlaze - Constant (К) Coded Programmable State Machine for Spartan-З Devices. - - Also suitable for use with Virtex-II and Virtex-IIPRO devices. - - Includes additional code for enhanced VHDL simulation. Version: 1.30 - Version Date: 14th June 2004 - - Reasons: Avoid issue caused when ENABLE INTERRUPT is used when interrupts are already enabled when an an interrupt input is applied. Improved design for faster ZERO and CARRY flag logic - - Format of this file. - - This file contains the definition of KCPSM3 as one complete module with sections - - created using generate loops. This 'flat' approach has been adopted to decrease - the time taken to load the module into simulators and the synthesis process. - - The module defines the implementation of the logic using Xilinx primitives. - - These ensure predictable synthesis results and maximise the density of the implementation. - - The Unisim Library is used to define Xilinx primitives. It is also used during - - simulation. The source can be viewed at %X I LI NX %\vhdl\src\unisims\unisim_VCOMP.vhd - Library declarations - - Standard IEEE libraries 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;
Приложение з 479 - - Main Entity for KCPSM3 entity kcpsm3 is Port ( address: out stdjogic_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; interrupt.ack: out stdjogic; reset: in stdjogic; elk: in stdjogic); end kcpsmS; - - Start of Main Architecture for KCPSM3 architecture lowJeveLdefinition of kcpsm3 is - - Signals used in KCPSM3 Fundamental control and decode signals signal Lstate : stdjogic; signal notj.state : stdjogic; signal intemaLreset : stdjogic; signal reset_delay : stdjogic; signal move„group : stdjogic; signal condition_met : stdjogic; signal normaLcount : stdjogic; signal calljype : stdjogic; signal push_or_popjype : stdjogic; signal validjojnove : stdjogic; - - Flag signals signal flagjype : stdjogic; signal flagj/vrite : stdjogic; signal f1ag_enable ; stdjogic; signal zerojlag : stdjogic; signal seLshadow.zero : stdjogic; signal low_zero : stdjogic;
480 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС signal high_zero : stdjogic; signal low_zero„carry : stdjogic; signal hlgh_zero_cany : stdjogic; signal zero_carry : stdjogic; signal zerojast_route : stdjogic; signal low_parity : stdjogic; signal high_parity : stdjogic; signal parity,carry : stdjogic; signal parity : stdjogic; signal carryjlag ; stdjogic; signal seLparity : stdjogic; signal sel_arith_carry : stdjogic; signal seLshift.carry : stdjogic; signal sel_shadow_carry : stdjogic; signal seLcarry : stdjogic_vector(3 downto 0); signal carryJastjoute : stdjogic; -* Interrupt signals signal activejnterrupt : stdjogic; signal inLpulse : stdjogic; signal cleanjnt : stdjogic; signal shadow__carry : stdjogic; signal shadow.zero ; stdjogic; signal int_enable : stdjogic; signal int_update„enable : stdjogic; signal inLenable_value : stdjogic; signal interrupt_ackjntemal: stdjogic; - Program Counter signals signal pc signal pc_vector signal pc_vector„carry signal inc_pc_vector signal pc_value signal pc_value„carry signal inc_pc_value signal pc_enable : stdjogic_vector(9 downto 0); : stdjogic_vector(9 downto 0); : stdjogic„vector(8 downto 0); : stdjogic_vector(9 downto 0); : stdjogic_vector(9 downto 0); : stdjogic„vector(8 downto 0); : stdjogic_vector(9 downto 0); : stdjogic; - Data Register signals signal sx signal sy signal registerjype signal register_write signal register_enable signal second_operand : stdJogicj/ector(7 downto 0); : stdjogic_vector(7 downto 0); : stdjogic; : stdjogic; : stdjogic; : stdjogic_vector(7 downto 0); - Scratch Pad Memory signals signal memory_data : stdjogic_vector(7 downto 0);
Приложение 3 481 signal store_data : sldjogic_vector(7 downto 0); signal memory Jype : stdjogic; signal memory_write : stdjogic; signal memory_enable : stdjogic; -- Stack signals signal stack_pop_data signal stack_ram_data signal stack_address signal half_stack_address signal stack_address_carry signal next_stack_address signal stack_write.enable signal not.activejnterrupt : stdjogic_vector(9 downto 0); : stdjogic_vector(9 downto 0); : stdjogic_vector(4 downto 0); : stdjogic_vector(4 downto 0); : stdjogic_vector(3 downto 0); : stdJogicj/ector(4 downto 0); : stdjogic; : stdjogic; - ALU signals : std Jogic_vector(7 downto 0); ; std_logic_vector(7 downto 0); : stdjogic; : std_loglcvector(7 downto 0); : std_logic_vector(7 downto 0); : stdjogic; : stdjogic; : stdjogic; stdjogic; : stdjogic: : stdjogic: : stdjogic_vector(7 downto 0); : stdjogic_vecton(7 downto 0); : stdjogic_vector(7 downto 0); signal logical Jesuit signal logical-value signal sei .logical signal shift.result signal shiftj/alue signal seLshift signal high.shiftjn signal low_shift_in signal shiftJn signal shift.carry signal shift_carry_value signal arith.result signal arith.value signal half_arith signal arithJnternal.carry : stdjogic.vector(7 downto 0); signal sel_arith_carryjn signal arith_carryjn signal invert_arith.carry signal arith_carry_out signal sel.arith : signal arith-carry : stdjogic; : stdjogic; : stdjogic; : stdjogic; stdjogic; : stdjogic; ALU multiplexer signals signal input-fetchJype signal seLgroup signal alu-group signal input_group signal alu.result : stdjogic; : stdjogic; : stdjogic_vector(7 downto 0); : stdjogic_vector(7 downto 0); : stdjogic_vector(7 downto 0); -- read and write strobes signal lojnitialjtecode : stdjogic; signal write-active : stdjogic;
482 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС signal read.active : stdjogic; -- Attributes to define LUT contents during implementation for primitives not -- contained within generate loops. In each case the information is repeated -- in the generic map for functional simulation attribute INIT: string; attribute INIT of t.stateJut : label is «1»; attribute INIT of int.pulsejut attribute INIT of int.updatejut attribute INIT of int.valuejut attribute INIT of move_group_lut attribute INIT of condition.metjut attribute INIT of normaLcount Jut attribute INIT of call-type Jut attribute INIT of push_popjut attribute INIT of valid.movejut attribute INIT of flagjypejut attribute INIT of flag.enablejut attribute INIT of low_zerojut attribute INIT of high.zerojut label is «0080»; : label is «ЕААА»; label is «04»; : label is «7400»; : label is «5АЗС»; : label is «2F»; : label is «1000»; : label is «5400»; ; label is «0»; : label is «41 FC»; : label is «8»; : label is «0001»; : label is «0001»; attribute INIT of sel.shadow.zerojut : label is «3F»; attribute INIT of low_parityjut : label is «6996»; attribute INIT of high—parityJut : label is «6996»; attribute INIT of seLparityJut : label is «F3FF»; attribute INIT of sel_arith_carryjut : label is «F3»; attribute INIT of seLshift.carryJut : label is «С»; attribute INIT of sel_shadow_carryjut : label is «3»; attribute INIT of registerjypejut : label is «0145»; attribute INIT of register.enablejut attribute INIT of memoryJypeJut attribute INIT of memory.enablejut : label is «8»; ; label is «0400»; : label is «8000»; attribute INIT of seljogicaljut attribute INIT of low.shiftjnjut attribute INIT of high.shiftjnjut attribute INIT of shift.carryjut attribute INIT of sel_arithjut : label is «FFE2»; : label is «Е4»; : label is «Е4»; label is «Е4»; : label is «1F»; attribute INIT of inputjetchJypeJut : label is «0002»; attribute INIT of io.decodejut : label is «0010»; attribute INIT of write.activejut : label is «4000»; attribute INIT of read.activejut : label is «0100»; Start of KCPSM3 circuit description begin
Приложение 3 483 - Fundamental Control - Definition of T-state and internal reset Lstatejut: LUT1 --synthesis translate.off generic map (INIT => X»1») -synthesis translate^ port map( IO => t.state, О => not J_state); togglejlop: FDR port map (D => not J_state, Q => t-State, R => intemaLreset, C => elk); reset Jlopl: FDS port map (D => 'O', Q => reset-delay, S reset, C => elk); reset Jlop2: FDS port map (D => reset_delay, Q => intemaLreset, S => reset, C => elk); nterrupt input logic, Interrupt enable and shadow Flags. Captures interrupt input and enables the shadow flags, Decodes instructions which set and resei the interrupt enable flip-flop. Interrupt capture int_capture_flop: FDR port map (D => interrupt, Q => clean Jnt, R => internal-reset, C => elk); inLpulseJut: LUT4 -synthesis translate_off generic map (INIT => X»0080»)
484 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС --synthesis translate_on port map( 10 => t_state( 11 -> clean Jnt, I2 => int_enable, I3 => activejnterrupt, 0 => int_pulse); intjlop: FDR port map (D => int_pulse, Q => activejnterrupt, R => internal_reset, C => elk); ackjlop: FD port map (D => activejnterrupt, Q => interrupt_ack internal, C=> elk); interrupLack <= InterrupLackJnternal; -- Shadow flags shadow-carryjlop: FDE port map (D => carryjlag, Q -> shadow ^carry, CE => activejnterrupt, C => elk); shadow.zerojlop: FDE port map (D -> zerojlag, Q => shadow_zerof CE => activejnterrupt, C=> elk); - Decode instructions that set or reset interrupt enable intjjpdateJut: LUT4 --synthesis translated generic map (INIT => X»EAAA») --synthesis translate_on port map{ IO => activejnterrupt, 11 => instruction^ 5), I2=> instruction^ 6), I3 -> instructional?), 0 => int_update_enable); int.valuejut: LUTS --synthesis translated generic map (INIT => X»04») --synthesis transiate„on port map( 10 => activejnterrupt, 11 => instruction(O), I2 => interrupLackJnternal, O->inLenabie_value); int.enablejlop: FDRE port map (D => int_enable.value, Q => int_enable,
485 Приложение 3 СЕ ~> int_update_enable, R -> intemaLreset, С=> elk); - Decodes for the control of the program counter and CALL/RETURN stack move^groupjut: LUT4 -synthesis translated generic map (INIT => X»7400») -synthesis translate_on port map( 10 => instructional 4), 11 => instruction^ 5), I2 => instruction^ 6), I3 => instruction^?), О => move_group); condition_metjut: LUT4 -synthesis translated generic map (INIT => X»5A3C») -synthesis translate„on port map( IO => carryjlag, !1 => zerojlag, I2 => instruction(IO), 13 => instructional), О => condition jnet); normaLcountJut: LUT3 -synthesis translated generic map (INIT -> X»2F») -synthesis translate_on port map( 10 => instruction^ 2), 11 => condition_met, I2 => move_group, O=> normaLcount); calljypejut: LUT4 -synthesis translated generic map (INIT => X»1000») -synthesis translate_on port map( IO => instruction (14), 11 - > instruction(15), I2 => instruction) 16), I3 => instruction^?), О => calLtype); push_popjut: LUT4 -synthesis translated generic map (INIT => X» 5400») -synthesis translate_on port map( IO => instruction)!4), 11 -> rnstruction(15),
486 Зотов Q. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 12 => instruction 16), I3 => instruction^ 7), О => push_or_pop Jype); valid jnove Jut: LUT2 -synthesis translate_off generic map (INIT => X»D») -synthesis translate_on port map( IO => instruction^), 11 => condition.met, О => validJo_move); -The ZERO and CARRY Flags - Enable for flags flagjype Jut: LUT4 -synthesis translate_off generic map (INIT => X»41 FC») -synthesis translate_on port map( IO => instruction^), 11 => instruction^ 5), 12 => instruction) 16). I3 => instructional 7), О -> flagjype); flag_writejlop: FD port map (D => flagjype, Q => flag„write, C=> clk); flag_enablejut: LUT2 -synthesis translate_off generic map (INIT => X»8») - synthesis translate_on port map( 10 => t.state, И => flag_write, О => flag_enable); - Zero Flag low.zero.lut: LUT4 -synthesis translate.off generic map (INIT => X»0001») - synthesis translate.on port map( IO => alu_result(0), 11 => alu_result(1}, I2 -> alu_result(2), I3 => alu_result(3), О => low.zero); high.zerojut: LUT4 - synthesis translate jaff
Приложение 3 487 generic map (INIT -> X»0001») -synthesis 1ranslate,on port map( 10 => alu_result(4), 11 => alu_result(5)f I2 => alu_result(6), I3 => alu_result(7), 0 => high_zero); low^zerojnuxcy: MUXCY port map( DI => 'O', Cl => Tf S => low_zerot О => low_zero„carry); high„zero__cymux: MUXCY port map( DI => 'O', Cl => low_zero_carry, S => high_zerof О => high_zero_carry); sel_shadow_zerojut: LUT3 -synthesis translate_off generic map (INIT => X»3F») -synthesis Iranslate.on port map{ 10 -> shadow_zero, 11 => instruction^ 6), I2 => instruction^ 7), О => sel_shadow_zero); zero_cymux: MUXCY port map( DI => shadow_zero, Cl => high_zero^carry, S => seLshadoW-Zero, О => zero_carry); zero_xor XORCY port map( LI => 'O', Cl => zero_carry( О => zerojast_route); zerojlagjlop: FDRE port map (D => zerojast_route, Q => zerojlag, CE => flag_enable, R => intemal_reset, C => elk); - Parity detection low_parityjut: LUT4 -synthesis translate_off generic map (INIT => X»6996») -synthesis translate_on port map( IO => logical_result(0), 11 => logical_result(1), I2 -> logicaLresult(2), I3 => logical_result(3)t
488 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС О => low_parity); high_parity_lut: LUT4 -synthesis translate.off generic map (INГТ => X»6996») -synthesis translate.on port map( 10 => logical_result(4), 11 => logicai_result(5), I2 => logical.result (6), I3 => logical.result(7)f 0 => high jjarity); parity.muxcy: MUXCY port map( DI => '0\ Cl =>T, S => low_parityf 0 => parity.carry}; parity.xor: XORCY port map( LI => highjiarity, Cl => parity.carry, О ~> parity); - CARRY flag selection seLparity.lut: LUT4 -synthesis translate.off generic map (INIT => X*F3FF*) -synthesis translate.on port map( IO => parity, 11 => instruction 13), I2 => instructional 5), I3 => instruction (16), О => sei jjarity); seLarith.carry.lut: LUT3 -synthesis translate.off generic map (INIT => X»F3») -synthesis translate.on port map( IO => arith.carry, 11 => instruction 16), I2 -> instruction 17), О => sel.arith.carry); sel.shift.carry.lut: LUT2 -synthesis translate, of f generic map (INIT => X»C») -synthesis translate.on port map( IO => shift.carry, 11 => instruction^ 5), О => sel.shift.cany); sel.shadow_carry.lut: LUT2 -synthesis translate.off generic map (INIT => X»3») -synthesis translate.on port map( IO => shadow.carry,
Приложение 3 489 И => instnjction(17), О => sel„shadow_carry); sel_shadow_muxcy: MUXCY port map( DI => shadow „carry, Cl => 'O', S -> sel_shadow_carry, О => sel_carry(O)); seLshltt_muxcy: MUXCY port map( DI => shift_carry, Cl => seLcarryfO), S => seLshift_cany, O=> sel_carry(1)); seLarithjnuxcy: MUXCY port map( DI => arith_carry, Cl => sel_carry(1), S => sel_arith_carry, О => sel_carry(2)); sei j)arity_muxcy: MUXCY port map( Di => parity, Cl => sel„carry(2), S => seLparity, О => sel.carry (3)); carry.xor: XORCY port map( LI => 'O', Cl => sel_carry(3)r О => carryJast_route); carryjagjlop: FDRE port map (D => carry_fast_route, Q => carryjlag, CE => flag_enable( R => IntemaLreset, C => elk); - The Program Counter - Definition of a 10-bit counter which can be loaded from two sources invert_enable: INV -- Inverter should be implemented in the CE to flip flops portmap( I => t_state, О => pc„enable); pejoop: for i in 0 to 9 generate - - Attribute to define LUT contents during implementation - - The information is repeated in the generic map for functional simulation 18—2062
490 Зотов В. Ю, Проектирование встраиваемых микропроцессорных систем на основе ПЛИС attribute INIT: string; attribute INIT of vector_select_mux: label is «Е4»; attribute INIT of value_selecLmux : label is «Е4»; begin vector .select, mux: LUT3 -synthesis translate_off generic map (INIT => X»E4») -synthesis translate_on port map( 10 => instruction^ 5)( И => I nstruction(i), I2 => stack_pop_data(i), 0 => pc_vector(i)); value_select_mux: LUT3 -synthesis translate^ generic map (INIT => X»E4») -synthesis translate_on port map( IO => normal_count, 11 -> inc,_pc. vector(i), I2 => pc(i), О => pc_value(i)); register_bit: FDRSE port map (D => inc_pc_value(i), Q => pc(i), R -> internal jreset, S => activejnterrupt, CE => pc„enable, C => elk); pcjsb.carry: if i=0 generate begin pc_vector_muxcy: MUXCY port map( DI => ’O', Cl => instruction^ 3), S -> pc_vector(i), О => pc_vector_carry(i)); pc.vector^xor XORCY port map( LI => pc_vector(i), Cl => instruction 13), О => inc_pc_vector(i)); pc_value_muxcy: MUXCY port map( DI => 'O', Cl => normaLcount, S => pc_value(t)f О => pc_value_carry(i)); pc j/alue_xor: XORCY port map( LI => pc_value(i), Cl => normaLcount, О => inc_pc_value(i)); end generate pcjsb.carry;
Приложение з 491 pc_mid_carry: if i>0 and i<9 generate begin pc_vector_muxcy: MUXCY port map( DI ‘O', Cl => pc_vector_carry(i-1), S => pc_vector(i), 0 => pc_vector_carry(i)); pc_vector_xor: XORCY port map( LI => pc_vector(i), Cl “> pc_vector_carry(M)p О => inc_pc„vector(i)); pcj/alue_muxcy: MUXCY port map( DI => 'O', Cl => pc_value_carry(i-1), S => pc_value(i), О => pc_value„carry(i)); pc_value_xor: XORCY port map( LI => pc_value(i)f Cl => pc„value_carry(i-1), О => inc_pc_va)ue(i)); end generate pc_mid_carry; pc_msb_carry: if i=9 generate begin pc_vector_xor: XORCY port map( LI => pc_vector(i), Cl => pc_vector_carry(M), О => lnc_pc_vector(i)); pc_value_xor; XORCY port map( LI -> pc_value(i), Cl ~> pc_value_carry(i-1), O=> inc_pc_value(i)); end generate pc_msb_carry; end generate pcjoop; address <- pc; - Register Bank and second operand selection. - - Definition of an 8-bit dual port RAM with 16 locations - - including write enable decode. - Outputs are assigned to PORTJD and OUT_PORT. -- Forming decode signal registerjypejut: LUT4
492 Зотов В Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС --synthesis translate.off generic map (INIT => Х»0145») -synthesis translate„on port map( IO => activejnterrupt, 11 => instruction^ 5), I2 => instructionfl 6), 13 => instnjction(17), 0 => registerJype); register_writejlop: FD port map (D => registerJype, Q => reg Sste rewrite, C=> clk); register.enablejut: LIIT2 --synthesis translate.off generic map (INIT => X»8») -•synthesis translate.on port map( IO => t.state, 11 => register.write, О => register.enable); reg Joop: for i in 0 to 7 generate -- Attribute to define RAM contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of register_bit : label is «0000»; attribute INIT of operand.select.mux: label is «Е4»; begin register.bit: RAM16X1D -synthesis translate.off generic map(INIT => X»0000») --synthesis translate.on port map ( D => alu.result(i), WE => register.enable, WCLK=> clk, AO => instruction^), A1 => instruction(9), A2 => instruction(IO), A3 -> instructional 1), DPRAO => instruction^), DPRA1 => instruction^), DPRA2 -> instruction^), DPRA3 => instruction^), SPO -> sx(i), DPO -> syfi)); operand.select.mux: LUT3 --synthesis translate.off generic map (INIT => X»E4 J --synthesis translate.on
Приложение 3 493 port map( 10 => instruction^ 2), 11 => instruction(i), !2 -> sy(i), 0 => second_operand(i)); end generate regjoop; ouLport <= sx; portjd <= second-operand; - Store Memory • Definition of an 8-bit single port RAM with 64 locations - including write enable decode. - Forming decode signal memoryjypejut: LUT4 -• synthesis translatej)ff generic map (INIT => X»0400») -synthesis translate.on port map( IO => activejnterrupt, 11 -> instruction^), I2 => instruction(16), I3 => instructional 7), 0 => memoryjype); memory_wrltejlop: FD port map (D -> memoryjype, Q => memory_writet C=>clk); memory_enablejut: LUT4 -synthesis translate.off generic map (INIT => X»8000») -synthesis translate.on port map( IO => t.state, II => instruction^ 3), 12 => instruction (14), I3 => memory_writet 0 => memory .enable); store Joop: for i in 0 to 7 generate - Attribute to define RAM contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of memory_bi1: label is «0000000000000000»; begin memory.bit: RAM64X1S
494 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС --synthesis translated generic map(INIT => Х»0000000000000000») -synthesis translate_on port map ( D => sx(i)t WE => memory_enable, WCLK=> elk, AO => second_operand(0), A1 => second_operand(1), A2 => second_operand(2), A3 -> second„operand(3), A4 => second_operand(4), A5 »> second_operand(5); 0 => memory_data(i)); storejlop: FD port map (D => memory_data(i), Q => store„data(i), C=> elk); end generate storeJoop; - Logical operations - Definition of AND, OR, XOR and LOAD functions which also provides TEST, - Includes pipeline stage used to form ALU multiplexer including decode. seljogicaljut: LUT4 -synthesis translated generic map (INIT=> X»FFE2») -synthesis translate_on port map( 10 => instruction^ 4), 11 ~> instruction(15), I2 => instruction^ 6), I3 => instruction (17), О => sei Jogical); logical Joop: for i in 0 to 7 generate - Attribute to define LUT contents during implementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of logical Jut: label is «6Е8А»; begin logical Jut: LUT4 -synthesis translated generic map (INIT => X»6E8A») -synthesis translate_on port map( IO => second_operand(i), 11 => sx(i),
Приложение 3 495 12 => instruction(13), I3 => instruction^ 4), О => logicalj/aiue(i)); logical-flop: FDR port map ( D => logical.value(i), Q => logicaLresultfl), R -> sei-logical, C => clk); end generate logicaljoop; Shift and Rotate operations Includes pipeline stage used to form ALII multiplexer including decode. sel_shiftjnv: INV -- Inverter should be implemented in the reset to flip flops port map( I => instruction^7), О => sel.shift); - Bit to input to shift register high_shiftjnjut: LUT3 —synthesis translate.off generic map (INIT => X»E4») -synthesis translate„on port map{ IO => instruction^), 11 => sx(0), I2 -> instruction^), О => high_shift Jn); low_shift_in_lut: LUT3 —synthesis translate.off generic map (INIT => X»E4») -synthesis translate.on port map( 10 => instruction^), 11 => carry.flag, I2 => sx(7), О => low.shiftjn); shiftjn„muxf5: MUXF5 port map( 11 => high_shift_in, IO => low„shiftjn, S => instruction^), О => shift J n); - Forming shift carry signal shift_cany_lut: LUT3 -synthesis translate„off generic map (INIT -> X»E4») -synthesis translate.on
496 Зотов б. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС port тар( 10 => instruction (3), И => sx(7), 12 => sx(0), О => shift_carry_value); pipelinejjit: FD port map (D => shift„carry_valuet Q => shiftjiarry, 0 => elk); shiftJoop: for I in 0 to 7 generate begin lsb_shift: if i=0 generate - Attribute to define LUT contents during impiementation -- The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of shiftjnuxjut: label is «Е4»; begin shiftjnuxjut: LUT3 --synthesis translate j)ff generic map (INIT => X»E4») --synthesis translate_on port map( 10 => instruction^). 11 -> shiftJn, I2 => sx(i+1), О shiftvalue(i)); end generate lsb_shilt; mid_shift: if i>0 and i<7 generate - - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of shiftjnuxjut: label is «Е4»; begin shiftjnuxjut: LUT3 --synthesis translated generic map (INIT -> X»E4 J -synthesis translate_on port map( IO => instruction^), 11 -> sx(i-1), I2 => sx(i+1), О => shift j/alue(i)); end generate mid_shift; msb_shift: if i=7 generate - - Attribute to define LUT contents during implementation - - The information is repeated in the generic map for functional simulation attribute INIT: string;
Приложение 3 497 attribute INIT of shiftjnuxjut: label is «Е4»; begin shiftjnuxjut: LUT3 -synthesis translate.off generic map (INIT => X»E4») -synthesis translate_on port map( 10 => instruction^), 11 => sx(i-1), I2 => shift Jn, О => shifLvalue(i)); end generate msb_shift; shiftjlop: FDR port map (D => shift_value(i), Q => shift_result(i), R => seLshift, C => elk); end generate shiftjoop; • Arithmetic operations - Definition of ADD, ADDCY, SUB and SUBCY functions which also provides COMPARE. - Includes pipeline stage used to form ALU multiplexer including decode. seLarithJut: LUT3 -synthesis translate_off generic map (INIT => X»1F») -synthesis translate_on port map( IO => instruction (14), 11 => instruction 15), l2-> instruction (16), О => seLarith); arith Joop: for i In 0 to 7 generate - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of arithJut: label is «96»; begin lsb„arith: if i=0 generate - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of arith.carryjnjut: label is «6С»;
498 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС begin arith-canyjnjut: LUT3 -synthesis translate.off generic map (INIT => X»6C») -synthesis translate.on port map( 10 => instruction^ 3), 11 => instruction(14), I2 => carry_flagt 0 => sel_arith_carryjn); arith.carryjnjnuxcy: MUXCY port map( DI => ’01, CI=>'T, S => sel_arith_carry_in, 0 => arith.carryjn); arithjnuxcy: MUXCY port map( DI => sx(i), Cl => arit h.carryjn, S=> half.arith(i), 0 => arith JntemaLcarry(i)); arith_xor XORCY port map( LI => half_arith(i), Cl => arith.carry.in, 0 -> arith_value(i)); end generate Isb.arith; mid.arith: if i>0 and i<7 generate begin arith.muxcy: MUXCY port map( DI ~> sx(i), Cl => arithjntemaLcarryfi’l), S => half_arith(i), О => arith JntemaLcarry(i)); arith.xor: XORCY port map( LI => half.arith(i), Cl -> arith JntemaLcarry(i“1), 0 => arith.value(i)); end generate mid.arith; msb.arith: if i-7 generate - Attribute to define LUT contents during implementation - - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of arith.carry_out.lut: label is «2»; begin arith.muxcy: MUXCY port map( DI => sx(i)t Cl -> arithJntemal.carryfi-I),
Приложение 3 499 S => half_arith(i)J О => arith Jntemal_carry(i)); arith jcor: XORCY port map( LI -> half_arith(i), Cl => arithJntemaLcairyJM), О => arith_value(i)); arith„carry„outjut: LUT1 --synthesis translate_off generic map (INIT => X»2») -synthesis translate_on port map( 10 => instruction^ 4), О => invert_arith_carry); anth_carry_out_xor: XORCY port map( LI => invert_arith„carry, Cl -> arith JntemaLcarry(i), О => arith_carry_out); arith.carryjlop: FDR port map ( D => arith„carry„out, Q => arith.cany, R => seLarith, C => elk); end generate msb_arith; arithjut: LUT3 -synthesis translate_off generic map (INIT => X»96») -synthesis translate_on port map( 10 => sx(i), 11 -> second_operand(i), I2 => instruction 14), О => halLarith(i)); arithjlop: FDR port map (D => arith-Valuefl), Q => arith_result(i), R => seLarith, C => elk); end generate arithJoop; ALU multiplexer inputjetchjypejut: LUT4 -synthesis translate_off generic map (INIT => X»0002») -synthesis translate_on port map( IO => instruction^ 4),
500 Зотов S. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС И “> instructionfIS), 12 => instructional 6), 13 => instructional 7), 0 => input _f etch_type); seLgroupJlop: FD port map (D => input-fetchJype, Q => seLgroup, C => elk); alu_mux_loop: for i in 0 to 7 generate -- Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of or Jut : label is «FE»; attribute INIT of muxjut: label is «Е4»; begin orjut: LUT3 -synthesis translate.off generic map (INIT => X»FE») -synthesis translate.on port map( 10 => logical_resu!t (i), 11 => arithjesult(i), I2 => shiftjesult(i), 0 -> a!u_group(i)); muxjut: LUT3 -synthesis 1ranslate_off generic map (INIT => X»Е4») -synthesis translate.on port map( 10 => instruction^!3)f 11 -> injwrtfi), I2 => store_data(i), 0 => input_group(i)); shift_in_muxf5: MUXF5 port map( 11 => input_group(i), IO => alu„group(i), S => seLgroup, 0 => alujesult(i)); end generate alu_mux_loop; - Read and Write Strobes io.decodejut: LUT4 -synthesis translate.off generic map (INIT => X»0010») -synthesis translate.on
Приложение з 501 port map( IO => activejnterrupt, 11 => instruction(13), 12 => instruction (1 4), 13 => instruction^ 6). 0 => iojnitial.decode); write_activejut: LUT4 -synthesis translate.off generic map (INIT => X»4000») -synthesis translate.on port map( 10 => l.state, 11 -> instruction) 15), I2 => instruction^?), I3 => iojnitialjfecode, 0 => write.active); write.strobejlop: FDR port map (D => write.active, Q => write.strobe, R => intemaLreset, C => clk); read.active.lut: LUT4 -synthesis translate.off generic map (INIT -> X»0100 J -synthesis translate.on port map( I0 => t.state, 11 => instruction) 15), I2 ~> instruction^ 7), 13 => io.initial.decode, О -> read.active); read.strobejlop: FDR port map (D => read.active, Q => read.strobe, R -> intemaLreset, C => ctk); - Program CALURETURN stack - - Provided the counter and memory for a 32 deep stack supporting nested - subroutine calls to a depth of 31 levels. - Stack memory is 32 locations of 10-bit single port. stack.ram.inv: INV - Inverter should be implemented in the WE to RAM portmap( I ~> t.state, О => stack.write.enable); stack.ram.loop: for i in 0 to 9 generate Attribute to define RAM contents during implementation
502 Зотов в. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС - The information is repeated in the generic map for functions! simulation attribute INIT: string; attribute INIT of stack_bit: label is «00000000»; begin stackJ)it: RAM32X1S -synthesis translate_off generic mapfl NIT => X»00000000») --synthesis translates port map ( D=>pc(i), WE => stack_write_enable, WCLK=> elk, A0 => stack_address(0)f A1 =>stack_address(1)f A2 => stack„address(2), A3 => stack.address(3), A4 => stack_address(4), 0 => stack_ram_data(i)); stackjlop: FD port map (D => stack_ram_data(i), Q stack„pop_data(i)1 C=> elk); end generate stackj-amJoop; - Stack address pointer is a 5-bit counter stack„countjnv: INV -- Inverter should be implemented in the CE to the flip-flops port map( I => activejnterrupt, О -> not.activejnterrupt); stack_countjoop: for i in 0 to 4 generate begin registerjait: FDRE port map (D => next_stack_address(i), Q => stack_address(i), R => internal-reset, CE -> noLactiveJnterrupt, C=> elk); lsb_stack_count: if i=0 generate - Attribute to define LUT contents during implementation - - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of count Jut: label is «6555»; begin countjut: LUT4 --synthesis translate_off generic map (INIT => X»6555») --synthesis translate_on
Приложение 3 503 port map( 10 => stack_address(i), 11 => Lstate, I2 => validjo_move, 13 => push_or_pop_type, 0 -> half„stack_address(i)); countjnuxcy: MUXCY port map( DI => stack_address(i), Cl => *0', S => hall_stack„address(i), О => stack_address_carry(i)); count_xor XORCY port map( LI => half_stack_address(i), Cl => ’01, 0 => next_stack_address(i)); end generate lsb_stack_count; mid_stack_count: if i>0 and i<4 generate - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string; attribute INIT of count Jut: label is «А999»; begin count Jut: LUT4 -synthesis translated generic map (INIT => X»А999») -synthesis translate_on port map( 10 => stack_address(i), 11 => t-State, I2 => validjo„movef I3 => call Jype, 0 => half_stack_address(i)); count.muxcy: MUXCY port map{ DI => stack_address(i), Cl => stack_address^carry(i-1), S => half_stack_address(i), 0 => stack_addressj;arry(i)); countjcor: XORCY port map( LI => half_stack_address(i), Cl => stack_address_carry(i-1), 0 => next_stack_address(i)); end generate mid_stack_count; msb_stacLcount: if i=4 generate - Attribute to define LUT contents during implementation - The information is repeated in the generic map for functional simulation attribute INIT: string;
504 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС attribute INIT of count Jut: label is «А999»; begin count Jut: LUT4 --synthesis translate.off generic map (INIT => X»A999») -synthesis translate.on port map( 10 => stack.address(i), 11 -> testate, 12 => valid.to.move, 13 => call Jype, О => half.stack.address(i)); count.xor: XORCY port map( LI => half„stack„address(i), Cl => stack_address_carry(i-1), 0 => next_stack_address(i)); end generate msb.stack.count; end generate stack.count.loop; End of description for KCPSM3 macro. Code for simulation purposes only after this line *i******t*******++*i-*Tt Tt-ti**»******************^************-*-^******-****** + ****** Code for simulation. Disassemble the instruction codes to form a text string variable for display. Determine status of reset and flags and present in the form of a text string. Provide a local variables to simulate the contents of each register and scratch pad memory location. -All of this section is ignored during synthesis. -synthesis translate off simulation: process (clk, instruction) -complete instruction decode variable kcpsm3_opcode: string(1 to 19); -Status of flags and processor
Приложение 3 505 variable kcpsm3„status: string(1 to 13):= «NZ, NC, Reset»; -contents of each register variable sO_contents: std_logic_vector(7 downto 0):=X»00»; variable s1 .contents: std_logic_vector(7 downto 0):=X»00»; variable s2_contents: std_logic_vector(7 downto 0):=X»00»; variable s3_contents: std_logic_vector(7 downto 0)>X»00»; variable s4_contents: stdjogic_vector(7 downto 0):=X»00»; variable s5_contents: s!d_logic_vector(7 downto 0):=X»00»; variable s6_contents: std_logic_vector(7 downto 0):=X»00»; variable s71contents: stdjogic_vector(7 downto 0):=X»00»; variable s8_contents: std_logic_vector(7 downto 0):=X»00»; variable s9_contents: stdjogic.vector(7 downto 0):=X»00»; variable sa^contents: stdjogic_vector(7 downto 0):=X»00»; variable sb.contents: std_logic_vector(7 downto 0):=X»00»; variable sc.contents: std_logic_vector(7 downto 0):=X»00»; variable sd.contents: std_logic_vector(7 downto 0):=X»00»; variable se.contents: stdjogic_vector(7 downto 0):=X»00»; variable sf.contents: stdjogic_vector(7 downto 0):=X»00»; -contents of each scratch pad memory location variable spmOO.contents: stdjogic„vector(7 downto 0) :=X»00»; variable s pm 01 .contents: stdjogic_vector(7 downto 0):=X»00»; variable spm02_contents: stdjogic_vector(7 downto 0):=X»00»; variable spm03„contents: std_logic_vector(7 downto 0):=X»00»; variable spm04_contents: stdjogic„vector(7 downto 0):=X»00»; variable spm05„contents: std_logic_vector(7 downto 0) :=X»00»; variable spm06_contents: stdjogic j/ector(7 downto 0):~X»00»; variable spm07.contents: stdjogic_vector(7 downto 0):=X»00»; variable spm08_contents: stdjogic_vector(7 downto 0):=X»00»; variable spm09_contents: stdjogic„vector(7 downto 0):=X»00»; variable spmOa.contents: stdjogic.vector(7 downto 0):=X»00»; variable spmOb.contents: std_logic_vector(7 downto 0):=X»00»; variable spmOc.contents: stdjogic_vector(7 downto 0):=X»00»; variable spmOd.contents: std_Jogic_vector(7 downto 0)>X»00»; variable spmOe_contents: stdjogic.vector(7 downto 0):=X»00»; variable spmOf.contents: std_logic_vector(7 downto 0):=X»00»; variable spm10_contents: stdjogic.vector(7 downto 0):=X»00»; variable spm11.contents: stdjogic_vector(7 downto 0):=X»00»; variable spm12_contents: stdjogic_vector(7 downto 0):=X»00»; variable spm13_contents: std„logic_vector(7 downto 0):=X»00»; variable spm14_contents: std_logic_vector(7 downto 0):=X»00»; variable spm15_contents: stdjogic„vector(7 downto 0)>X»00»; variable spm16_contents: stdjogic_vector(7 downto 0):=X»00»; variable spm17_contents: std_logic_vector(7 downto 0):=X»00»; variable spm18„contents: stdjogic_vedor(7 downto 0):=X»00»; variable spm19_contents: std_logic_vector(7 downto 0):=X»00»; variable spm1a_contents: std Jogic.vector(7 downlo 0):=X»00»; variable spmlb.contents: stdjogic_vector(7 downto 0):=X»00»;
506 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС variable spmlc.contents: std_logic_vector(7 downto 0):=Х»00»; variable spm1d„contents: stdjogic.vector(7 downto 0):=X»00»; variable spm1e_contents: std_logic_vector(7 downto 0):=X»00»; variable spmlf.contents: stdjogic„vector(7 downto 0):=X»00»; variable spm20_contents: std_logic_vector(7 downto 0):=X»00»; variable spm21 .contents: std_logic_vector(7 downto 0):=X»00»; variable spm22_contents: std_logic_vector(7 downto 0):-X»00»; variable spm23_contents: stdjogic„vector(7 downto 0):=X»00»; variable spm24_contents: stdjogic_vector(7 downto 0):=X»00»; variable spm25_contents: std_logic_vector(7 downto 0):=X»00»; variable spm26_contents: std_logic_vector(7 downto O)i=X»OO»; variable spm27_contents: stdjoglc_vector(7 downto 0):=X»00»; variable spm28_contents: stdjogic.vector(7 downto 0):=X»00>< variable spm29_contents: std_logic_vector(7 downto 0):=X»00»; variable spm2a_contents: std_logic_vector(7 downto 0) :=X»00»; variable spm2b_contents: $td_logic_vector(7 downto 0)>X»00»; variable spm2c_contents: std Jogic_vector(7 downto 0):=X»00»; variable spm2d_contents: std_logic_vector(7 downto 0):=X»00»; variable spm2e_contents: sldjogicvector(7 downto 0):=X»00»; variable spm2f_contents: std_logic_vector(7 downto 0):=X»00»; variable spm30_contents: std Jogic_ veclor(7 downto 0):=X»00»; variable spm31 .contents: s1d_logic_vector(7 downto 0):=X»00»; variable spm32_contents: std_logic_vector(7 downto 0):=X»00»; variable spm33_contents: stdjogic_vector(7 downto 0):=X»00»; variable spm34„contents: std_logic_vector(7 downto 0):=X»00»; variable spm35_contents: stdjogic_vector(7 downto 0):=X»00»; variable spm36.contents: stdjogic_vector(7 downto 0):=X»00»; variable spm37_contents: std_logic_vector(7 downto 0):-X»00>>; variable spm38_contents: stdjogic.vector(7 downto 0):=X»00»; variable spm39_contents: std_logic_vector(7 downto 0):-X»00’>; variable spm3a_contents: std_logic.vector(7 downto 0):=X»00»; variable spm3b_contents: std„logic_vector(7 downto 0):=X»00»; variable spm3c_contents: std_logic_vector(7 downto 0):=X»00»; variable spm3d_contents: std_logic_vector(7 downto 0):=X»00»; variable spm3e_contents: std_logic_vector(7 downto 0):=X»00»; variable spm3f_contents: std_logic_vector(7 downto 0):=X»00»; -temporary variables variable sx.decode: st ring(1 to 2); variable sydecode: string(1 to 2); variable kk.decode: string(1 to 2); variable aaa.decode: st ring(1 to 3); -sX register specification -sY register specification -constant value specification -address specification - Function to convert 4-bit binary nibble to hexadecimal character function hexcharacter (nibble: std_logic_vector(3 downto 0)) return character is
Приложение 3 507 variable hex: character; begin case nibble is when «0000» => hex := ‘O’; when «0001» => hex :=T; when «0010» => hex := '21; when «0011» => hex := ‘3’; when «0100» => hex := '4'; when «0101» -> hex := '5'; when «0110» => hex := '6'; when «0111» => hex := 7'; when «1000» => hex := ‘8’; when «1001» => hex '9'; when «1010» => hex := 'A1; when «1011» => hex := ‘B1; when «1100» => hex := 'CJ; when «1101» => hex when «1110» => hex := rE‘; when «1111»-> hex := 'F; when others => hex := 'x'; end case; return hex; end hexcharacter; begin ” decode first register sx_decode(1) := 's’; sx„decode(2)hexcharacter( instruction (11 downto 8)); - decode second register sy_decode(1) := “s'; sy_decode(2) := hexcharacter(instruction(7 downto 4)); ” decode constant value kk_decode(1) := hexcharacter( instruction (7 downto 4)); kk_decode(2) := hexcharacterj instruction (3 downto 0)); -- address value aaajtecode(l) := hexcharacter(«OO» & instruction^ downto 8)); aaa_decode(2) := hexcharacter(instruction(7 downto 4)); aaa_decode(3) > hexcharacter(instruction(3 downto 0)); -- decode instruction case instruction (17 downto 12) is when «000000» => kcpsm3_opcode := «LOAD«& sx_decode &7 & kk.decode &« «; when «000001»=> kcpsm3_opcode := «LOAD«& sx„decode & 7 & sy.decode & « «; when «001010» => kcpsm3_opcode := «AND«& sx.decode &7 & kk.decode &« «; when «001011»~> kcpsm3_opcode := «AND«& sx_decode & \* & syjdecode & « «; when «001100» => kcpsm3_opcode := «OR«& sx_decode & 7 & kk„decode &« «; when «001101»=> kcpsm3_opcode := «OR«& sx_decode & 7 & sy.decode &« «; when «001110» => kcpsm3„opcode := «XOR «& sx_decode & 7 & kk_decode &« «; when «001111»-> kcpsm3_opcode := «XOR «& sx_decode & 7 & syjdecode & « «;
508 Зотов 3. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС when «010010» »> kcpsm3_opcode := «TEST«& sx_decode & 7 & kk_decode &« «; when «010011»=> kcpsm3_opcode > «TEST«& sx_decode & 7 & sy_decode &« «; when «011000» => kcpsm3_opcode > «ADD«& sx.decode & 7 & kk ^decode &« «; when «011001»-> kcpsm3_opcode > «ADD«& sx_decode & 7 & sy.decode &« «; when «011010» => kcpsm3_opcode > «ADDCY«& sx.decode & 7 & kk_decode &« «; when «011011» => kcpsm3_opcode := «ADDCY« & sx.decode & 7 & sy„decode &« «; when «011100» => kcpsm3_opcode := «SUB«& sx^decode & 7 & kk_decode & « «; when «011101»=> kcpsm3_opcode := «SUB « & sx^decode & 7 & sy_decode &« «; when «011110» => kcpsm3 ^opcode := «SUBCY«& sx__decode & 7 & kk_decode & « «; when «011111» => kcpsm3„opcode := «SUBCY«& sx_decode & 7 & sy_decode & « «; when «010100» => kcpsm3_opcode := «COMPARE« & sx_decode & 7 & kk.decode &« « when «010101»-> kcpsm3_opcode := «COMPARE « & sx.decode & 7 & sy_decode &« « when «100000» => case instruction^ downto 0) is when «0110» -> kcpsm3_opcode := «SLO « & sx_decode &« «; when «0111»=> kcpsm3_opcode := «SL1 «& sx_decode &« «; when «0100» => kcpsm3_opcode := «8 LX« & sx_decode & « «; when «0000» => kcpsm3„opcode := «SLA«& sx_decode &« «; when «0010» => kcpsm3_opcode := «RL«& sx_decode &« «; when «1110» kcpsm3„opcode := «SRO«& sx_decode &« «; when «1111»=> kcpsm3_opcode := «SR1« & sx_decode &« «; when «1010» => kcpsm3_opcode«SRX«& sx.decode &« «; when «1000» => kcpsm3 ^opcode := «SRA«& sx.decode &« «; when «1100» => kcpsm3_opcode := «RR «& sx_decode &« «; when others => kcpsm3_opcode := «Invalid Instruction»; end case; when «101100» => kcpsm3_opcode > «OUTPUT«& sx_decode & 7 & kk_decode &« «; when «101101» => kcpsm3_opcode := «OUTPUT« & sx_decode &«,(«& sy.decode &«) «; when «000100» => kcpsm3_opcode := «INPUT« & sx.decode & 7 & kk_decode &« «; when «000101» => kcpsm3_opcode := «INPUT« & sx_decode &«,(«& sy_decode &«) «; when «101110» => kcpsm3_opcode := «STORE«& sx_decode & 7 & kk_decode &« «; when «101111»-> kcpsm3_opcode := «STORE«& sx decode &«,(«& sy_decode & «) «; when «000110» => kcpsmS..opcode := «FETCH«& sx,_decode & 7 & kk.decode & « «; when «000111» => kcpsm3_opcode «FETCH«& sx_decode &«,(«& sy_decode &«) when «110100» -> kcpsm3_opcode := «JUMP «& aaa_decode & « «; when «110101» => case instruction (11 downto 10) is when «00» => kcpsm3_opcode := «JUMP Z,» & aaa_decode &« «; when «01»=> kcpsm3j)pcode := «JUMP NZ,» & aaa.decode & « «; when «10» => kcpsm3_opcode > «JUMP С.» & aaa.decode &« «; when «11»-> kcpsm3_opcode := «JUMP NC,» & aaa„decode &« «; when others -> kcpsm3_opcode := «Invalid Instruction»; end case; when «110000» => kcpsm3_opcode«CALL«& aaa_decode & « «; when «110001»=> case instruction^ 1 downto 10) is when «00» -> kcpsm3„opcode := «CALL Z,» & aaa.decode &« «; when «01»=> kcpsm3_opcode«CALL NZ,» & aaa_decode & « «; when «10» -> kcpsm3_opcode«CALL C,» & aaajecode &« «; when «11»=> kcpsm3_opcode := «CALL NC,» & aaa_decode & « «; when others => kcpsm3_opcode«Invalid Instruction»; end case;
Приложение 3 509 when «101010» => kcpsm3_opcode «RETURN «; when «101011» => case instructional downto 10) is when «00» => kcpsm3„opcode := «RETURN Z «; when «01» => kcpsm3_opcode := «RETURN NZ «; when «10» -> kcpsm3_opcode«RETURN C «; when «11»=> kcpsm3_opcode := «RETURN NC «; when others => kcpsm3_opcode := «Invalid Instruction»; end case; when «111000» -> case instruction(O) is when 'O' => kcpsm3_opcode := «RETURNI DISABLE «; when T »> kcpsm3„opcode := «RETURNI ENABLE «; when others => kcpsm3_opcode := «Invalid Instruction»; end case; when «111100» => case instruction(O) is when ‘01 => kcpsm3_opcode := «DISABLE INTERRUPT «; when 11 => kcpsm3_opcode«ENABLE INTERRUPT «; when others => kcpsm3„opcode := «Invalid Instruction»; end case; when others => kcpsm3_opcode := «Invalid Instruction»; end case; if clk'event and clk=T then --reset and flag status information if resets'1' or reset_delay= 1' then kcpsm3_status := «NZ, NO, Reset»; else kcpsm3_status(7 to 13) :=« «; if ftag_enable=T then if zero _carry=T then kcpsm3_status(1 to 4) :=«Z,«; else kcpsm3„status(1 to 4) := «NZ,«; end if; if sel_carry(3)sT then kcpsm3„status(5 to 6) :=« С»; else kcpsm3_status(5 to 6) := «NO»; end if; end if; end if; --simulation of register contents if register_enable=T then case instruction(11 downto 8) is when «0000» => sO„contents := alu_result; when «0001» => s1_contents > alu^result; when «0010» => $2_contents := alu_result; when «0011»~> s3„contentsalu.result; when «0100» => s4_contents := alujesult; when «0101» => s5_contents :-alu_result;
510 Зотов В, Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС when «0110» => s6_contents > alu.result; when «0111» => s7 ^contents ;= alujesult; when «1000» => sB.contents := alu.result; when «1001» => s9_contents > alu.result; when «1010» => sa_contents := alu.result; when «1011» => sb_conten!s > alu.result; when «1100» => sc.contents := alu.result; when «1101»=> sd.contents := alu.result; when «1110» se.contents := alu.result; when «1111»=> sf.contents := alu.result; when others -> null; end case; end if; --simulation of scratch pad memory contents if memory_enable=T then case second_operand(5 downto 0) is when «000000» => spmOO.contents := sx; when «000001» => spm01.contents := sx; when «000010» => spm02.contents := sx; when «000011» => spm03_contents := sx; when «000100» => spm04_contents > sx; when «000101» => spm05_contents := sx; when «000110» => spm06_contents := sx; when «000111»=> spm07_contents := sx; when «001000» => spm08_contents := sx; when «001001» -> spm09.contents > sx; when «001010» => spmOa.contents := sx; when «001011» => spmOb.contents := sx; when «001100» => spmOc_contentssx; when «001101»=> spm0d_contents := sx; when «001110» => spmOe.contents > sx; when «001111»=> spmOLcontenlssx; when «010000» => spmIO.contents := sx; when «010001» => spm11 .contents := sx; when «010010» => spm12.contents := sx; when «010011» => spm13_con tents := sx; when «010100» => spm14_contents := sx; when «010101» -> spm15_contents := sx; when «010110» => spm16.contents := sx; when «010111» => spm17_contents := sx; when «011000» => spm18_contents := sx; when «011001»=> spm19_contents := sx; when «011010» => spmla.contents > sx; when «011011»=> spm1 b.contents := sx; when «011100» => spmlc.contents := sx; when «011101» => spmld.contents := sx; when «011110» => spm1 e.contenls := sx; when «011111» => spm1 (.contents := sx; when «100000» => spm20_contents sx; when «100001» => spm21.contents := sx; when «100010» => spm22.contents > sx;
Приложение 3 511 when «100011» => spm23_contents := sx; when «100100» => spm24_contentssx; when «100101» => spm25„contents := sx; when «100110» => spm26„contents := sx; when «100111»=> spm27„contents := sx; when «101000» => spm28_contents := sx; when «101001» => spm29„contentssx; when «101010» => spm2a„contents sx; when «101011» => spm2b_contents := sx; when «101100» => spm2c„contents > sx; when «101101» => spm2d_contents := sx; when «101110» -> spm2e_contents := sx; when «101111»=> spm2f_contents := sx; when «110000» => spm30_contents := sx; when «110001» => spm31 „contents := sx; when «110010» => spm32„contents := sx; when «110011» => spm33_contents := sx; when «110100» => spm34„contents := sx; when «110101»=> spm35_contents := sx; when «110110» => spm36_contents > sx; when «110111»=> spm37„contents := sx; when «111000» => spm38_contents := sx; when «111001» => spm39_contents := sx; when «111010» => spm3a_contents := sx; when «111011»=> spm3b_contents := sx; when «111100» => spm3c_contents := sx; when «111101»=> spm3d_contents > sx; when «111110» => spm3e„contents := sx; when «111111»=> spm3f_contents := sx; when others => null; end case; end if; end if; end process simulation; -synthesis translate on ********************************************************************************** - End of simulation code, ********************************************************************************** end lowJeveLdefinition; - END OF FILE KCPSM3.VHD
ЛИТЕРАТУРА 1. Зотов В. ГО, Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack ISE. Мл Горячая линия - Телеком, 2003. 2. Кузелин М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фир- мы Xilinx: Справочное пособие. М.: Горячая линия - Телеком, 2004. 3. Кнышев Д. А., Кузелин М. О. ПЛИС фирмы «Xilinx»: описание структуры ос- новных семейств. М.: Издательский дом «Додека-ХХ1», 2001. 4. Мальцев П. П., Гарбузов Н. И., Шарапов А. П., Кнышев Д. А. Программируемые логические ИМС на КМОП-структурах и их применение. М.: Энергоатомиздат, 1998. 5. Spartan™-3 Platform FPGA Handbook // Xilinx Inc. 2003. 6. Virtex-II Pro™ Platform FPGA Handbook // Xilinx Inc. 2002. 7. Virtex-4 Handbook // Xilinx Inc. 2004. 8. PowerPC Processor Reference Guide // Xilinx Inc. 2003. 9. PowerPC™ 405 Processor Block Reference Guide // Xilinx Inc. 2004. 10. Processor IP Reference Guide // Xilinx Inc. 2005. 11. Зотов В. Embedded Development Kit - система проектирования встраиваемых микропроцессорных систем на основе ПЛИС серий FPGA фирмы Xilinx // Ком- поненты и технологии. 2004, № 4. 12. Зотов В. Создание проекта микропроцессорной системы на основе ядра MicroBlaze, реализуемой в ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2004, № 6. 13. Зотов В. Формирование спецификации аппаратной платформы микропроцессор- ной системы на основе ядра MicroBlaze, реализуемой в ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2004, № 7-8. 14. Зотов В. Реализация аппаратной платформы микропроцессорной системы, про- ектируемой на основе ядра MicroBlaze, в ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2004, № 9. 15. Зотов В. Разработка спецификации программных средств микропроцессорной системы на основе ядра MicroBlaze, реализуемой в ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2005, № 1. 16. 16. Зотов В. Разработка программного обеспечения микропроцессорной системы на основе ядра MicroBlaze, реализуемой в ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2005, № 2. 17. Зотов В. Разработка встраиваемых микропроцессорных систем на основе ядра MicroBlaze, реализуемых в ПЛИС семейств FPGA фирмы Xilinx, с помощью мас- тера Base System Builder Wizard // Компоненты и технологии. 2005, № 3—4. 18. Уэйкерли Дж. Ф. Проектирование цифровых устройств: В 2 т, М.: Постмаркет, 2002. 19. Бибило П. Н. Основы языка VHDL. М.: Солон-Р, 2000. 20. Бибило П. Н. Синтез логических схем с использованием языка VHDL. М.: Солон-Р, 2002.
ОГЛАВЛЕНИЕ ПРЕДИСЛОВИЕ.......................................................3 1. ХАРАКТЕРИСТИКА МИКРОПРОЦЕССОРНЫХ ЯДЕР И СРЕДСТВ ПРОЕКТИРОВАНИЯ ВСТРАИВАЕМЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ПЛИС ФИРМЫ XILINX.......................................5 1.1. Типы микропроцессорных ядер, предназначенных для разработки встраиваемых систем на основе ПЛИС фирмы Xilinx.................5 1.2. Краткая характеристика микропроцессорных ядер семейства PicoBlaze...6 1.3. Краткая характеристика микропроцессорных ядер семейства MicroBlaze..7 1.4. Краткая характеристика микропроцессорных ядер семейства PowerPC.....8 1.5. Краткий обзор основных средств проектирования, предоставляемых фирмой Xilinx............................................................10 2, МИКРОПРОЦЕССОРНОЕ ЯДРО PICOBLAZE, ПРЕДНАЗНАЧЕННОЕ ДЛЯ РАЗРАБОТКИ ВСТРАИВАЕМЫХ СИСТЕМ НА ОСНОВЕ ПЛИС ФИРМЫ XILINX СЕМЕЙСТВ SPARTAN-II, SPARTAN-IIE, VIRTEX, VIRTEX-E........15 2.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейства Spartan-II, Spartan-IIE, Virtex, Virtex-E).....................15 2.2. Архитектура микропроцессорного ядра PicoBlaze (семейства Spartan-H, Spartan-IIE, Virtex, Virtex-E).................................16 2.3. Структура проекта микропроцессорного ядра PicoBlaze (семейства Spartan-II, Spartan-IIE, Virtex, Virtex-E)..........19 2.4. Общая характеристика системы команд, поддерживаемых микропроцессорным ядром PicoBlaze (семейства Spartan-П, Spartan-IIE, Virtex, Virtex-E)..............................................24 3. СИСТЕМА КОМАНД МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, РЕАЛИЗУЕМОГО НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-H, SPARTAN-IIE, VIRTEX, VIRTEX-E..............................................26 3.1. Команды управления последовательностью выполнения операций в программе..............................................................26 3.2. Группа логических команд..................................30 3.3. Группа арифметических команд..............................34 3.4. Команды сдвига данных.....................................37 3.5. Команды ввода/вывода......................................39 3.6. Команды обслуживания прерываний...........................40 3.7. Различия в системе команд микропроцессорных ядер семейства PicoBlaze... 42 4. ОСОБЕННОСТИ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ПРИМЕНЕНИЯ В ПРОЕКТАХ, РЕАЛИЗУЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВА VIRTEX-II.........................................43 4.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейство Virtex-II)....................................................43 4.2. Архитектура микропроцессорного ядра PicoBlaze (семейство Virtex-II).43 4,3. Структура проекта микропроцессорного ядра PicoBlaze (семейство Virtex-II)..........................................45
514 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 4А. Система команд микропроцессорного ядра PicoBlaze (семейство Virtex-II) .. 50 4.5. Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на базе кристаллов семейства Virtex-II.................................................50 4.6. Группа логических команд микропроцессорного ядра PicoBlaze (семейство Virtex-II)...................................................52 4.7. Группа арифметических команд микропроцессорного ядра PicoBlaze (семейство Virtex-II)...............................................54 4.8. Команды сдвига данных для микропроцессорного ядра PicoBlaze, реализуемого на основе кристаллов семейства Virtex-II...............55 4.9. Команды ввода/вывода микропроцессорного ядра PicoBlaze (семейство Virtex-II)...................................................56 4.10. Команды обслуживания прерываний микропроцессорного ядра PicoBlaze (семейство Virtex-II)...................................................57 5. ОСОБЕННОСТИ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ПРИМЕНЕНИЯ В ПРОЕКТАХ, РЕАЛИЗУЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВА COOLRUNNER-II................................58 5.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейство CoolRunner-II)...............................................58 5.2. Архитектура микропроцессорного ядра PicoBlaze (семейство CoolRunner-II)...............................................59 5.3. Структура проекта микропроцессорного ядра PicoBlaze (семейство CoolRunner-II)......................................................60 5.4. Система команд микропроцессорного ядра PicoBlaze (семейство CoolRunner-II)...........................................64 5.5. Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на базе кристаллов семейства CoolRunner-II.......................................................64 5.6. Группа логических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейства CoolRuimer-II.66 5.7. Группа арифметических команд микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства CoolRunner-II....67 5.8. Команды сдвига данных для микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейства CoolRunner-II.69 5.9. Команды ввода/вывода микропроцессорного ядра PicoBlaze, предназначенного для применения в кристаллах семейства CoolRunner-II....70 5.10. Команды обслуживания прерываний микропроцессорного ядра PicoBlaze, реализуемого на основе кристаллов семейства CoolRunner-II...........70 6. ОСОБЕННОСТИ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ПРИМЕНЕНИЯ В ПРОЕКТАХ, РЕАЛИЗУЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-З, VIRTEX-II, VIRTEX-IIPRO И VIRTEX-4............................................................72 6.1. Основные характеристики микропроцессорного ядра PicoBlaze (семейства Spartan-З, Virtex-II, Virtex-IIPRO и Virtex-4)...........72
Оглавление 515 6.2. Архитектура микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4)................................73 6.3. Структура проекта микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4)..........75 6.4. Общая характеристика системы команд микропроцессорного ядра PicoBlaze (семейства Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4).79 6.5. Команды управления последовательностью выполнения операций в программе для ядра PicoBlaze, реализуемого на базе кристаллов семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4......................80 6.6. Группа логических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4.................................82 6.7. Группа арифметических команд микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-П, Virtex-IIPRO и Virtex-4..................................85 6.8. Команды сдвига данных для микропроцессорного ядра PicoBlaze, реализуемого в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4.........................................................88 6.9. Команды ввода/вывода микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4.................................89 6.10. Команды обслуживания прерываний микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-П, Virtex-IIPRO и Virtex-4..................................90 6.11. Команды чтения и записи данных в сверхоперативное запоминающее устройство микропроцессорного ядра PicoBlaze, предназначенного для использования в кристаллах семейств Spartan-3, Virtex-II, Virtex-IIPRO и Virtex-4.........................................................90 6.12. Загрузчик программ для микропроцессорного ядра PicoBlaze (семейства S partan-3, Virtex-II, Virtex-IIPRO и Virtex-4)....................92 7. РАЗРАБОТКА ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА ДЛЯ МИКРОПРОЦЕССОРНЫХ ЯДЕР СЕМЕЙСТВА PICOBLAZE.......................95 7.1. Подготовка исходного текста программы (семейство PicoBlaze)...95 7.2. Директивы ассемблера (семейство PicoBlaze)....................97 7.3. Трансляция программ, написанных на языке ассемблера (семейство PicoBlaze).............................................101 7.4. Файлы, формируемые ассемблером (семейство PicoBlaze).........102 7.5. Типовые ошибки при написании программ на языке ассемблера....106 8. ПРОЕКТИРОВАНИЕ ВСТРАИВАЕМЫХ СИСТЕМ НА ОСНОВЕ МИКРОПРОЦЕССОРНЫХ ЯДЕР СЕМЕЙСТВА PICOBLAZE.................................108 8.1. Этапы проектирования встраиваемых систем на основе микропроцессорных ядер семейства PicoBlaze...............................108 8.2. Структура проекта встраиваемой микропроцессорной системы на основе ядра семейства PicoBlaze в САПР серии Xilinx ISE........Ill
516 Зотов В, Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 8.3, Создание нового проекта встраиваемой микропроцессорной системы на основе ядра семейства PicoBlaze в САПР серии Xilinx ISE.......112 8.4. Выполнение основных этапов проектирования встраиваемых систем на основе микропроцессорных ядер семейства PicoBlaze в САПР серии Xilinx ISE.........*.......................................125 8.5. Загрузка конфигурационной последовательности разработанной микропроцессорной системы в ПЛИС.................................132 8.6. Генерация файлов программирования ПЗУ/ППЗУ с помощью модуля iMPACT.........................................136 8.7. Программирование ППЗУ серий XC18V00 и Platform Flash помощью модуля iMPACT ...........................................142 8.8. Проектирование контроллера на основе микропроцессорного ядра PicoBlaze, предназначенного для реализации в ПЛИС семейства Spartan-З..............................................143 9. MICROBLAZE-СЕМЕЙСТВО 32-РАЗРЯДНЫХ МИКРОПРОЦЕССОРНЫХ ЯДЕР, ПРЕДНАЗНАЧЕННЫХ ДЛЯ ПРОЕКТИРОВАНИЯ ВСТРАИВАЕМЫХ СИСТЕМ НА ОСНОВЕ ПЛИС СЕРИЙ FPGA ФИРМЫ XILINX......................168 9.1. Основные характеристики микропроцессорных ядер семейства MicroBlaze.............................................168 9.2, Архитектура микропроцессорных ядер семейства MicroBlaze.....170 9.3. Структура регистров статуса MSR и FSR микропроцессорных ядер семейства MicroBlaze.............................................175 9.4. Шинные интерфейсы микропроцессорных ядер семейства MicroBlaze.177 9.5. Периферийные компоненты для проектирования встраиваемых систем на основе микропроцессорных ядер семейства MicroBlaze............181 9.6. Ограничения адресного пространства, производительности и объема памяти для микропроцессорных ядер семейства MicroBlaze....182 9.7. Распределение адресного пространства памяти микропроцессорных ядер семейства MicroBlaze.............................................183 9.8. Размещение исполняемого кода программ в памяти микропроцессорных ядер семейства MicroBlaze......................184 9.9. Организация хранения данных в памяти и регистрах общего назначения микропроцессорных ядер семейства MicroBlaze......................185 10. СИСТЕМА КОМАНД МИКРОПРОЦЕССОРНЫХ ЯДЕР СЕМЕЙСТВА MICROBLAZE...............................................190 10 .1. Общая характеристика команд, поддерживаемых микропроцессорными ядрами семейства MicroBlaze.................................... 190 10 .2. Форматы команд, поддерживаемых микропроцессорными ядрами семейства MicroBlaze......................................191 10. 3. Группа арифметических команд..............................192 10. 4. Группа логических команд................................ 203 10. 5. Команды сдвига данных.....................................208 10. 6. Команды преобразования типов данных.......................212 10. 7. Команды передачи данных...................................215
Оглавление 517 10. 8. Команды управления последовательностью выполнения операций в программе......................................................221 10. 9. Группа инструкций ввода/вывода............................235 10. 10. Группа специальных команд................................237 10. 11. Инструкции записи в кеш-память...........................240 10. 12. Инструкции поразрядного сравнения двух операндов.........240 10. 13. Группа команд, предназначенных ддя выполнения операций с плавающей запятой............................................ 242 11. EMBEDDED DEVELOPMENT KIT - СИСТЕМА ПРОЕКТИРОВАНИЯ ВСТРАИВАЕМЫХ 32-РАЗРЯДНЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ПЛИС СЕРИИ FPGA ФИРМЫ XILINX.............................247 11.1. Основные характеристики пакета Xilinx Embedded Development Kit.247 11.2. Структура средств разработки встраиваемых микропроцессорных систем Embedded System Tools................................................249 11.3. Краткая характеристика и пользовательский интерфейс управляющей оболочки Xilinx Platform Studio......................................254 11.4. Этапы проектирования микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx с применением ядер семейства MicroBlaze...258 11.5. Структура проекта в САПР встраиваемых микропроцессорных систем Xilinx Embedded System Tools..............................260 12. ПРОЕКТИРОВАНИЕ ВСТРАИВАЕМЫХ 32-РАЗРЯДНЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ЯДЕР СЕМЕЙСТВА MICROBLAZE.............................................................261 12.1. Создание нового проекта встраиваемой микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio..................262 12.2. Синтаксис файла спецификации аппаратной платформы разрабатываемой микропроцессорной системы, реализуемой на базе ПЛИС семейств FPGA фирмы Xilinx.....................................................273 12.3. Создание спецификации аппаратной платформы разрабатываемой микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio......................278 12. 4. Подготовка файла временных и топологических ограничений проекта аппаратной платформы разрабатываемой микропроцессорной системы.......300 12.5. Формирование списка соединений аппаратной платформы разрабатываемой микропроцессорной системы............................303 12.6. Реализация проекта аппаратной части разрабатываемой микропроцессорной системы в кристалле FPGA...........................304 12. 7. Генерация конфигурационной последовательности для проекта аппаратной части разрабатываемой 32-разрядной микропроцессорной системы........................................311 12.8. Синтаксис и структура файла спецификации программной платформы разрабатываемой 32-разрядной микропроцессорной системы, реализуемой на базе ПЛИС семейств FPGA фирмы Xilinx..............315
518 Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС 12.9. Создание спецификации программных средств разрабатываемой 32-разрядной микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio..................................320 12.10. Генерация программной платформы разрабатываемой 32-разрядной микропроцессорной системы, реализуемой на основе ПЛИС семейств FPGA фирмы Xilinx.....................................................326 12.11. Создание проекта прикладной программы для разрабатываемой 32-разрядной микропроцессорной системы в среде управляющей оболочки Xilinx Platform Studio..................................326 12.12. Формирование исходных модулей прикладной программы для разрабатываемой 32-разрядной микропроцессорной системы...........333 12.13. Создание файла директив для компоновщика (linker script)..334 12.14. Компиляция и компоновка прикладной программы для разрабатываемой 32-разрядной микропроцессорной системы.......338 12.15. Запись исполняемого кода прикладной программы в конфигурационную последовательность проекта аппаратной части микропроцессорной системы, и загрузка конфигурационных данных в кристалл FPGA...............338 13. РАЗРАБОТКА ВСТРАИВАЕМЫХ 32-РАЗРЯДНЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА ОСНОВЕ ЯДЕР СЕМЕЙСТВА MICROBLAZE С ПОМОЩЬЮ МАСТЕРА BASE SYSTEM BUILDER WIZARD..................................341 13.1. Выбор способа создания проекта разрабатываемой микропроцессорной системы в САПР Xilinx EST........................................341 13.2. Формирование исходных файлов описания разрабатываемой 32-разрядной микропроцессорной системы с помощью мастера Base System Builder Wizard...............................344 13.3. Формирование конфигурационной последовательности для проекта аппаратной части разрабатываемой 32-разрядной микропроцессорной системы........................................372 13.4. Создание программного обеспечения для разрабатываемой 32-разрядной микропроцессорной системы...........................373 13.5. Включение исполняемого кода прикладной программы в конфигурационную последовательность проекта аппаратной части микропроцессорной системы и загрузка конфигурационных данных в кристалл FPGA..................................................373 14. АППАРАТНЫЕ СРЕДСТВА РАЗРАБОТКИ ВСТРАИВАЕМЫХ МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА СНОВЕ ПЛИС ФИРМЫ XILINX.....................375 14.1. Инструментальный комплект CoolRunner-II Design Kit.........375 14.1.1. Назначение и основные характеристики инструментального комплекта CoolRunner-II Design Kit..........................375 14.1.2. Структура инструментального модуля Digilab ХС2 (Digilab XC2-XL)............................................377 14.1.3. Организация питания инструментального модуля Digilab ХС2 (Digilab XC2-XL)............................................382 14.1.4. Формирование цепочки периферийного сканирования ПЛИС в составе инструментального модуля Digilab ХС2 (Digilab XC2-XL).383
Оглавление 519 14.1.5. Работа с инструментальным модулем Digilab ХС2 (Digilab XC2-XL).......................................384 14.1.6. Краткая характеристика ПЛИС семейства CoolRunner-II, используемых в инструментальном модуле Digilab ХС2 (Digilab XC2-XL).......................................385 14.2. Инструментальный комплект Spartan-З Starter Kit......387 14.2.1. Назначение и основные характеристики инструментального комплекта Spartan-З Starter Kit........................387 14.2.2. Структура инструментального модуля Spartan-З Starter Board.389 14.2.3. Краткая характеристика ПЛИС XC3S200, используемой в инструментальном модуле Spartan-З Starter Board......395 14.2.4, Описание структуры тестового проекта...........397 14.2.5. Использование инструментального модуля Spartan-З Starter Board................................398 Приложение 1. VHDL-ОПИСАНИЕ ИСПОЛНИТЕЛЬНОГО МОДУЛЯ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, РЕАЛИЗУЕМОГО НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-II, SPARTAN-IIE, VIRTEX, VIRTEX-E..............................................399 Приложение 2. VHDL-ОПИСАНИЕ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, ПРЕДНАЗНАЧЕННОГО ДЛЯ ИСПОЛЬЗОВАНИЯ В ПРОЕКТАХ, ВЫПОЛНЯЕМЫХ НА ОСНОВЕ ПЛИС СЕМЕЙСТВА COOLRUNNER-II.................................................443 Приложение 3. VHDL-ОПИСАНИЕ ИСПОЛНИТЕЛЬНОГО МОДУЛЯ МИКРОПРОЦЕССОРНОГО ЯДРА PICOBLAZE, РЕАЛИЗУЕМОГО НА ОСНОВЕ ПЛИС СЕМЕЙСТВ SPARTAN-З, VIRTEX-II, VIRTEX-IIPRO, VIRTEX-4......................................................478 ЛИТЕРАТУРА....................................................512