Разработка программ на языке ассемблера для семейства микропроцессорных ядер PicoBlaze

Компоненты и технологии, № 8'2003 Софт

Разработка программ на языке ассемблера

для семейства микропроцессорных ядер РкоВ!ахе

В предыдущих публикациях данного цикла [1-4] были рассмотрены архитектура и система команд элементов семейства встраиваемых 8-разрядных микропроцессорных ядер РкоВ!ахе, которые предназначены для использования в проектах, выполняемых на основе различных серий ПЛИС фирмы ХШпх. Настоящая статья посвящена вопросам подготовки и трансляции программ на языке ассемблера для этого семейства микропроцессорных ядер.

Валерий Зотов

walerry@euro.ru

Подготовка исходного текста программы на языке ассемблера микропроцессорного ядра PicoBlaze

Для подготовки исходного текста программы на языке ассемблера можно воспользоваться любым универсальным текстовым редактором, поддерживающим стандартный текстовый формат. Наиболее целесообразно для этих целей использовать программы Notepad или Wordpad, которые являются стандартными принадлежностями операционных систем Windows.

В тексте программы на языке ассемблера микропроцессорного ядра PicoBlaze могут присутствовать следующие элементы:

• команды микропроцессорного ядра;

• директивы ассемблера;

• метки;

• комментарии.

Команды микропроцессорного ядра — это инструкции, предназначенные для выполнения исполнительным модулем PicoBlaze операций, которые предусмотрены алгоритмом разрабатываемой программы. Синтаксис этих команд совпадает с мнемонической формой записи инструкций микропроцессорных ядер PicoBlaze, рассмотренных ранее [2-4]. В процессе трансляции ассемблер преобразует команды микропроцессорного ядра в исполняемый код.

Директивы представляют собой команды, предназначенные для управления работой ассемблера и процессом трансляции. Директивы ассемблера не транслируются в исполняемый код. Более подробно назначение и использование директив ассемблера микропроцессорного ядра PicoBlaze рассматривается в следующем разделе.

Метки предназначены для идентификации строк программы, содержащих инструкции микропроцессорного ядра, на которые имеются ссылки из других команд. Метки представляют собой последовательность символов, оканчивающуюся дво-

еточием, которая располагается перед текстом инструкции. В составе меток могут использоваться прописные и строчные буквы латинского алфавита (A-Z, a-z), цифры (0-9) и символы подчеркивания (_). Метки не должны содержать пробелов или символов-разделителей, как, например, точки, запятые, точки с запятой. В качестве меток следует задавать мнемонические идентификаторы, которые повышают информативность разрабатываемой программы. Метки рекомендуется использовать в инструкциях перехода JUMP и вызова подпрограмм CALL вместо явного указания адреса перехода или адреса вызываемой процедуры. Таким образом, при написании и редактировании программы не требуются вычисления абсолютных значений адресов команд в ППЗУ микропрограмм. Применение меток не только позволяет избежать ошибок, связанных с указанием некорректных значений адресов в командах, но и обеспечивает мобильность разрабатываемой программы за счет отсутствия ее привязки к конкретным адресам программной памяти.

Комментарии используются, как правило, для внесения различных пояснений в разрабатываемую программу, которые облегчают ее чтение и понимание. Комментарии не оказывают никакого влияния на процесс трансляции программы и формируемый исполняемый код. Комментарием считается любая последовательность символов, которая начинается с точки с запятой. Ассемблер микропроцессорного ядра PicoBlaze полностью игнорирует ту часть строки, которая расположена вслед за точкой с запятой.

При написании программ на языке ассемблера необходимо соблюдать следующие правила. Каждая команда микропроцессорного ядра или директива ассемблера должна располагаться в отдельной строке. Параметры инструкций микропроцессорного ядра или директив ассемблера отделяются от текста команд пробелом. Если формат инструкции или директивы требует указания двух параме-

Компоненты и технологии, № 8'2003

