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

141 lines
7.9 KiB
TeX
Raw Normal View History

2023-01-27 22:32:16 +03:00
\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}