Перейти к содержанию
    

Не работает конечный автомат!

Вот написал автоматик:

 

mashine:process(clk)

type TSS is (s0,s1,s2,s3,s4,s5,s6,s7,s8);

variable SS:TSS:=s0;

begin

if clk='1' and clk'event then

case SS is

when s0=> SS:=s1;

when s1=> SS:=s2;

when s2=> SS:=s3;

when s3=> SS:=s4;

when s4=> SS:=s5;

when s5=> SS:=s6;

when s6=> SS:=s7;

when s7=> SS:=s8;

when s8=> SS:=s1;

end case;

end if;

if SS=s8 then clk_out<='1'; else clk_out<='0'; end if;

end process;

 

А Quartus мне и говорит:

Warning: Can't display state machine states -- register holding state machine bit "|InBuffer|\mashine:SS.s0" was synthesized away

В симуляции на clk_out вечный false, что за беда такая, может кто знает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот написал автоматик:

 

mashine:process(clk)

type TSS is (s0,s1,s2,s3,s4,s5,s6,s7,s8);

variable SS:TSS:=s0;

begin

if clk='1' and clk'event then

case SS is

when s0=> SS:=s1;

when s1=> SS:=s2;

when s2=> SS:=s3;

when s3=> SS:=s4;

when s4=> SS:=s5;

when s5=> SS:=s6;

when s6=> SS:=s7;

when s7=> SS:=s8;

when s8=> SS:=s1;

end case;

end if;

if SS=s8 then clk_out<='1'; else clk_out<='0'; end if;

end process;

 

А Quartus мне и говорит:

Warning: Can't display state machine states -- register holding state machine bit "|InBuffer|\mashine:SS.s0" was synthesized away

В симуляции на clk_out вечный false, что за беда такая, может кто знает?

 

Проблема в том, что так КА не пишут !!!!!!!!! используйте двух процессное описание с сигналом сброса КА. скачайте XST.pdf в разделе №3 там прекрасно написанно как правильно писать КА.

 

Желаю удачи

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлением Reset'а должно полечиться. У вас машина ходит по циклу s1-s8, выходя из s0 только в самый первый момент времени. В то же время Quartus очень плохо относится к начальной инициализации переменных, потому и выбргосил состояние s0, а все остальное оставил в соответствии с кодом. Короче, или добавьте s0 в цикл или добавьте синхронный или ассинхронный Reset.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 не туда вставлен

if SS=s8 then clk_out<='1'; else clk_out<='0'; end if;

2 нет сброса - что не есть гуд

Итого имеем:

 

library IEEE;

use IEEE.STD_LOGIC_1164.all;

 

entity state is

port(

clk : in STD_LOGIC;

reset : in STD_LOGIC;

clk_out : out STD_LOGIC

);

end state;

 

--}} End of automatically maintained section

 

architecture state of state is

begin

 

mashine:process(clk,reset)

type TSS is (s0,s1,s2,s3,s4,s5,s6,s7,s8);

variable SS:TSS:=s0;

begin

if(reset='1') then

SS:=s0;

elsif clk='1' and clk'event then

 

if SS=s8 then

clk_out<='1';

else

clk_out<='0';

end if;

 

case SS is

when s0=> SS:=s1;

when s1=> SS:=s2;

when s2=> SS:=s3;

when s3=> SS:=s4;

when s4=> SS:=s5;

when s5=> SS:=s6;

when s6=> SS:=s7;

when s7=> SS:=s8;

when s8=> SS:=s1;

when others=>SS:=s0;

end case;

end if;

 

end process;

 

-- enter your statements here --

 

end state;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот написал автоматик:

xxxx

А Quartus мне и говорит:xxxx

В симуляции на clk_out вечный false, что за беда такая, может кто знает?

 

Специально для ленивого, которому лень поискать.

Там у них на сайте еще можно взять.

Удачи!

CummingsSNUG1998SJ_FSM.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в том, что так КА не пишут !!!!!!!!! используйте двух процессное описание с сигналом сброса КА. скачайте XST.pdf в разделе №3 там прекрасно написанно как правильно писать КА.

 

Желаю удачи

 

Ну не был бы я так категоричен в данном вопросе ;) Пишут так КА :) Это называется полностью синхронный КА с регистровыми выходами. Несколько извращенный способ написания, но любители используют. К особенностям относится некоторая тормознутость реакции - 2 такта на реакцию на внешнее воздействие и полная синхронность выходов. Это все равно как в двухпроцессном описании поставить по регистру на каждый выход КА.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Несколько извращенный способ написания, но любители используют. К особенностям относится некоторая тормознутость реакции - 2 такта на реакцию на внешнее воздействие и полная синхронность выходов. Это все равно как в двухпроцессном описании поставить по регистру на каждый выход КА.

 

Хмм, вот именно что извращенный, поэтому и глючный, когда состояний больше 10-15 :)

2 такта на реакцию, это в зависимости от того МУР это или Мили. (выход по состоянию или по переходу).

 

Но у автора КА без входов, поэтому ему монописуально, хотя ИХМО лучше ВАН ХОТ и асинхроный выход (который в данном контексте будет синхронным)

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Postoroniy_V, огромное человечское спасибо, что не поленился и все отлично с примером объяснил. Сделал так как ты писал - работает. А по поводу счетчика и сдвигового регистра согласен, но мне хотелось узнать о создании конечного автома на VHDL вообще а не для данного примера. В AHDL все было как-то проще и конкретно:

TSS.reset = reset;

TSS.clk = clk;

и всего делов ясно понятно и просто, хотя это наверное дело привычки!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Postoroniy_V, огромное человечское спасибо, что не поленился и все отлично с примером объяснил. Сделал так как ты писал - работает. А по поводу счетчика и сдвигового регистра согласен, но мне хотелось узнать о создании конечного автома на VHDL вообще а не для данного примера. В AHDL все было как-то проще и конкретно:

TSS.reset = reset;

TSS.clk = clk;

и всего делов ясно понятно и просто, хотя это наверное дело привычки!

обращайтесь тогда с вопросом о книгах о VHDL

на фтп такие книги есть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Checkout this one!!!

This will work without reset!

 

library ieee;

use ieee.std_logic_1164.all;

 

entity shift_reg is

port (

clk_out : out bit;

clk : in bit);

end shift_reg;

 

architecture behave of shift_reg is

signal SS : bit_vector(8 downto 0) :=0;

signal SS_nx : bit_vector(8 downto 0) :=0;

begin

clk_out <= SS(8);

process

begin

wait until (clk'event and clk = '1');

SS <= SS_nx;

end process;

 

process(SS)

begin

SS_nx(0) <= not (SS(0) or SS(1) or SS(2) or SS(3) or SS(4) or SS(5) or SS(6) or SS(7) or SS(8));

SS_nx(1) <= not SS(1) and SS(0);

SS_nx(2) <= not SS(2) and SS(1);

SS_nx(3) <= not SS(3) and SS(2);

SS_nx(4) <= not SS(4) and SS(3);

SS_nx(5) <= not SS(5) and SS(4);

SS_nx(6) <= not SS(6) and SS(5);

SS_nx(7) <= not SS(7) and SS(6);

SS_nx(8) <= not SS(8) and SS(7);

end process;

end behave;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди добрые, чего вы паритесь?!

 

Ставим ActiveHDL и имеем щастье. Там есть превосходный графический редактор стейт-машин (ага, с зелеными кружочками и стрелочками). А потом он генерирует VHDL - исходник для нарисованной машины. Причем способ кодирования можно задать от ван-хот до Грэя. Внимательно изучаем полученный код - он 100% рабочий.

А вот уже через пол-года начнем и свои машины руками писать. Самое смешное, что они тоже начнут работать...

 

А при отладке-то!!!! Оно показывает на диаграмме с зелеными кружочками-состояниями текущее активное состояние!!!

Всем рекомендую.

А то устроили, понимаешь, балаган... А потом ракеты до Марса не...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди добрые, чего вы паритесь?!

 

Ставим ActiveHDL и имеем щастье. Там есть превосходный графический редактор стейт-машин (ага, с зелеными кружочками и стрелочками). А потом он генерирует VHDL - исходник для нарисованной машины. Причем способ кодирования можно задать от ван-хот до Грэя. Внимательно изучаем полученный код - он 100% рабочий.

А вот уже через пол-года начнем и свои машины руками писать. Самое смешное, что они тоже начнут работать...

 

А при отладке-то!!!! Оно показывает на диаграмме с зелеными кружочками-состояниями текущее активное состояние!!!

Всем рекомендую.

А то устроили, понимаешь, балаган... А потом ракеты до Марса не...

Уважаемый, а вы прочитали весь тред? причем тут ActiveHDL?

был разве вопрос про него(ActiveHDL )?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я совершенно согласен с Gorby - писать вручную стэйт-машины неразумно, разве только в образовательных целях. Попробуйте-ка написать sm на полсотни состояний, а потом вернутся к ней через месяц для редизайна - фиг разберетесь.

Я использую менторовский hdldesigner (не только для sm, а как интегратор проектов) - рекомендую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...