fpga labs wip

This commit is contained in:
Ivan I. Ovchinnikov 2023-01-30 13:15:45 +03:00
parent 091376e891
commit 760de76d2a
13 changed files with 948 additions and 101 deletions

View File

@ -1,8 +1,8 @@
\documentclass[a4paper,fontsize=14bp]{article} \documentclass[a4paper,fontsize=14bp]{article}
\input{../common-preamble} \input{settings/common-preamble}
\input{../fancy-listings-preamble} \input{settings/fancy-listings-preamble}
\input{../bmstu-preamble} \input{settings/bmstu-preamble}
\setcounter{secnumdepth}{4} \setcounter{secnumdepth}{4}
\numerationTop \numerationTop
@ -33,10 +33,15 @@ initial begin
train = 0; train = 0;
wait (niosii_inst_reset_bfm_reset_reset); wait (niosii_inst_reset_bfm_reset_reset);
forever begin forever begin
repeat(22528) @(posedge niosii_inst_clk_bfm_clk_clk); wait ({red,yellow,green}==3'b001);
train = 1; repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk);
repeat(10) @(posedge niosii_inst_clk_bfm_clk_clk); repeat(2) begin
train = 0; train = 1;
repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 0;
wait ({red,yellow,green}==3'b001);
repeat (200) @(posedge niosii_inst_clk_bfm_clk_clk);
end
end end
end end
\end{lstlisting} \end{lstlisting}
@ -117,15 +122,53 @@ end
\label{pic:timing-sem-after} \label{pic:timing-sem-after}
\end{figure} \end{figure}
В компонент семафора была добавлена возможность изменения поведения без перекомпиляции компонента. Поведение с «мигающим жёлтым» активируется нечётным значением задержки из файла \code{sem.c} процессора niosII. Поведение красного жёлтого, и зелёного сигналов в режиме «мигающего жёлтого» представлено на рисунке \hrf{pic:indi-model}. В компонент семафора (файл \code{HDL/dec.sv}) была добавлена возможность изменения поведения без перекомпиляции компонента. Поведение с «мигающим жёлтым» активируется нечётным значением задержки из файла \code{sem.c} процессора niosII. Значения задержек семафора заданы достаточно маленькими 32-разрядными числами, чтобы возможно было отследить их в симуляции.
\begin{lstlisting}[language=C,style=CCodeStyle]
#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}
};
\end{lstlisting}
Поведение красного жёлтого, и зелёного сигналов в режиме «мигающего жёлтого» на третьем наборе задержек, записанном в регистр управления
\begin{lstlisting}[language=C,style=CCodeStyle]
IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x02);
\end{lstlisting}
представлено на рисунке \hrf{pic:indi-model}, первый набор, записанный командой
\begin{lstlisting}[language=C,style=CCodeStyle]
IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x00);
\end{lstlisting}
на рисунке \hrf{pic:indi-model2}.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=12cm]{03-fpga-lab-02-individual.png} \begin{subfigure}[b]{0.98\textwidth}
\centering
\includegraphics[width=\textwidth]{03-fpga-lab-02-individual.png}
\caption{Нечётное значение задержки}
\label{pic:indi-model}
\end{subfigure}
\begin{subfigure}[b]{0.98\textwidth}
\centering
\includegraphics[width=\textwidth]{03-fpga-lab-02-individual2.png}
\caption{Чётное значение задержки}
\label{pic:indi-model2}
\end{subfigure}
\caption{Диаграмма поведения сигналов после выполнения задания} \caption{Диаграмма поведения сигналов после выполнения задания}
\label{pic:indi-model}
\end{figure} \end{figure}
В процессе работы были модифицированы исходные коды (листинг \hrf{lst:dec}, в листинге приведена только изменённая часть, логика работы семафора) и коды тестов (листинг \hrf{lst:dec-tb}) для компонента семафора, а также тестовый стенд (листинг \hrf{lst:main-top-tb}) и прошивка процессора (листинг \hrf{lst:sem}) итогового проекта. В процессе работы были модифицированы исходные коды (листинг \hrf{lst:dec}, в листинге приведена только изменённая часть, логика работы семафора) и коды тестов (листинг \hrf{lst:dec-tb}) для компонента семафора, а также тестовый стенд (листинг \hrf{lst:main-top-tb}) и прошивка процессора (листинг \hrf{lst:sem}) итогового проекта.
\section{Выводы} \section{Выводы}

69
03-fpga-lab-04-report.tex Normal file
View File

@ -0,0 +1,69 @@
\documentclass[a4paper,fontsize=14bp]{article}
\input{settings/common-preamble}
\input{settings/fancy-listings-preamble}
\input{settings/bmstu-preamble}
\setcounter{secnumdepth}{4}
\numerationTop
\begin{document}
\thispagestyle{empty}
\makeBMSTUHeader
\makeReportTitle{лабораторной}{4}{Проектирование цифрового синтезатора}{Проектирование цифровых устройств на \\ программируемых логических интегральных схемах (ПЛИС)}{}{С.В. Фёдоров}
\newpage
\pagestyle{fancy}
\section{Цель}
Осуществить полный цикл проектирования цифрового устройства на ПЛИС на языке SystemVerilog. Реализовать генератор периодических функций на основе метода прямого цифрового синтеза на микросхеме семейства Cyclone IV E.
\section{Задачи}
Прямой цифровой синтез -- это метод генерации сигнала заданной формы путём вычисления значений сигнала в последовательных дискретных отсчётах времени и преобразовании их в аналоговый сигнал с помощью ЦАП. Структура системы приведена на рис \hrf{pic:synth-scheme}.
\begin{figure}[H]
\centering
\fontsize{14}{1}\selectfont
\includesvg[scale=1.01]{pics/03-fpga-lab-04-01-synth.svg}
\caption{Схема цифрового синтезатора}
\label{pic:pic:synth-scheme}
\end{figure}
Инкремент фазы поступает на вход накопителя фазы и определяет скорость изменения фазы формируемого сигнала. Накопитель фазы выдаёт номер текущего отсчёта в периоде на просмотровую таблицу, содержащую образ одного периода синуса. Значение с выхода просмотровой таблицы поступает на дельта-сигма модулятор, который работает как однобитный ЦАП. Модулятор формирует последовательность нулей и единиц на высокой частоте, соответствующую текущему уровню на входе модулятора, после чего двухуровневый выходной сигнал модулятора подается на выход ПЛИС и сглаживается простым RC фильтром НЧ. При изменении приращения фазы изменяется частота формируемого на выходе сигнала.
\section{Выполнение работы}
\subsection{Разработка модулей}
\subsubsection{Накопитель фазы}
\textbf{Интерфейс модуля}
\begin{frm} \begin{itemize}
\item [] \textbf{Входы:}
\code{phinc[7:0]} -- величина приращения фазы за один период тактового сигнала;
\code{clk} -- тактовый сигнал;
\code{clr_n} -- вход асинхронного сброса;
\item [] \textbf{Выходы:}
\code{phase[7:0]} -- 8 старших значащих битов выхода накопителя;
\item [] \textbf{Параметры:}
\code{WIDTH} -- разрядность накопителя фазы (значение по умолчанию -- 14).
\end{itemize} \end{frm}
\textbf{Принцип действия}
Накопитель фазы -- это классический аккумулятор, который сохраняет накопленную сумму в регистре и использует её в качестве одного из операндов сумматора на каждом такте. Второй операнд поступает с входа и определяет величину приращения фазы. Разрядность аккумулятора должна быть параметризирована. Входные значения складываются с младшими битами регистра аккумулятора, а на выход поступают старшие 8 разрядов аккумулятора, поэтому при разрядности аккумулятора M и значении N на входе приращения фазы выход фазы будет увеличиваться на единицу один раз в $2^{(M-8)}/N$ тактов.
\section{Индивидуальное задание}
\section{Выводы}
\newpage
\appendix
\setcounter{secnumdepth}{4}
\section{Приложения}
\subsection{Исходные коды проекта}
\label{appendix:src}
% \lstinputlisting[language=Verilog,style=VerilogStyle,caption={Семафор},label={lst:dec}]{src/dec.sv}
% \lstinputlisting[language=C,style=CCodeStyle,caption={\code{sem.c}},label={lst:sem}]{src/sem.c}
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@ -0,0 +1,239 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg8"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
sodipodi:docname="03-fpga-04-01-synth.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="381.52629"
inkscape:cy="338.43264"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="true"
inkscape:snap-global="true"
inkscape:snap-text-baseline="true"
inkscape:window-width="2356"
inkscape:window-height="1205"
inkscape:window-x="88"
inkscape:window-y="115"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid10" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="30.427084"
y="67.46875"
id="text14"><tspan
sodipodi:role="line"
id="tspan12"
x="30.427084"
y="67.46875"
style="stroke-width:0.264583">Инкремент</tspan><tspan
sodipodi:role="line"
x="30.427084"
y="73.642372"
style="stroke-width:0.264583"
id="tspan16">фазы</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="63.5"
y="74.083336"
id="text20"><tspan
sodipodi:role="line"
id="tspan18"
x="63.5"
y="74.083336"
style="stroke-width:0.264583">Накопитель</tspan><tspan
sodipodi:role="line"
x="63.5"
y="80.256958"
style="stroke-width:0.264583"
id="tspan22">фазы</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="99.218742"
y="74.083336"
id="text26"><tspan
sodipodi:role="line"
id="tspan24"
x="99.218742"
y="74.083336"
style="stroke-width:0.264583">ПЗУ</tspan><tspan
sodipodi:role="line"
x="99.218742"
y="80.256958"
style="stroke-width:0.264583"
id="tspan28">sin</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="117.73958"
y="74.083336"
id="text32"><tspan
sodipodi:role="line"
id="tspan30"
x="117.73958"
y="74.083336"
style="stroke-width:0.264583">Дельта-сигма</tspan><tspan
sodipodi:role="line"
x="117.73958"
y="80.256958"
style="stroke-width:0.264583"
id="tspan34">модулятор</tspan></text>
<rect
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-opacity:1"
id="rect36"
width="31.749998"
height="15.875"
x="60.854168"
y="67.46875" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-opacity:1"
id="rect861"
width="15.875003"
height="15.875"
x="96.572914"
y="67.46875" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-opacity:1"
id="rect863"
width="33.072926"
height="15.875"
x="116.41666"
y="67.46875" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 43.656249,75.406249 H 60.854166"
id="path865" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 92.604166,75.406249 h 3.968749"
id="path867" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 112.44792,75.406249 h 3.96875"
id="path869" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-opacity:1"
id="rect871"
width="14.552083"
height="5.2916665"
x="134.9375"
y="91.28125" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 149.48958,75.406249 h 5.29167 v 18.520833 h -5.29167"
id="path873" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 134.9375,93.927082 h -15.875"
id="path875" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-opacity:1"
id="rect877"
width="5.2916665"
height="5.2916665"
x="113.77083"
y="91.28125" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 127,93.927082 v 6.614588"
id="path879" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 123.03125,100.54167 h 7.9375"
id="path881" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 123.03125,101.86458 h 7.9375"
id="path883" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 127,101.86458 v 6.61459"
id="path885" />
<path
style="fill:none;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 124.35417,108.47917 h 5.29166"
id="path887" />
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="132.29167"
y="105.83333"
id="text891"><tspan
sodipodi:role="line"
id="tspan889"
x="132.29167"
y="105.83333"
style="stroke-width:0.264583">C</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="146.84375"
y="89.958336"
id="text895"><tspan
sodipodi:role="line"
id="tspan893"
x="146.84375"
y="89.958336"
style="stroke-width:0.264583">R</tspan></text>
<circle
id="path897"
style="fill:#000000;stroke:none;stroke-width:0.264583"
cx="127"
cy="93.927086"
r="0.39687499" />
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="87.3125"
y="100.54166"
id="text901"><tspan
sodipodi:role="line"
id="tspan899"
x="87.3125"
y="100.54166"
style="stroke-width:0.264583">к осцилографу</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

