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

№ 8’2003
PDF версия
В предыдущих публикациях данного цикла были рассмотрены архитектура и система команд элементов семейства встраиваемых 8-ми разрядных микропроцессорных ядер PicoBIaze, которые предназначены для использования в проектах, выполняемых на основе ПЛИС фирмы Xilinx.

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

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

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

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

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

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

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

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

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

По окончании редактирования исходного текста разрабатываемой программы необходимо сохранить его в виде файла на диске. Название этого файла должно состоять не более чем из восьми символов и соответствовать требованиям операционной системы 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 предназначена для декларации и определения значения константы, которая может использоваться в качестве параметра в командах микропроцессорной программы. Константы, определенные с помощью данной директивы, могут выступать в качестве операндов в арифметических и логических инструкциях и в качестве адресов входных и выходных портов в инструкциях ввода-вывода. Применение константы вместо явного числового значения позволяет, прежде всего, повысить информативность программы, написанной на языке ассемблера. Кроме того, использование констант облегчает процесс отладки и редактированияразрабатываемой программы. Если константа представляет параметр, который многократно встречается в различных местах программы, то для изменения значения этого параметра достаточно отредактировать численное значение в строке декларации константы, вместо того чтобы вносить исправления во всех командах, где используется данный параметр. Тем самым, исключается возможность появления в программе ошибок, которые возникают из-за того, что не во всех инструкциях, где встречается данный параметр, указано его корректное значение.

Формат командной строки для директивы 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, s1
               SUB s2, max_value
               JUMP NC, out_max
               OUTPUT s1, 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, который выполняет функцию хранения данных, считанных из входного порта ввода-вывода, обозначен как 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   A11D            INPUT in_data_reg[s1], adr_in_port[1D]
01   C210            LOAD differenc_reg[s2], in_data_reg[s1]
02   6215            SUB differenc_reg[s2], max_value[15]
03   9D05            JUMP NC, out_data[05]
04   8106            JUMP next_inst[06]
05   E11F  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   4201 interrupt_routine: ADD differenc_reg[s2], 01
B1   E21F            OUTPUT differenc_reg[s2], adr_out_port[1F]
B2   80F0            RETURNI ENABLE
B3                   ;
FF                   ADDRESS FF
FF   81B0            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

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

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

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

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

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

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

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

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

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

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

Все выходные файлы, формируемые асемблером ASM, имеют одно и то же название, совпадающее с именем входного файла, в котором содержится исходный текст программы на языке ассемблера. В большинстве случаев основным выходным файлом является файл с расширением mcs, в котором содержится информация о прошивке внешнего ПЗУ или ППЗУ в формате Intel MCS-86. Файл, имеющий расширение vhd, представляет собой описание содержимого программной памяти на языке VHDL, соответствующего транслируемой программе. Этот файл используется в процессе отладки разрабатываемой программы методом моделирования ядра PicoBlaze в составе проектируемого устройства с помощью системы ModelSim XE [5–8]. Файл с расширением bin включает в себя результаты трансляции программы в виде двоичных кодов, которые представлены в шестнадцатеричном формате. Информация о выполнении и результатах процесса трансляции содержится в файле с расширением log. Форматированный вариант исходного текста программы на языке ассемблера записывается в файл, имеющий расширение fmt.

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

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

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

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

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

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

ERROR —  is not a valid instruction

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

ERROR — Invalid register name: 
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'. 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 '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: 
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.//
    Компоненты и технологии» № 4 2003.
  2. Зотов В.
    Система команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E //
    Компоненты и технологии» № 5 2003
  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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *