mmtl4, fpgal2, wtisl1, wtisl2

This commit is contained in:
Ivan I. Ovchinnikov 2022-12-28 16:52:56 +03:00
parent 882bd8af01
commit 4971120435
13 changed files with 1406 additions and 24 deletions

View File

@ -244,27 +244,91 @@ Gated Clock - ТИ, который модифицируется на логик
\end{itemize}
\item signal race например, когда одним сигналом разрешается и формируется выходной сигнал.
\item Asynchronous clock domains. определяет правила передачи данных между разными доменами ТИ. Домен ТИ - это тригеры и связанная с ними комбинационная логика, которая тактируется одним ТИ.
двойной триггер не спасёт. есть вариант реализовать протокол обмена (фронт детектор)
\begin{itemize}
\item двойной триггер не спасёт. есть вариант реализовать протокол обмена (фронт детектор)
СХЕМА 2 у ВИКИ
СХЕМА 2 у ВИКИ
нужно формировать однобитный строб. данные не должны меняться на 3 и 4 фронте. строб и данные меняются как показано на диаграмме, и когда мы их защёлкиваем на 3 или 4 такте, они будут точно неизменные.
\begin{lstlisting}[style=VerilogStyle]
input logic stb;
input logic [7:0] din;
input logic c2;
нужно формировать однобитный строб. данные не должны меняться на 3 и 4 фронте. строб и данные меняются как показано на диаграмме, и когда мы их защёлкиваем на 3 или 4 такте, они будут точно неизменные.
\begin{lstlisting}[style=VerilogStyle]
input logic stb;
input logic [7:0] din;
input logic c2;
logic[2:0] stb_z;
logic ena;
logic[2:0] stb_z;
logic ena;
always_ff @(posedge c2) stb_z < {stb_z[1:0], stb};
assign ena = ~stb_z[2] & stb_z[1];
always_ff @(posedge c2) if (ena) dreg < din;
always_ff @(posedge c2) stb_z < {stb_z[1:0], stb};
assign ena = ~stb_z[2] & stb_z[1];
always_ff @(posedge c2) if (ena) dreg < din;
\end{lstlisting}
\item Если синхронны - правильно формировать ena для защёлкивания на более высокой частоте и задать настройки multicycle. Если асинхронны - передача по стробу. Недостаток в том, что приёмная сторона всегда должна быть готова принимать данные и не имеет права пропускать строб. Значит в обратную сторону должен быть сигнал, говорящий о неготовности приёмника (или обмен с квитированием -- устанавливается запрос в одну сторону, в ответ выставляется подтверждение, когда система видит подтверждение -- снимается запрос, после снятия запроса снимается подтверждение). Фактически обмен вспомогательными сигналами задерживает обмен на 6 тактов с каждой стороны.
\begin{figure}[H]
\centering
% \includesvg[scale=1.01]{pics/03-fpga-00-quitir.svg}
\caption{Обмен с квитированием}
\label{pic:quitir}
\end{figure}
\end{lstlisting}
\item Обмен с использованием буфера FIFO. Удобно, когда нужно читать только одно значение. как выход из ситуации возможно использовать (более сложные схемы будут иметь блок управления, управление будет осуществляться каким-то одним клоковым доменом, синхронизируемся двумя триггерами) В обоих случаях нужно будет информаировать о переключении буферов:
\begin{enumerate}
\item схема ping-pong (управление старшим битом адреса логикой управления через инвертор (области памяти разбиваются на две области)) неудобство в том, что фактически становится невозможно одновременно читать и писать
СХЕМА у меня в телефоне
\item FIFO буферов. тоже самое, только логика управления манипулирует не одним старшим битом, а несколькими. они не выставляются как инверсия, а следуют иной логике (память разбивается на 4 области). В каждый момент времени мы работаем только с двумя буферами, а остальные простаивают.
\end{enumerate}
\end{itemize}
Логика с квитированием хороша когда небольшие редкие передачи или малые частоты (для обращения к регистрам периферийных модулей). фифо нужна когда происходит работа, например, бёрстами с ПДП. в платформ дизайнере есть interconnect requirements, где можно указать какого типа будет синхронизация. Avalon-MM clock crossing bridge определяет глубину ФИФо, размер пакетной передачи, и другие настройки. Глубина буфера команд должна быть равна или больше размера пакета передачи.
\end{enumerate}
\section{Конфигурация и программирование ПЛИС}
Термин программирование обычно используется для энергонезависимых ПЛИС и ПЗУ. К статическому ОЗУ (cyclone, stratix, arria...) применяют термин конфигурирование.
MSEL - режим конфигурации ПЛИС при включении питания.
Режимы:
\begin{enumerate}
\item JTAG
\begin{enumerate}
\item отладочный кабель (usb-blaster) \lh{dkgreen}{V}
\item МК \lh{golden}{?}
\end{enumerate}
\begin{itemize}
\item Работа с Nios/ARM
\item встроенный логический анализатор SignalTap
\item In-System Sources and Probes (возможно завести в проект внешние сигналы)
\item In-system memory editor
\item отладка интерфейсов внешней памяти (DDRxSDRAM)
\item отладка высокоскоростных интерфейсов (мультигигабитных)
\end{itemize}
\item Active
\begin{enumerate}
\item Parallel \lh{red}{X}
\item Serial \lh{dkgreen}{V} (SPI x1, x4). Но как именно нужно программировать память?
\end{enumerate}
\begin{itemize}
\item \lh{red}{X} Программатор может работать в режиме ActiveSerial. он не нужен так как у нас всё равно почти всегда есть разъём JTAG.
\item \lh{dkgreen}{V} JTAG генерирует файл .jic, который используется FlashLoader для передачи файла .sof через ПЛИС в память. jic-файл создаётся через Convert Programming files.
\end{itemize}
\item Passive (в зависимости от размера ПЛИС и новизны)
\begin{enumerate}
\item Parallel
\item Serial
\end{enumerate}
\begin{itemize}
\item USB-Blaster \lh{red}{X}
\item МК/Процессор/ПЛИС \lh{dkgreen}{V} Любое устройство, которое сможет сформировать нужную временную диаграмму
\begin{tikztimingtable}
nconfig & HLLHHHHHHHHHHHH\\
nstatus & HHLLHHHHHHHHHHH\\
confdone & HHLLLLLLLLLLLLH\\
dclk & LLLLLCCCCCCCCCC\\
data & UUUU2D{0}2D{1}2D{2}2D{...}2D{N}U\\
\end{tikztimingtable}
\end{itemize}
И в активном и в пассивном режиме можно прошивать сжатой прошивкой.
\end{enumerate}
1. расширить разрядность памяти хранения до 32 бит и на запись и на чтение, чтобы на лампочках было видно.
2. добавить регистр (помимо ктл и дивайдер) если там 0 то пусть работает как работало, а если 1, подключается режим моргающего жёлтого с длительностью которая берётся из грин ((грин+1)-0-(грин-1)-0)
\newpage
\appendix
\setcounter{secnumdepth}{2}

View File

