АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра Электроники и компьютерных технологий

 

ЦИФРОВАЯ ОБРАБОТКА СИГНАЛОВ

 

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

для магистрантов по специальности 6N0719 – Радиотехника, электроника и телекоммуникации

 

 

Алматы 2009

СОСТАВИТЕЛИ: С.Н.Петрищенко, Г.Д.Мусапирова. Цифровая обработка сигналов. Методические указания к выполнению лабораторных работ для магистрантов специальности 6N0719 – Радиотехника, электроника и телекоммуникации. - Алматы: АИЭС, 2009.–51 с. 

 

В методической разработке представлено описание шести лабораторных работ по курсу «Основы цифровой обработки» для магистрантов специальности 6N0719 – Радиотехника, электроника и телекоммуникации. Каждая лабораторная работа включает краткую  теоретическую справку и задание на выполнение исследований. Для контроля за усвоением материала соответствующей лабораторной работы в конце каждой из них приведены контрольные вопросы.

Все работы проводятся на персональных компьютерах, причем, первая из них посвящена исследованию эффектов квантования в цифровых цепях. Остальные пять работ предназначены для исследования работы сигнального процессора TMS320C50 фирмы Texas Instruments как виртуально, используя программу симулятора данного процессора, так и в реальном масштабе времени, работая с реальным процессором, установленном на специальной плате DSK, которая подключается через последовательный порт к компьютеру.

  

1 ЛАБОРАТОРНАЯ РАБОТА №1.   ИССЛЕДОВАНИЕ ЭФФЕКТОВ КВАНТОВАНИЯ В ЦИФРОВЫХ ЦЕПЯХ

 

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

1.1 Краткая теоретическая справка

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

Под m = b+1 понимается совокупность знакового разряда и b разрядов модуля числа (число значащих разрядов).

Шагом квантования Q называют модуль разности между соседними уровнями квантования q i+1   и  qi 

.

Для беззнаковых чисел, представляемых в регистрах, шаг квантования определяется как , что соответствует значению младшего числового разряда при Q = const.

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

.

При квантовании используются два способа приближения чисел: округление и усечение. В случае усечения ошибка усечения еу(п) не превосходит шага квантования

 и .

В случае округления ошибка округления не превосходит половины шага квантования и меньше ошибки усечения

   и    .

В связи с этим в  аналого-цифровых преобразователях и в цифровых процессорах обработки сигналов обычно применяется округление.

Источниками ошибок квантования являются:

а)  аналого-цифровое преобразование аналогового сигнала

б)  арифметические операции с цифровым сигналом

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

г)   квантование коэффициентов передаточных функций.

Для линейных моделей процессов аналого-цифрового преобразования и умножения математическое ожидание ошибки квантования а дисперсия ошибок квантования

В логарифмическом масштабе мощность шума ошибок квантования приблизительно равна

Следовательно, увеличение (уменьшение) разрядности АЦП или регистра умножителя на единицу уменьшает (увеличивает) дисперсию шума на выходе АЦП или умножителя на 6 дБ.

Определим влияние квантования входного сигнала на выходной шум цифровой цепи, полагая, что коэффициенты и арифметические операции реализуются точно. Выходной шум, как реакция дискретной цепи, имеющей импульсную характеристику   h(n), на входной шум , определяется по формуле

.

Максимальные ошибки квантования входного (при округлении) и выходного сигнала определяются по формулам

.

Дисперсия составляющей выходного шума из-за  АЦП, имеет вид

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

,

а дисперсия этого шума формулой

 

где L - количество умножителей.

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

;

где - импульсная характеристика цепи первого порядка.

Максимальная ошибка квантования на выходе цифровой цепи второго порядка определяется как

где - импульсная характеристика от выхода i – го умножителя до выхода цепи.

Общий шум на выходе звена второго порядка для всех i = 1,2,…,L  определяется следующей формулой

    где       - импульсная характеристика цепи второго порядка.

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

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

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

Это обеспечивается введением масштабирующих множителей (коэффициентов) на входах системы или на выходах умножителей

 

гдe fi (n) - импульсная характеристика от входа цепи (от источника сигнала) до выхода i-го сумматора при i = 1,2,…  

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

 

1.2 Контроль подготовленности к работе:

-  открыть папку Lab 5 и запустить файл Lw_5;

-  ввести номер группы, номер бригады и фамилии членов бригады и  подтвердить правильность ввода регистрационной информации после наведения курсора на слово ДА и нажатия на клавишу Enter;

- ответить на пять вопросов, подтверждая правильность ответа наведением курсора на правильный ответ и клавишей Enter;

- по заданным разрядностям АЦП ввести в таблицу 1.1 рассчитанные по точным формулам шаг квантования АЦП, дисперсию и мощность шума входного сигнала;

Т а б л и ц а 1.1

Разрядность            

 

3

 

5

 

8

 

16

Шаг квантования

0,125

0,03125

0,0039

0,000015

Дисперсия шума

0,0013

0,000081

0,000001

    0

Мощность шума

- 28,85

- 40,89

- 58,95

- 107,11

 

 

- ввести в таблицу 1.2 рассчитанные для рекурсивной цепи первого порядка с параметрами ; ;  и QАЦП = 0,0039 максимальную ошибку, дисперсию и мощность шума АЦП при условии точного выполнения операции умножения для разрядности АЦП, равной 8;

Т а б л и ц а 1.2

0,0039

0,007813

0,000003

- 55,37

 

- ввести в таблицу 1.3 рассчитанные для той же цепи максимальную ошибку, дисперсию и мощность собственного шума при условии точного представления входного сигнала для разрядности АЦП, равной 12;

Т а б л и ц а 1.3

12

2,441e-4

4,883e-4

1,135e-8

- 79,45

 

- ввести в таблицу 1.4 суммарные дисперсию и мощность шума квантования на выходе цепи;

 Т а б л и ц а 1.4

8

12

2,914e-6

- 55,35

 

- вводить расчетные значения параметров нажатием на клавишу Enter и на слово НЕТ, подтверждая отсутствие ошибок.

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

 

 1.3 Выполнение лабораторной работы

 1.3.1 Исследование эффектов квантования входного сигнала:

- при входном сигнале  и разрядности АЦП получить графики цифрового и дискретного сигналов, а также графики ошибок квантования ;

- зарисовать графики для  ;

- записать мощность шума  в указанных четырех случаях.

1.3.2 Исследование влияния квантования сигналов:

-  исследовать влияние квантования входного сигнала на выходной шум (арифметические операции выполняются точно) в цепи первого порядка при ,  и , для чего, при и записать в таблицу 1.5 значения дисперсии и мощности шума ;

- при разрядности регистров = 8 и 12 получить значения дисперсии и мощности шума  и записать их в таблицу 1.5;

- исследовать суммарный шум квантования на выходе цепи первого порядка, для чего при =5 и 8 ( = 8 и 12 для каждого случая) получить дисперсию и и записать в таблицу 1.5.

- повторить исследование для цепи второго порядка при следующих коэффициентах:  ;               

   () ;    ;   ().

Т а б л и ц а 1.5

 

5

Точно

 

 

 

 

 

 

8

Точно

 

 

 

 

 

 

Точно

8

 

 

 

 

 

 

Точно

12

 

 

 

 

 

 

5

 

8

 

 

 

 

 

 

12

 

 

 

 

 

 

8

8

 

 

 

 

 

 

12

 

 

 

 

 

 

 

1.3.3 Исследование предельных циклов в цифровых цепях:

-  исследовать предельные циклы в цепи первого порядка при ; , для чего:

а) самостоятельно задать на экране значение ; для положительного и отрицательного  при округлении и усечении результата записать, с какого отсчета начинаются предельные циклы и значение амплитуд предельных циклов;

б) определить, при какой разрядности регистров   (начиная от ) амплитуда колебаний предельного цикла оказывается незначительной ( составляет не более 60 дБ, то есть 1/1000 от максимального значения выходного сигнала); зарисовать диаграммы, записать параметры;

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

1.3.4 Исследовать предельные циклы в цепи второго порядка , для чего:

- получить и зарисовать диаграммы при двух значениях параметра и ; записать величины амплитуд колебаний предельного цикла ( при округлении и усечении результатов умножения);

- найти значение при , когда колебания предельного цикла становятся практически незначительными;

- найти значение при , когда колебания предельного цикла становятся практически незначительными.

1.3.5 Исследование влияния коэффициента масштабирования

Для исследования коэффициента масштабирования на выходной сигнал и собственный шум в цепях первого и второго порядков необходимо:

а) получить коэффициент масштабирования для заданной цепи;

б) сравнить выходные сигналы при отсутствии масштабирования и при рассчитанном коэффициенте , зарисовать диаграммы;

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

1.3.6 Исследование влияния квантования коэффициентов

Исследовать влияние квантования коэффициентов  цифровой цепи на ее характеристики при округлении коэффициентов до 4, 6 и 8 разрядов:

а) получить и зарисовать АЧХ и ФЧХ звена первого порядка ;

б) получить и зарисовать АЧХ и ФЧХ звена второго порядка

Значения коэффициентов звеньев и отклонение АЧХ в дБ от идеальной записать в таблицу 1.6.

Т а б л и ц а 1.6

B

 

  B

Цепь первого порядка

     Цепь второго порядка

 

 

Тточно

 

 

 

 

 

 

8

 

 

 

 

 

 

6

 

 

 

 

 

 

4

 

 

 

 

 

 

1.4 Контрольные вопросы

1.4.1 Объяснить причины и указать источники шумов квантования в цифровых цепях.

1.4.2 Дать характеристику квантованию с округлением и усечением. Привести примеры.

1.4.3 Дать характеристики ошибкам и шумам квантования входного сигнала (АЦП).

1.4.4 Дать характеристики ошибкам и шумам квантования результатов умножения.

1.4.5 Дать характеристики ошибкам, обусловленным квантованием коэффициентов передаточной функции.

1.4.6 Объяснить причины появления шума на выходе цепи, формируемого только за счет квантования входного сигнала, и влияние на его величину импульсной характеристики и разрядности АЦП

1.4.7 Объяснить происхождение собственного шума цифровой цепи и его влияние на величину коэффициентов передаточной функции.

1.4.8 Объяснить природу суммарного шума квантования на выходе цифровой цепи.

 

2 ЛАБОРАТОРНАЯ РАБОТА №2. ПОДГОТОВКА ИСПОЛНЯЕМЫХ ПРОГРАММ ДЛЯ  ПРОЦЕССОРА TMS320С50

 

 Цель работы: получить практические навыки в подготовке программ для сигнального процессора TMS320С50.

 

2.1 Краткая теоретическая справка

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

1)  создание одного или нескольких модулей-файлов (имя файла).asm, с исходным текстом программы, написанным на языке ассемблера;

2)  трансляция полученного файла (имя файла).asm программой  DSPA.EXE и создание объектного файла (имя файла).obj и листинга (имя файла).lst. При этом, помимо перевода текста программы, производится  проверка исходного текста программы на наличие  синтаксических ошибок ассемблера, сообщения о которых приводятся в листинге;

3)  написание командного файла компоновки (имя файла).сmd c указанием компонуемых программных модулей, порядка соединения секций и используемых областей памяти для размещения этих секций;

4)  компоновка модулей и секций с помощью компоновщика DSPALNK.EXE и получение выходного файла (имя файла).out и файла (имя файла).map, позволяющего контролировать правильность распределения памяти и соединения секций, заданные в командном файле (имя файла).cmd.

Примером программы, на базе которой будут отрабатываться основные  шаги по подготовке исполняемых программ для TMS320С50, является программа с именем SIM. Она представлена в файле sim.asm и состоит из нескольких частей, в каждой из которых реализуется некоторая операция.

В таблице 2.1 представлена карта размещения в памяти данных переменных, используемых в программе.

Т а б л и ц а 2.1

Переменная

Адрес ячейки памяти данных (Hex)

 Начальное значение  переменной (Hex)

Х

0800

1

Y

0801

3

Z

0802

0

X1

0803

4

Y1

0804

5

Z1

0805

0

X2

0806

0a

Y2

0807

0b

Z2

0808

0с

 

Ниже представлен полный текст программы SIM:

; Программа выполнения простейших операций на TMS320C50

 

.version

50

 

 

.mmregs

 

; Разрешение использования ;символьных ;имен  регистров процессора.

; Задание значений переменных в памяти данных

 

.data

 

 

X

.word

1

; Начальное значение  Х

 

Y

.word

2

; Начальное значение  Y

 

Z

.word

0

; Начальное значение Z

 

X1

.word

4

; Начальное значение  Х1

 

Y1

.word

5

; Начальное значение Y1

 

Z1

.word

0

; Начальное значение Z1

 

X2

.word

0ah

; Начальное значение Х2

 

Y2

.word

0bh

; Начальное значение Y2

 

Z2

.word

0ch

; Начальное значение Z2

 

; Резервирование области памяти размером 6 ячеек

 

.bss

M1,6

; Символический адрес ;первой  ячейки М1

; Таблица векторов прерывания

 

.sect                 “ Vectors “

RESET

B

START

; Начальная строка таблицы ;векторов прерывания – ;переход к основной программе

;           Основная программа

             .text

START

LDP

#0

; Указатель страницы памяти данных

 

OPL

#04h,PMST

; Задать значение регистра PMST

 

CLRC

OVM

; Запретить режим переполнения

 

SPM

0

; Установить нулевой сдвиг PREG

L1:

 

 

 

 

LDP

#X

;Указать на страницу памяти, хранящую Х

 

LACC

X

;Загрузить в АCC содержимое ячейки Х

 

ADD

Y

;Прибавить к АСС содержимое ячейки Y

 

ADD

#5

;Прибавить к АСС непосредственное ;слагаемое

 

SACL

Z

;Сохранить содержимое младшего слова АСС в ячейке Z

 

L2:

 

 

 

 

LDP

#X1

;Указать на страницу памяти, хранящую Х1

 

LT

X1

;Загрузить в T-регистр содержимое ячейки ;Х1

 

MPY

Y1

;Перемножить Х1 и Y1. Результат в РREG

 

SPL 

Z1

;Сохранить содержимое младшего слова ;PREG в ячейке Z1

L3:

 

 

 

 

LDP

#X1

;Указать на страницу памяти, хранящую Х2

 

LACC

Y1

;Загрузить в АCC содержимое ячейки Х2

 

SUB

X1

;Вычесть из АСС содержимое ячейки Y2

 

SACL

Z2

;Сохранить содержимое младшего слова ;АСС в ячейке Z2

L4:

 

 

 

 

LDP

#X

;Указать на страницу памяти, хранящую Х

 

LACC

Z1

;Загрузить в АCC содержимое ячейки Z1

 

SACL

X

;Сохранить содержимое младшего слова ;АСС в ячейке X

L5:

 

 

 

 

LDP

#Y2

;Указать на страницу памяти, хранящую Y

 

MAR

*,AR0

; Сделать активным регистр AR0

 

LAR

AR0,Y2

;Загрузить в АR0 содержимое ячейки Y2

L6:

 

 

 

 

LDP

#Z

;Указать на страницу памяти, хранящую Х

 

LAR

AR6,#Z

;Загрузить в АR6 адрес ячейки Z

L7:

 

 

 

 

LDP

#Y2

;Указать на страницу памяти, хранящую Y2

 

LACC

#07fffh

;Загрузить в АCC число 7fff (Hex)

 

SACL

Y2

;Сохранить содержимое младшего слова ;АСС в ячейке Y2

 

SACB

 

;Сохранить содержимое АСС в ACCB

 

SAMM

AR1

;Сохранить содержимое АСС в регистре ;AR1

 

B

L9

;Безусловный переход к фрагменту

;программы с меткой L9

L8:

 

 

 

 

LDP

#X

;Указать на страницу памяти, хранящую X

 

ZAP

 

;Обнулить АСС и регистр PREG

 

LT

X

;Загрузить в регистр Т  переменную X

 

MPY

X1

;Умножить X на X1 результат в регистре ;PREG

 

LTA

Y

; Загрузить в регистр Т  переменную Y, ;предыдущее произведение из PREG

;добавляется в ACC

 

MPY

Y1

; Умножить Y на Y1 результат в регистре ; ;PREG

 

LTA

Z

;Загрузить в регистр Т  переменную Z, ;предыдущее произведение из PREG

;добавляется в ACC

 

MPY

Z1

; Умножить Z на Z1 результат в регистре ;PREG

 

APAC

 

;предыдущее произведение из PREG

;добавляется в ACC

 

SACL

X2

;Сохранить содержимое младшего слова

;АСС в ячейке X2

 

B

START

;Переход к началу программы для  ;повторения

 

.end                                    

 

; Конец программы

 

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

-v0   /* версия (цифра 0) */

-e       RESET

-m      sim.map    /* Задание имени файла с таблицей компоновки *.мар* /

-o      sim.out  /* Задание имени выходного файла  *.out (буква о)  */

sim.obj   /* Компонуемый объектный файл, сформированный программой dspa.exe */      

MEMORY

{

               PAGE 0:   /* Память программ */

/* Блок для векторов прерываний в памяти */

                       VECS:  origin = 0x0000, length = 0x02

/* Блок для размещения   программ в памяти процессора */

                        PROG:  origin = 0x0040, length = 0x0200

               PAGE 1:  /* Память данных */

/*  Размещения регистров процессора, отраженных на память в памяти процессора */      

                      REGS:  origin = 0x0000, length = 0x0060

/*  Блок для размещения данных в памяти данных процессора */   

                     BLOCK0:  origin = 0x0800, length = 0x0200

}

 SECTIONS

{

Vectors    : {} > VECS   PAGE 0

.text         : {} > PROG   PAGE 0

.data        : {} > BLOCK0 PAGE 1

.bss          : {} > BLOCK0 PAGE 1

            /* Секции .data  и .bss будут размещаться в памяти данных, начиная с адреса 800h подряд непосредственно  друг за другом, занимая количество ячеек в соответствии со своими реальными размерами */

}

Таким образом,  на основе объектного файла SIM.OBJ, полученного после трансляции, и под управлением SIM.CMD, программой компоновщика  DSPLNK.EXE формируется выходной файл SIM.OUТ, который будет использоваться при работе с программой симулятора. Программа компоновщика формирует также таблицу реально полученного распределения памяти SIM.MAP.  Этот файл позволяет контролировать инициализацию начальных адресов и количество ячеек памяти, используемых для хранения программы и данных в процессоре, а также правильность расположения и соединения секций программы.

 

2.2 Порядок выполнения работы

2.2.1 Создать свою рабочую папку и в ней свой файл (имя файла).asm с текстом программы SIM.

 2.2.2 Скопировать в созданную папку файлы транслятора и компоновщика dspa.exe и dsplnk.exe.

2.2.3 Оттранслировать полученный файл (имя файла).asm, получить объектный файл (имя файла).obj и листинг- (имя файла).lst с помощью программы dspa.exe. Для этого, в режиме MS DOS  войти в свою папку и набрать в командной строке следующую команду:

dspa.exe   -lcs      (имя файла).asm

Если программа SIM набрана верно и ошибок в написании программы и при  определении переменных не обнаружено,  на экране монитора должна появиться следующая надпись:

 

C:\DSK\SIMULATE>dspa.exe (имя файла).asm

DOS/4GW Professional Protected Mode Run-time  Version 1.96

Copyright (c) Rational Systems, Inc. 1990-1994

TMS320C1x/C2x/C2xx/C5x COFF Assembler       Version 6.60

Copyright (c) 1987-1995  Texas Instruments Incorporated

 PASS 1

 PASS 2

 No Errors,  No Warnings

 

2.2.4 Если синтаксических ошибок не обнаружено, то целесообразно  внести в программу некоторую ошибочную информацию, например:

- “забыть” указать значение какой-либо переменной при определении данных;

- внести какую-либо синтаксическую ошибку в одну из команд, неправильно, определив ее мнемокод;

- “забыть” определить используемую в программе  переменную при    определении данных.

2.2.5 Повторно оттранслировать полученную программу.

   В данном случае, при  обнаружении каких-либо ошибок, на экране монитора появится предупреждение, примерный вид которого представлен ниже:

Dos Navigator  Version 1.42  Copyright (C) 1991,96 RIT Research Labs

C:\DSK\SIMULATE>dspa.exe sim.asm

DOS/4GW Professional Protected Mode Run-time  Version 1.96

Copyright (c) Rational Systems, Inc. 1990-1994

TMS320C1x/C2x/C2xx/C5x COFF Assembler       Version 6.60

Copyright (c) 1987-1995  Texas Instruments Incorporated

PASS

   PASS 2

Y1      .word

"sim.asm", line 12:  OPERAND MISSING    (В строке 12 текста программы не определено значение переменной Y1)                                                                               

        cPM     #0                                                  

"sim.asm", line 27:  INVALID OPCODE        (Сообщение об ошибке в 27-й строке текста программы: среди команд ЦПОС TMS320C50 отсутствует команда CPM)

 2 Errors,  No Warnings (В программе обнаружены 2 ошибки)   

Errors in source - Assembler Aborted

 

2.2.6 Прочитать содержимое файла - листинга (имя файла).lst, созданного при трансляции исходного текста программы. В данном файле отражена более подробная информацию об ошибках в программе.

2.2.7 Исправить ошибки в исходном тексте программы SIМ и повторить операцию трансляции файла с текстом программы (имя файла).asm.

2.2.8 Скопировать в свою папку командный файл SIM.cmd и создать в ней свой командный файл (имя файла).cmd, внеся в него при необходимости соответствующие изменения. В командном файле показано распределение памяти процессора, используемое в программном имитаторе.

2.2.9 Произвести операцию компоновки и получить выходной файл (имя файла).out и файл (имя файла).map, набрав  команду вида:

                         dsplnk.exe       (имя файла).cmd

2.2.10 В том случае, если командный файл составлен правильно, будет создан выходной файл (имя файла).out и файл (имя файла).map. При этом, на экране монитора появится следующая надпись:

C:\DSK\SIMULATE>dsplnk.exe sim.cmd

DOS/4GW Professional Protected Mode Run-time  Version 1.96

Copyright (c) Rational Systems, Inc. 1990-1994

TMS320C1x/C2x/C2xx/C5x COFF Linker          Version 6.60

Copyright (c) 1987-1995  Texas Instruments Incorporated

 

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

Если ошибок при компоновке не обнаружено, то в командный файл следует внести некоторую ошибочную информацию, например:

- изменить имя объектного файла;

- обнулить значение ячеек памяти, резервируемых для блока REGS;

- в блоке BLOCK0 зарезервировать под память данных количество ячеек меньшее, чем требуется, например, меньше 9 ячеек.

При компоновке программы с помощью командного файла (имя файла).cmd на экране монитора в порядке внесения исправлений в командный файл должны появляться предупреждения, примерный вид которых представлен ниже:

 

TMS320C1x/C2x/C2xx/C5x COFF Linker          Version 6.60

Copyright (c) 1987-1995  Texas Instruments Incorporated

>> : can't open file lab_sim.obj for input (объектный файл с данным именем не существует)

TMS320C1x/C2x/C2xx/C5x COFF Linker          Version 6.60

Copyright (c) 1987-1995  Texas Instruments Incorporated

>> (имя файла).cmd, line 14: zero or missing length for memory area REGS  (пропущено или равно нулю пространство памяти, зарезервированное для блока REGS)

TMS320C1x/C2x/C2xx/C5x COFF Linker          Version 6.60

Copyright (c) 1987-1995  Texas Instruments Incorporated

>> cannot allocate .data in BLOCK0 (page 1)

>> errors in input - (имя файла).out not built (невозможно разместить имеющееся количество данных в зарезервированных ячейках памяти программ).

         (Файл sim.out не создан)

 

2.2.11 После внесения исправлений в командный файл (имя файла).cmd, получить выходной файл (имя файла).out и проконтролировать инициализацию памяти процессора в файле (имя файла).map.

В результате выполнения лабораторной работы должны быть получены следующие файлы:

(имя файла).asm  - файл, содержащий программу на языке ассемблера;

(имя файла).lst – файл- листинг, позволяющий контролировать возможные       ошибки в программе;

(имя файла).obj - объектный файл, сформированный программой dspa.exe;

(имя файла).cmd -  командный файл компоновки;

(имя файла).map - файл, позволяющий контролировать реально  выполненное распределение памяти;

(имя файла).out - сформированный выходной файл, непосредственно использующийся при работе с программой симулятора.

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

 

2.3 Контрольные вопросы

2.3.1 Поясните назначение операции трансляции программ. Какого рода предупреждения могут возникать при трансляции?

2.3.2 Поясните назначение, создаваемого транслятором листинг- файла (имя файла).lst.

2.3.3 Какого назначение командного файла компоновки?

2.3.4 Поясните назначение операции компоновки программ. Какого рода предупреждения могут возникать при компоновке?

2.3.5 Поясните назначение файла (имя файла).map. 

 

3 ЛАБОРАТОРНАЯ РАБОТА №3. ИЗУЧЕНИЕ СИМУЛЯТОРА ПРОЦЕССОРА TMS320C50 И ПРИЕМОВ РАБОТЫ С НИМ

 

Цель работы:

- изучение основных приемов работы с симулятором процессора TMS320C50;

- ознакомление с архитектурой процессора, картой распределения памяти и основными приёмами отладки работы программы.

 

3.1 Краткая теоретическая справка

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

Программа симулятора SIM5X обладает дружественным интерфейсом и позволяет вводить основные команды, управляющие работой, как в командной строке, так и посредством манипулятора “мышь”, используя экранное меню. Симулятор позволяет загружать и выполнять файлы, полученные в результате трансляции и компоновки программы, написанной на языке ассемблера.

 Графическая панель, формируемая программой симулятора, организована по оконному типу и дает возможность:

·     загружать исполняемые программы и просматривать их дизассемблерную версию;

·     выделять, перемещать и менять размеры окон;

·     выполнять программы в пошаговом режиме и контролировать их выполнение, следя за изменениями, происходящими с содержимым регистров и областей памяти процессора;

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

·     вводить различные команды через командное меню, посредством клавиатуры или “мышью”;

·     контролировать время выполнения программ.

После запуска программы симулятора на экране монитора появляются  четыре окна:

1) окно DISASSEBLY - для отлаживания текста дизассемблированной программы;

2)  окно СРU - для отражения состояния аккумулятора процессора (ACC) и его буфера (ACCB), регистра результата умножения (PREG), программного счетчика (PC),  регистрового файла, состоящего из восьми вспомогательных регистров (AR1 – AR0) и индексного регистра (INDX), регистров состояния (ST0, ST1 и PMST) и других регистров;

3) окно MEMORY – для отражения памяти процессора;

4) окно COMMAND – для введения разных команд процессора.

В качества примера, поясняющего общие принципы выполнения и отладки программ ЦОС при использовании симулятора, рассматривается программа SIM, использованная в работе 2.

 

3.2 Порядок выполнения работы

3.2.1 Скопируйте в свою рабочую папку файлы:

·                    sim5x.exe  - программа симулятора;

·                    alias.bat      - файл с набором макрокоманд имитатора;

·                    siminit.cmd – управляющий файл для имитатора.

3.2.2      Запустите программу симулятора. На экране монитора должны появиться окна графического интерфейса, отражающих состояние основных элементов архитектуры процессора. Изучите состав и расположение этих окон.

3.2.3 Измените размер любого окна при помощи “мыши”, захватив курсором правый нижний угол окна и перемещая его в нужном направлении.

3.2.4 Переместите какое - либо окно. Это можно сделать, подведя курсор и “ухватив”  “мышью” верхний край рамки выбранного окна.

3.2.5 Выйдите из программы симулятора, набрав в командном окне команду QUIT.

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

Для загрузки исполняемой программы используйте  меню LOAD, выбрав в ней команду LOAD. В открывшимся окне наберите имя файла исполняемой программы с расширением и нажмите клавиши Enter и F8.

3.2.7 Выведите на экран в окне MEMORY содержимое ячеек памяти, где хранятся переменные Х,Y,Z,X1,Y1,Z1,X2,Y2,Z2, начиная с адреса 0800 (Карта памяти, показывающая местоположение данных ячеек, в памяти данных, представлена в работе 2). Для этого нужно набрать в командном окне команду:

mem 0x0800@data

3.2.8 Откройте окно просмотра WATCH, позволяющее в отдельно создаваемом окне  просматривать содержание не всех регистров процессора или данной области памяти, а лишь заданных. Выведете в окне WATCH значения переменных Z,X2,Y2,Z2, используемых для хранения промежуточных значений, а также значения регистров AR0,AR5,AR6 и ACC в форматах х (шестнадцатеричный) и d (десятичный).

Для этого, в пункте меню WATCH  выберете команду ADD и наберите в открывшемся окне:

·     для переменных:

- адрес (в строке Expression), например, *0х0806

- имя переменной (в строке Label), например, х2

- формат вывода (в строке Format), например, x или d

·     для регистров:

- имя регистра, например, AR6

- формат вывода, например, x или d

При отсутствии указания формата по умолчанию используется шестнадцатеричный формат. Удаление переменной или регистра из окна Watch производится выбором стоки Delete в пункте меню Watch и указанием индекса (номера строки в окне) удаляемой переменной. Удалите из окна переменную Z и регистр AR5.

3.2.9 Выполните программу в пошаговом режиме, используя пункт меню STEP или F8. Проследите за изменением содержимого регистров процессора и ячеек памяти данных, хранящих переменные, при выполнении каждой команды. Проследите за соответствием результатов ожидаемым.

3.2.10 Для возврата к состоянию с исходным содержимым  программы необходимо выйти из программы и загрузиться вновь.

3.2.11 Запустите программу на выполнение командой RUN или клавишей F5. При этом программа будет выполняться тех пор, пока не будет остановлена нажатием клавиши  Esc..  Команда, на которой остановится программа,  будет случайным. При автоматическом выполнении программы содержимое выводимой на экран информации не изменяется и произошедшие изменения можно увидеть только после остановки выполнения программы.

  3.2.12 Для останова программы при автоматическом выполнении в любом нужном пользователю месте в ней могут быть установлены точки останова. При останове можно проконтролировать изменения переменных и содержимого регистров и памяти  после выполнения определенных команд. Установить точку останова в нужном месте программы можно, поместив на нее курсор и нажав левую кнопку мыши. При этом выбранная строка программы в окне DISSASEMBLE будет подсвечена. В программе может быть установлено много точек останова. Выполнение программы между точками останова происходит при выполнении команды RUN (или нажатии клавиши F5). Для снятия точки останова нужно снова установить курсор в нужном месте программы  и нажать левую кнопку мыши.

Установите в программе несколько точек останова в местах меток программы и проверьте правильность ее выполнения.

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

3.2.14 Измените содержимое ячеек памяти Х,Y,Z,X1,Y1,Z1,X2,Y2,Z2, занеся в них начальные значения.

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

3.2.16 Выполните часть программы с начала до метки L3,  набрав команду GO 0х0050 (где 0x0050 адрес команды, соответствующей метке L3) и проследите за произошедшими изменениями в окнах CPU, WATCH и MEMORY.