тров, то второй параметр отделяется от первого запятой и пробелом. В исходном тексте разрабатываемой программы не следует оставлять пустых строк. Если все же требуется включить пустую строку в текст программы, например, для разделения основной части программы и подпрограммы, то следует сделать это в виде комментария. Для этого в любую позицию пустой строки нужно вставить точку с запятой.

По окончании редактирования исходного текста разрабатываемой программы необходимо сохранить его в виде файла на диске. Название этого файла должно состоять не более чем из восьми символов и соответствовать требованиям операционной системы MS-DOS. Расширение создаваемого файла, в который записывается текст программы, зависит от используемой версии ассемблера. В свою очередь, версия ассемблера определяется типом микропроцессорного ядра PicoBlaze, для которого разрабатывается программа. Для микропроцессорных ядер, реализуемых на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E и Virtex-II, исходный текст программы должен содержаться в файле с расширением psm. Текст программы на языке ассемблера для микропроцессорного ядра PicoBlaze, используемого в кристаллах семейства CoolRunner-II, следует записывать в файл с расширением asm. Создаваемый файл с исходным текстом программы должен располагаться в том же разделе диска, что и соответствующая программа-ассемблер. Для этих целей рекомендуется использовать рабочий каталог проекта, разрабатываемого в среде САПР фирмы Xilinx серии ISE (Integrated Synthesis Environment) [5], в составе которого используется соответствующее микропроцессорное ядро. Кроме собственно программы ассемблера, в этот каталог для проектов, выполняемых на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E и Virtex-II, необходимо переписать файлы шаблонов ROM_form.vhd и ROM_form.coe.

Директивы ассемблера микропроцессорного ядра PicoBlaze

Ассемблер микропроцессорного ядра PicoBlaze поддерживает три директивы: CONSTANT, NAMEREG и ADDRESS.

Директива CONSTANT предназначена для декларации и определения значения константы, которая может использоваться в качестве параметра в командах микропроцессорной программы. Константы, определенные с помощью данной директивы, могут выступать в качестве операндов в арифметических и логических инструкциях и в качестве адресов входных и выходных портов в инструкциях ввода-вывода. Применение константы вместо явного числового значения позволяет, прежде всего, повысить информативность программы, написанной на языке ассемблера. Кроме того, использование констант облегчает процесс отладки и редактирования разрабатываемой программы. Если константа представляет параметр, который многократно встречается в различных местах про-------------------www.finestreet.ru-

граммы, то для изменения значения этого параметра достаточно отредактировать численное значение в строке декларации константы, вместо того чтобы вносить исправления во всех командах, где используется данный параметр. Тем самым, исключается возможность появления в программе ошибок, которые возникают из-за того, что не во всех инструкциях, где встречается данный параметр, указано его корректное значение.

Формат командной строки для директивы CONSTANT выглядит следующим образом.

CONSTANT <идентификатор_константы>, <числовое_значе-

ние_константы >

В состав идентификатора константы могут входить прописные и строчные буквы латинского алфавита (A-Z, a-z), цифры (0-9) и символы подчеркивания (_). При этом в имени константы не должно быть пробелов или каких-либо символов-разделителей. Рекомендуется использовать мнемонические идентификаторы констант, отражающие функциональное назначение соответствующего параметра. Константа, определяемая с помощью директивы CONSTANT, содержит восемь двоичных разрядов. Числовое значение константы указывается в виде последовательности, состоящей из двух шестнадцатеричных символов (0-9, A-F, a-f). Директива CONSTANT может располагаться в любом месте программы. При этом ее действие распространяется на всю программу, то есть определяемая константа может использоваться в командах, расположенных как после, так и до строки, содержащей соответствующую директиву CONSTANT.

Приведенный ниже фрагмент программы иллюстрирует применение директивы CONSTANT.

CONSTANT max_value, 15 CONSTANT adr_in_port, 1D CONSTANT adr_out_port, 1F INPUT s1, adr_in_port LOAD s2, si SUB s2, max_value JUMP NC, out_max OUTPUT si, adr_out_port JUMP next_inst out_max: LOAD s3, max_value

OUTPUT s3, adr_out_port next_inst: LOAD s3, s1

В представленном фрагменте программы константа adr_in_port определяет значение адреса используемого входного порта ввода-вывода, а константа adr_out_port — выходного порта. Константа с идентификатором max_value используется для указания максимально допустимого значения некоторого контролируемого параметра, значения которого считываются из входного порта с адресом adr_in_port.

Директива NAMEREG позволяет переименовать любой из регистров общего назначения. По умолчанию в качестве названий регистров общего назначения используются идентификаторы, состоящие из символа s и порядкового номера регистра. Для повышения информативности разрабатываемой ассемблерной программы целесообразно задать новые, мнемонические имена для ис-

пользуемых регистров общего назначения. В качестве идентификаторов, определяемых разработчиком, рекомендуется указывать названия, отражающие функциональное назначение соответствующего регистра или характер данных, записанных в этот регистр. Использование мнемонических названий регистров делает более прозрачным процесс отладки микропроцессорных программ. Применение директивы NAMEREG позволяет также избежать ошибок, обусловленных просчетами при указании номеров регистров общего назначения в различных командах программы. Определение новых названий регистров с помощью директивы NAMEREG повышает мобильность разрабатываемых программ. Программа, написанная на ассемблере с использованием директивы NAMEREG, требует минимальных исправлений при ее переносе от одного элемента семейства микропроцессорных ядер PicoBlaze к другому. Вместо переопределения регистров во всех соответствующих инструкциях разработанной программы, в которых они используются, достаточно внести изменения только в строки, содержащие директивы NAMEREG.

Командная строка для директивы NAMEREG имеет следующий формат.

NAMEREG <текущий_идентификатор_регистра>, <но-

вый_идентификатор_регистра>

Идентификаторы регистров общего назначения могут содержать те же символы (прописные и строчные буквы латинского алфавита и цифры), что и названия констант, определяемых с помощью директивы CONSTANT . В то же время, в названиях регистров не допускается использование пробелов или символов-разделителей. Следует обратить внимание на то, что новое обозначение регистра может использоваться только в той части программы, которая следует после строки, содержащей директиву NAMEREG для соответствующего регистра. Таким образом, директива NAMEREG не имеет обратного действия. После переименования регистра его старое обозначение не может использоваться как идентификатор этого регистра.

В качестве примера применения директивы NAMEREG далее приводится модифицированный вариант фрагмента программы, демонстрирующего использование директивы CONSTANT.

CONSTANT max_value, 15 CONSTANT adr_in_port, 1D CONSTANT adr_out_port, 1F NAMEREG s1, in_data_reg NAMEREG s2, differenc_reg INPUT in_data_reg, adr_in_port LOAD differenc_reg, in_data_reg SUB differenc_reg, max_value JUMP NC, out_max OUTPUT in_data_reg, adr_out_port JUMP next_inst out_max: LOAD s3, max_value

OUTPUT s3, adr_out_port next_inst: LOAD s3, in_data_reg

В представленном фрагменте программы переопределены идентификаторы двух регистров общего назначения. Регистр s1, который выполняет функцию хранения данных,

е

Компоненты и технологии, № 8'2003

считанных из входного порта ввода-вывода, обозначен как in_data_reg. Для регистра s2, используемого в операции вычисления разности текущего и максимального значений, с помощью директивы NAMEREG задано новое название — differenc_reg.

Директива ADDRESS предназначена для указания нового адреса, начиная с которого должны располагаться команды программы, следующие за строкой, содержащей эту директиву. Таким образом, данная директива позволяет явно указать адресное пространство для размещения в ППЗУ любой части разрабатываемой программы. Директиву ADDRESS целесообразно использовать для выделения соответствующих секций в адресном пространстве ППЗУ микропрограмм, предназначенных для записи подпрограмм. Кроме того, данная директива необходима для записи вектора обработки прерывания.

Формат командной строки для директивы ADDRESS выглядит следующим образом.

ADDRESS <числовое_значение_адреса>