@ -10,10 +10,8 @@
\thispagestyle{empty}
\makeBMSTUHeader
\makeReportTitle{лабораторной}{1}{Моделирование компонент систем на кристалле}{Проектирование цифровых устройств на \\ программируемых логических интегральных схемах (ПЛИС)}{}{С.В. Фёдоров}
\newpage
\thispagestyle{empty}
\tableofcontents
\makeReportTitle{лабораторной}{2}{Моделирование компонент систем на кристалле}{Проектирование цифровых устройств на \\ программируемых логических интегральных схемах (ПЛИС)}{}{С.В. Фёдоров}
\newpage
\pagestyle{fancy}
\section{Цель}
@ -62,19 +60,91 @@ end
yellow & 5L 5H 5L 5H 5L 5H \\
\end{tikztimingtable}
\end{enumerate}
Исходный код семафора из материалов методического пособия создавал семафор, работающий согласно временн\'{о}й диаграммы, представленной на рисунке \hrf{pic:timing-sem-before}. Из диаграммы очевидно, что при инициализации семафор загорается красным, а значит ни один поезд через него не сможет проехать никогда. Поскольку в схеме существуют комбинационные зависимости (указаны на рисунке синими стрелками), возможно регистровую логику переделать под конечный автомат, оставив комбинационную логику «как есть». В правой части видно, что в период горения зелёного цвета в семафор приходит сигнал смены строки памяти RAM, то есть переход к следующему пакету временн\'{ы}х диапазонов горения цветов семафора.
\begin{figure}[H]
\centering
\begin{tikztimingtable}
clk & 6{C} ;[dotted] 4{C}; 7{C} ;[dotted] 11{C} c;\\
clrn & h cLc 4{H} ;[dotted] 21Hh h;\\
train & 4{L}l cH;[dotted] Hhc 20{L} l;\\
countdiv & u 9d{0} D{};[dotted]2{D{}}; 3D{divider} D{0} 5{D{}};[dotted] 11D d{};\\
enacnt & x 11{l} ;[dotted] 8{l};L H 9{l} ;[dotted] 12L; \\
contr & u 11d ;[dotted] 8d; 3d{0} N(B1) 10d{1} ;[dotted] 12D{};\\
colors & u 8d{100} 3d ;[dotted] 8d; 2d{100} N(A1) 11d{010} ;[dotted] 12D{};\\
divisor & u 11d ;[dotted] 8d; 4d{red} N(C1) 9d{yellow};[dotted] 8D{yellow and green};4D{green}\\
ram\_wr & x 25L CC L \\
\extracode
\tableheader{Сигнал}{Значения}\tablerules
\draw[blue,->,thin](A1)to[out=0,in=180](B1);
\draw[blue,->,thin](B1)to[out=0,in=180](C1);
\begin{background}[gray, semitransparent, semithick]
\vertlines{0.5, 4.5, 5, 11, 12, 24.5, 25.5}
\end{background}
\end{tikztimingtable}
\caption{Примерная временн\'{а}я диаграмма работы семафора}
\label{pic:timing-sem-before}
\end{figure}
Также индивидуальное задание предполагает мигание жёлтого цвета с периодичностью, указанной в памяти семафора о адресу «зелёного» цвета (то есть следующего за режимом «мигающего жёлтого»), следовательно, значение зелёного необходимо сохранить заранее, перед включением красного, но после изменения строки памяти (судя по тестовому стенду, строб смены строки памяти формируется в модуле через 10 тактовых импульсов после начала периода зелёного света). Значение задержки зелёного необходимо сохранить примерно в момент, указанный на обновлённой диаграмме синей линией. Временная диаграмма для решения поставленной задачи представлена на рисунке \hrf{pic:timing-sem-after}.
\begin{figure}[H]
\centering
\noindent
\begin{tikztimingtable}
clk & 6{C} ;[dotted] 4{C}; 7{C} ;[dotted] 11{C} c;\\
clrn & h cLc 4{H} ;[dotted] 21Hh h;\\
train & 4{L}l cH;[dotted] Hhc 20{L} l;\\
countdiv & u 9d{0} D{};[dotted]2{D{}}; 3D{divider} D{0} 5{D{}};[dotted] 11D d{};\\
enacnt & x 11{l} ;[dotted] 8{l};L H 9{l} ;[dotted] 12L; \\
contr & u 8d{3} 3d;[dotted] 8d; 3d{0} N(B1) 10d{1} ;[dotted] 12D{};\\
colors & u 8d{001} 3d ;[dotted] 8d; 2d{100} N(A1) 11d{010} ;[dotted] 12D{};\\
divisor & u 8d{green} 3d ;[dotted] 8d; 4d{red} N(C1) 9d{yellow};[dotted] 8D{blinking yellow};4D{green}\\
ram\_wr & x 25L CC L \\
\extracode
\tableheader{Signal}{Values}\tablerules
\draw[blue,->,thin](A1)to[out=0,in=180](B1);
\draw[blue,->,thin](B1)to[out=0,in=180](C1);
\begin{background}[gray, semitransparent, semithick]
\vertlines{0.5, 4.5, 5, 11, 12, 24.5, 25.5}
\end{background}
\begin{scope}[blue]
\vertlines{3}
\end{scope}
\end{tikztimingtable}
\caption{Обновлённая временн\'{а}я диаграмма работы семафора}
\label{pic:timing-sem-after}
\end{figure}
В компонент семафора была добавлена возможность изменения поведения без перекомпиляции компонента. Поведение с «мигающим жёлтым» активируется нечётным значением задержки из файла \code{sem.c} процессора niosII. Поведение красного жёлтого, и зелёного сигналов в режиме «мигающего жёлтого» представлено на рисунке \hrf{pic:indi-model}.
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{03-fpga-lab-02-individual.png}
\caption{Диаграмма поведения сигналов после выполнения задания}
\label{pic:indi-model}
\end{figure}
В процессе работы были модифицированы исходные коды (листинг \hrf{lst:dec}, в листинге приведена только изменённая часть, логика работы семафора) и коды тестов (листинг \hrf{lst:dec-tb}) для компонента семафора, а также тестовый стенд (листинг \hrf{lst:main-top-tb}) и прошивка процессора (листинг \hrf{lst:sem}) итогового проекта.
\section{Выводы}
Подключение в систему собственного компонента, совместимого с шиной Avalon-MM является достаточно простой задачей, в которой одну из важнейших ролей играет понимание окружения. Компоненты желательно проектировать максимально гибкими и отлаживать на отдельных стендах, как это было сделано в данной лабораторной работе, поскольку интеграция обновлений компонента в целевую систему является достаточно долгим процессом, в котором легко ошибиться (обновление компонента, обновление системы, обновление пакета поддержки платы, перекомпиляции на всех этапах).
\newpage
\appendix
\setcounter{secnumdepth}{4}
\section{Приложения}
\renewcommand{\thesubsection}{\Asbuk{subsection}}
\subsection{Исходные коды проекта}
\label{appendix:src}
\lstinputlisting[language=Verilog,style=VerilogStyle,caption={Семафор},label={lst:dec}]{src/dec.sv}
\lstinputlisting[language=Verilog,style=VerilogStyle,caption={Тестовый стенд семафора},label={lst:dec-tb}]{src/dec_tb.sv}
\lstinputlisting[language=Verilog,style=VerilogStyle,caption={Тестовый стенд основного проекта},label={lst:main-top-tb}]{src/niosII_tb.v}
\lstinputlisting[language=C,style=CCodeStyle,caption={\code{sem.c}},label={lst:sem}]{src/sem.c}
\end{document}

View File

@ -11,7 +11,7 @@
\thispagestyle{empty}
\makeBMSTUHeader
\makeReportTitle{лабораторной}{3}{Разработка мультимедийного приложения}{Мультимедиа технологии}{}{Д.А. Видьманов}
\makeReportTitle{лабораторной}{4}{Разработка мультимедийного веб-приложения}{Мультимедиа технологии}{}{Д.А. Видьманов}
\newpage
\thispagestyle{empty}
\tableofcontents
@ -35,7 +35,7 @@
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{03-mmt-lab-04-hierarchy.png}
\includegraphics[width=100mm]{03-mmt-lab-04-hierarchy.png}
\caption{Иерархия проекта}
\label{pic:hierarchy}
\end{figure}

View File

@ -93,6 +93,109 @@
Поскольку $G=\frac{N_{TX}}{T_s}*\tau$, где $\tau=\frac{8*L_{phy}}{R}$, а $L_{phy} = L_{app} + 63$, то $T_s= \frac{N_{TX}\tau}{G}$. Для $G = 0,05; T_s \approx 361,6$ мсек, а для $G = 1; T_s \approx 18,08$ мсек. Для моделирования был выбран диапазон $T_s = [10; 400]$ мсек с шагом 20.
Настройки моделируемой системы для индивидуального задания приведены в приложении \hrf{app:inifile}.
Результаты моделирования по заданиям 2 и 3 представлены на рисунках \hrf{pic:collision-probability}, \hrf{pic:packet-delay}, \hrf{pic:packet-throughput}.
\begin{figure}[H]
\begin{subfigure}[b]{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-50-CollisionProbability.pdf}
\caption{Вероятность коллизии с $L_{app} = 50, R = 1,5Mbps$}
\label{pic:collision-probability50}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.49\textwidth}
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-100-CollisionProbability.pdf}
\caption{Вероятность коллизии с $L_{app} = 100, R = 3Mbps$}
\label{pic:collision-probability100}
\end{subfigure}
\caption{Вероятность коллизии}
\label{pic:collision-probability}
\end{figure}
\begin{figure}[H]
\begin{subfigure}[b]{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-50-Delay.pdf}
\caption{Задержка пакета с $L_{app} = 50, R = 1,5Mbps$}
\label{pic:packet-delay50}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.49\textwidth}
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-100-Delay.pdf}
\caption{Задержка передачи с $L_{app} = 100, R = 3Mbps$}
\label{pic:packet-delay100}
\end{subfigure}
\caption{Задержка передачи пакета}
\label{pic:packet-delay}
\end{figure}
\begin{figure}[H]
\begin{subfigure}[b]{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-50-Throughput.pdf}
\caption{Пропускная способность сети с $L_{app} = 50, R = 1,5Mbps$}
\label{pic:packet-throughput50}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.49\textwidth}
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-100-Throughput.pdf}
\caption{Пропускная способность сети с $L_{app} = 100, R = 3Mbps$}
\label{pic:packet-throughput100}
\end{subfigure}
\caption{Пропускная способность сети}
\label{pic:packet-throughput}
\end{figure}
С помощью имитационного моделирования и аналитических расчетов решите следующую задачу:
\begin{itemize}
\item Беспроводная система с топологией «звезда» состоит из $N_{TX}$ устройств, которые в случайные моменты времени передают пакеты данных одной базовой станции. При этом условия распространения радиосигналов таковы, что все устройства находятся в радиусе связи друг друга, т.е. находятся в одном домене коллизий.
\item Объем полезной нагрузки (размер пакета на прикладном уровне) каждого из пакетов является случайной величиной, равномерно распределенной в диапазоне от 1 до $kL_{app}$ байт.
\item Определите диапазон средней интенсивности трафика $\lambda$ (пакетов/с) каждого из устройств, при котором вероятность успешного приема пакетов базовой станцией будет не менее 90\%. Рассмотрите использование протоколов Aloha и CSMA, не учитывая затухание радиосигналов и воздействие шумов или помех.
\end{itemize}
В связи с невозможностью проведения теоретических расчётов с использованием распределения, оно было заменено на математическое ожидание, вычисленное по формуле
\[ \frac{\max(L)^2}{(2 * (\max(L) - \min(L)))} - \frac{\min(L)^2}{(2 * (\max(L) - \min(L)))}. \]
Из-за значительного изменения длины пакетов изменятся параметры $\lambda$ и $\tau$, поэтому, для моделирования системы необходимо изменить время моделирования. Для Aloha $G \leq 0,052, \tau = \frac{L}{R}, \lambda\tau = G, \lambda = 11,9; T_s = 357\text{мсек}$, Для CSMA $G \leq 0,35, \lambda\tau = G, \lambda = 80,71, T_s \approx 2421\text{мсек}$. Моделирование было проведено с 10 до 2500мс.
Результат моделирования представлен на рисунках \hrf{pic:indi-collision}, \hrf{pic:indi-delay}, \hrf{pic:indi-throughput}.
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{03-wtis-Lab-1-unif-CollisionProbability.pdf}
\caption{Вероятность коллизии}
\label{pic:indi-collision}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{03-wtis-Lab-1-unif-Delay.pdf}
\caption{Задержка передачи пакета}
\label{pic:indi-delay}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{03-wtis-Lab-1-unif-Throughput.pdf}
\caption{Пропускная способность сети}
\label{pic:indi-throughput}
\end{figure}
Для поддержания уровня успешного приёма пакетов на уровне не менее 90\% с применением протокола Aloha интенсивность трафика не должна превышать $\lambda \leq 11,9$, с применением протокола 1-настойчивый CSMA $\lambda \leq 80,71$.
\section{Выводы}
В исходной имитационной модели системы были заменены количество передатчиков $N_{TX}$, размер пакета $L_{app}$ и скорость передачи данных $R$ в соответствии с индивидуальным вариантом, проведён имитационный эксперимент с модифицированной моделью системы для исследования пропускной способности и вероятности коллизий. Построить графики, произведено сравнение теоретических значений с результатами моделирования, полученные значения корректны.
В результате выполнения работы были закреплены навыки работы с системой имитационного моделирования OMNeT++, построены имитационные модели беспроводной системы сбора данных и исследование ее характеристик при множественном доступе к среде, передачи данных в условиях наличия коллизий.
\newpage
\appendix
\setcounter{secnumdepth}{0}
\renewcommand{\thesubsection}{\Asbuk{subsection}}
\section{Файл настроек по заданию\code{omnetpp.ini}}
\label{app:inifile}
\lstinputlisting[style=JCodeStyle]{src/lab1-omnetpp.ini}
\end{document}