3.2.17 Вернитесь в начало программы командой RESTART.

3.2.18 При работе с программой симулятора можно измерить время выполнения программы в тактах (периодах) основной частоты работы процессора. Для этого необходимо  вывести  в окне WATCH значение регистра clk. Регистр clk правильно отражает время выполнения программы между двумя точками останова. Для измерения времени выполнения нужного фрагмента программы необходимо в начале и в конце этого фрагмента установить точки останова, выполнить программу до начала фрагмента (команда RUN) и затем выполнить команды программы до конца фрагмента (снова команда RUN).

Измерьте время выполнения основной части программы, учитывая что цикл команды исследуемого процессора равен 50 нс.

Подобным образом можно проверять правильность выбора программы с точки зрения решения  поставленной задачи.

3.2.19 Выйдете из программы симулятора, набрав в командной строке QUIT.

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

 

2.3 Контрольные вопросы

2.3.1 Поясните команды запуска программы на выполнение. Для чего может использоваться каждый из режимов запуска?

2.3.2 Поясните назначение основных регистров процессора и их место в памяти процессора.

2.3.3 Для чего используются точки останова при выполнении программы? Чем отличается пошаговый режим выполнения программ от других режимов? В каких форматах  могут быть представлены числа в окнах имитатора?

2.3.4 Как сохранить содержимое выбранной области памяти?

2.3.5 Как в окне MEMORY вывести информацию о содержимом ячеек памяти данных, начиная с адреса 0200?

2.3.6 Создайте окно просмотра WATCH  и выведите в нем информацию о содержимом ячейки Z2.

2.3.7 Проделайте операцию перемножения чисел 8  и 3. Выполните также эту  операцию, используя программу SIM.

2.3.8 Проделайте операцию сложения чисел  0FF и 9. Выполните также эту  операцию, используя программу SIM. 

 

4 ЛАБОРАТОРНАЯ РАБОТА №4. ПРЕДСТАВЛЕНИЕ ДАННЫХ В ПРОЦЕССОРАХ С ФИКСИРОВАННОЙ ЗАПЯТОЙ

 

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

 

4.1 Краткая теоретическая справка

Система команд процессора с фиксированной запятой TMS320С5x ориентирована на обработку двоичных чисел, представленных в дополнительном коде, который позволяет представлять как положительные, так и отрицательные числа при знаковом старшем бите.  

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

В 16-разрядных процессорах TMS320С5x шина данных 16-ти разрядная, а аккумулятор (АСС) - 32-х разрядный. Целочисленная арифметика позволяет представлять большие числа, но создает проблемы с сохранением результата в 16-ти разрядной ячейке памяти. При использовании дробной арифметики 32-х разрядный аккумулятор позволяет увеличить точность вычислений и уменьшить накопление ошибки. Для сохранения результата в 16-ти разрядной ячейке памяти используются старшие разряды аккумулятора. При этом потеря точности несущественна, так как младшие разряды аккумулятора содержат шум округлений.

На рисунке 4.1 показано соответствие исходных дробных чисел и двоичных чисел в процессоре в дополнительном коде.

 

 

 


                +(1 – 2-15)                            

 

 Рисунок 4.1 

Формат представления дробных чисел определяется как формат Q15 (15 — число значащих разрядов справа от разделитель­ной точки). Промежуточные значения вычисляемых дробных величин на выходе умножителя и АЛУ могут быть представлены в других форматах, в частности, Q31 или Q30.

Чтобы записать исходное дробное число в формате Q15 процессора его необходимо умножить на 32768, отбросить дробную часть и перевести в 16-ричную систему (в дополнительном коде, если исходная дробь отрицательна). Ассемблер позволяет производить эти вычисления при выполнении трансляции программы.

Для перевода результата вычислений, произведенных в процессоре, из формата Q15 в обычный вид необходимо проделать обратные преобразования:

1.     Перевести число из 16-ричной системы в десятичную.

2.      Разделить полученное число на 32768.

Операции алгебраического сложения/вычитания чисел в дополнительном коде как беззнаковых чисел выполняются в АЛУ по правилам обычной двоичной арифметики.

Операция умножения выполняется в аппаратно реализованном специализированном узле — умножителе. Умножитель реализует алгоритм умножения двоичных чисел в дополнительном коде.

При умножении целых чисел результат содержится во всех 32 разрядах. Если необходимо ограничиться при умножении целых чисел одним словом (например, для запоминания в ячейке ЗУ), то умножать нужно числа, величина которых не превышает 28, и результат будет находиться в младшем слове регистра P.

При умножении дробных чисел в формате Q15 старшее слово 32- разрядного регистра P, в котором находится результат, является его округленным значением в формате Q14 (с двумя знаковыми разрядами) с отброшенными младшими значащими разрядами.

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

Возможны два варианта решения ликвидации «лишних» знаковых разрядов:

1) сдвигом на один бит влево содержимого аккумулятора, если необходимо сохранить в памяти его старшее слово;

 2)  путем сдвига содержимого регистра P влево.

Второй вариант сдвига можно осуществить сдвигателем P-регистра, который управляется 2-х разрядным регистром РМ, расположенным в регистре управления  ST1. Содержимое РМ можно менять командой SPM c указанием величины сдвига влево на 1 или 4 разряда или вправо на 6 разрядов. РМ устанавливается в 0 после общего сброса или командой SPM 0.

Если установить режим сдвига на 1 бит влево, то при сохранении в аккумуляторе содержимого Р- регистра формат представления чисел в аккумуляторе будет Q31 (при умножении чисел в формате Q15).

Режим расширения знака процессора определяется состоянием бита SXM (Sign Extension Mode), который расположен в регистре состояния процессора. Он показывает, использовать расширение знака или нет.

Установка бита выполняется командами:

SETC SXM       ; SXM =1 - установка бита (АЛУ оперирует с числами в дополнительном коде).

CLRC SXM       ; SXM = 0 - сброс бита (АЛУ оперирует с беззнаковыми числами).

После общего сброса процессора бит SXM установлен в 1.

Двоичное представление дробных чисел в дополнительном коде имеет следующие особенности: если к (+1) в двоичном коде прибавить 1/32767, получится –1, т. е. число кардинально изменяется: вместо большого положительного становится большим отрицательным.

В процессоре TMS320C50 бит контроля переполнения OV (Overflow) располагается в регистре состояния и устанавливается в случае, когда величина в аккумуляторе переходит границу между большими положительными и отрицательными числами, а так же в случае, если осуществлен перенос в 33-ий, несуществующий бит.

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

Режим работы с переполнением или без определяется значением бита OVM регистра состояния ST1. При значении 1 происходит работа в режиме с переполнением, при значении 0 — без переполнения.

Значение бита OVM, равное 0, может быть установлено командой ROVM или CLRC OVM, значение 1 — командой SOVM или SETC OVM.

Ниже приведен пример стандартной конфигурации регистров состояния процессора для организации процедуры его инициализации.

 

SETC        SXM    ; разрешить использовать дополнительный код

CLRC       OVM   ; разрешить переполнение

SPM          1          ; осуществить сдвиг на 1 бит влево при копировании

                              ; Р – регистра в аккумулятор

 

4.2 Порядок выполнения работы

4.2.1 Скопируйте в свою рабочую папку файлы:

·      sim5x.exe  - программа имитатора;

·      alias.bat     - файл с набором макрокоманд имитатора;

·      siminit.cmd – управляющий файл для имитатора;

·      lab3.asm   - исходный текст программы;

·       lab3.cmd – командный файл компоновки;

4.2.2      Выполните трансляцию и компоновку программы lab3.asm.

Для трансляции наберите в командной строке  команду

dspa.exe      -lsc     lab3.asm

Для компоновки наберите в командной строке  команду

dsplnk.exe           lab3.cmd

4.2.3      Запустите имитатор процессора, набрав  команду sim5x.exe 

При этом автоматически загрузится программа лабораторной работы lab3.out, файл с макрокомандами alias.bat и текстовый файл lab3.txt с указанием   некоторых команд, используемых в лабораторной работе.

4.2.4      Выполните работу, следуя указаниям, приведенным ниже.

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

Y = (I*I) + (IL*IL) + (ILL*ILL) - для целых чисел,

= (A*B) + (C*D) + (E*F) – для дробных чисел.

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

4.2.5      Размещение переменных и констант в памяти.

.bss      A,13

B                      .set       A+1

C                      .set       B+1

D                      .set       C+1

E                      .set       D+1

F                      .set       E+1

X                      .set       F+1

I                       .set       X+2

IL                     .set       I+1

ILL                   .set       IL+1

Y                      .set       ILL+1

 

4.2.6      Таблица значений констант, размещенных в памяти программ

            *  32768 соответствует единице

 

TABLE            .word   32768*9/10, 32768*8/10, 32768*7/10; A=0.9, B=0.8, C=0.7

                        .word   32768*6/10, 32768*-1, 32768*4/10   ; D=0.6, E=-1.0, F=0.4

                        .word   32768*0,0,5,100                                 ; X=0, XA=0, I=5, IL=100

                        .word   1000,0,0                                              ; ILL=1000, Y=0, Y+1=0

 

4.2.7      Перепись констант из памяти программ в память данных

.sect     "Vectors"

RESET     B    M1

        .text

M1:

*  Перепись констант из памяти программ в память данных в зарезервированное место

        LAR     AR1,#A

        MAR     *,AR1

        LACC    #TABLE

        RPT     #12

        TBLR    *+

 

Наберите команду mem 0x200. Выполните команду Go INT. При этом должна быть выполнена часть программы до метки INT и  в памяти данных появятся переписанные константы из памяти программ.

4.2.8 Работа с целыми числами в младших разрядах аккумулятора. Вычисление выражения   Y = (I*I) + (IL*IL) + (ILL*ILL).

INT:

        LDP     #A    ;указатель страницы памяти на размещение A

        ZAC             ; (ACC)=0

        SACL    Y+1     ; сохранение младших разрядов ACC - ACCL

        LT      I

        MPY     I      ; (P)=I*I

        LTA     IL      ; (ACC)=I*I

        SACL    Y+1     ; сохранение ACCL

        MPY     IL     ; (P)=IL*IL

        LTA     ILL     ; (ACC)=I*I+IL*IL

        SACL    Y+1     ; сохранение  ACCL

        MPY     ILL     ; ILL*ILL

        APAC            ; (ACC)=(I*I)+(IL*IL)+(ILL*ILL)

        SACL    Y+1     ; сохранение младшего слова ACCL

        SACH    Y       ; сохранение старшего слова ACCH

 

Выполните фрагмент программы до метки FLOAT1 по шагам.

Сравните результаты вычисления всех частичных сумм и последнего результата с точными значениями, полученными при  ручном расчете. Обратите внимание, что ошибка появляется при переполнении младшего слова ACC после прибавления третьего произведения.

4.2.9      Работа с дробными числами. Вычисление выражения

                             X = (A*B) + (C*D) + (E*F)

1) Влияние опции режима переполнения OVM

а) Отсутствие сдвига результата вычисления при передаче его из ACC в ЗУ

 

FLOAT1:    

LDP     #A

       SPM     0       ; PM = 0

       CLRC   OVM     ; OVM = 0

       CALL    Q31 ; вызов п/программы вычисления X

FLOAT2:

       SETC   OVM     ; PM = 0, OVM = 1

       CALL    Q31 ; вызов п/программы вычисления X

* Подпрограмма вычисления X без свига на 1 разряд при передаче из ACC в ЗУ

Q31:

        ZAC

        SACH    X

        LT      A

        MPY     B

        LTA     C

        SACH    X

        MPY     D

        LTA     E

        SACH    X

        MPY     F

        APAC

        SACH    X

        RET

        .end

 

б) наличие сдвига результата вычисления при передаче его из ACC в ЗУ

FLOAT3:

        LDP     #A

        SPM     0       ; PM = 0

        CLRC  OVM     ; OVM  0

        CALL    Q30 ; вызов п/программы вычисления X

FLOAT4:

        SETC  OVM     ; PM = 0, OVM = 1

        CALL    Q30 ; вызов п/программы вычисления X

* Подпрограмма вычисления X со свигом на 1 разряд при передаче из ACC в ЗУ

 

Q30:

        ZAC        ; (ACC)=0

        SACH    X+1,1   ; сохранение старшего слова ACC со сдвигом на 1 разряд

        LT      A  ; (T)=A

        MPY     B  ; (P)=A*B

        LTA     C  ; (T)=C  (ACC)=A*B

        SACH    X,1 ; сохранение старшего слова ACC со сдвигом на 1 разряд

        MPY     D  ; (P)=C*D

        LTA     E  ; (T)=E   (ACC)=A*B+C*D

        SACH    X,1 ; сохранение старшего слова ACC со сдвигом на 1 разряд

        MPY     F  ; (P)=E*F

        APAC       ; (ACC)=A*B+C*D+E*F

        SACH    X,1 ; сохранение старшего слова ACC со сдвигом на 1 разряд

        RET

 

2) влияние опции РМ - сдвига результата умножения  при передаче из регистра P в АЛУ при отсутствии сдвига общего результата при передаче из ACC в ЗУ

FLOAT5:

        SPM     1       ; PM = 1

        CLRC OVM        ; OVM = 0

        CALL    Q31 ; вызов п/программы вычисления X

 

FLOAT6:

        SETC  OVM   ; OVM = 1

        CALL    Q31 ; вызов п/программы вычисления X

 

Выполнить по шагам фрагменты программ до  метки SXM. Результаты выполнения команд процессора (результаты вычислений) занесите в таблицу. В неё заносятся значения всех частичных сумм и последнего результата в зависимости от опций и сдвига; сравните результаты с точными расчетами. Значения частичных сумм и последнего результата в десятичном виде можно просмотреть в окне Watch.

3) влияние опции режима расширения знака SXM на выполнение операций в младшем  слове ACC. При SXM=0 числа считаются беззнаковыми, при SXM=1 числа считаются знаковыми в дополнительном коде.

 

 * SXM=0

        CLRC  SXM

        ZAC

        SUB     #5      ; (ACC)=0-5

        ZAC

        SUB     #(-5)   ; (ACC)=0-(-5)

        LACC    #(-5)   ; загрузка в ACC числа

        ADD     #6      ; (ACC)=-5+6

         LACC    #(-5)  ; загрузка в ACC числа

        SUB     #(-6)   ; (ACC)=-5-(-6)

*  SXM=1

        SETC  SXM

        ZAC

        SUB     #5      ; (ACC)=0-5

        ZAC

        SUB     #(-5)   ; (ACC)=0-(-5)

*        LACK    #(-5)  ; загрузка в ACC числа

        LACC   #(-5)

 

        ADD     #6      ; (ACC)=-5+(6)

*        LACK    #(-5)  ; загрузка в ACC числа

        LACC   #(-5)

        SUB     #(-6)   ; (ACC)=-5-(-6)

HALT:

        NOP

 

   Т а б л и ц а  4.1

 

PM

 

OVM

Сдвиг при записи в память

Промежуточные и последние результаты

Примечания

  Точные

ACC

Память

0

0

0

0.72

1.14

0.74

 

 

 

0

1

0

 

 

 

 

0

0

1

 

 

 

 

0

1

1

 

 

 

 

1

0

0

 

 

 

 

1

1

0

 

 

 

 

 

Т а б л и ц а 4.2

SXM

Операция

Результат

     0

 

 

  1

 

 

 

4.3 Содержание отчета

4.3.1 Текст программы с подробными комментариями.

4.3.2 Таблицы 4.1.и 4.2., содержащие состояния регистров PM, SXM, OVM и результаты работы программы.

4.3.3 Выводы по результатам сравнения точных значений, полученных при ручном расчете и значений, полученных в результате выполнения  программы.

 

4.4 Контрольные вопросы

4.4.1 Поясните последовательность перевода двоичного положительного числа в двоичное отрицательное число.

4.4.2 Поясните запись “короткого” числа в “длинный” регистр.

4.4.3 Переведите в двоичный код следующие числа: 3; -3; 30; -30; 100; 64; -65; -87.

4.4.4 Почему после выполнения умножения мы сохраняем старшее слово аккумулятора?

4.4.5 Зачем при сохранении старшего слова аккумулятора мы применяем сдвиг влево на 1 разряд?

4.4.6 Что означает “формат Q15”?

4.4.7 Чем определяется точность представления целых двоичных чисел?

4.4.8 Чем определяется точность представления дробных двоичных чисел?

4.4.9 Что произойдет, если к 1 в формате Q15 прибавить 1?

4.4.10 Что произойдет, если из 0 в формате Q15 вычесть 1? 

 

5 ЛАБОРАТОРНАЯ РАБОТА №5. ИЗУЧЕНИЕ МЕТОДОВ АДРЕСАЦИИ ПРОЦЕССОРА TMS320С5x

 

 Цель работы: изучение основных методов адресации данных, используемых в процессоре TMS320C50

 

5.1 Краткая теоретическая справка

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

5.1.1      Прямая адресация

Вся область  памяти данных процессора объёмом 64К разделена на 512 страниц размером 128 16-ти разрядных слов каждая. Например, адресное пространство нулевой страницы составляет в десятичном коде 0 – 127d, а в шестнадцатеричном 0 – 7F, первой страницы 128d – 255d (80hFFh), второй страницы 256d – 383d (100h – 17Fh) и так далее. 

В режиме прямой адресации, команда содержит только младшие 7 бит адреса ячейки памяти. Это поле при обработке адреса дополняется  9 битами регистра указателя страницы (DP) до полного 16-ти разрядного адреса. Таким образом, регистр DP указывает на одну из 512 возможных страниц памяти размером 128 слов, а 7-ми битовый адрес в слове команды указывает на определённую ячейку памяти на данной странице памяти. Регистр DP может быть загружен при помощи команды LDP (load data memory page pointer).

Пример прямой адресации:

LDP #2;          загрузить в DP число 2, вторая страница  - текущая;

ADD 9h,5; прибавить к содержимому аккумулятора содержимое ячейки памяти с адресом 9h,  сдвинутое  на 5 разрядов влево, абсолютный адрес ячейки памяти 109h.

 5.1.2 Косвенная адресация

Восемь вспомогательных регистров (AR0 - AR7) обеспечивают гибкую и удобную косвенную адресацию   в процессорах семейства `C5x. В случае косвенной адресации адрес операнда находится в текущем вспомогательном регистре. Для выбора текущего  вспомогательного регистра необходимо загрузить в регистр указателя вспомогательного регистра (ARP) значение в диапазоне от 0 до 7. 

Над содержимым вспомогательных регистров можно производить ряд арифметических операций с помощью арифметического устройства вспомогательных регистров - ARAU (Auxiliary Register Arithmetic Unit), которое выполняет арифметические операции над содержимом вспомогательных регистров в фазе декодирования команды. Это позволяет сформировать адрес перед фазой декодирования следующей команды. Использование ARAU позволяет модифицировать содержимое ARn после использования его содержимого в текущей команде, например, регистр  может быть инкрементирован или декрементирован.

С помощью косвенной адресации может быть адресована любая ячейка памяти в пределах 64К при помощи полного 16-ти разрядного значения содержащегося во вспомогательном регистре. Адрес может быть загружен в регистр, используя команду LAR.

Существуют два основных вида модификации адреса при косвенной адресации:

-   косвенная адресация с инкрементом и декрементом на 1;

- косвенная адресация с индексацией (изменением) на величину, содержащуюся в регистре INDX.

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

Косвенная адресация с помощью вспомогательного регистра дает возможность  изменения содержимого текущего вспомогательного регистра после выполнения команды. Изменением содержимого может быть увеличение или уменьшение его на 1 или на величину, задаваемую содержимым регистра INDX.

Косвенная адресация может быть использована во всех командах, кроме команд с  непосредственными операндами или  без операндов.

Примеры, иллюстрирующие использование косвенной адресации:

1) ADD  *+, 8 ; сложение содержимого аккумулятора с содержимым ячейки памяти, адрес которой определяется содержимым текущего вспомогательного регистра. Перед сложением данные из ячейки памяти сдвигаются влево на восемь разрядов.  После выполнения команды содержимое текущего вспомогательного регистра увеличивается на 1;

2)   ADD     *0+, 8 ; тоже, что и в примере 1, но к содержимому текущего вспомогательного регистра после выполнения команды прибавляется содержимое регистра INDX;

3)   ADD     *+, 8, AR3 ; тоже, что и примере 1, но в регистр ARP после выполнения команды загружается новое значение - 3 (т. е. текущим вспомогательным регистром будет  AR3).

5.1.3  Непосредственная адресация

В случае непосредственной адресации  операнд содержится непосредственно в слове команды. В процессорах семейства `C5x имеются однословные команды с непосредственной адресацией (8-битовые, 9-битовые и 13-битовые константы) и двухсловные (16-битные константы) длинные   команды с непосредственной адресацией. В коротких   командах непосредственный операнд находится прямо в слове. В длинных    командах непосредственный операнд содержится во втором слове.

