leshiysoft 0 22 января, 2006 Опубликовано 22 января, 2006 · Жалоба Вот написал автоматик: 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, что за беда такая, может кто знает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба Вот написал автоматик: 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 там прекрасно написанно как правильно писать КА. Желаю удачи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_mirgorodsky 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба Добавлением Reset'а должно полечиться. У вас машина ходит по циклу s1-s8, выходя из s0 только в самый первый момент времени. В то же время Quartus очень плохо относится к начальной инициализации переменных, потому и выбргосил состояние s0, а все остальное оставил в соответствии с кодом. Короче, или добавьте s0 в цикл или добавьте синхронный или ассинхронный Reset. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба Вот написал автоматик: xxxx А Quartus мне и говорит:xxxx В симуляции на clk_out вечный false, что за беда такая, может кто знает? Специально для ленивого, которому лень поискать. Там у них на сайте еще можно взять. Удачи! CummingsSNUG1998SJ_FSM.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_mirgorodsky 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба Проблема в том, что так КА не пишут !!!!!!!!! используйте двух процессное описание с сигналом сброса КА. скачайте XST.pdf в разделе №3 там прекрасно написанно как правильно писать КА. Желаю удачи Ну не был бы я так категоричен в данном вопросе ;) Пишут так КА :) Это называется полностью синхронный КА с регистровыми выходами. Несколько извращенный способ написания, но любители используют. К особенностям относится некоторая тормознутость реакции - 2 такта на реакцию на внешнее воздействие и полная синхронность выходов. Это все равно как в двухпроцессном описании поставить по регистру на каждый выход КА. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба Несколько извращенный способ написания, но любители используют. К особенностям относится некоторая тормознутость реакции - 2 такта на реакцию на внешнее воздействие и полная синхронность выходов. Это все равно как в двухпроцессном описании поставить по регистру на каждый выход КА. Хмм, вот именно что извращенный, поэтому и глючный, когда состояний больше 10-15 :) 2 такта на реакцию, это в зависимости от того МУР это или Мили. (выход по состоянию или по переходу). Но у автора КА без входов, поэтому ему монописуально, хотя ИХМО лучше ВАН ХОТ и асинхроный выход (который в данном контексте будет синхронным) :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ChinasFanat 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба может счетчик поставить? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба может счетчик поставить? :) угу или сдвиговый регистр Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leshiysoft 0 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Postoroniy_V, огромное человечское спасибо, что не поленился и все отлично с примером объяснил. Сделал так как ты писал - работает. А по поводу счетчика и сдвигового регистра согласен, но мне хотелось узнать о создании конечного автома на VHDL вообще а не для данного примера. В AHDL все было как-то проще и конкретно: TSS.reset = reset; TSS.clk = clk; и всего делов ясно понятно и просто, хотя это наверное дело привычки! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 · Жалоба Postoroniy_V, огромное человечское спасибо, что не поленился и все отлично с примером объяснил. Сделал так как ты писал - работает. А по поводу счетчика и сдвигового регистра согласен, но мне хотелось узнать о создании конечного автома на VHDL вообще а не для данного примера. В AHDL все было как-то проще и конкретно: TSS.reset = reset; TSS.clk = clk; и всего делов ясно понятно и просто, хотя это наверное дело привычки! обращайтесь тогда с вопросом о книгах о VHDL на фтп такие книги есть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nand_gates 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 · Жалоба 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gorby 6 8 февраля, 2006 Опубликовано 8 февраля, 2006 · Жалоба Люди добрые, чего вы паритесь?! Ставим ActiveHDL и имеем щастье. Там есть превосходный графический редактор стейт-машин (ага, с зелеными кружочками и стрелочками). А потом он генерирует VHDL - исходник для нарисованной машины. Причем способ кодирования можно задать от ван-хот до Грэя. Внимательно изучаем полученный код - он 100% рабочий. А вот уже через пол-года начнем и свои машины руками писать. Самое смешное, что они тоже начнут работать... А при отладке-то!!!! Оно показывает на диаграмме с зелеными кружочками-состояниями текущее активное состояние!!! Всем рекомендую. А то устроили, понимаешь, балаган... А потом ракеты до Марса не... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 9 февраля, 2006 Опубликовано 9 февраля, 2006 · Жалоба Люди добрые, чего вы паритесь?! Ставим ActiveHDL и имеем щастье. Там есть превосходный графический редактор стейт-машин (ага, с зелеными кружочками и стрелочками). А потом он генерирует VHDL - исходник для нарисованной машины. Причем способ кодирования можно задать от ван-хот до Грэя. Внимательно изучаем полученный код - он 100% рабочий. А вот уже через пол-года начнем и свои машины руками писать. Самое смешное, что они тоже начнут работать... А при отладке-то!!!! Оно показывает на диаграмме с зелеными кружочками-состояниями текущее активное состояние!!! Всем рекомендую. А то устроили, понимаешь, балаган... А потом ракеты до Марса не... Уважаемый, а вы прочитали весь тред? причем тут ActiveHDL? был разве вопрос про него(ActiveHDL )? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 9 февраля, 2006 Опубликовано 9 февраля, 2006 · Жалоба Я совершенно согласен с Gorby - писать вручную стэйт-машины неразумно, разве только в образовательных целях. Попробуйте-ка написать sm на полсотни состояний, а потом вернутся к ней через месяц для редизайна - фиг разберетесь. Я использую менторовский hdldesigner (не только для sm, а как интегратор проектов) - рекомендую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться