ЭУМК по дисциплине "Проектирование проблемно-ориентированных вычислительных средств" › Практика › Лабораторная работа "ВЫПОЛНЕНИЕ ОСНОВНЫХ КОМАНД ПРОЦЕССОРА TMS320VC5402 ПРИ РАЗНЫХ РЕЖИМАХ РАБОТЫ"

# Электронный учебно-методический
комплекс по дисциплине
"Проектирование проблемно-ориентированных вычислительных средств"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

ЛАБОРАТОРНАЯ РАБОТА № 1.
ВЫПОЛНЕНИЕ ОСНОВНЫХ КОМАНД ПРОЦЕССОРА TMS320VC5402 ПРИ РАЗНЫХ РЕЖИМАХ РАБОТЫ.

ЦЕЛЬ РАБОТЫ: Знакомство с системой программирования и отладки программ Code Composer Studio (прил. 1), режимами расширения знака и коррекции перепол-нения в арифметическо-логическом устройстве и их влиянием на результат вы-полнения различных команд процессора TMS320VC5402. Разработка алгоритма и программы для проверки влияния битов состояния процессора на результат выполнения некоторых команд на ассемблере процессора TMS320VC5402 и отладка программы на лабораторном макете TMS320VC5402 DSP Starter Kit.

1.1. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
1.1.1. Режим расширения знака SXM

Арифметическо-логическое устройство (АЛУ) и аккумуляторы в процессоре TMS320VC5402 имеют по 40 разрядов, а ячейки памяти данных – по 16 разрядов. Поэтому возникает вопрос о заполнении недостающих 24 разрядов при загрузке аккумуляторов и передаче данных на вход АЛУ из памяти данных. При этом следует учитывать, что данные при передаче могут быть сдвинуты влево и вправо. И если недостающие младшие разряды логично заполнить нулями, то заполнение старших разрядов не столь однозначно.
Для управления заполнением старших разрядов в регистре состояния процессора ST1 (прил. 2) имеется специальный бит режима расширения знака SXM (sign extension mode). Именно этот бит и определяет правило заполнения недостающих старших разрядов. Если бит SXM = 0, то старшие разряды заполняются нулями, а если бит SXM = 1, то старшие разряды заполняются знаковым разрядом загружаемого числа. Таким образом, происходит расширение знакового (старшего) разряда числа, считанного из ячейки памяти данных, во все старшие разряды АЛУ или аккумулятора. Следовательно, если старший разряд ячейки памяти равен нулю, то недостающие старшие разряды АЛУ или аккумулятора всегда заполняются нулями (независимо от состояния бита SXM). Если же старший разряд ячейки памяти равен единице, то недостающие старшие разряды АЛУ или аккумулятора заполняются или нулями (если бит SXM = 0), или единицами (если бит SXM = 1).

Другими словами, бит SXM определяет, с какой арифметикой мы имеем дело – знаковой (если бит SXM = 1), или беззнаковой (если бит SXM = 0). Бит SXM влияет на большинство арифметических команд и не влияет на логические и некоторые специальные (беззнаковые) команды. Например, если в ячейке памяти Smem находится число 123416, то после выполнения команды LD Smem, 8, A (загрузка из памяти в аккумулятор со сдвигом на восемь двоичных разрядов влево) в аккумуляторе А будет значение 00 0012 340016 независимо от состояния бита SXM. Если же в ячейке памяти Smem находится число 876516, то после выполнения команды LD Smem, 8, A в аккумуляторе А будет значение 00 0087 650016 , если бит SXM = 0, и значение FF FF87 650016 – если бит SXM = 1.

1.1.2. Режим коррекции переполнения OVM