Примеры  команд с непосредственной адресацией:

1)  RPT       #99; повторение команды следующей за RPT 100 раз, непосредственный операнд расположен непосредственно в командном слове;

2)  RPT       #0FFFh ; повторение команды, следующей за RPT 1000h раз, в этом случае 16-битовая константа, задающая адрес, содержится в отдельном слове следующем за словом команды.

5.1.4 Циклическая адресация

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

На рисунке 5.1 приведен алгоритм циклической адресации. Из рисунка 5.1 видно, как будет распределяться  последовательность отсчетов входного сигнала в буфере длиной 6 ячеек. В таком буфере, например, можно организовать линию задержки на 5T, где T – интервал дискретизации. Для этого надо последовательно считывать отсчеты x(0) и x(5), x(1) и x(6) и т.д.

 

                                      

Рисунок 5.1 - Алгоритм циклической адресации

 

В процессорах семейства `C5x имеется аппаратный механизм реализации циклических буферов, которые позволяют организовать два одновременно действующих циклических буфера, управляемых с помощью вспомогательных регистров. Существует 5 регистров, с помощью которых осуществляется управление циклическими буферами:

·     CBSR1 - регистр начального адреса первого циклического буфера;

·     CBSR2 - регистр начального адреса второго циклического буфера;

·     CBER1 - регистр конечного адреса первого циклического буфера;

·     CBER2 - регистр конечного адреса второго циклического буфера;

·     CBCR - регистр управления циклическими буферами.

Регистр управления (CBCR) определяет, какие вспомогательные регистры работают с данным буфером, разрешает/запрещает использование циклических буферов. Назначение отдельных битов этого регистра приведено в таблице 5.1.

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

  Т а б л и ц а 5.1

Бит

Наименование

Функция

0-2

CAR1

Указывает, какой вспомогательный регистр работает с циклическим буфером 1

3

CENB1

Циклический буфер 1, разрешено=1, запрещено=0.

При сбросе устанавливается в 0

4-6

CAR2

Указывает, какой вспомогательный регистр работает с циклическим буфером 2

7

CENB2

Циклический буфер 2, разрешено=1, запрещено=0.

При сбросе устанавливается в 0

 

Алгоритм изменения адреса для циклического буфера следующий:

                             Если (ARn = CBER) и (любая модификация AR),

                             то ARn = CBSR;

                             иначе ARn = ARn + шаг.

В добавление заметим следующее.

- если ARn = CBER и не производится модификация AR, текущий AR не модифицируется и остаётся равным CBER;

- когда текущий вспомогательный регистр = CBER, и производится любая модификация AR (инкремент или декремент), текущий AR будет установлен = CBSR;

- процесс изменения адреса входа в циклический буфер показан на рисунке 5.1.

Пример циклической адресации:

            splk  #200h, CBSR1; задание начального адреса циклического буфера1

            splk  #203h, CBER1; задание конечного адреса циклического буфера1

splk  #0Eh, CBCR; указание на  адресацию буфера с помощью регистра AR6 и ;разрешение использования циклического буфера 1 

;Вариант 1

                lar       ar6, #200h

            lacc *         ;Загрузить в аккумулятор содержимое ячейки, указываемое AR6 =         ;200h (начало циклического буфера), содержимое AR6 не меняется

;Вариант 2

                lar       ar6, #203h            

            lacc             * +  ; Загрузить в аккумулятор содержимое ячейки, указываемое AR6 ;= 203h (конец циклического буфера), увеличить AR6 на 1, но  AR6 = CBER1, поэтому ;выполняется переход на начало буфера и будет  AR6=200h

;Вариант 3

                lar       ar6, #203h            

            lacc * -                   ; AR6 указывает на конец буфера, в результате попытки ;модификации в AR6 будет занесён не адрес 202h, а адрес  начала буфера  AR6 = 200h

 

5.2            Порядок выполнения работы

5.2.1      Скопируйте в свой рабочий директорий файлы:

·                    sim5x.exe  - программа имитатора,

·                    alias.bat      - файл с набором макрокоманд имитатора,

·                    siminit.cmd – управляющий файл для имитатора,

·                    lab4.asm    - исходный текст программы лабораторной работы,

·                    lab4.cmd – командный файл компоновки.

5.2.2      Выполните трансляцию и компоновку программы lab4.asm.

Для трансляции наберите в командной строке  команду

dspa.exe      -lsc     lab4.asm

Для компоновки наберите в командной строке   команду

dsplnk.exe           lab4.cmd

5.2.3      Запустить имитатор процессора, набрав  sim5x.exe 

При этом автоматически загрузится программа лабораторной работы lab4.out, файл с макрокомандами alias.bat. Текст программы приведен ниже.

5.2.4 Ознакомиться с программой (пункт 5.2.6) и выполнить ее в пошаговом режиме по меткам direct1,  direct2, direct3, direct4, indirect1, indirect, indirect3, indirect4, circular1, circular2, руководствуясь соответствующими комментариями:

1)  DIRECT1:      

во фрагменте используется прямая адресация ячеек памяти для записи результатов операций и непосредственная адресация слагаемого. Наберите команду DP – вывод указателя страницы памяти. Наберите команду mem 0x200 - вывод в окно MEMORY области памяти данных с адреса 0x200. Выполняйте программу по шагам до достижения очередной метки, наблюдая изменение содержимого ACC и памяти;

2)  DIRECT2:      

во фрагменте DIRECT2 при аналогичных командах изменяется страница памяти  для размещения результатов: содержимое памяти по адресу 0x200  не меняется - изменилось значение DP. Наберите mem 0x280  для отражения страницы памяти 5 - область памяти c адреса 0x280;

3) DIRECT3:       

во фрагменте DIRECT3 используется прямая адресация памяти для результатов и прямая адресация слагаемых. Наберите команду mem 0x200. Обратите внимание, что при прямой адресации слагаемых к содержимому  АСС прибавляется не значение, стоящее в команде, а содержимое соответствующей ячейки памяти;

4) DIRECT4

во фрагменте по сравнению с предыдущим случаем произведена смена текущей страницы памяти данных. Наберите mem 0x280  для просмотра содержимого этой страницы и продолжите выполнение программы;

5) INDIRECT1

во фрагменте используется косвенная  адресация ячеек памяти для записи результатов операций и непосредственная адресация слагаемого. Наберите команду mem 0x200. Следите за содержимым текущего ARn в окне CPU и изменением содержимого ячейки памяти, указываемой текущим вспомогательным регистром;

6)  INDIRECT2:

Во фрагменте INDIRECT2 по сравнению с предыдущим случаем при аналогичных командах изменяется вспомогательный регистр, используемый для адресации и номера ячеек памяти  для размещения результатов. Наберите mem 0x280  для отображения содержимого ячеек;

7)  INDIRECT3:

Во фрагменте используется модификация текущего AR1 с использованием RG INDX. Обратите внимание: теперь содержимое текущего RG меняется с шагом, равным содержимыму INDX и запись информации в память идет в отличие от предыдущего случая сначала через одну ячейку (шаг = 2), а затем и через 3 ячейки (шаг = 4). Это определяется значениями, загружаемыми в INDX с помощью команд LMMR;

8)  INDIRECT4:

Во фрагменте  программы используется изменение текущего вспомогательного регистра в команде сохранения результата SACL. Запись содержимого АСС происходит попеременно в ячейки памяти, указываемые  AR1 и, AR2. Проверьте содержимое ячеек  памяти с результатами вычислений. Для отображения на экране второй области памяти наберите команду mem1 0x200;

9) CIRCULAR1

Во фрагменте программы организуются два циклических буфера которые адресуются с помощью вспомогательных регистров AR6, AR3. Эти буфера поочерёдно, в цикле, заполняются возрастающими значениями. Причём буфер 1 (регистр AR6) заполняется в сторону возрастающих адресов, а буфер 2 (регистр AR3) в сторону уменьшения адресов. Наберите команды CBSR1, CBSR2, CBER1, CBER2  для отображения начальных и конечных адресов циклических буферов.  Наберите команду mem 0x800 для отображения в окне MEMORY области памяти, в которой находятся оба буфера. Выполните фрагмент программы в пошаговом режиме, проследите порядок изменения адресуемых ячеек памяти  для буферов 1 и 2;

10) CIRCULAR2

Во фрагменте повторяются команды предыдущего раздела. Отличие состоит в шаге изменения адресуемых ячеек памяти. В этом случае он определяется величиной, записанной в регистр INDXв данном случае 2. Выполните фрагмент программы в пошаговом режиме, проследите порядок изменения адресуемых ячеек памяти  для буферов 1 и 2.

5.2.5      По заданию преподавателя измените некоторые параметры программы:

страницу памяти данных;

непосредственно адресуемое значение;

вспомогательные регистры, используемые для косвенной адресации.

5.2.6 Программа лабораторной работы lab4.out имеет следующий вид:

 

.version 50

           mmregs

           global direct1, direct2, direct3, direct4

           global indirect1, indirect2, indirect3, indirect4

           sect   "Vectors"

RESET:   B         Init

ND1:      .sect   "offset"          ;Таблица смещений для регистра INDX

           word   2

           word   4

           text

Init:         LDP       #0

           LACC    #00h

            OPL      #4,PMST     ; Устанавливаем бит NDX в 1

                                             ; чтобы использовать регистр INDX

BEGIN:

direct1:     LDP     #4            ; Страница памяти данных 4

             SACL    0000h     ; Прямая адресация

             ADD     #01h        ; Непосредственная адресация

             SACL    0001h

             ADD     #01h

             SACL    0002h

             ADD     #01h

             SACL    0003h

             ADD     #01h

direct2:      LDP      #5            ; Страница памяти данных 5

             SACL   0000h       ; Прямая адресация

             ADD     #01h        ; Непосредственная  адресация

             SACL   0001h

             ADD     #01h

             SACL   0002h

             ADD     #01h

             SACL   0003h

             ADD     #01h

direct3:     LDP     #4             ; Страница памяти данных 4

             SACL   0000h        ; Прямая адресация

             ADD    0000h         ; Прямая адресация

             SACL   0002h

             ADD    0002h

             SACL   0003h

             ADD    0003h

             SACL   0004h

             ADD    0004h

direct4:     LDP     #5              ; Страница памяти данных 5

             SACL    0000h       ; Прямая адресация

             ADD     0000h        ; Прямая адресация

             SACL    0001h

             ADD     0001h

             SACL    0002h

             ADD     0002h

             SACL    0003h

             ADD     0003h

indirect1:  MAR     *,AR0        ; Задание текущего вспомогательного регистра

             LAR     AR0,#200h    ; Установка начального значения AR0

             LACC    #00h             ; Прямая адресация

             SACL    *+                 ; Косвенная адресация

             ADD     #01h

             SACL    *+

             ADD     #01h

             SACL    *+

             ADD     #01h

             SACL    *+

             ADD     #01h

indirect2:  MAR     *,AR1      ; Задание текущего вспомогательного регистра

             LAR     AR1,#280h     ; Установка начального значения AR1

             SACL    *+                  ; Косвенная адресация

             ADD     #01h               ; Непосредственная адресация

             SACL    *+

             ADD     #01h

             SACL    *+

             ADD     #01h

             SACL    *-

indirect3: LMMR    INDX,ND1     ; Запись значения в индексный регистр

             ADD     #03h                   ; Непосредственная адресация

             NOP

             SACL    *0+                    ; Косвенная адресация

             ADD     #03h

             SACL    *0+

             ADD     #03h

             SACL    *0+

             LMMR    INDX,ND1+1  ;Изменение значения в индексном регистре

             NOP

             ADD     #03h

             SACL    *0+

             ADD     #03h

             SACL    *0+

             ADD     #03h

             SACL    *0+

indirect4: LACC    #00h                ;Непосредственная адресация

             LAR     AR2,#200h

             ADD     #04h

             SACL    *+,AR2                 ; Косвенная адресация с изменением

                                                         ; текущего вспомогательного регистра

             ADD     #04h

             SACL    *+,AR1

             ADD     #04h

             SACL    *+,AR2

             ADD     #04h

             SACL    *+,AR1

             ADD     #04h

             SACL    *+,AR2

             ADD     #04h

             SACL    *+,AR1

circular1:

Buff1    .bss    Buffer1,11          ; Резервирование места под 1-ый буфер

Buff2    .bss    Buffer2,11         ; Резервирование места под 2-ой буфер

 

              LDP     #0                              ; DP=0

             SPLK    #10h,BRCR              ; Количество повторений блока команд

             SPLK    #Buff1,cbsr1             ; Начальный адрес первого буфера

             SPLK    #(Buff2+10),cbsr2    ; Начальныйй адрес второго буфера

             SPLK    #(Buff1+10),cber1    ; Конечный адрес первого буфера

             SPLK    #Buff2,cber2             ; Конечный адрес второго буфера

 

             LAR     AR6,#Buff1               ; Инициализация вспомогательных регистров,

             LAR     AR3,#(Buff2+10)      ; которые будут работать с буферами

 

             MAR    *,AR6                        ; Задание AR6 - текущим

 

             SPLK    0BEh,cbcr                 ; Разрешение работы циклических буферов и

                                                             ; назначение AR6 для работы с первым буфером

                                                             ; AR3 для работы со вторым буфером

             LACC    #1                             ; (ACC)=1

 

             RPTB    end_block-1              ; Этот блок повторяется в цикле 16 раз

             SACL    *+,AR3                     ; Сохранение содержимого аккумулятора

             SACL    *-,AR6                      ; Сохранение содержимого аккумулятора

             ADD     #1                              ; Изменение содержимого аккумулятора

end_block:

circular2:  LDP      #0                              ; DP=0

                 LACC    #1                             ; (ACC)=1

                 SPLK    #15h,BRCR              ; Количество повторений блока команд

                 SPLK    #Buff1,cbsr1             ; Стартовый адрес первого буфера

                 SPLK    #(Buff2+10),cbsr2    ; Стартовый адрес второго буфера

                 SPLK    #(Buff1+10),cber1    ; Конечный адрес первого буфера

                 SPLK    #Buff2,cber2             ; Конечный адрес второго буфера           

 

           LAR     AR6,#Buff1               ; Инициализация вспомогательных регистров

                 LAR     AR3,#(Buff2+10)      ; которые будут работать с буферами

 

                 MAR     *,AR6                        ;Назначение AR6 - текущим

 

                 SPLK    0BEh,cbcr                  ; Разрешение работы циклических буферов и

                                                                  ; назначение AR6 для работы с первым буфером

                                                                  ; AR3 для работы со вторым буфером

                LMMR    INDX,ND1

                RPTB    end_block1-1             ; Этот блок повторяется в цикле 21 раз

                SACL    *0+,AR3                    ; Сохранение содержимого аккумулятора

                SACL    *0-,AR6                     ; Сохранение содержимого аккумулятора

                ADD     #1                               ; Изменение содержимого аккумулятора

         end_block1

               .end

 

5.3 Содержание отчета

5.3.1 Текст программы с подробными комментариями.

5.3.2 Ответы на контрольные вопросы.

5.3.3 Изменения, внесенные в программу по указанию преподавателя, выводы по полученным при этом результатам.

 

5.4            Контрольные вопросы

5.4.1                   Назовите основные методы адресации процессора TMS320C5x.

5.4.2                   Поясните, как формируется адрес при прямой адресации.

5.4.3                   Поясните, как формируется адрес при непосредственной адресации.

5.4.4                   Поясните, как формируется адрес при косвенной адресации.

5.4.5                   В чём особенность циклической адресации.

5.4.6                   Как задать циклический буфер?

5.4.7                   Как изменяются адреса при циклической адресации?

 

6 ЛАБОРАТОРНАЯ РАБОТА №6. РЕАЛИЗАЦИЯ ОСНОВНЫХ ОПЕРАЦИЙ ЦИФРОВОЙ ОБРАБОТКИ СИГНАЛОВ НА ПРОЦЕССОРЕ TMS320С5x , РАБОТАЮЩЕМ В РЕАЛЬНОМ ВРЕМЕНИ

Цель работы: ознакомление с отладочной платой DSK и изучение ее работы для реализации на процессоре TMS320C50 основных операций цифровой обработки сигналов в реальном масштабе времени.

 

6.1 Краткая теоретическая справка

Для более успешного освоения работы цифрового сигнального процессора TMS320C50 фирма Texas Instruments выпустила плату Digital Starter Kit (DSK), которая является учебным инструментом при выполнения экспериментов с использованием процессора для обработки цифровых сигналов в реальном масштабе времени. Плата включает:

- процессор с фиксированной точкой TMS320C50;

- программируемое ПЗУ (PROM), объемом  32 Кб;

- интерфейс соединения с компьютером через порт RS232;

- аналоговый интерфейс на базе схемы АЦП/ЦАП TLC32040;

- интерфейс эмуляции.

Внутри кристалла процессора имеется оперативная память (ОЗУ), которая позволяет размещать по 10К памяти программ и данных. Схема АЦП/ЦАП  предназначена для аналогового ввода-вывода через микрофон, динамик или наушники и подключена к последовательному порту процессора. Опорная частота этой схемы задается таймером процессора и равна 10 Мгц,.

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

Графическая панель организована по оконному типу и дает возможность:

·     загружать исполняемые программы и просматривать их дизассемблерную версию в окне DISASSEBLY;

·     выполнять программы в пошаговом и автоматическом (непрерывном)  режимах, контролировать их выполнение, следя за изменениями, происходящими с содержимым регистров и областей памяти процессора;

·     задавать точки останова при непрерывном выполнении программы.

Основной операцией цифровой обработки сигналов является задержка сигнала на определенное количество отсчетов m (на время m / Fd, где Fd – частота дискретизации), которая встречается во всех алгоритмах цифровой фильтрации. Существуют два варианта её программной реализации:

1. Организуется массив памяти, в который записываются отсчёты, причем запись и считывание отсчётов осуществляется всё время по одним и тем же адресам, т.е. точки входа и выхода линии задержки ( Z-m ) остаются постоянными, а перемещаются (сдвигаются) данные между ячейками памяти, имитируя прохождение сигнала в реальной физической линии задержки.

2. Организуется массив памяти, в который записываются отсчеты, но при этом перемещаются точки входа и выхода линии задержки, т.е. циклически изменяются адреса записи и считывания в пределах выделенного массива. Такой массив называется циклическим буфером (ЦБ). При этом способе данные внутри памяти не перемещаются. Это существенно снижает требования к производительности процессора за счет ликвидации большого количества операций по перемещению данных.

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

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

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

 

 

Риунок 6.1

 

Уравнение вход-выход этой цепи имеет следующий вид:

Ниже приведена программа, реализующая структурную схему, представленную на рисунке 6.1.

 

; Программа   LAB6_1.ASM

                   .version 50

                   .mmregs

LENGTH   .set    5                                    ;определение длины буфера

                    sect   "BUFFER"

BUFFER    .space  LENGTH*5            ; резервирование места для циклического буфера

                   .data

ONE           .word   07FFFh

X                 word   0

Y                .word   0

                   .text

* организация буфера

       LDP      #0

                   SPLK    #BUFFER,CBSR1                            ;начальный адрес буфера

                   SPLK    #(BUFFER+LENGTH-1),CBER1    ;конечный адрес буфера

                   LAR     AR1,#BUFFER                                  ;указатель буфера

                   SPLK    00001001b,CBCR                             ;разрешение буфера

                   MAR     *,AR1                           ;установка текущего вспомогательного регистра

* очистка буфера

                   ZAP

                   RPT        #(LENGTH-1)

                   SACL    *+

* формирование начального значения сигнала в ячейке X

                   LDP     #X

                   LACC    ONE

                   SACL    X

* линия задержки

BEGIN       LACC    *                                                        ;чтение выходного сигнала

                   SACL    Y                                                        ;запись выходного сигнала

                   LACC    X                                                        ;чтение входного сигнала

                   SACL    *+                                         ; запись входного сигнала в линию задержки

* изменение сигнала

                      ROR                        ; уменьшение сигнала в 2 раза путем сдвига вправо

       SACL    X             ; сохранение нового значения входного сигнала

       ZAP                      ; обнуление ACC

                   B       BEGIN

                  .end

Линия задержки организована следующим образом. Адрес считывания выходного сигнала линии и адрес записи входного сигнала один и тот же на каждом  периоде обращения к линии. Из  ячейки линии сначала производится считывание выходного сигнала, и так как это значение больше не потребуется, затем в эту же ячейку производится запись   очередного входного отсчета. Считывание этого отсчета будет  произведено через m (length) периодов обращения к линии, т.е. с задержкой на время  m / Fd . После записи входного отсчета производится модификация адреса.

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

При реализации алгоритмов ЦОС, возникает проблема масштабирования сигнала, так как возможны ошибки, связанные с переполнением, например, при сложении (результат сложения превышает 1).

Для ослабления уровня входных отсчетов цифровой цепи их нужно умножить на коэффициент масштабирования, который определяется как величина, обратная максимуму АЧХ этой цепи. Например, если масштабный множитель с именем GAIN = 0,5, то  в программе  он указывается как 16-ричное число 0,5∙32768 = 4000h.

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

.

Уравнение, описывающее сложение прямого и задержанного сигналов , имеет вид:

где length - длина линии задержки, выраженная в количестве отсчетов, на которое задерживается сигнал. 

Рассмотрим пример реализации цепи, содержащей линию задержки, два умножителя и сумматор, тогда уравнение вход-выход цепи имеет вид:

.

Структурная схема такой цепи приведена на рисунке 6.2. В данном примере реализуется сложение входного отсчета, умноженного на весовой коэффициент g0,  с отсчетом, задержанным на length тактов и умноженным на весовой коэффициент g1.

 

Рисунок 6.2

 

Программа, реализующая структурную схему на рисунке 6.2, приведена ниже:

 

; Программа lab6_3.asm

                        .version        50

                        .mmregs

LENGTH         .set            7000

                        .data

* задание параметров для схемы АЦП/ЦАП

TA                   .word   18

RA                   .word   18

TB                   .word   36           

RB                   .word   36           

AIC_CTR        .word   29h

FLAG              .word   0

* резервирование места для циклического буфера (линии задержки)

                        .sect           "BUFFER"

                        .bss            BUFFER,LENGTH

* начальные присваивания значений констант и переменных

X                     .word           0

Y                     .word           0

G0                   .word           32768*34/100   ; 02B85h

G1                   .word           32768*125/1000  ; 01000h

                        .include        "init.asm"   ; включение файла настойки АЦП/ЦАП

BEGIN:

* настройка режимов

                        LDP     #0

                        CLRC    OVM

                        SPM     0

                        SPLK    #12h,IMR

* очистка линии задержки

                        LAR     AR1,#BUFFER

                        LAR     AR2,#(LENGTH-1)

                        MAR     *,AR1

                       ZAP

                       CLEAR   SACL    *+,AR2

                       BANZ    CLEAR,*-,AR1

                       CLRC    INTM

* организация циклического буфера

                       SPLK    #BUFFER,CBSR1

                       SPLK    #(BUFFER+LENGTH-1),CBER1

                       LAR     AR1,#BUFFER

                       SPLK    00001001,CBCR

                       MAR     *,AR1

                       LDP     #FLAG

                       BEG:    BIT     FLAG,15           ; ожидание прерывания от АЦП

                       BCND    BEG,NTC

                       XPL     #1,FLAG                      ; изменение признака прихода прерывания

* основная программа

                       LDP     #X

                       ZAP                              ; очистка ACC и регистра P

                       LT      X                        ; загрузить Х в Т-регистр

                       MPY     G0                   ; реализация X(n)*G0

                       APAC                                       ; (ACC)+X(n)*G0

                       LT      *                         ; загрузка в Т сигнала с выхода линии

                       MPY     G1                   ; реализация X(n-m)*G1

                       APAC                           ; Y(n)=X(n)*G0+X(n-m)*G1

                       SACH    Y,1                             ; сохранение выходного сигнала в Y

                       ZAP                              ; обнуление ACC

                       LACC    X,14                           ; загрузка в ACC сигнала X

                       SACH    *+,1                           ; запись в линию задержки

                        B       BEG                   ; переход к ожиданию следующего отсчета

 

* подпрограмма обработки прерывания приемника

 

RECEIVE:

                        LAMM    DRR

                        LDP     #X

                        SACL    X

                        LACC    Y

                        AND     #0FFFCh

                        SAMM    DXR

                        LDP     #FLAG

                        XPL     #1,FLAG

                        RETE

                         .end

 

В программу с помощью директивы .include включается файл init.asm, который содержит команды настройки схемы АЦП/ЦАП. Программа предназначена для использования в реальном масштабе времени.

 

6.3 Порядок выполнения работы

6.3.1 Ознакомиться и подробно прокомментировать в письменном виде тексты программ LAB6_1.ASM и LAB6_3.ASM.

6.3.2 Модифицировать исходный текст программы LAB6_3.ASM в соответствии со своим вариантом задания. Варианты задания приведены в таблице 6.1.       

   Т а б л и ц а  6.2

Номер варианта

m

G0

G1

1

40

0,5

0,25

2

97

0,25

0,5

3

63

0,125

0,5

4

58

0,25

0,25

5

75

0,5

0,5

6

68

0,25

0,125

7

93

0,125

0,5

8

79

0,5

0,125

9

65

0,25

0,5

10

84

0,125

0,25

 

6.3.3 Создать свой рабочий каталог Lab_6 и скопировать в него файлы транслятора и компоновщика dspa.exe и dsplnk.exe, а также файлы lab6_1.asm, lab6_1.cmd (рабочие программы) и dsk5d.exe (программа – отладчик платы ).

6.3.4 Произвести трансляцию и компоновку  программы Lab6_1.asm.

6.3.5 Включить питание платы и загрузить в неё  программу dsk5d.exe.

6.3.6 В программе - отладчике загрузить программу Lab6_1.out  (команды L C , имя файла).

6.3.7      Установить в окне MEMORY начальный адрес 300h для наблюдения за изменением содержимого кольцевого буфера входного и выходного сигнала (команды D  M   A   300).

6.3.8       Установить точку останова выполнения программы по адресу 0a16h (команды B   A   a16  номер точки останова 0).

6.3.9 Запустить программу на выполнение таким образом, чтобы после каждого периода выполнения (обращения к линии задержки) программа останавливалась на введенной точке останова (клавиша F5).

6.3.10 При каждой остановке,  особое внимание, следует обратить на изменение входного сигнала (адрес 306h), выходного сигнала (адрес 307h), изменение данных внутри линии задержки. Для реализации линии задержки используются ячейки буфера. Они должны последовательно заполняться сигналом, первое значение которого сначала 1 (7FFFh), а затем уменьшается в два раза при каждом шаге.  Обратите также внимание на изменение указателя адреса AR1, т.е. изменение адреса входа и выхода линии задержки. Выходной сигнал, отличный от 0  появится только после заполнения линии задержки, т.е. через 5 периодов. Это и есть величина задержки.

6.3.11 Изменить в исходном тексте программы величину задержки и повторить эксперимент.

6.3.12 Скопировать в свой рабочий каталог Lab_6 файлы lab6_3.asm, lab6_3.cmd (рабочие программы) и dsk5L.exe (программа –загрузчик  платы ).

6.3.13 Внести в текст программы изменения в соответствии со своим вариантом задания и произвести трансляцию и компоновку  программы lab6_3.asm.

6.3.14 Для прослушивания прямого и задержанного сигнала выход платы (OUT) подключить к линейному входу звуковой карты компьютера (вход синего цвета). К входу зеленого цвета подключить наушники (белый провод) или динамик. К входу платы (IN) подключить кабель с оголенным концом.  Имитацией входного сигнала будет «треск», появляющийся в наушниках при прикосновении к оголенной части провода.

6.3.15 Включить питание платы и загрузить в неё выполняемую программу lab6_3.out., для чего в командной строке DOS набрать команду

dsk5l.exe     lab6_3.out

Программа dsk5l.exe     загружает в плату   программу lab6_3.out     и автоматически запускает её на выполнение, о чем появляется сообщение на экране. Остановка выполнения программы производится клавишей ESC.

6.3.16  Прослушать в наушниках прохождение прямого и задержанного сигналов (задержка входного сигнала). Для более четкой фиксации задержки нужно в программе увеличить длину линии задержки, чтобы ее приращение было порядка 1000, и снова запустить программу на выполнение. Убедиться в эффекте «ЭХО».

 

6.4 Содержание отчета

6.4.1      Результаты работы программ.

6.4.2      Выводы по результатам.

 

6.5 Контрольные вопросы

6.5.1 Какие способы организации линии задержки существуют, в чем их принципиальное отличие?

6.5.2      Поясните принцип организации линии задержки на сигнальном процессоре TMS320C50.

6.5.3      Как задать циклический буфер?

6.5.4      Как реализуется операция уменьшения уровня сигнала?

6.5.5      Как реализуется операция увеличения сигнала?

6.5.6      Приведите фрагмент программы, реализующей уравнение .

6.5.7      Приведите фрагмент программы, реализующей уравнение .

6.5.8      Приведите фрагмент программы, реализующей уравнение .

6.5.9      Приведите фрагмент программы, реализующей уравнение .

 

 

Список литературы

 

1. Солонина А.И., Улахович Д.А., Арбузов С.М. и др. Основы цифровой обработки сигналов: курс лекций. – СПб.: БХВ - Петербург, 2005. - 768 с.

2. Солонина А.И., Улахович Д.А., Яковлев Л.А. Алгоритмы и процессоры цифровой обработки сигналов – СПб.: БХВ - Петербург, 2001. - 464 с.

3. Лэй Э. Цифровая обработка сигналов для инженеров и технических специалистов: практическое руководство. – М.: ООО «Группа ИДТ», 2007. – 336 с.

4. Айфичер Эммануил, Джервис Барри. Цифровая обработка сигналов: практический подход. - М.: Издательский дом «Вильямс», 2004.- 992 с.

5.                  Бойко В.И., Гуржий А.Н. и др. Схемотехника электронных систем. Микропроцессоры и микроконтроллеры. – СПб.: БХВ – Петербург, 2004. – 464 с.

6. Гольденберг Л.М. и др. Цифровые устройства и микропроцессорные системы. Задачи и упражнения: учебное пособие.- М.: Радио и связь,  1992.-256 с.

 7. Петрищенко С.Н., Мусапирова Г.Д. Основы цифровой обработки сигналов. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальностей факультета радиотехники и связи. – Алматы: 2004. – 33 с.

 

Содержание 

1 Лабораторная работа №1.………………………..…………………... ...3

2 Лабораторная работа №2……………………………….………..……..11

3 Лабораторная работа №3………………………………………………18    

4 Лабораторная работа №4 ……………………….……………………...23

5 Лабораторная работа №5 …….……………………………………… . 32

6 Лабораторная работа №6 ………….………………………………….. 42

             Список литературы……….……………………………………………. 49