Comments 15
Хорошее руководство для начинающих со скриншотами. Думаю, что многим будет полезно. Спасибо!
Но у меня возникло два вопроса.
1) Можно ли в ПЛИС использовать автоматы Милли с комбинационными выходами?
2) Можно ли подавать на логику переключения состояний сигнал insert, если он не синхронизирован?
2) Входные сигналы, необходимо пропустить через синхронизатор
Единственно, что меня оправдывает, что это учебный проект и не хотелось его усложнять дополнительной логикой, не относящихся к теме конечных автоматов.
Мне кажется, что тема синхронизации в ПЛИС крайне важна. Действительно, не обязательно писать подробности здесь. Но можно хотя бы упомянуть слово-два.
Я помню, как однажды на отладочной плате завёл сигнал с кнопки на вход автомата. Благодаря этому я узнал, какова метастабильность на практике, и что бывает, когда автомат попадает в неизвестное состояние. Тем более, что в случае с one-hot таких состояний много. Это потенциальный сбой, и стоит заранее знать, как таких сбоев можно избежать. По крайней мере, снизить вероятность.
Входные сигналы необходимо синхронизировать с тактовой частотой с помощью синхронизаторов
Напишите пожалуйста, как это можно сделать в данном примере (и что такое синхронизаторы?)
Добавил синхронизаторы для входных сигналов и регистры для выходных сигналов. Новый исходный код на ветке sync, изменения коснулись файлов soda_machine.sv и soda_machine_types.sv (добавлено новое значение I0=2'b00, отсутствие монеты). Теперь принципиальная схема выглядит так
Правильно ли я понимаю, что из-за двух триггеров, сигнал Insert будет задерживаться на один такт?
Извините за оффтоп, но с помощью чего был нарисован граф? Уже давно ищу инструменты для такого...
Это LaTeX, пакет tikz. Затем pdf с помощью команды convert из ImageMagic, конвертирован в png и кадрирован.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\begin{document}
\begin{tikzpicture}[->,>=stealth', initial text=reset]
\tikzstyle{every state}=[fill=blue!20]
\node [state,initial] (S0) at (162:4) {$S_0$};
\node [state] (S1) at (90:4) {$S_1$};
\node [state] (S2) at (18:4) {$S_2$};
\node [state] (S3) at (-54:4) {$S_3$};
\node [state] (S4) at (-126:4) {$S_4$};
\draw (S0) to[in=110, out=160, loop] node[auto] {$I_5$} ();
\draw (S0) to[bend left] node[auto] {$I_1$} (S1);
\draw (S0) .. controls (120:7) and (60:7) .. node[auto] {$I_2$} (S2);
\draw (S1) to[bend left] node[auto] {$I_1$} (S2);
\draw (S1) to[bend left] node[auto] {$I_2$} (S3);
\draw (S1) to[bend left] node[auto] {$I_5$} (S0);
\draw (S2) to[bend left] node[auto] {$I_1$} (S3);
\draw (S2) .. controls (-24:7) and (-84:7) .. node[auto] {$I_2$} (S4);
\draw (S2) .. controls (-30:15) and (-150:15) .. node[auto] {$I_5$} (S0);
\draw (S3) to[bend left] node[auto] {$I_1$} (S4);
\draw (S3) to[bend left] node[above right] {$I_2 \mid I_5$} (S0);
\draw (S4) to[bend left] node[auto] {$I_1 \mid I_2 \mid I_5$} (S0);
\end{tikzpicture}
\end{document}
"надо отметить, что существует версия Quartus для Linux и она отлично работает, проблемы возникают с ModelSim, которая 32 битная и использует старую версию библиотеки отображения шрифтов"
В версии 20.1.1 увы ничего не изменилось. Quartus в Ubuntu 21 летает, а вот ModelSim
Есть варианты, как поколдовать
https://vhdlwhiz.com/modelsim-quartus-prime-lite-ubuntu-20-04/
Успешно запустил Modelsim на Ubuntu 20.04.
UPD: не заметил, что в комментарии уже есть ссылка. -_-
Ждём, когда интеловская версия Questa, облегчённая, выйдет из беты в народ. Там все 64 бита сразу, поэтому танцы с библиотеками не будут нужны.
Использование Quartus и ModelSim