Числовое значение адреса в директиве ADDRESS указывается в виде последовательности, состоящей из двух или трех шестнадцатеричных символов, в зависимости от используемого типа микропроцессорного ядра. Для ядер PicoBlaze, реализуемых на базе кристаллов семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E и CoolRunner-II, адрес задается в виде двухразрядного шестнадцатеричного числа. В программах, предназначенных для микропроцессорного ядра семейства Virtex-II, значение адреса содержит три шестнадцатеричных разряда.

В качестве примера далее приводится фрагмент программы, который наглядно поясняет способ практического применения директивы ADDRESS.

CONSTANT max_value, 15

CONSTANT adr_in_port, 1D

CONSTANT adr_out_port, 1F

NAMEREG s1, in_data_reg

NAMEREG s2, differenc_reg

INPUT in_data_reg, adr_in_port

LOAD differenc_reg, in_data_reg

SUB differenc_reg, max_value

JUMP NC, out_data

JUMP next_inst

out_data: OUTPUT in_data_reg, adr_out_port

next_inst: LOAD s3, in_data_reg

ADDRESS B0

interrupt_routine: ADD differenc_reg, 01

OUTPUT differenc_reg, adr_out_port

RETURNI ENABLE

ADDRESS FF

JUMP interrupt_routine

ADDRESS FF предписывает ассемблеру транслировать код вектора прерывания по адресу FF. Необходимость этого обусловлена архитектурными особенностями микропроцессорных ядер PicoBlaze для семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E и CoolRunner-II. В программах, которые разрабатываются для микропроцессорного ядра на основе семейства Virtex-II, код вектора прерывания должен находиться по адресу 3FF. С помощью дирек-

тивы ADDRESS B0 дается указание ассемблеру транслировать код процедуры обработки прерывания, начиная с адреса B0. Представленный ниже текст файла листинга, сформированного ассемблером при трансляции рассматриваемого фрагмента программы, отражает результаты воздействия директивы 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, differenc_reg

00 AiiD INPUT in_data_reg[s1], adr_in_port[1D]

0i C2i0 LOAD differenc_reg[s2], in_data_reg[s1]

02 62i5 SUB differenc_reg[s2], max_value[15]

0З 9D05 JUMP NC, out_data[05]

04 8i06 JUMP next_inst[06]

0З EiiF out_data: OUTPUT in_data_reg[s1], adr_out_port[1F]

06 C310 next_inst: LOAD s3, in_data_reg[s1]

07 ; ...

07 ; ...

B0 ADDRESS B0

B0 420i interrupt_routine: ADD differenc_reg[s2], 0i

Bi E2iF OUTPUT differenc_reg[s2], adr_out_port[iF]

B2 80F0 RETURNI ENABLE

B3 ;

FF ADDRESS FF

FF 8iB0 JUMP interrupt_routine[B0]

Трансляция программ, написанных на языке ассемблера микропроцессорного ядра PicoBlaze

Программа-ассемблер для микропроцессорного ядра PicoBlaze представляет собой DOS-приложение, которое функционирует в консольном режиме. Поэтому для его запуска рекомендуется активизировать сеанс DOS (режим командной строки) и установить в качестве текущего каталог, в котором располагаются ассемблер и транслируемая программа. Для выполнения этих операций целесообразно воспользоваться какой-либо программой управления файлами, напри-

мер, управляющей оболочкой Windows Commander, которая позволяет быстро установить требуемый текущий раздел диска и запустить сеанс DOS.

Как уже упоминалось ранее [2-4], для каждого элемента семейства PicoBlaze используется своя версия ассемблера. Командная строка для запуска процесса трансляции разработанной программы состоит из названия соответствующей версии ассемблера и идентификатора файла, в котором содержится исходный текст транслируемой программы на языке ассемблера. Формат командной строки, активизирующей процедуру трансляции программ, предназначенных для микропроцессорного ядра PicoBlaze семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, выглядит следующим образом:

Kcpsm.exe <идентификатор_файла_с_исходным_текстом_про-граммы_на_языке_ассемблера>[.psm]