255
03-wtis-lab-02-report.tex Normal file
View File

@ -0,0 +1,255 @@
\documentclass[a4paper]{article}
\input{../common-preamble}
\input{../bmstu-preamble}
\input{../fancy-listings-preamble}
\numerationTop
\begin{document}
\fontsize{14pt}{14pt}\selectfont % Вполне очевидно, что мы хотим 14й шрифт, все его хотят
\thispagestyle{empty}
\makeBMSTUHeader
\makeReportTitle{лабораторной}{2}{Исследование беспроводной системы передачи информации при
ненадежных каналах связи}{Беспроводные технологии в информационных системах}{}{C.С. Баскаков}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\sloppy
\section{Цель}
Закрепление навыков работы с системой имитационного моделирования OMNeT++, построение имитационной модели беспроводной системы сбора данных и исследование ее характеристик при наличии потерь пакетов в условиях ненадежных каналов связи.
\section{Задачи}
\begin{enumerate}
\item Рассмотреть беспроводную систему с заданными параметрами;
\item В соответствии с индивидуальным вариантом из таблицы 3 вычислите требуемые значения параметров;
\item Внести все необходимые изменения в конфигурационный файл;
\item Выполнить моделирование и анализ модифицированной имитационной модели системы. На основе проведенного исследования сформулировать выводы.
\end{enumerate}
Отчёт должен включать
\begin{itemize}
\item расчеты параметров модифицированной системы согласно индивидуальному варианту;
\item описание модифицированной имитационной модели в виде «omnetpp.ini» файла;
\item результаты моделирования в виде обработанных графиков;
\item выводы.
\end{itemize}
\newpage
\section{Выполнение работы}
\subsection{Повторение моделирования}
В результате моделирования системы с исходными параметрами из методического материала были получены графики полностью совпадающие с графиками из методического материала, что говорит о полной повторяемости эксперимента. Графики приведены на рис. \hrf{pic:rpt-queue}, \hrf{pic:rpt-аrrival}, \hrf{pic:rpt-delay}, \hrf{pic:rpt-energy}.
\begin{figure}[H]
\centering \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-noack-Queue.pdf}
\caption{No Ack} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-5-Queue.pdf}
\caption{With Ack R=5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-20-Queue.pdf}
\caption{With Ack R=20} \end{subfigure}
\caption{Уровень наполнения очереди} \label{pic:rpt-queue}
\end{figure}
\begin{figure}[H]
\centering \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-noack-ArrivalRate.pdf}
\caption{No Ack} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-5-ArrivalRate.pdf}
\caption{With Ack R=5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-20-ArrivalRate.pdf}
\caption{With Ack R=20} \end{subfigure}
\caption{Интентивность передачи пакетов} \label{pic:rpt-аrrival}
\end{figure}
\begin{figure}[H]
\centering \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-noack-Delay.pdf}
\caption{No Ack} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-5-Delay.pdf}
\caption{With Ack R=5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-20-Delay.pdf}
\caption{With Ack R=20} \end{subfigure}
\caption{Задержка передачи пакета} \label{pic:rpt-delay}
\end{figure}
\begin{figure}[H]
\centering \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-noack-Energy.pdf}
\caption{No Ack} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-5-Energy.pdf}
\caption{With Ack R=5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ack-20-Energy.pdf}
\caption{With Ack R=20} \end{subfigure}
\caption{Затраты энергии передатчика} \label{pic:rpt-energy}
\end{figure}
\subsection{Индивидуальное задание}
В индивидуальном задании применялись следующие параметры моделирования:
\begin{table}[h!]
\centering
\begin{tabular}{|c|c|c|c|c|c|c|c|}
\hline
$L_{app}$ байт & $T_s$ мс & $P_t$ мВт & $f_c$ МГц & $R$ кбит/с & $W$ кГц & $P_n$ дБм & $V$ м/с \\ [0.5ex]
\hline
1000 & 25 & 90 & 3000 & 1500 & 300 & -69 & 2 \\
\hline
\end{tabular}
\end{table}
Для выполнения индивидуального задания необходимо осуществить перевод мВт в дБ по формуле:
\[10\lg_{10}(mW) = 10 \cdot \lg(90) = 19,54\text{dB}\]
\begin{figure}[H]
\centering
\includegraphics[width=8cm]{03-wtis-Lab-2-ind-error.pdf}
\caption{Вероятность успешного приёма пакета, $\Psi$}
\end{figure}
В качестве начального расстояния было взято значение 10м (по графику вероятности успешного приёма очевидно, что на этом расстоянии связь устойчива, без ошибок), а для конечного 160м (также видно, что вероятность успешного приёма пакета на этом расстоянии однозначно равна нулю). Подсчёт радиуса окружности движения передатчика, а также расстояния между передатчиком и приёмником осуществляется по формулам
\[ d_0 = 10\text{м}; r = \frac{160 - d_0}{2} = 75\text{м}\]
Координаты центра окружности по которой будет перемещаться приёмник.
\[ c_x = 100 + d_0 + r = 185\text{м}\]
Время симуляции вычисляется по формуле и округляется в б\'{о}льшую сторону так, чтобы передатчик не только полностью завершил обход окружности, но и немного зашёл «на второй круг».
\[t_{sim} \geq \frac{2\pi r}{V} = 235,6 \approx 250, \text{сек} \]
Размер временн\'{о}го интервала для передачи пакетов также округляется до целого числа в б\'{о}льшую сторону.
\[ T_{slot} = 20Tb = \frac{20}{R} = 13,3 \approx 14 \text{мкс}\]
В симуляции также был заменён пороговый уровень ($P_{ED}$ = -64 дБм), поскольку он должен быть хотя бы на 5 дБм больше, чем $P_n$.
\begin{figure}[H]
\centering
\includegraphics[width=80mm]{03-wtis-Lab-2-ind-r=5-Prx.pdf}
\caption{Мощность принятого сигнала}
\end{figure}
Система с заданными параметрами моделировалась для очереди с бесконечным размером и размером 5 пакетов. Результаты моделирования представлены на графиках рис.
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r5-Queue.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r20-Queue.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Уровень наполнения очереди, бесконечная очередь} \label{pic:ind-queue-qi}
\end{figure}
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r5-Queue.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r20-Queue.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Уровень наполнения очереди, очередь из 5 пакетов} \label{pic:ind-queue-q5}
\end{figure}
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r5-ArrivalRate.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r20-ArrivalRate.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Интентивность передачи пакетов, бесконечная очередь} \label{pic:ind-arrival-qi}
\end{figure}
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r5-ArrivalRate.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r20-ArrivalRate.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Интентивность передачи пакетов, очередь из 5 пакетов} \label{pic:ind-arrival-q5}
\end{figure}
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r5-Delay.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r20-Delay.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Задержка передачи пакета, бесконечная очередь} \label{pic:ind-delay-qi}
\end{figure}
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r5-Delay.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r20-Delay.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Задержка передачи пакета, очередь из 5 пакетов} \label{pic:ind-delay-q5}
\end{figure}
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r5-Energy.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q-1-r20-Energy.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Затраты энергии передатчика, бесконечная очередь} \label{pic:ind-energy-qi}
\end{figure}
\begin{figure}[H]
\centering \hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r5-Energy.pdf}
\caption{Retries = 5} \end{subfigure}
\hfill \begin{subfigure}[b]{0.32\textwidth}
\centering \includegraphics[width=\textwidth]{03-wtis-Lab-2-ind-q5-r20-Energy.pdf}
\caption{Retries = 20} \end{subfigure} \hfill
\caption{Затраты энергии передатчика, очередь из 5 пакетов} \label{pic:ind-energy-q5}
\end{figure}
По результатам моделирования возможно составить сравнительную таблицу.
\begin{table}[H]
\centering
\begin{tabular}{|c|p{40mm}|p{40mm}|p{40mm}|}
\hline
Конфигурация & Число успешно полученных пакетов & Число полученных пакетов с ошибками & Затраты энергии передатчика (Дж) \\ [0.5ex]
\hline
No ack & 6489 & 4850 & $-4,841$ \\
\hline
Ack, $N_{max} = 5$, $Q = \infty$ & 6292 & 27420 & $-14,359$ \\
\hline
Ack, $N_{max} = 20$, $Q = \infty$ & 10889 & 10400 & $-9,068$ \\
\hline
Ack, $N_{max} = 5$, $Q = 5$ & 6922 & 13883 & $-8,861$ \\
\hline
Ack, $N_{max} = 20$, $Q = 5$ & 6809 & 10083 & $-7,195$ \\
\hline
\end{tabular}
\caption{Результаты моделирования}
\end{table}
\section{Выводы}
Если сравнить вариант системы без использования механизма передачи и вариант с подтверждением успешного приема и с ним при $N_{max} = 5$, то применение подтверждения уменьшило количество полученных пакетов, и энергозатраты выросли почти в 3 раза, из-за того, что значительная часть пакетов (первоначальных и повторных) было передано (соответственно, энергия потрачена), но не получено приемником в период отсутствия радиосвязи.
Если же сравнить варианты $N_{max} = 5$ и $N_{max} = 20$ при $Q = \infty$, то увеличение допустимого числа попыток позволило на 67\% повысить объем полученных данных и незначительно снизить энергозатраты.
Очевидно, система с бесконечной емкостью очереди нереализуема на практике, поэтому более корректно сравнивать при $Q = 5$. В этом случае, количество полученных пакетов увеличилось незначительно (всего на 6,5\%), но затраты энергии увеличились почти в 2 раза.
\newpage
\appendix
\setcounter{secnumdepth}{0}
\renewcommand{\thesubsection}{\Asbuk{subsection}}
\section{Файл настроек по заданию \code{omnetpp.ini}}
\label{app:inifile}
\lstinputlisting[style=JCodeStyle]{src/lab2-omnetpp.ini}
\end{document}

