fpga labs wip
This commit is contained in:
parent
091376e891
commit
760de76d2a
|
@ -1,8 +1,8 @@
|
|||
\documentclass[a4paper,fontsize=14bp]{article}
|
||||
|
||||
\input{../common-preamble}
|
||||
\input{../fancy-listings-preamble}
|
||||
\input{../bmstu-preamble}
|
||||
\input{settings/common-preamble}
|
||||
\input{settings/fancy-listings-preamble}
|
||||
\input{settings/bmstu-preamble}
|
||||
\setcounter{secnumdepth}{4}
|
||||
\numerationTop
|
||||
|
||||
|
@ -33,10 +33,15 @@ initial begin
|
|||
train = 0;
|
||||
wait (niosii_inst_reset_bfm_reset_reset);
|
||||
forever begin
|
||||
repeat(22528) @(posedge niosii_inst_clk_bfm_clk_clk);
|
||||
wait ({red,yellow,green}==3'b001);
|
||||
repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk);
|
||||
repeat(2) begin
|
||||
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{lstlisting}
|
||||
|
@ -117,15 +122,53 @@ end
|
|||
\label{pic:timing-sem-after}
|
||||
\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]
|
||||
\centering
|
||||
\includegraphics[width=12cm]{03-fpga-lab-02-individual.png}
|
||||
\caption{Диаграмма поведения сигналов после выполнения задания}
|
||||
\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{Диаграмма поведения сигналов после выполнения задания}
|
||||
\end{figure}
|
||||
|
||||
|
||||
В процессе работы были модифицированы исходные коды (листинг \hrf{lst:dec}, в листинге приведена только изменённая часть, логика работы семафора) и коды тестов (листинг \hrf{lst:dec-tb}) для компонента семафора, а также тестовый стенд (листинг \hrf{lst:main-top-tb}) и прошивка процессора (листинг \hrf{lst:sem}) итогового проекта.
|
||||
|
||||
\section{Выводы}
|
||||
|
|
|
@ -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 |
|
@ -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 |
|
@ -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}
|
||||
Выполнили\\
|
||||
% cтудент группы ИУ3-11М \\
|
||||
% cтудент группы ИУ3-21М \\
|
||||
cтудент группы ИУ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}
|
|
@ -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}{}
|
|
@ -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={<@}{@>}}
|
Binary file not shown.
After Width: | Height: | Size: 169 KiB |
|
@ -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
|
44
src/dec.sv
44
src/dec.sv
|
@ -2,19 +2,9 @@ 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;
|
||||
|
@ -25,29 +15,6 @@ module dec
|
|||
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));
|
||||
|
@ -63,6 +30,7 @@ module dec
|
|||
colors <= 3'b001;
|
||||
state <= GREEN;
|
||||
end
|
||||
|
||||
if (train) begin
|
||||
colors <= 3'b100;
|
||||
state <= RED;
|
||||
|
@ -79,12 +47,14 @@ module dec
|
|||
end
|
||||
YELLOW: begin
|
||||
colors <= 3'b010;
|
||||
if (enacnt)
|
||||
if (enacnt) begin
|
||||
state <= state + 1'b1;
|
||||
end
|
||||
end
|
||||
BLINK: begin
|
||||
if (enacnt)
|
||||
if (enacnt) begin
|
||||
state <= state + 1'b1;
|
||||
end
|
||||
if (greenSaved[0] == 0) begin
|
||||
colors <= 3'b011;
|
||||
end else begin
|
||||
|
@ -96,8 +66,9 @@ module dec
|
|||
end
|
||||
end
|
||||
GREEN: begin
|
||||
if (enacnt)
|
||||
if (enacnt) begin
|
||||
state <= state + 1'b1;
|
||||
end
|
||||
colors <= 3'b001;
|
||||
end
|
||||
default: colors <= 3'b100;
|
||||
|
@ -106,6 +77,7 @@ module dec
|
|||
end
|
||||
end
|
||||
assign contr = state;
|
||||
|
||||
assign red = colors[2];
|
||||
assign yellow = colors[1];
|
||||
assign green = colors[0];
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
// niosII_tb.v
|
||||
|
||||
// Generated using ACDS version 18.1 625
|
||||
|
||||
`timescale 1 ps / 1 ps
|
||||
module niosII_tb (
|
||||
);
|
||||
|
@ -7,8 +11,7 @@ module niosII_tb (
|
|||
reg train;
|
||||
wire red, yellow, green;
|
||||
|
||||
niosII niosii_inst
|
||||
(
|
||||
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
|
||||
|
@ -17,48 +20,36 @@ module niosII_tb (
|
|||
.sem_export_green (green) // .green
|
||||
);
|
||||
|
||||
altera_avalon_clock_source
|
||||
#(
|
||||
altera_avalon_clock_source #(
|
||||
.CLOCK_RATE (50000000),
|
||||
.CLOCK_UNIT (1)
|
||||
)
|
||||
niosii_inst_clk_bfm
|
||||
(
|
||||
) niosii_inst_clk_bfm (
|
||||
.clk (niosii_inst_clk_bfm_clk_clk) // clk.clk
|
||||
);
|
||||
|
||||
altera_avalon_reset_source
|
||||
#(
|
||||
altera_avalon_reset_source #(
|
||||
.ASSERT_HIGH_RESET (0),
|
||||
.INITIAL_RESET_CYCLES (50)
|
||||
)
|
||||
niosii_inst_reset_bfm
|
||||
(
|
||||
) 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
|
||||
wait ({red,yellow,green}==3'b001);
|
||||
repeat (29000) @(posedge niosii_inst_clk_bfm_clk_clk);
|
||||
repeat(8) begin
|
||||
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;
|
||||
wait ({red,yellow,green}==3'b001);
|
||||
repeat (200) @(posedge niosii_inst_clk_bfm_clk_clk);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
|
|
12
src/sem.c
12
src/sem.c
|
@ -1,4 +1,3 @@
|
|||
#include <stdio.h>
|
||||
#include "altera_avalon_sem_regs.h"
|
||||
#include "alt_types.h"
|
||||
#include "system.h"
|
||||
|
@ -21,19 +20,18 @@ int main()
|
|||
//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 = divisors[i][j - 1];
|
||||
alt_dcache_flush();
|
||||
++p;
|
||||
}
|
||||
*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();
|
||||
// alt_dcache_flush();
|
||||
|
||||
//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);
|
||||
|
||||
printf("Ready\n");
|
||||
|
|
Loading…
Reference in New Issue