Для трансляции программ микропроцессорного ядра PicoBlaze, встраиваемого в проекты, реализуемые на базе ПЛИС семейства Virtex-II, следует воспользоваться командной строкой, формат которой имеет следующий вид:

Kcpsm2.exe <идентификатор_файла_с_исходным_текстом_про-граммы_на_языке_ассемблера>[.psm]

В приведенных выше форматах командной строки квадратные скобки служат для обозначения необязательного параметра. Таким образом, используемое по умолчанию расширение файла, содержащего исходный текст программы (PSM) можно не указывать.

Процедура трансляции программ микропроцессорного ядра PicoBlaze, используемого в кристаллах семейства CoolRunner-II, запускается с помощью командной строки, которая должна соответствовать следующему формату:

Asm.exe <идентификатор_файла_с_исходным_текстом_про-граммы_на_языке_ассемблера>.asm

C:\Wimr\fystefn32\cmdeMe

XCPSM ulTli. Ken Chapman <Xilinx~UK> 2BQ2

The assembler for KCPSH Programmable State Machine

PASS 1 - Reading input PSH file ’

CONSTANT max_.ualua, 15 CONSTANT adr_in_port. ID CONSTANT adr_out_port, IF NAMEREG si, in_data_reg NAMEREG s2, differ«nc_reg INPUT in_data_reg. adr_in_port LOAD differenc_reg, in_data_reg SUB dif f erenc_reg. max value JUMP NC, 05 JUMR next inst out_d«ta¡OUTPUT in_data_reg. adroutport PASS 2 - Testing Instructions

CONSTANT max.ualue, 15 CONSTANT adr_in_port. ID CONSTANT adr_out_port, IF NANEREG si. in_data_reg NAMEREG s2. differenc_reg INPUT in_data_reg. adr_in_port LOAD differenc_r«g» in_data_reg SUB differenc_r«g. max value JUMP NC. 05 JUMR next_inst

ERROR - JUMR i6 not a valid instruction.

Please correct and try again.

¡XCPSM complete.

t:\Project\PICOBL~l>. ---------------------------------------------

Информация о ходе трансляции программы

Сообщение об ошибках

Командная строка

Рис. 1. Вид рабочего окна ассемблера микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E

Компоненты и технологии, № 8'2003

Процесс трансляции включает в себя несколько последовательных фаз. Информация о выполнении и результатах каждой фазы трансляции отображается непосредственно в окне DOS-приложения. В этом же окне выводятся сообщения о возможных ошибках, обнаруженных в транслируемой программе. На рис. 1 в качестве примера показан вид рабочего окна ассемблера KCPSM.

В случае отсутствия ошибок трансляция завершается выводом сообщения вида «KCPSM successful».

Файлы, формируемые ассемблером микропроцессорного ядра PicoBlaze

При успешном завершении процесса трансляции программы ассемблер формирует комплект файлов.

Рисунок 2 наглядно отображает информацию об исходных файлах, используемых при трансляции программ микропроцессорного ядра PicoBlaze, предназначенного для реализации в кристаллах семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, Virtex-II, и результирующих файлах, формируемых ассемблером KCPSM (KCPSM2).

Помимо основного исходного файла, содержащего текст программы на языке ассемблера, для выполнения трансляции необходимы файлы шаблонов ROM_form.vhd и ROM_form.coe. Файл ROM_form.vhd представляет собой шаблон описания содержимого ППЗУ микропрограмм на языке VHDL (VHSIC Hardware Description Language).

В файле ROM_form.coe содержится шаблон описания содержимого ППЗУ микропрограмм в формате, воспринимаемом генератором ядер Xilinx CORE Generator.