322
pics/03-fpga-00-quitir.svg Normal file
View File

@ -0,0 +1,322 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg5"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="03-fpga-00-quitir.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="2.3786088"
inkscape:cx="346.63119"
inkscape:cy="219.45601"
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="-8"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid1049" />
</sodipodi:namedview>
<defs
id="defs2">
<inkscape:path-effect
effect="bspline"
id="path-effect3548"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect3544"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="spiro"
id="path-effect3187"
is_visible="true"
lpeversion="1" />
<inkscape:path-effect
effect="spiro"
id="path-effect3187-0"
is_visible="true"
lpeversion="1" />
</defs>
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="25.135414"
y="80.932137"
id="text2354"><tspan
sodipodi:role="line"
id="tspan2352"
style="stroke-width:0.665"
x="25.135414"
y="80.932137">управление</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.665"
x="25.135414"
y="87.105759"
id="tspan2356">обменом</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="59.531246"
y="78.286308"
id="text3086"><tspan
sodipodi:role="line"
id="tspan3084"
style="stroke-width:0.665"
x="59.531246"
y="78.286308">DQ</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="96.572914"
y="74.083336"
id="text3090"><tspan
sodipodi:role="line"
id="tspan3088"
style="stroke-width:0.665"
x="96.572914"
y="74.083336">req</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="96.394463"
y="93.87162"
id="text3110"><tspan
sodipodi:role="line"
id="tspan3108"
style="stroke-width:0.665"
x="96.394463"
y="93.87162">ack</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="149.48958"
y="83.34375"
id="text3118"><tspan
sodipodi:role="line"
id="tspan3116"
style="stroke-width:0.665"
x="149.48958"
y="83.34375">управление</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.665"
x="149.48958"
y="89.517372"
id="tspan3120">обменом</tspan></text>
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
d="m 37.041666,75.40625 c 1.150676,-1.373012 2.720917,-2.389519 4.444663,-2.877286 1.723746,-0.487767 3.593798,-0.444757 5.293296,0.121742 1.699499,0.5665 3.221346,1.654123 4.307682,3.078584 1.086337,1.424462 1.732625,3.179812 1.829359,4.968627 0.153342,2.835612 -1.045535,5.591598 -2.645833,7.9375 -1.50654,2.208461 -3.403268,4.171808 -5.663341,5.599756 -2.260073,1.427948 -4.892636,2.30582 -7.565826,2.337744 -2.688394,0.03211 -5.360911,-0.794646 -7.641034,-2.219263 -2.280124,-1.424616 -4.173186,-3.4321 -5.588132,-5.718237 -1.487327,-2.403083 -2.465016,-5.158593 -2.554224,-7.983305 -0.08921,-2.824711 0.75253,-5.714346 2.554224,-7.891695 1.925595,-2.327084 4.917031,-3.734531 7.9375,-3.734531 3.020469,0 6.011905,1.407447 7.9375,3.734531"
id="path3185"
inkscape:path-effect="#path-effect3187"
inkscape:original-d="m 37.041666,75.40625 c 4.409459,0.881679 10.583598,3.528042 15.875,5.291667 5.291402,1.763625 -1.763625,5.291931 -2.645833,7.9375 -0.882208,2.645568 -8.819179,5.291931 -13.229167,7.9375 -4.409987,2.645568 -8.819178,-5.291403 -13.229166,-7.9375 -4.409988,-2.646098 2.64e-4,-10.583069 0,-15.875 -2.65e-4,-5.291931 10.583598,2.64e-4 15.875,0" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-opacity:1;stroke-dasharray:none"
d="m 161.39583,77.817864 c 1.15068,-1.373011 2.72092,-2.389518 4.44466,-2.877284 1.72375,-0.487767 3.5938,-0.444757 5.2933,0.121742 1.6995,0.5665 3.22134,1.654122 4.30768,3.078583 1.08634,1.424462 1.73263,3.179811 1.82936,4.968626 0.15334,2.835612 -1.04553,5.591598 -2.64583,7.9375 -1.50654,2.208462 -3.40327,4.17181 -5.66334,5.599757 -2.26008,1.427948 -4.89264,2.30582 -7.56583,2.337743 -2.68839,0.0321 -5.36091,-0.794648 -7.64103,-2.219264 -2.28012,-1.424617 -4.17318,-3.432099 -5.58813,-5.718236 -1.48733,-2.403084 -2.46502,-5.158593 -2.55422,-7.983305 -0.0892,-2.824711 0.75253,-5.714346 2.55422,-7.891695 1.92559,-2.327084 4.91703,-3.734531 7.9375,-3.734531 3.02047,0 6.01191,1.407447 7.9375,3.734531"
id="path3185-8"
inkscape:path-effect="#path-effect3187-0"
inkscape:original-d="m 161.39583,77.817864 c 4.40946,0.881679 10.5836,3.528042 15.875,5.291667 5.2914,1.763625 -1.76362,5.291931 -2.64583,7.9375 -0.88221,2.645568 -8.81918,5.291931 -13.22917,7.9375 -4.40998,2.645569 -8.81918,-5.291403 -13.22916,-7.9375 -4.40999,-2.646098 2.6e-4,-10.583069 0,-15.875 -2.7e-4,-5.291931 10.58359,2.64e-4 15.875,0" />
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
id="rect3375"
width="10.583333"
height="13.229166"
x="58.208332"
y="71.671722" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
d="m 58.208332,79.609218 2.645833,1.322917 -2.645833,1.322916"
id="path3377" />
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="55.562496"
y="98.130058"
id="text3086-3"><tspan
sodipodi:role="line"
id="tspan3084-1"
style="stroke-width:0.665"
x="55.562496"
y="98.130058">DQ</tspan></text>
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
id="rect3375-5"
width="10.583333"
height="13.229166"
x="54.239582"
y="91.515472" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
d="m 54.239585,99.452965 2.645833,1.322915 -2.645833,1.32292"
id="path3377-4" />
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="72.760414"
y="98.130058"
id="text3086-34"><tspan
sodipodi:role="line"
id="tspan3084-9"
style="stroke-width:0.665"
x="72.760414"
y="98.130058">DQ</tspan></text>
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
id="rect3375-56"
width="10.583333"
height="13.229166"
x="71.4375"
y="91.28125" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
d="m 71.437501,99.45297 2.645833,1.32292 -2.645833,1.32291"
id="path3377-5" />
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="115.09375"
y="76.963394"
id="text3086-9"><tspan
sodipodi:role="line"
id="tspan3084-2"
style="stroke-width:0.665"
x="115.09375"
y="76.963394">DQ</tspan></text>
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
id="rect3375-9"
width="10.583333"
height="13.229166"
x="113.77084"
y="70.348808" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
d="m 113.77083,78.286303 2.64584,1.322917 -2.64584,1.322916"
id="path3377-8" />
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="132.29167"
y="76.729172"
id="text3086-7"><tspan
sodipodi:role="line"
id="tspan3084-28"
style="stroke-width:0.665"
x="132.29167"
y="76.729172">DQ</tspan></text>
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
id="rect3375-4"
width="10.583333"
height="13.229166"
x="130.96875"
y="70.114586" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
d="m 130.96875,78.052078 2.64584,1.322917 -2.64584,1.322916"
id="path3377-2" />
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.665001"
x="125.67709"
y="96.572922"
id="text3086-2"><tspan
sodipodi:role="line"
id="tspan3084-4"
style="stroke-width:0.665"
x="125.67709"
y="96.572922">DQ</tspan></text>
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
id="rect3375-8"
width="10.583333"
height="13.229166"
x="124.35417"
y="89.958336" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
d="m 124.35418,97.895825 2.64583,1.322917 -2.64583,1.322918"
id="path3377-9" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="m 80.697916,66.145832 c 2.204974,6.173928 4.409836,12.347542 4.630225,19.182623 0.220389,6.83508 -1.543465,14.331458 -3.307309,21.827795"
id="path3542"
inkscape:path-effect="#path-effect3544"
inkscape:original-d="m 80.697916,66.145832 c 2.205124,6.173875 4.409987,12.347488 6.614583,18.520834 -1.76366,7.496942 -3.527512,14.99332 -5.291667,22.489584" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="m 112.44792,66.145832 c -2.20492,6.173762 -4.40978,12.347374 -3.30719,19.182599 1.1026,6.835226 5.51223,14.331602 9.92177,21.827819"
id="path3546"
inkscape:path-effect="#path-effect3548"
inkscape:original-d="m 112.44792,66.145832 c -2.2046,6.173875 -4.40946,12.347488 -6.61459,18.520834 4.41008,7.496942 8.81971,14.99332 13.22917,22.489584" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="m 52.916666,75.406249 h 5.291667"
id="path3550" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="M 68.791666,75.406249 H 113.77083"
id="path3552" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="m 124.35417,75.406249 h 6.61458"
id="path3554" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="m 141.55208,75.406249 h 5.29167"
id="path3556" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="M 149.48958,92.604166 H 136.26041"
id="path3558" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="M 124.35417,92.604166 82.020832,95.249999"
id="path3560" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="M 71.437499,95.249999 H 64.822916"
id="path3562" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
d="M 54.239583,95.249999 H 44.979166"
id="path3564" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

