реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Не работает конечный автомат!, Не работает конечный автомат!!!!!!!!
LeshiySoft
сообщение Jan 22 2006, 22:19
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 22-01-06
Пользователь №: 13 475



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

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, что за беда такая, может кто знает?
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 23 2006, 08:28
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(LeshiySoft @ Jan 22 2006, 17:19) *
Вот написал автоматик:

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 там прекрасно написанно как правильно писать КА.

Желаю удачи


--------------------
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jan 23 2006, 08:32
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



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


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jan 23 2006, 08:42
Сообщение #4


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



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;


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 23 2006, 08:42
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(LeshiySoft @ Jan 23 2006, 01:19) *
Вот написал автоматик:
xxxx
А Quartus мне и говорит:xxxx
В симуляции на clk_out вечный false, что за беда такая, может кто знает?


Специально для ленивого, которому лень поискать.
Там у них на сайте еще можно взять.
Удачи!
Прикрепленные файлы
Прикрепленный файл  CummingsSNUG1998SJ_FSM.pdf ( 136.32 килобайт ) Кол-во скачиваний: 160
 


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jan 23 2006, 08:45
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



Цитата(des00 @ Jan 23 2006, 10:28) *
Проблема в том, что так КА не пишут !!!!!!!!! используйте двух процессное описание с сигналом сброса КА. скачайте XST.pdf в разделе №3 там прекрасно написанно как правильно писать КА.

Желаю удачи


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


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 23 2006, 09:32
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(v_mirgorodsky @ Jan 23 2006, 03:45) *
Несколько извращенный способ написания, но любители используют. К особенностям относится некоторая тормознутость реакции - 2 такта на реакцию на внешнее воздействие и полная синхронность выходов. Это все равно как в двухпроцессном описании поставить по регистру на каждый выход КА.


Хмм, вот именно что извращенный, поэтому и глючный, когда состояний больше 10-15 smile.gif
2 такта на реакцию, это в зависимости от того МУР это или Мили. (выход по состоянию или по переходу).

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


--------------------
Go to the top of the page
 
+Quote Post
vikk
сообщение Jan 23 2006, 11:26
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 98
Регистрация: 13-01-06
Пользователь №: 13 134



может счетчик поставить? smile.gif
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jan 23 2006, 11:59
Сообщение #9


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(vikk @ Jan 23 2006, 14:26) *
может счетчик поставить? smile.gif

угу или сдвиговый регистр


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
LeshiySoft
сообщение Feb 1 2006, 22:15
Сообщение #10





Группа: Новичок
Сообщений: 4
Регистрация: 22-01-06
Пользователь №: 13 475



Postoroniy_V, огромное человечское спасибо, что не поленился и все отлично с примером объяснил. Сделал так как ты писал - работает. А по поводу счетчика и сдвигового регистра согласен, но мне хотелось узнать о создании конечного автома на VHDL вообще а не для данного примера. В AHDL все было как-то проще и конкретно:
TSS.reset = reset;
TSS.clk = clk;
и всего делов ясно понятно и просто, хотя это наверное дело привычки!
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Feb 2 2006, 08:20
Сообщение #11


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(LeshiySoft @ Feb 2 2006, 01:15) *
Postoroniy_V, огромное человечское спасибо, что не поленился и все отлично с примером объяснил. Сделал так как ты писал - работает. А по поводу счетчика и сдвигового регистра согласен, но мне хотелось узнать о создании конечного автома на VHDL вообще а не для данного примера. В AHDL все было как-то проще и конкретно:
TSS.reset = reset;
TSS.clk = clk;
и всего делов ясно понятно и просто, хотя это наверное дело привычки!

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


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
nand_gates
сообщение Feb 2 2006, 09:44
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 13-09-05
Пользователь №: 8 515



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;
Go to the top of the page
 
+Quote Post
Gorby
сообщение Feb 8 2006, 12:37
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002



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

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

А при отладке-то!!!! Оно показывает на диаграмме с зелеными кружочками-состояниями текущее активное состояние!!!
Всем рекомендую.
А то устроили, понимаешь, балаган... А потом ракеты до Марса не...


--------------------
Умею молчать на 37 языках...
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Feb 9 2006, 08:58
Сообщение #14


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Gorby @ Feb 8 2006, 15:37) *
Люди добрые, чего вы паритесь?!

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

А при отладке-то!!!! Оно показывает на диаграмме с зелеными кружочками-состояниями текущее активное состояние!!!
Всем рекомендую.
А то устроили, понимаешь, балаган... А потом ракеты до Марса не...

Уважаемый, а вы прочитали весь тред? причем тут ActiveHDL?
был разве вопрос про него(ActiveHDL )?


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Gate
сообщение Feb 9 2006, 15:23
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943



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


--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01564 секунд с 7
ELECTRONIX ©2004-2016