При отсутствии ошибок в транслируемой программе ассемблерами KCPSM и KCPSM2 генерируется набор файлов, название большинства которых совпадает с идентификатором исходного файла, а расширение соответствует типу содержащейся в них информации. Всю совокупность файлов, формируемых этими версиями ассемблера, можно условно разбить на пять групп. К первой группе относятся файлы, в которые записывается содержимое в форматах, воспринимаемых средствами проектирования фирмы Xilinx серии ISE. В эту группу входят файлы описания содержимого программной памяти на языке VHDL и в формате, воспринимаемом генератором ядер Xilinx CORE Generator, которые имеют расширение vhd и coe соответственно. VHDL-описание содержимого ППЗУ микропрограмм используется на этапах синтеза и моделирования проектируемой системы. Вторую группу образуют файлы, описывающие содержимое ППЗУ микропрограмм в форматах, используемых утилитами, не входящими в состав САПР серии ISE. К этой группе относятся файлы, содержащие результаты трансляции в виде кодов в шестнадцатеричном и десятичном представлении, которые имеют расширение hex и dec соответственно. Третью группу составляют файлы отчетов о ходе

Шаблоны описания содержимого ППЗу

ROM_form.vhd

ROM_form.coe

<filename>.psm } Исходный текст программы

passl .dat pass2.dat pass3.dat pass4.dat pass5.dat

Промежуточные

результаты

трансляции

Описание содержимого ППЗУ микропрограмм, используемые в САПР ISE

Описание содержимого ППЗУ микропрограмм, в шестнадцатеричном и десятиричном форматах

Рис. 2. Файлы, формируемые ассемблером микропроцессорного ядра PicoBlaze для ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E, Virtex-II

<filename>.vhd

<filename>.coe

<filename>.hex

<filename>.dec

<filename>.log

constant.txt

labels.txt

<filename>.fmt }

Щтчеты

ассемблера

Форатированный текст программы

и результатах трансляции. Файл с расширением log содержит детальную информацию о трансляции каждой строки ассемблерной программы. В файле constant.txt перечисляются все константы, используемые в программе, с указанием их значений. Файл labels.txt содержит информацию о метках, которые содержатся в программе, и адресах ППЗУ микропрограмм, которые им соответствуют. В четвертую группу входит единственный файл, имеющий расширение fmt, в котором записан отформатированный вариант исходного текста программы на языке ассемблера. К пятой группе относятся файлы pass1.dat - pass5.dat, содержащие промежуточные результаты, полученные на различных фазах процесса трансляции. Информация, которая содержится в этих файлах, может использоваться в процессе отладки программы.

Состав файлов, генерируемых ассемблером ASM, который предназначен для трансляции программ микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II, несколько отличается от рассмотренного выше. В первую очередь это связано с тем, что в данной версии ядра модуль программной

памяти реализуется не внутри ПЛИС, а в виде внешнего элемента ПЗУ или ППЗУ. Для программирования такого элемента памяти ассемблер должен сформировать файл прошивки в формате, поддерживаемом различными типами программаторов. На рис. 3 показана структура комплекта выходных файлов, создаваемых ассемблером микропроцессорного ядра РісоВ^е, реализуемого на основе ПЛИС семейства СооШиппег-П, при успешном завершении процесса трансляции.

Все выходные файлы, формируемые ассемблером ASM, имеют одно и то же название, совпадающее с именем входного файла, в котором содержится исходный текст программы на языке ассемблера. В большинстве случаев основным выходным файлом является файл с расширением те$, в котором содержится информация о прошивке внешнего ПЗУ или ППЗУ в формате Ш:е1 MCS-86. Файл, имеющий расширение укй, представляет собой описание содержимого программной памяти на языке VHDL, соответствующего транслируемой программе. Этот файл используется в процессе отладки разрабатываемой программы методом моделирования ядра РісоВ^е в составе проек-

<filename>.asm} Исходный текст программы

О

о о

Код программы в i <f¡lename>.mcs формате MCS-86

<filename>.vhd} <f¡lename>.bin} <f¡lename>.fmt} <filename>.log}

УШЬописание содержимого ППЗУ микропрограмм Двойной код программы в шестнадцатиричном формате Форматированный текст программы

Отчет ассемблера

Рис. 3. Файлы, формируемые ассемблером микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейства CoolRunner-II

е

Компоненты и технологии, № 8'2003