124
src/dec.sv Normal file
View File

@ -0,0 +1,124 @@
module dec
#(m = 32)
(
//clock and reset
input logic clk, clrn,
//control slave
input logic ctl_wr, ctl_rd,
input logic ctl_addr,
input logic [31:0] ctl_wrdata,
output logic [31:0] ctl_rddata,
//memory slave
input logic ram_wr,
input logic [3:0] ram_addr,
input logic [31:0] ram_wrdata,
//external ports
input logic train,
output logic red, yellow, green
);
typedef enum logic [1:0] {RED, YELLOW, BLINK, GREEN} FSMStates;
logic run;
logic [1:0] divider;
logic [1:0] state;
logic [31:0] greenSaved;
logic [31:0] greenCount;
logic [m-1:0] divisor;
logic [1:0] contr;
logic [2:0] colors;
logic [m-1:0] cntdiv;
logic enacnt;
//control slave logic
// ...
//semaphore logic
always_ff @ (posedge clk or negedge clrn) begin
if (!clrn)
cntdiv <= 0;
else begin
if (train | ~run)
cntdiv<=0;
else begin
if (enacnt) cntdiv<=0;
else cntdiv<=cntdiv+1;
end
end
end
// we don't enable counters, if color is green
always_comb begin
enacnt = ((cntdiv == divisor) && !(colors == 3'b001));
end
always_ff @ (posedge clk or negedge clrn) begin
if (!clrn) begin
colors <= 3'b001;
state <= GREEN;
greenCount <= 32'd0;
end else begin
if (~run) begin
colors <= 3'b001;
state <= GREEN;
end
if (train) begin
colors <= 3'b100;
state <= RED;
greenSaved <= divisor;
greenCount <= divisor;
end else begin
case (state)
RED: begin
colors <= 3'b100;
if (enacnt) begin
state <= state + 1'b1;
greenSaved <= divisor;
end
end
YELLOW: begin
colors <= 3'b010;
if (enacnt)
state <= state + 1'b1;
end
BLINK: begin
if (enacnt)
state <= state + 1'b1;
if (greenSaved[0] == 0) begin
colors <= 3'b011;
end else begin
greenCount <= greenCount - 1'b1;
if (greenCount == 32'd0) begin
colors[1] <= ~colors[1];
greenCount <= greenSaved;
end
end
end
GREEN: begin
if (enacnt)
state <= state + 1'b1;
colors <= 3'b001;
end
default: colors <= 3'b100;
endcase
end
end
end
assign contr = state;
assign red = colors[2];
assign yellow = colors[1];
assign green = colors[0];
periodram b2v_inst3
(
.clock(clk),
.data (ram_wrdata),
.wraddress (ram_addr),
.wren (ram_wr),
.rdaddress({divider,contr}),
.q(divisor)
);
endmodule

128
src/dec_tb.sv Normal file
View File

@ -0,0 +1,128 @@
`timescale 1 ns/1 ns
module dec_tb();
// Wires and variables to connect to UUT (unit under test)
logic clk, clrn, train;
logic r, y, g;
logic [1:0] div;
logic ctl_wr, ctl_rd;
logic ctl_addr;
logic [31:0] ctl_wrdata;
logic [31:0] ctl_rddata;
logic ram_wr;
logic [1:0] ram_addr;
logic [31:0] ram_wrdata;
logic [31:0] divisor[3:0] = {
{8'd11, 8'd71, 8'd51, 8'd21},
{8'd11, 8'd31, 8'd41, 8'd31},
{8'd11, 8'd31, 8'd11, 8'd101},
{8'd11, 8'd61, 8'd81, 8'd51}
};
// Instantiate UUT
dec my_sem(
.clk(clk), .clrn(clrn),
.ctl_wr(ctl_wr), .ctl_rd(ctl_rd),
.ctl_addr(ctl_addr), .ctl_wrdata(ctl_wrdata), .ctl_rddata(ctl_rddata),
.ram_wr(ram_wr),
.ram_addr(ram_addr), .ram_wrdata(ram_wrdata),
.train(train), .red(r), .yellow(y), .green(g)
);
// Clock definition
initial begin
clk = 0;
forever #10 clk = ~clk;
end
// Divisor and train definition
initial begin
//initial reset
clrn = 0;
div = 0;
train = 0;
//take reset off
@(negedge clk) clrn = 1;
//configure semaphore
for (int i=0; i<4; i++) write_ram_transaction(i,divisor[i]); //write divisor RAM
write_reg_transaction(1,div); //write initial divisor
write_reg_transaction(0,1); //enable semaphore
//run trains
repeat (4)
begin
repeat (10) @(posedge clk);
train=1;
repeat (4) @(posedge clk);
train=0;
wait ({r,y,g}==3'b001);
repeat (10) @(posedge clk);
write_reg_transaction(1,div);
div=div+1;
end
//wait a little
repeat (10) @(posedge clk);
$stop;
end
//Single register write transaction task
task write_reg_transaction;
//input signals
input [1:0] offs;
input [31:0] val;
//transaction implementation
begin
@(posedge clk);
//assert signals for one clock cycle
ctl_wr = 1;
ctl_addr = offs;
ctl_wrdata = val;
@(posedge clk);
//deassert signals
ctl_wr = 0;
ctl_addr = 'bx;
ctl_wrdata = 'bx;
end
endtask
//Single register read transaction task
task read_reg_transaction;
//input signals
input [1:0] offs;
output [31:0] val;
//transaction implementation
begin
@(posedge clk);
//assert signals for one clock cycle
ctl_rd = 1;
ctl_addr = offs;
@(posedge clk);
val = ctl_rddata;
//deassert signals
ctl_rd = 0;
ctl_addr = 'bx;
end
endtask
//RAM write transaction task
task write_ram_transaction;
//input signals
input [1:0] offs;
input [31:0] val;
//transaction implementation
begin
@(posedge clk);
//assert signals for one clock cycle
ram_wr = 1;
ram_addr = offs;
ram_wrdata = val;
@(posedge clk);
//deassert signals
ram_wr = 0;
ram_addr = 'bx;
ram_wrdata = 'bx;
end
endtask
endmodule

103
src/lab1-omnetpp.ini Normal file
View File

@ -0,0 +1,103 @@
#-----------------------------------------------------------------------------
[Config Lab_1]
network = WTIS_Lab_1_Network
sim-time-limit = 100s
*.host*.ipv4.arp.typename = "GlobalArp"
*.hostTX*.numApps = 1
*.hostTX*.app[0].typename = "UdpBasicApp"
*.hostTX*.app[0].destAddresses = "hostRX"
*.hostTX*.app[0].destPort = 5000
*.hostTX*.app[0].messageLength = intuniform(1B, 1500B)
*.hostTX*.app[0].packetName = "UDPData"
*.hostTX*.*.**.vector-recording = false
*.hostRX.numApps = 1
*.hostRX.app[0].typename = "UdpSink"
*.hostRX.app[0].localPort = 5000
*.hostRX.app[0].endToEndDelay:vector.vector-recording = true
*.hostRX.app[0].endToEndDelay.result-recording-modes = -vector,-histogram,+mean,+max
*.hostRX.*.**.vector-recording = false
*.host*.wlan[0].typename = "AckingWirelessInterface"
*.host*.wlan[0].mac.useAck = false
*.host*.wlan[0].mac.fullDuplex = false
*.host*.wlan[0].mac.headerLength = 63B
#*.host*.wlan[0].mac.queue.packetCapacity = 5
*.host*.**.bitrate = 1.5Mbps
*.host*.wlan[0].radio.typename = "UnitDiskRadio"
*.host*.wlan[0].radio.transmitter.communicationRange = 250m
*.host*.wlan[0].radio.transmitter.interferenceRange = 250m
*.host*.wlan[0].radio.receiver.ignoreInterference = true
*.host*.wlan[0].radio.displayCommunicationRange = true
*.host*.wlan[0].radio.displayInterferenceRange = true
*.host*.wlan[0].radio.energyConsumer.typename = "StateBasedEpEnergyConsumer"
*.host*.wlan[0].radio.energyConsumer.offPowerConsumption = 0mW
*.host*.wlan[0].radio.energyConsumer.sleepPowerConsumption = 0.005mW
*.host*.wlan[0].radio.energyConsumer.switchingPowerConsumption = 5mW
#*.host*.wlan[0].radio.energyConsumer.receiverReceivingPowerConsumption = 25mW
*.host*.wlan[0].radio.energyConsumer.receiverReceivingPowerConsumption = 0mW
*.host*.wlan[0].radio.energyConsumer.receiverIdlePowerConsumption = receiverReceivingPowerConsumption
*.host*.wlan[0].radio.energyConsumer.receiverBusyPowerConsumption = receiverReceivingPowerConsumption
*.host*.wlan[0].radio.energyConsumer.transmitterTransmittingPowerConsumption = 75mW
*.host*.wlan[0].radio.energyConsumer.transmitterIdlePowerConsumption = transmitterTransmittingPowerConsumption
*.host*.energyStorage.typename = "IdealEpEnergyStorage"
*.radioMedium.mediumLimitCache.maxTransmissionDuration = 1s
#-----------------------------------------------------------------------------
[Config Ideal]
extends = Lab_1
*.host*.wlan[0].radio.receiver.ignoreInterference = true
*.numTxNodes = 30
*.hostTX*.app[0].sendInterval = exponential(${Ts=10..2500 step 50}ms)
#-----------------------------------------------------------------------------
[Config Aloha]
extends = Ideal
*.host*.wlan[0].radio.receiver.ignoreInterference = false
#-----------------------------------------------------------------------------
[Config CSMA]
extends = Aloha
*.host*.wlan[0].typename = "WirelessInterface"
*.host*.wlan[0].radio.typename = "UnitDiskRadio"
*.host*.wlan[0].mac.typename = "CsmaCaMac"
*.host*.wlan[0].mac.mtu = 10000
*.host*.wlan[0].mac.cwMin = 0
*.host*.wlan[0].mac.cwMax = cwMin
#-----------------------------------------------------------------------------
[Config Aloha_Throughput]
extends = Lab_1
*.host*.wlan[0].radio.receiver.ignoreInterference = false
*.numTxNodes = 30
*.hostTX*.app[0].messageLength = intuniform(1B, 1500B)
#*.hostTX*.app[0].messageLength = 100B
*.hostTX*.app[0].sendInterval = exponential(${Ts=10..2500 step 50}ms)
#-----------------------------------------------------------------------------
[Config CSMA_Throughput]
extends = Aloha_Throughput
*.host*.wlan[0].typename = "WirelessInterface"
*.host*.wlan[0].radio.typename = "UnitDiskRadio"
*.host*.wlan[0].mac.typename = "CsmaCaMac"
*.host*.wlan[0].mac.mtu = 10000
*.host*.wlan[0].mac.cwMin = 0
*.host*.wlan[0].mac.cwMax = cwMin

102
src/lab2-omnetpp.ini Executable file
View File

@ -0,0 +1,102 @@
#-----------------------------------------------------------------------------
[Config Lab_2]
network = WTIS_Lab_2_Network
sim-time-limit = 250s
*.numTxNodes = 1
*.host*.ipv4.arp.typename = "GlobalArp"
*.hostTX*.numApps = 1
*.hostTX*.app[0].typename = "UdpBasicApp"
*.hostTX*.app[0].destAddresses = "hostRX"
*.hostTX*.app[0].destPort = 5000
*.hostTX*.app[0].messageLength = 1000B
*.hostTX*.app[0].sendInterval = exponential(25ms)
*.hostTX*.app[0].packetName = "UDPData"
*.hostRX.numApps = 1
*.hostRX.app[0].typename = "UdpSink"
*.hostRX.app[0].localPort = 5000
*.host*.wlan[0].typename = "WirelessInterface"
*.host*.wlan[0].mac.typename = "CsmaCaMac"
*.host*.wlan[0].mac.cwMin = 31
*.host*.wlan[0].mac.cwMax = 1023
*.host*.wlan[0].mac.slotTime = 14us
*.host*.wlan[0].mac.ackTimeout = 300us
*.host*.wlan[0].mac.headerLength = 23B
*.host*.wlan[0].mac.queue.packetCapacity = -1 # infinite capacity #retries N = 5,20
#*.host*.wlan[0].mac.queue.packetCapacity = 5 # repeat with 5,20 retries
*.host*.**.bitrate = 1.5Mbps
*.host*.wlan[0].radio.typename = "ApskScalarRadio"
*.host*.wlan[0].radio.centerFrequency = 3GHz
*.host*.wlan[0].radio.bandwidth = 3MHz
*.host*.wlan[0].radio.transmitter.power = 90mW
*.host*.wlan[0].radio.transmitter.preambleDuration = 10us
*.host*.wlan[0].radio.transmitter.headerLength = 8B
#*.host*.wlan[0].radio.receiver.sensitivity = -85dBm
*.host*.wlan[0].radio.receiver.sensitivity = -120dBm # not used
*.host*.wlan[0].radio.receiver.energyDetection = -64dBm
*.host*.wlan[0].radio.receiver.snirThreshold = 0dB # not used
*.hostRX.wlan[*].radio.minSnir.result-recording-modes = default,+vector
*.hostRX.wlan[*].radio.bitErrorRate.result-recording-modes = default,+vector
*.hostRX.wlan[*].radio.packetErrorRate.result-recording-modes = default,+vector
*.host*.wlan[0].radio.energyConsumer.typename = "StateBasedEpEnergyConsumer"
*.host*.wlan[0].radio.energyConsumer.offPowerConsumption = 0mW
*.host*.wlan[0].radio.energyConsumer.sleepPowerConsumption = 0.005mW
*.host*.wlan[0].radio.energyConsumer.switchingPowerConsumption = 5mW
*.host*.wlan[0].radio.energyConsumer.receiverReceivingPowerConsumption = 0mW
*.host*.wlan[0].radio.energyConsumer.receiverIdlePowerConsumption = receiverReceivingPowerConsumption
*.host*.wlan[0].radio.energyConsumer.receiverBusyPowerConsumption = receiverReceivingPowerConsumption
*.host*.wlan[0].radio.energyConsumer.transmitterTransmittingPowerConsumption = 75mW
*.host*.wlan[0].radio.energyConsumer.transmitterIdlePowerConsumption = transmitterTransmittingPowerConsumption
*.host*.energyStorage.typename = "IdealEpEnergyStorage"
*.hostTX*.mobility.typename = "CircleMobility"
*.hostTX*.mobility.speed = 2mps
*.hostTX*.mobility.cx = 185m
*.hostTX*.mobility.cy = 250m
*.hostTX*.mobility.cz = 0m
*.hostTX*.mobility.r = 75m
*.hostTX*.mobility.startAngle = 180deg
*.visualizer.mobilityVisualizer.displayVelocities = true
*.visualizer.mobilityVisualizer.displayMovementTrails = true
*.radioMedium.typename = "ApskScalarRadioMedium"
*.radioMedium.pathLoss.typename = "LogNormalShadowing"
*.radioMedium.pathLoss.alpha = 2
*.radioMedium.pathLoss.sigma = 0
*.radioMedium.backgroundNoise.power = -69dBm
*.radioMedium.mediumLimitCache.centerFrequency = 3GHz
*.radioMedium.mediumLimitCache.maxTransmissionDuration = 1s
*.hostTX*.wlan[0].mac.queue.queueLength:vector.vector-recording = true
*.hostTX*.wlan[0].mac.queue.queueingTime:vector.vector-recording = true
*.hostTX*.wlan[0].radio.radioMode:vector.vector-recording = true
*.hostTX*.energyStorage.residualEnergyCapacity:vector.vector-recording = true
*.hostTX*.*.**.vector-recording = false
*.hostRX.app[0].endToEndDelay:vector.vector-recording = true
*.hostRX.wlan[0].radio.bitErrorRate:vector.vector-recording = true
*.hostRX.wlan[0].radio.packetErrorRate:vector.vector-recording = true
*.hostRX.*.**.vector-recording = false
#-----------------------------------------------------------------------------
[Config NoAck]
extends = Lab_2
*.host*.wlan[0].mac.useAck = false
#-----------------------------------------------------------------------------
[Config WithAck]
extends = Lab_2
*.host*.wlan[0].mac.useAck = true
*.host*.wlan[0].mac.retryLimit = ${MaxRetries=5,20}

64
src/niosII_tb.v Normal file
View File

@ -0,0 +1,64 @@
`timescale 1 ps / 1 ps
module niosII_tb (
);
wire niosii_inst_clk_bfm_clk_clk; // niosII_inst_clk_bfm:clk -> [niosII_inst:clk_clk, niosII_inst_reset_bfm:clk]
wire niosii_inst_reset_bfm_reset_reset; // niosII_inst_reset_bfm:reset -> niosII_inst:reset_reset_n
reg train;
wire red, yellow, green;
niosII niosii_inst
(
.clk_clk (niosii_inst_clk_bfm_clk_clk), // clk.clk
.reset_reset_n (niosii_inst_reset_bfm_reset_reset), // reset.reset_n
.sem_export_train (train), // sem_export.train
.sem_export_red (red), // .red
.sem_export_yellow (yellow), // .yellow
.sem_export_green (green) // .green
);
altera_avalon_clock_source
#(
.CLOCK_RATE (50000000),
.CLOCK_UNIT (1)
)
niosii_inst_clk_bfm
(
.clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
);
altera_avalon_reset_source
#(
.ASSERT_HIGH_RESET (0),
.INITIAL_RESET_CYCLES (50)
)
niosii_inst_reset_bfm
(
.reset (niosii_inst_reset_bfm_reset_reset), // reset.reset_n
.clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
);
initial begin
train = 0;
wait (niosii_inst_reset_bfm_reset_reset);
forever begin
repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 1;
repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 0;
repeat (900) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 1;
repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 0;
repeat (900) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 1;
repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 0;
repeat (900) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 1;
repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 0;
end
end
endmodule

47
src/sem.c Normal file
View File

@ -0,0 +1,47 @@
#include <stdio.h>
#include "altera_avalon_sem_regs.h"
#include "alt_types.h"
#include "system.h"
#define TIME_SETS 4
#define TIME_STATES 4
const alt_u32 divisors[TIME_SETS][TIME_STATES] = {
{0x00000010, 0x00000010, 0x00000005, 0x00000010},
{0x00000010, 0x00000020, 0x00000010, 0x00000010},
{0x000000f1, 0x000000f1, 0x000000f1, 0x00000011},
{0x000000d1, 0x000000f1, 0x000000f1, 0x00000011}
};
int main()
{
int i,j;
volatile alt_u32 *p;
alt_u32 tmp;
//program divisors
p = (alt_u32*) SEM_RAM_SLAVE_BASE;
for (i = 0; i < TIME_SETS; i++) {
tmp = 0;
for (j = TIME_STATES; j > 0; j--) {
tmp = (tmp << 32) | divisors[i][j - 1];
}
*p = tmp;
p++;
}
//since we use pointers (cached data access) to write divisor RAM,
//and not direct i/o access with IOWR, we need to flush cache
alt_dcache_flush();
//select timeset and run semafor
IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x00);
IOWR_ALTERA_AVALON_SEM_CTL(SEM_CTL_SLAVE_BASE,0x01);
printf("Ready\n");
while (1)
{
;
}
return 0;
}