187
settings/bmstu-preamble.tex Normal file
View File

@ -0,0 +1,187 @@
\usepackage{pgfplots}
\usepackage{pgf}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{scrextend}
\usepackage{enumitem}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{afterpage}
\usepackage{array}
\bibliographystyle{gost-numeric.bbx}
\usepackage[parentracker=true, backend=biber,
%hyperref=false,
bibencoding=utf8, style=numeric-comp, language=auto,
autolang=other, citestyle=gost-numeric,
defernumbers=true, bibstyle=gost-numeric,
sorting=ntvy,
]{biblatex}
\bibliography{../refs}
\usepackage{pgf-umlsd}
\usepackage{pdfpages}
\usepackage{svg}
\usepackage[toc,page,header]{appendix}
\usepackage{tikz-timing}
\renewcommand\appendixtocname{Приложения}
\usepackage{icomma}
\makeatletter
\providecommand\text\mbox
\newenvironment{arithmetic}[1][]{\begin{tabular}[#1]{Al}}{\end{tabular}}
\newcolumntype{A}{>{\bgroup\def~{\phantom{0}}$\@testOptor}r<{\@gobble\\$\egroup}}
\def\@testOptor\ignorespaces#1#2\\{%
\ifx#1\times
\@OperatorRow{#1}{#2}\@tempa%
\else\ifx#1+
\@OperatorRow+{#2}\@tempa%
\else\ifx#1\discretionary% detects the soft hyphen, \-
\@ShortSubtractRow{#2}\@tempa%
\else\ifx#1-
\@OperatorRow-{#2}\@tempa%
\else
\@NormalRow{#1#2}\@tempa%
\fi\fi\fi\fi
\@tempa}
\def\@OperatorRow#1#2#3{%
\@IfEndRow#2\@gobble\\{%
\def#3{\underline{{}#1 #2}\\}%
}{%
\def#3{\underline{{}#1 #2{}}}%
}}
\def\@NormalRow#1#2{%
\@IfEndRow#1\@gobble\\{%
\def#2{#1\\}%
}{%
\def#2{#1{}}%
}}
\def\@IfEndRow#1\@gobble#2\\#3#4{%
\ifx#2\@gobble
#4%
\else
#3%
\fi}
\makeatother
\makeatletter
\AddEnumerateCounter{\asbuk}{\russian@alph}{щ}
\makeatother
\geometry{
left=22mm,
right=15mm,
top=20mm,
bottom=20mm
}
\setlength\parindent{5ex} %GOST-2.105-2019 5.1.4 Абзацы в тексте начинают отступом, равным пяти знакам используемой гарнитуры шрифта (12.5— 17 мм).
\addto\captionsrussian{\renewcommand*{\contentsname}{\hfill Содержание \hfill}}
\renewcommand{\cfttoctitlefont}{\bfseries\Large}
\renewcommand{\cftaftertoctitle}{\hfill}
% приложений, примечаний, таблиц, сносок и примеров — на 1—2 пт меньше.
\renewcommand{\appendixpagename}{\centering Приложения}
\graphicspath{ {./pics/} }
\pgfplotsset{compat=newest}
\pgfplotsset{model/.style = {black, samples = 100}}
\usetikzlibrary{calc,intersections,backgrounds}
\usetikzlibrary{patterns}
\usetikzlibrary{decorations.pathreplacing,calligraphy}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows,automata}
\usetikzlibrary{circuits.logic.IEC}
\newcommand{\approval}[2]{
\begin{tabular}{c}
УТВЕРЖДАЮ \\
#1\\
\underline{\hspace{2.7cm}}#2\\
«\underline{\hspace{0.6cm}}»\underline{\hspace{2.1cm}}2021 г.
\end{tabular}
}
\renewcommand\labelitemi{\textendash}
\renewcommand\thesubfigure{\asbuk{subfigure}}
\setlist{nosep}
\setlist[itemize]{leftmargin=2\parindent}
\setlist[enumerate]{leftmargin=2\parindent}
\newcommand{\makeBMSTUHeader}{
\noindent\begin{minipage}{0.05\textwidth}
\includegraphics[scale=0.2]{settings/logo_bmstu.png}
\end{minipage}
\hfill
\begin{minipage}{0.85\textwidth}\raggedleft
\begin{center}
\fontsize{13pt}{0.3\baselineskip}\selectfont
\textbf{Министерство науки и высшего образования
Российской Федерации \\
Федеральное государственное бюджетное образовательное \\
учреждение высшего образования \\
«Московский государственный технический университет \\
имени Н. Э. Баумана \\
(национальный исследовательский университет)» \\
(МГТУ им. Н. Э. Баумана)
}
\end{center}
\end{minipage}
\begin{center}
\fontsize{12pt}{0.1\baselineskip}\selectfont
\noindent\makebox[\linewidth]{\rule{\textwidth}{2pt}}
\makebox[\linewidth]{\rule{\textwidth}{1pt}}
\end{center}
\begin{flushleft}
\fontsize{12pt}{14pt}\selectfont
\textbf{ФАКУЛЬТЕТ \tabto{3cm} «Информатика и системы управления» (ИУ)\\
КАФЕДРА \tabto{3cm} «Информационные системы и телекоммуникации» (ИУ3)
}
\end{flushleft}
}
\newcommand{\makeReportTitle}[6]{
\vspace*{3em}
\thispagestyle{titlepage}
\begin{center}
\Large{\textbf{Отчет \\
по #1 работе #2\\
«#3»\\
по курсу\\
«#4»
}}
\end{center}
\vspace*{4em}
\begin{flushright}
Выполнили\\
%удент группы ИУ3-11М \\
%удент группы ИУ3-21М \\
удент группы ИУ3-31М \\
Овчинников И.И. \\
\vspace*{0.5em}
Проверил#5\\
#6
\end{flushright}
}
\newcommand{\defineHatch}{
\makeatletter
\pgfdeclarepatternformonly[7pt,0.5pt]{hatch}
{\pgfqpoint{0pt}{0pt}}
{\pgfqpoint{7pt}{7pt}} {\pgfpoint{6pt}{6pt}}%
{
\pgfsetcolor{gray} \pgfsetlinewidth{0.5pt}
\pgfpathmoveto{\pgfqpoint{0pt}{0pt}} \pgfpathlineto{\pgfqpoint{7pt}{7pt}}
\pgfusepath{stroke}
}
\makeatother
}
\newcommand{\tkzblk}[3]{ \node [#1] at ($ (#2) $) {#3}; }
\newcommand{\tkzdarr}[2]{ \draw [->, very thick] ($ (#1) + (0,15) $) -- ($ (#2) - (0,15) $); }
\newcommand{\tkzuarr}[2]{ \draw [<-, very thick] ($ (#1) + (0,15) $) -- ($ (#2) - (0,15) $); }
\newcommand{\crd}[2]{\coordinate (#1) at ($ #2 $);}
\newcommand{\ts}[1]{\textsubscript{#1}}
\newcolumntype{R}{>{\tiny{}}r}
\newcolumntype{L}{>{\tiny{}}l}
\newcolumntype{C}{>{\tiny{}}c}

View File

@ -0,0 +1,97 @@
\usepackage{tikz}
\usepackage{import}
\usepackage{xcolor,transparent}
\usepackage{bookmark}
\usepackage{multicol,multirow,colortbl}
\usepackage{longtable}
\usepackage{setspace}
\usepackage{titlesec}
\usepackage{indentfirst}
\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools}
\usepackage{layout,lscape}
\usepackage{hyperref}
\usepackage{geometry}
\usepackage[russian]{babel}
\usepackage{nomencl}
\usepackage{imakeidx}
\usepackage{fancyhdr}
\usepackage{tabularx,adjustbox}
\usepackage{float,makecell}
\usepackage{anyfontsize,tabto}
\usepackage{tocloft}
\usepackage{yfonts}
\makeindex
\makenomenclature
\babelfont{rm}{PT Astra Serif}
\babelfont{sf}{PT Astra Serif}
\babelfont{tt}{PT Mono}
\onehalfspacing
\hypersetup{
colorlinks=false,
linktoc=all
}
\fancypagestyle{plain}{ % для автосгенерированых
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
}
\fancypagestyle{titlepage}{
\fancyhf{}
% \cfoot{\small{\textbf{Москва, 2021г.}}}
\cfoot{\small{\textbf{Москва, \the\year{}г.}}}
}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\newcommand{\numerationTop}{
\fancyhead[C]{\thepage}
}
\newcommand{\numerationBottom}{
\fancyfoot[C]{\thepage}
}
\newcommand{\code}[1]{{\texttt{\detokenize{#1}}}}
\renewcommand{\nomname}{ }
\newcommand*{\nom}[2]{#1\nomenclature{#1}{#2}}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcommand\blankpage{%
\null
\thispagestyle{empty}%
\addtocounter{page}{-1}%
\newpage
}
\newenvironment{frm}
{\begin{center}
\begin{tabular}{|P{0.9\textwidth}|}
\hline\\
}
{
\\\\\hline
\end{tabular}
\end{center}
}
\newcommand{\quotebox}[1]{\begin{center}\begin{minipage}{0.9\linewidth}\vspace{10pt}\center\begin{minipage}{0.8\linewidth}{\space\Huge«}{#1}
\end{minipage}\smallbreak\end{minipage}\end{center}}
\makeatletter
\newcommand{\setword}[2]{%
\phantomsection
#1\def\@currentlabel{\unexpanded{#1}}\label{#2}%
}
\makeatother
\newcommand\lh[2]{\texttt{\textcolor{#1}{#2}}}
\newcommand\hrf[1]{\hyperref[#1]{\ref{#1}}}
\newcommand\hRf[1]{\hyperref[#1]{\nameref{#1}}}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{\node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
\renewcommand{\cftsubsecnumwidth}{2em}
\renewcommand{\cftsecnumwidth}{2em}
\titleformat{\paragraph}[runin]{\normalfont\fontsize{14}{18}\bfseries}{\theparagraph}{1em}{}

View File

@ -0,0 +1,135 @@
\usepackage{listings}
\definecolor{codekeywords}{rgb}{0.1,0.4,0.4}
\definecolor{codecomments}{rgb}{0,0.6,0}
\definecolor{codenumbers}{rgb}{0.4,0.4,0.4}
\definecolor{codestring}{rgb}{0.85,0.2,0.1}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\definecolor{codefine}{rgb}{0.7,0.5,0.3}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\definecolor{golden}{rgb}{1,0.7,0.0}
\definecolor{red}{rgb}{0.8,0.0,0.0}
\lstdefinestyle{JCodeStyle}{
frame=single,
language=Java,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle=\scriptsize\ttfamily,
numbers=left,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{dkgreen},
stringstyle=\color{mauve},
breaklines=true,
breakatwhitespace=true,
tabsize=4,
escapeinside={<@}{@>}
}
\lstdefinestyle{PyCodeStyle}{
frame=single,
commentstyle=\color{codecomments},
numberstyle=\tiny\color{codenumbers},
stringstyle=\color{codestring},
basicstyle=\ttfamily\footnotesize,
keywordstyle=\color{codekeywords},
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=4,
escapeinside={<@}{@>}
}
% \DeclareCaptionFormat{listing}{
% \parbox{\textwidth}{\centering#1 - #3}
% }
% \captionsetup[lstlisting]{ format=listing, singlelinecheck=false, margin=0pt }
\lstdefinestyle{CCodeStyle}{
frame=single,
commentstyle=\color{codecomments},
morecomment=[l][\color{codefine}]{\#},
numberstyle=\tiny\color{codenumbers},
stringstyle=\color{codestring},
basicstyle=\ttfamily\footnotesize,
keywordstyle=\color{codekeywords},
emph={int,char,double,float,unsigned,void,bool},
emphstyle={\color{blue}},
breakatwhitespace=false,
breaklines=true,
captionpos=t,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=4,
escapeinside={<@}{@>}
}
\lstdefinestyle{ASMStyle}{
frame=single,
numberstyle=\tiny\color{codenumbers},
commentstyle=\color{codecomments},
keywordstyle=\color{codekeywords},
morecomment=[l]{;}, % l is for line comment
morecomment=[s]{/*}{*/}, % s is for start and end delimiter
basicstyle={\ttfamily\footnotesize},
morekeywords={
bset, macr,
add,addi,and,andi,
bge,beq,bne,br,
cmpeqi,cmpgei,cmplti,cmpnei,
ldhu,ldw,ldwio,
mov,movi,movhi,muli,
nop,nor,
ret,
slli,srai,srli,stw,stwio},
breakatwhitespace=false,
breaklines=true,
captionpos=t,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showtabs=false,
tabsize=4,
escapeinside={<@}{@>}
}
\lstdefinestyle{VerilogStyle}{
frame=single,
numberstyle=\tiny\color{codenumbers},
commentstyle=\color{codecomments},
keywordstyle=\color{codekeywords},
morecomment=[l]{//}, % l is for line comment
morecomment=[s]{/*}{*/}, % s is for start and end delimiter
basicstyle={\ttfamily\footnotesize},
morekeywords={
logic, always_ff, always_comb
},
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showtabs=false,
tabsize=2,
escapeinside={<@}{@>}
}
\lstset{escapeinside={<@}{@>}}

BIN
settings/logo_bmstu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

View File

@ -0,0 +1,116 @@
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{xcolor,colortbl}% http://ctan.org/pkg/xcolor
\usepackage{titlesec}
\usepackage{indentfirst}
\usepackage{datetime2}
\usepackage{geometry,lscape}
\usepackage{enumitem}
\usepackage{caption,subcaption}
\usepackage{multicol,multirow}
\usepackage{float,adjustbox}
\usepackage{fontawesome}
\usepackage{longtable}
\usepackage{tikz}
\usepackage{hyperref}
\usepackage{forest}
\usepackage{nomencl,imakeidx}
\usetikzlibrary{mindmap,trees}
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\usepackage{setspace,fontspec}
\usepackage{amsmath}
\usepackage{spreadtab}
\usepackage{svg}
\newcommand{\tabitem}{~~\llap{\textbullet}~~}
\spacing{1.15}
\babelfont{rm}{IBM Plex Sans}
\babelfont{tt}{PT Mono}
\titlelabel{\thetitle. \quad}
\setcounter{tocdepth}{2}
\renewcommand{\nomname}{Термины, определения и сокращения}
\makeindex
\makenomenclature
\newcommand\lh[2]{\texttt{\textcolor{#1}{#2}}}
\newcommand\hrf[1]{\hyperref[#1]{\ref{#1}}}
\newcommand\hRf[1]{\hyperref[#1]{\nameref{#1}}}
\newcommand{\wordcount}{\input{/tmp/wordcount.tex}}
\newcommand{\code}[1]{{\texttt{\detokenize{#1}}}}
\newcommand*{\nom}[2]{#1\nomenclature{#1}{#2}}
\renewcommand\labelitemi{\textemdash}
\newenvironment{frm}
{ \begin{center} \renewcommand*{\arraystretch}{2} \begin{tabular}{|p{0.9\textwidth}|} \hline }
{ \\\hline \end{tabular} \end{center} }
\newcommand{\info}{\cellcolor{green!20}{\Huge \faInfoCircle \quad}}
\newcommand{\excl}{\cellcolor{red!20}{\Huge \faExclamationTriangle \quad}}
\makeatletter
\newcommand{\setword}[2]{%
\phantomsection
#1\def\@currentlabel{\unexpanded{#1}}\label{#2}%
}
\makeatother
\fancypagestyle{plain}{
\setlength{\headheight}{33pt}
\fancyhf{}
\lhead{\includegraphics[height=5mm]{logo.png}}
\rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}}
\chead{\thepage}
\cfoot{\faRocket}
% \rfoot{Всего слов: \wordcount}
}
\geometry{
left=2cm,
right=1cm,
top=2cm,
bottom=2cm
}
\setlist{nolistsep}
\setlist[itemize]{leftmargin=10mm}
\setlist[enumerate]{leftmargin=10mm}
\makeatletter
\providecommand\text\mbox
\newenvironment{arithmetic}[1][]{\begin{tabular}[#1]{Al}}{\end{tabular}}
\newcolumntype{A}{>{\bgroup\def~{\phantom{0}}$\@testOptor}r<{\@gobble\\$\egroup}}
\def\@testOptor\ignorespaces#1#2\\{%
\ifx#1\times
\@OperatorRow{#1}{#2}\@tempa%
\else\ifx#1+
\@OperatorRow+{#2}\@tempa%
\else\ifx#1\discretionary% detects the soft hyphen, \-
\@ShortSubtractRow{#2}\@tempa%
\else\ifx#1-
\@OperatorRow-{#2}\@tempa%
\else
\@NormalRow{#1#2}\@tempa%
\fi\fi\fi\fi
\@tempa}
\def\@OperatorRow#1#2#3{%
\@IfEndRow#2\@gobble\\{%
\def#3{\underline{{}#1 #2}\\}%
}{%
\def#3{\underline{{}#1 #2{}}}%
}}
\def\@NormalRow#1#2{%
\@IfEndRow#1\@gobble\\{%
\def#2{#1\\}%
}{%
\def#2{#1{}}%
}}
\def\@IfEndRow#1\@gobble#2\\#3#4{%
\ifx#2\@gobble
#4%
\else
#3%
\fi}
\makeatother

View File

@ -2,19 +2,9 @@ module dec
#(m = 32) #(m = 32)
( (
//clock and reset //clock and reset
input logic clk, clrn,
//control slave //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 //memory slave
input logic ram_wr,
input logic [3:0] ram_addr,
input logic [31:0] ram_wrdata,
//external ports //external ports
input logic train,
output logic red, yellow, green
); );
typedef enum logic [1:0] {RED, YELLOW, BLINK, GREEN} FSMStates; typedef enum logic [1:0] {RED, YELLOW, BLINK, GREEN} FSMStates;
@ -25,29 +15,6 @@ module dec
logic [31:0] greenSaved; logic [31:0] greenSaved;
logic [31:0] greenCount; 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 // we don't enable counters, if color is green
always_comb begin always_comb begin
enacnt = ((cntdiv == divisor) && !(colors == 3'b001)); enacnt = ((cntdiv == divisor) && !(colors == 3'b001));
@ -63,6 +30,7 @@ module dec
colors <= 3'b001; colors <= 3'b001;
state <= GREEN; state <= GREEN;
end end
if (train) begin if (train) begin
colors <= 3'b100; colors <= 3'b100;
state <= RED; state <= RED;
@ -79,12 +47,14 @@ module dec
end end
YELLOW: begin YELLOW: begin
colors <= 3'b010; colors <= 3'b010;
if (enacnt) if (enacnt) begin
state <= state + 1'b1; state <= state + 1'b1;
end
end end
BLINK: begin BLINK: begin
if (enacnt) if (enacnt) begin
state <= state + 1'b1; state <= state + 1'b1;
end
if (greenSaved[0] == 0) begin if (greenSaved[0] == 0) begin
colors <= 3'b011; colors <= 3'b011;
end else begin end else begin
@ -96,8 +66,9 @@ module dec
end end
end end
GREEN: begin GREEN: begin
if (enacnt) if (enacnt) begin
state <= state + 1'b1; state <= state + 1'b1;
end
colors <= 3'b001; colors <= 3'b001;
end end
default: colors <= 3'b100; default: colors <= 3'b100;
@ -106,6 +77,7 @@ module dec
end end
end end
assign contr = state; assign contr = state;
assign red = colors[2]; assign red = colors[2];
assign yellow = colors[1]; assign yellow = colors[1];
assign green = colors[0]; assign green = colors[0];

View File

@ -1,64 +1,55 @@
// niosII_tb.v
// Generated using ACDS version 18.1 625
`timescale 1 ps / 1 ps `timescale 1 ps / 1 ps
module niosII_tb ( 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_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 wire niosii_inst_reset_bfm_reset_reset; // niosII_inst_reset_bfm:reset -> niosII_inst:reset_reset_n
reg train; reg train;
wire red, yellow, green; wire red, yellow, green;
niosII niosii_inst niosII niosii_inst (
( .clk_clk (niosii_inst_clk_bfm_clk_clk), // clk.clk
.clk_clk (niosii_inst_clk_bfm_clk_clk), // clk.clk .reset_reset_n (niosii_inst_reset_bfm_reset_reset), // reset.reset_n
.reset_reset_n (niosii_inst_reset_bfm_reset_reset), // reset.reset_n .sem_export_train (train), // sem_export.train
.sem_export_train (train), // sem_export.train .sem_export_red (red), // .red
.sem_export_red (red), // .red .sem_export_yellow (yellow), // .yellow
.sem_export_yellow (yellow), // .yellow .sem_export_green (green) // .green
.sem_export_green (green) // .green );
);
altera_avalon_clock_source altera_avalon_clock_source #(
#( .CLOCK_RATE (50000000),
.CLOCK_RATE (50000000), .CLOCK_UNIT (1)
.CLOCK_UNIT (1) ) niosii_inst_clk_bfm (
) .clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
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
);
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 initial begin
train = 0; train = 0;
wait (niosii_inst_reset_bfm_reset_reset); wait (niosii_inst_reset_bfm_reset_reset);
forever begin forever begin
wait ({red,yellow,green}==3'b001);
repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk); repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 1; repeat(8) begin
repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk); train = 1;
train = 0; repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk);
repeat (900) @(posedge niosii_inst_clk_bfm_clk_clk); train = 0;
train = 1; wait ({red,yellow,green}==3'b001);
repeat (10) @(posedge niosii_inst_clk_bfm_clk_clk); repeat (200) @(posedge niosii_inst_clk_bfm_clk_clk);
train = 0; end
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
end end
endmodule endmodule

View File

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