тируемого устройства с помощью системы ModelSim XE [5-8]. Файл с расширением bin включает в себя результаты трансляции программы в виде двоичных кодов, которые представлены в шестнадцатеричном формате. Информация о выполнении и результатах процесса трансляции содержится в файле с расширением log. Форматированный вариант исходного текста программы на языке ассемблера записывается в файл, имеющий расширение fmt.

При отладке программ следует учитывать, что выходные файлы, формируемые различными версиями ассемблера, переписываются заново при каждом запуске процесса трансляции.

Типичные ошибки при написании программ на языке ассемблера микропроцессорного ядра PicoBlaze

В данном разделе рассматриваются наиболее распространенные ошибки, встречающиеся в исходном тексте программ на языке ассемблера для микропроцессорного ядра PicoBlaze. Для каждого типа ошибки приводится текст соответствующего сообщения, формируемого ассемблерами KCPSM и KCPSM2. Текст аналогичных сообщений ассемблера ASM несущественно отличается от образцов, представленных ниже, в основном меньшим объемом справочной информации.

Типовыми ошибками при написании программ на языке ассемблера микропроцессорного ядра PicoBlaze являются:

• опечатки в тексте команд микропроцессорного ядра или директив ассемблера;

• неправильные названия регистров, указываемые в качестве параметров команд;

• ошибки в указании параметров инструкций микропроцессорного ядра;

• отсутствие обязательных параметров команд микропроцессорного ядра или директив ассемблера;

• отсутствие метки строки, на которую имеются ссылки в командах программы;

• использование одной метки для двух или более строк;

• недопустимые значения числовых параметров директив ассемблера.

При выявлении ошибки в тексте команды

микропроцессорного ядра или директивы ассемблер выводит на экран строку, формат которой выглядит следующим образом:

ERROR — <текст_неидентифициров,а.нной_кома.ндыт_или_ди-рективы> is not a valid instruction.

Обнаружение ошибки в названии используемого регистра сопровождается сообщением вида:

ERROR — Invalid register name: <HenpaBHnbHbm_HgeHTH^HKa-Top_peracrpa>

Default register names are in the range 's0' 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 's0' to 'sF'. Note that NAMEREG directive replaces the default name, 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'. АП user defined labels and names are case sensitive.

При обнаружении адреса порта ввода-вывода, выходящего за пределы допустимых значений, или несуществующей константы, используемой в качестве адреса порта ввода-вывода, выводится сообщение, которое имеет следующий вид.

ERROR — Invalid port address: <HenpaBHnbHbm_aflpec_nopTa_BBO-ga-BbiBoaa>

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 'FF'. The second operand may also be a valid register name enclosed in brackets or a constant label. Default register names are in the range '(s0)' 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: <TeKCT_OTcyTCTByrom;eH_MeTKH> 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.

На этом завершается рассмотрение встраиваемых микропроцессорных модулей семейства PicoBlaze. В следующей части данного цикла будет представлено семейство тридцатидвухразрядных микропроцессорных ядер MicroBlaze. ИИ

Литература

1. Зотов В. PicoBlaze — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы Xilinx // Компоненты и технологии. 2003. № 4.

2. Зотов В. Система команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E // Компоненты и технологии. 2003. № 5.

3. Зотов В. Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства Virtex-II // Компоненты и технологии. 2003. № 6.

4. Зотов В. Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства CoolRunner-II // Компоненты и технологии. 2003. № 7.

5. Зотов В. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack ISE. М.: Горячая линия — Телеком. 2003.

6. Зотов В. ModelSim — система HDL-моделирования цифровых устройств // Компоненты и технологии. 2002. № 6.

7. Зотов В. Функциональное моделирование цифровых устройств, проектируемых на базе ПЛИС фирмы Xilinx в среде САПР WebPACK ISE // Компоненты и технологии. 2002. № 7.

8. Зотов В. Временное моделирование цифровых устройств, проектируемых на базе ПЛИС фирмы Xilinx в среде САПР WebPACK ISE // Компоненты и технологии. 2002. № 8.