При выполнении арифметических операций в АЛУ возможно возникновение переполнения. АЛУ в процессоре TMS320VC5402 имеет 40 разрядов, из которых 32 разряда считаются основными, а 8 – защитными. При выполнении операций переполнение фиксируется в том случае, если 9 старших разрядов (8 защитных и знак) не совпадают. Большинство процессоров может только фиксировать переполнение. Наличие бита OVM в процессоре TMS320VC5402 позволят корректировать неправильный результат в случае переполнения до ближайшего правильного. Например, если при сложении двух положительных чисел получился отрицательный результат, то при установленном бите OVM вместе с фиксацией переполнения результат будет скорректирован до максимального положительного числа. Для знаковых чисел максимальным положительным числом будет значение 00 7FFF FFFF16 (все девять старших разрядов – нули), а максимальным отрицательным числом будет значение FF 8000 000016 (все девять старших разрядов – единицы). Для беззнаковых чисел максимальным числом будет значение 00 FFFF FFFF16 (восемь старших разрядов – нули).
Коррекция переполнения имеет смысл только в том случае, если скорректированный результат отличается от истинного значения всего на несколько единиц младшего разряда. Максимальное положительное дробное число в формате с фиксированной запятой равно 1–2-31 (для нашего АЛУ). Поэтому, если при сложении чисел 0,49 и 0,51 вместо точной 1 получится значение 1–2-31, то это приемлемый результат. Но если при сложении чисел 0,99 и 0,99 вместо значения 1,98 получится значение 1–2-31(т. е. в два раза меньше), то такой результат ошибочен.
При возникновении переполнения всегда устанавливается соответствующий флаг переполнения – OVA, если результат операции заносится в аккумулятор А, или OVB, если результат операции заносится в аккумулятор В. Данные биты остаются установленными до тех пор, пока они не будут сброшены командой RSBX или не будут проверены командой условного перехода BC с соответствующим условием.
В регистре состояния процессора имеется также специальный флаг переноса C, который при выполнении различных арифметических операций устанавливается или сбрасывается в зависимости от наличия переноса из 31-го разряда АЛУ в 32-й. В отличие от флагов переполнения данный флаг при выполнении большинства операций может как устанавливаться, так и сбрасываться.
Рассмотрим для иллюстрации несколько примеров.
Пример 1. В аккумуляторе А находится число 00 7FFF 800216, а в ячейке памяти Smem – число 800116. При выполнении команды ADD Smem, A (сложение содержимого ячейки памяти с аккумулятором) при выключенном бите SXM на выходе АЛУ получится значение 00 8000 000316, при этом будет установлен флаг переполнения OVA и сброшен флаг переноса C. Такой результат получился потому, что выполнялось сложение двух положительных чисел (00 7FFF 800216 и 00 0000 800116), а результат получился отрицательным (31-й бит стал равен единице) и не было переноса из 31-го бита (0 + 0 + 1 = 1). Если при этом бит коррекции переполнения OVM был выключен, то в аккумулятор А будет занесен полученный результат (т. е. совершенно неправильное значение 00 8000 000316). Если же бит коррекции переполнения OVM был включен, то в аккумулятор А будет занесено максимальное положительное число 00 7FFF FFFF16 (т. е. всего на четыре единицы меньше правильного значения).

Пример 2. В аккумуляторе А и в ячейке памяти Smem находятся те же числа. При выполнении команды ADD Smem, A при включенном бите SXM на выходе АЛУ получится значение 00 7FFF 000316, при этом не будет установлен флаг переполнения OVA, но будет установлен флаг переноса C. Такой результат получился потому, что выполнялось сложение положительного и отрицательного чисел (00 7FFF 800216 и FF FFFF 800116), и результат получился положительным (31-й бит остался равен единице), но был перенос из 31-го бита (0 + 1 + 1 = 0 и 1 перенос в 32-й бит).
1.1.3. Программная проверка режимов работы АЛУ

Проверка режимов работы процессора выполняется на трех простых примерах. В каждом примере необходимо выполнить настройку режимов работы процессора, загрузить 32-разрядный операнд в один из аккумуляторов, выполнить заданную операцию и сохранить результат в память. По каждому примеру в отчет нужно включить исходные данные, заданное состояние битов режимов работы (SXM и OVM), результат и значения битов состояния процессора (C и OV). Ниже в качестве примера приводится примерный вид программы для одного из заданий.

    	.def	_c_int00	; определение начала программы
    	.text			; начало области программы
    _c_int00: 			; начальная метка программы
    	LD	#X, DP		; текущая страница данных
    	SSBX	SXM		; режим расширения знака
    	RSBX	OVM		; нет коррекции переполнения
    	RSBX	OVA		; сброс бита переполнения
    	dld	X, A		; загрузка двойного слова X
    ;	RSBX	SXM		; нет расширения знака
    ;	SSBX	OVM		; коррекция переполнения
    	NOP			; задержка для изменения SXM,OVM
    	ADD	Y, A		; прибавление слова Y к X
    	DST	A, Z		; сохранение двойного слова Z
    	NOP			; завершение операций в конвейере
    	NOP			; завершение операций в конвейере
    	NOP			; точка останова
    	.align			; выравнивание на страницу
    	.data			; начало области данных
    X	.long	0x12345678	; двойное слово X [адрес 0х0100]
    Y	.word	0x4321		; слово Y         [адрес 0х0102]
    Z	.long	0		; двойное слово Z [адрес 0х0104]

При написании программы используются специальные директивы ассемблера для управления трансляцией программы и задания переменных и констант (прил. 3).
Перед выполнением загрузки первого операнда обязательно должен быть установлен режим расширения знака (число знаковое) и сброшен флаг переполнения (при выполнении операций он может только устанавливаться). Если в примере требуется выполнить операцию в режиме без расширения знака, то после загрузки первого операнда необходимо сбросить бит SXM (в примере соответствующая команда закомментирована). Изменение бита SXM вступит в силу только через один такт работы процессора, поэтому в программу вставлена пустая команда NOP. Аналогично поступаем и с битом коррекции переполнения OVM.
Последней командой программы должна быть пустая команда NOP для остановки выполнения программы. Поскольку все команды процессора выполняются в конвейере, то для завершения последней команды программы может понадобиться один или два дополнительных такта (в зависимости от типа команды). Для этого перед точкой останова добавляются одна или две пустые команды NOP.
Пример 1. Сложение 32-разрядного числа X и 16-разрядного числа Y при разных значениях режима расширения знака SXM.
В данном примере заданы две пары чисел и каждую пару нужно сложить при включенном и выключенном режиме расширения знака SXM. Таким образом, в первом примере необходимо получить четыре результата, которые нужно представить в следующем виде:
X = 12345678; Y = 4321; SXM = 0; Z = 12349999; C = 0; OVA = 0.
Пример 2. Сложение 32-разрядного числа X и 16-разрядного числа Y при разных значениях режимов расширения знака SXM и коррекции переполнения OVM.
В данном примере задана одна пара чисел, и сложение нужно выполнить при всех возможных комбинациях битов SXM и OVM. Таким образом, во втором примере также необходимо получить четыре результата, которые нужно представить в виде, аналогичном первому примеру.
Пример 3. Выполнение операций получения модуля (ABS) и изменения знака (NEG) 32-разрядного числа X при разных значениях режима коррекции переполнения OVM.
В данном примере заданы два разных значения числа и с каждым из них нужно выполнить две разные операции при включенном и выключенном режиме коррекции переполнения OVM. Таким образом, в третьем примере необходимо получить восемь результатов, которые нужно представить в виде, аналогичном первому примеру.

1.1.4. Замечания по программированию примеров для проверки режимов работы АЛУ

При программировании примеров для проверки работы АЛУ при различных режимах расширения знака и коррекции переполнения необходимо учесть следующие замечания:

- все три примера рекомендуется оформить в виде одной общей программы со всеми необходимыми командами и данными;
- неиспользуемые в текущем примере команды нужно не удалять из программы, а закомментировать (т. е. поставить перед командой точку с запятой, как в примере);
- при переходе к новым данным старые данные также нужно не удалять из программы, а закомментировать и ниже ввести новые данные;
- для ускорения работы с программой можно сразу получать два результата во втором аккумуляторе для разных состояний одного из битов режима процессора и записывать их в две разные ячейки памяти (например Z1 и Z2);
- при работе с двумя результатами необходимо только один раз загрузить первый операнд и изменить нужный бит режима между командой первой операции и записью первого операнда (не потребуется пустая команда NOP);
- при работе сразу с двумя результатами в программе нужно задать две точки останова для того, чтобы записать состояние флагов C и OVA (или OVB, если результат записывается в аккумулятор В).

1.2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Изучить теоретические сведения по теме лабораторной работы (подразд. 1.1).
2. Получить у преподавателя задание для выполнения практической части работы.
3. Согласно заданию рассчитать значения всех переменных, необходимых для работы программы.
4. Разработать алгоритм работы программы.
5. Написать, оттранслировать, отладить и выполнить программу.
6. Продемонстрировать результат трансляции и работы программы преподавателю.
7. Оформить и защитить отчет по лабораторной работе.

1.3. СОДЕРЖАНИЕ ОТЧЕТА

1. Цель работы и исходные данные.
2. Используемые аналитические формулы и выполненные расчеты.
3. Алгоритм работы программы.
4. Листинг программы с комментариями.
5. Результат работы программы.
6. Выводы по работе.

1.4. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Разрядность АЛУ и аккумуляторов процессора TMS320VC5402.
2. Разрядность ячеек памяти процессора TMS320VC5402.
3. Прямая адресация данных.
4. Регистр номера текущей страницы данных.
5. Режим расширения знака.
6. Режим коррекции переполнения.
7. Биты переноса и переполнения.
8. Команды управления битами регистров состояния.
9. Команды загрузки данных в аккумулятор.
10. Команды сложения с аккумулятором.
11. Команда изменения знака числа.
12. Команда нахождения абсолютного значения числа.
13. Команды сохранения данных.
14. Директивы ассемблера для определения секций команд и данных.
15. Директивы ассемблера для описания данных.

Оглавление | Программа | Теория| Практика | Контроль знаний | Об авторах
© БГУИР , 2012