ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
13 марта
1575588 Топик полностью
Tyмблep (Вчера, 15:01, просмотров: 72) ответил NAUT на Реализация конечного автомата на Си заданного таблицей: хочу уйти от гигантских switch-case-ов, загнать автоматы по таблицам и потом таблицы парсить, НО не догоню как кошерно записать в таблицу условие которое потом будет проверятся в if-ах. можно
Попробовать так же, как автомат описывается на AHDL. 

Или похожим образом.

Например:


ss.clk = clk; -- автомат меняет состояние под действием тактового сигнала clk

ss.reset = reset; -- автомат устанавливается в исходное состояние (s1) сигналом сброса reset

ss.ena = ena; -- разрешение работы автомата

TABLE

-- TABLE - это таблица описания переходов из состояния в состояние.

-- В зависимости от сигналов на указанных входах.

-- При этом можно задавать уровни на некоторой совокупности выходов.

-- переключение состояний происходит под действием сигнала clk.

-- reset - это установка автомата в первоначальное состояние.

--

-- нужно описать все возможные состояния на входе автомата.

-- иначе можно получить неопределённое поведение схемы вцелом.

--

-- После сброса - состояние s1

--

-- Исходное Входы Выходы Результирующее

-- состояние состояние

--- автомата ss автомата ss

ss, d, d2, d3 => qn, q2n, ss;

-- описание состояния s1

-- "x" - означает любой уровень на входе

s1, 0, x, x => 0, 1, s1; -- если вход d=0, d2=x, d3=x, оставаться в состоянии s1, на выходах q=0, q2=1

s1, 1, x, x => 0, 1, s2; -- если вход d=1, d2=x, d3=x, перейти в состояние s2 на выходах q=0, q2=1

-- описание состояния s2

s2, 1, x, x => 1, 0, s2; -- если на входах d=1,d2=x,d3=x, оставаться в состоянии s2. На выходах в состоянии s2 q=1, q2=0

s2, 0, 0, 0 => 1, 0, s2; -- если на входах d=0,d2=0,d3=0, оставаться в состоянии s2. На выходах в состоянии s2 q=1, q2=0

s2, 0, 1, 1 => 1, 0, s1; -- если на входах d=0,d2=1,d3=1, перейти в состояние s1. На выходах в состоянии s2 q=1, q2=0

s2, 0, 0, 1 => 1, 0, s3; -- если на входах d=0,d2=0,d3=1, перейти в состояние s3. На выходах в состоянии s2 q=1, q2=0

s2, 0, 1, 0 => 1, 0, s4; -- если на входах d=0,d2=1,d3=0, перейти в состояние s4. На выходах в состоянии s2 q=1, q2=0

-- описание состояния s3

s3, 0, 0, 1 => 1, 1, s3; -- остаёмся в s3

s3, 1, x, x => 1, 1, s3; -- остаёмся в s3

s3, 0, 1, 0 => 1, 1, s1; -- если на входах d=1,d2=1,d3=0, перейти в состояние s1. На выходах в состоянии s3 q=1, q2=1

s3, 0, 1, 1 => 1, 1, s2; -- если на входах d=0,d2=1,d3=0, перейти в состояние s2. На выходах в состоянии s3 q=1, q2=1

s3, 0, 0, 0 => 1, 1, s4; -- если на входах d=0,d2=0,d3=0, перейти в состояние s4. На выходах в состоянии s3 q=1, q2=1

-- описание состояния s4

s4, x, x, x => 0, 0, s1; -- безусловный переход в состояние s1. На выходах в состоянии s4 q=0, q2=0

END TABLE;