diff --git a/03-fpga-lab-02-report.tex b/03-fpga-lab-02-report.tex index 19fe469..457dc21 100644 --- a/03-fpga-lab-02-report.tex +++ b/03-fpga-lab-02-report.tex @@ -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); - train = 1; - repeat(10) @(posedge niosii_inst_clk_bfm_clk_clk); - train = 0; + 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} + \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{Диаграмма поведения сигналов после выполнения задания} - \label{pic:indi-model} \end{figure} + В процессе работы были модифицированы исходные коды (листинг \hrf{lst:dec}, в листинге приведена только изменённая часть, логика работы семафора) и коды тестов (листинг \hrf{lst:dec-tb}) для компонента семафора, а также тестовый стенд (листинг \hrf{lst:main-top-tb}) и прошивка процессора (листинг \hrf{lst:sem}) итогового проекта. \section{Выводы} diff --git a/03-fpga-lab-04-report.tex b/03-fpga-lab-04-report.tex new file mode 100644 index 0000000..2c277b6 --- /dev/null +++ b/03-fpga-lab-04-report.tex @@ -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} + + + diff --git a/pics/03-fpga-lab-02-individual.png b/pics/03-fpga-lab-02-individual.png index 7331520..68a2bdf 100644 Binary files a/pics/03-fpga-lab-02-individual.png and b/pics/03-fpga-lab-02-individual.png differ diff --git a/pics/03-fpga-lab-02-individual2.png b/pics/03-fpga-lab-02-individual2.png new file mode 100644 index 0000000..454cb51 Binary files /dev/null and b/pics/03-fpga-lab-02-individual2.png differ diff --git a/pics/03-fpga-lab-04-01-synth.svg b/pics/03-fpga-lab-04-01-synth.svg new file mode 100644 index 0000000..99aef8f --- /dev/null +++ b/pics/03-fpga-lab-04-01-synth.svg @@ -0,0 +1,239 @@ + + + + + + + + + + image/svg+xml + + + + + + + Инкрементфазы + Накопительфазы + ПЗУsin + Дельта-сигмамодулятор + + + + + + + + + + + + + + + + C + R + + к осцилографу + + diff --git a/settings/bmstu-preamble.tex b/settings/bmstu-preamble.tex new file mode 100644 index 0000000..7e6a9a0 --- /dev/null +++ b/settings/bmstu-preamble.tex @@ -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} diff --git a/settings/common-preamble.tex b/settings/common-preamble.tex new file mode 100644 index 0000000..d1e6047 --- /dev/null +++ b/settings/common-preamble.tex @@ -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}{} \ No newline at end of file diff --git a/settings/fancy-listings-preamble.tex b/settings/fancy-listings-preamble.tex new file mode 100644 index 0000000..d0999ba --- /dev/null +++ b/settings/fancy-listings-preamble.tex @@ -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={<@}{@>}} diff --git a/settings/logo_bmstu.png b/settings/logo_bmstu.png new file mode 100644 index 0000000..ed4947d Binary files /dev/null and b/settings/logo_bmstu.png differ diff --git a/settings/main-style-preamble.tex b/settings/main-style-preamble.tex new file mode 100644 index 0000000..9ae0f4b --- /dev/null +++ b/settings/main-style-preamble.tex @@ -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 diff --git a/src/dec.sv b/src/dec.sv index 91f2073..556ef72 100644 --- a/src/dec.sv +++ b/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) - state <= state + 1'b1; + 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]; diff --git a/src/niosII_tb.v b/src/niosII_tb.v index 8ce3bb0..df606da 100644 --- a/src/niosII_tb.v +++ b/src/niosII_tb.v @@ -1,64 +1,55 @@ +// niosII_tb.v + +// Generated using ACDS version 18.1 625 + `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 + 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 - ); + 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 - ); + 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 + wait ({red,yellow,green}==3'b001); 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; + repeat(8) 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 + + endmodule diff --git a/src/sem.c b/src/sem.c index 45b744b..674f409 100644 --- a/src/sem.c +++ b/src/sem.c @@ -1,4 +1,3 @@ -#include #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");