BMSTU/02-dspmd-01-lab-report.tex

141 lines
7.9 KiB
TeX
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[a4paper,fontsize=14bp]{article}
\input{../common-preamble}
\input{../bmstu-preamble}
\input{../fancy-listings-preamble}
\setcounter{secnumdepth}{0}
\numerationTop
\begin{document}
\thispagestyle{empty}
\makeBMSTUHeader
% ... работе, номер, тема, предмет, ?а, кто
\makeReportTitle{лабораторной}{1}{Исследование команд обработки сигналов}{Микропроцессорные устройства обработки сигналов}{}{А.И. Германчук}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\section{Цель}
Целью лабораторной работы является знакомство с интегрированной средой разработки программ Code Composer Studio (CCS) компании Texas Instruments. Лабораторная работа заключается в написании в соответствие с выданным индивидуальным заданием текстов несложных программ на языке C и ассемблера, создании нового проекта в CCS, компиляции и отладке разработанных программ с помощью симулятора микропроцессора TMS320C5515 или оценочной платы TMS320C5515 DSP Evaluation Module (TMDXEVM5515).
\section{Выполнение}
Индивидуальным заданием было написание функции умножения и сложения с насыщением и округлением: \code{long _smacr(long src1, int src2, int src3)}. В учебном пособии \cite[с. 6-68]{dsp:lectures} и технической документацией \cite{ti:dsp-mnemonics} описаны как процессы умножения со сложением, так и используемые тестовые данные для проверки работоспособности.
Согласно документации \cite[с. 77 (3-33)]{ti:dsp-prog-guide} прототип низкоуровневой функции и описание аргументов функции на языке Си имеют вид, представленный в таблице \hrf{table:prototype}. Функция осуществляет умножение операторов \code{op1} и \code{op2}, сдвиг полученного результата влево на один разряд, складывает результат со значением параметра \code{src}, округляет результат, добавляя число 215 и обнуляет младшие 16 разрядов.
\begin{table}[H]
\captionsetup{labelsep=endash}
\centering
\caption{Прототип и описание действия функции}
\label{table:prototype}
\begin{tabular}{|p{55mm}|p{110mm}|}
\hline
Прототип функции & Верхнеуровневое описание \\ [3ex]
\hline
\multirow{2}{54mm}{\code{long _smacr(long src, int op1, int op2)}} & Multiplies \code{op1} and \code{op2}, shifts the result left by 1, adds the result to \code{src}, and then rounds the result by adding 215 and zeroing out the lower 16 bits. (SATD, SMUL, and FRCT bits set).\\
\cline{2-2}
& Returns the saturated sum of src1 and the fractional-mode product of src2 and src3. The sum is rounded as if the intrinsic \code{_sround} were used. \\ [5ex]
\hline
\end{tabular}
\end{table}
В наборе команд микропроцессора TMS320C55x \cite{ti:dsp-mnemonics} имеется команда, позволяющая реализовать умножение с насыщением и округлением. \code{MAC} данная инструкция выполняет умножение и суммирование.
Команда MAC имеет следующий синтаксис \cite[с. 273]{ti:dsp-mnemonics}:
\begin{center} \code{MAC[R] ACx, Tx, ACy[, ACy]},\end{center}
где:
\begin{itemize}
\item [] MAC мнемоника команды умножения со сложением;
\item [] R признак округления результата операции;
\item [] Tx - 16-разрядные регистры T0, T1;
\item [] ACx и ACy регистр аккумулятор AC0-AC3.
\end{itemize}
Необязательный параметр (5) заключён в квадратные скобки.
Эта инструкция выполняет умножение и сложение. Входящие операнды умножителя ACx(3216) и значение Tx знаково расширяются до 17 битов по формуле (\hrf{eq:expanding})
\begin{equation}
ACy = ACy + (ACx * Tx).
\label{eq:expanding}
\end{equation}
Умножение с накоплением чисел разной разрядности происходит как показано на рис. \hrf{pic:mac}. Для повторения этого действия необходимо переместить параметр, переданный в регистре \code{T0} в регистр большей разрядности \code{AC1} (строка \hrf{line:moving-to-hi}). Полный листинг ассемблерной команды (\hrf{code:prog-asm}) представлен в приложении \hrf{appendix:fulls}.
\begin{figure}[H]
\centering
\includegraphics[height=5cm]{01lab-rpt-mac.png}
\caption{Умножение с накоплением}
\label{pic:mac}
\end{figure}
\section{Результаты работы}
После запуска проверочной программы (\hrf{code:prog-c}) представленной в приложении \hrf{appendix:fulls} было доказано совпадение результатов библиотечной функции и описанной в листинге \hrf{code:prog-asm}. Снимки экрана, демонстрирующие идентичность полученных результатов представлены на рис. \hrf{pic:result}.
\begin{figure}[H]
\centering
\begin{subfigure}[b]{0.7\textwidth}
\centering
\includegraphics[width=\textwidth]{01lab-rpt-1.png}
\end{subfigure}
\begin{subfigure}[b]{0.7\textwidth}
\centering
\includegraphics[width=\textwidth]{01lab-rpt-2.png}
\end{subfigure}
\caption{Результаты вызова функций \code{_smacr} и \code{lab1}}
\label{pic:result}
\end{figure}
\newpage
\printbibliography[heading=bibintoc, title={Список литературы}, resetnumbers=1]
\newpage
\appendix
\section*{Приложения}
\addcontentsline{toc}{section}{Приложения}
\renewcommand{\thesubsection}{\Alph{subsection}}
\subsection{Полные листинги программ}
\label{appendix:fulls}
\begin{lstlisting}[language=C,style=CCodeStyle,caption={Программа на языке С}, label=code:prog-c]
#include "stdio.h"
#define SIZE 2
//long _smacr(long src1, int src2, int src3);
extern long lab1(long, int, int);
void main(void) {
//Локальные переменные
int i;
int intValues[] = {0x00008001, 0xFFFE0001};
long longValues[] = {0x00008001, 0xFFFE0001};
long result_lib;
long result_lab;
for (i = 0; i < SIZE; ++i) {
result_lib = 10;
result_lab = 10;
result_lib = _smacr(result_lib, longValues[i], intValues[i]);
result_lab = lab1(result_lab, longValues[i], intValues[i]);
int neq = result_lib - result_lab;
}
}
\end{lstlisting}
\begin{lstlisting}[style=ASMStyle,caption={Описание функции на языке ассемблера}, label=code:prog-asm]
.def _lab1
.text
_lab1:
BSET FRCT
BSET SATD
MOV T1,HI(AC1) <@\label{line:moving-to-hi}@>
MACR AC1, T0, AC0
RET
\end{lstlisting}
\end{document}