Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > problem in ISE with mealy FSM

Reply
Thread Tools

problem in ISE with mealy FSM

 
 
nicx82 nicx82 is offline
Junior Member
Join Date: Nov 2008
Posts: 9
 
      01-20-2009
Hi,
i have a problem with an FSM mealy based.
The problem are the warning from ISE indicated a latches state.
In simulation this problems are continuos change of signal from a correct value to zero and again from correct value to zer and so on.
I know that i can correct this problem by rewrite in each state all the output values even if this don't change. This solution work if the output are know to me, but how can i do the same with output signals that depends on the input??(this is a Mealy machine)
 
Reply With Quote
 
 
 
 
jeppe jeppe is offline
Senior Member
Join Date: Mar 2008
Location: Denmark
Posts: 348
 
      01-20-2009
Hi

Consider the way the statemachine implemented - normally must a melay output be driven by a combinatorial process or as concurrent code.

Check the button of this page to get my point.
http://www.jjmk.dk/MMMI/Exercises/04...lemtations.htm

Jeppe
 
Reply With Quote
 
 
 
 
nicx82 nicx82 is offline
Junior Member
Join Date: Nov 2008
Posts: 9
 
      01-21-2009
this is the code. tHIS CODE COMPARE 8 NUMBER, BUT THE CODE IS ONLY FOR THE FIRST 3 NUMBER. IN STATE A I COMPARE NUMER 1 AND 2 AND I PUT TO THE OUT THE MAX (MAX<=IN_A OR MAX<=IN_B). I ASSIGN TO THE MAX AN INDEX. IN THE STATE B I COMPARE THE MAX WITH NUMBER 3.IF THE MAX DON'T CHANGE, THE INDEX MUST REMAIN THE SAME, ELSE I UPDATE THE INDEX.

when
state_B =>
if (IN_A(16 downto 6) > IN_B(16 downto 6)) then
MAX<=IN_A;
index<="0001";
S_1<='1';
S_2<="000";
DONE<='0';
elsif (IN_A(16 downto 6) < IN_B(16 downto 6)) then
max<=IN_B;
index<="0010";
S_1<='1';
S_2<="000";
DONE<='0';
else---integer part are equals
if (IN_A(5 downto 0) > IN_B(5 downto 0)) then
max<=IN_A;
index<="0001";
S_1<='1';
S_2<="000";
DONE<='0';
elsif (IN_A(5 downto 0) < IN_B(5 downto 0)) then
max<=IN_B;
index<="0010";
S_1<='1';
S_2<="000";
DONE<='0';
else--also the fraction part are equals
max<=IN_A;
index<="0001";
S_1<='1';
S_2<="000";
DONE<='0';
end if;
end if;
nx_state<=state_C;

--NOW I COMPARE NEW NUMBER WITH THE MAX OF THE ABOVE STATE
when
state_C =>
if (IN_A(16 downto 6) > IN_B(16 downto 6)) then
MAX<=IN_A;
S_2<="001"; --HERE I CAN'T WRITE THE VALUE OF INDEX BECAUSE I DON'T KOW IF IT IS 0001 OR 0010.DEPENDS ON THE ABOVE STATE
DONE<='0';
elsif (IN_A(16 downto 6) < IN_B(16 downto 6)) then
max<=IN_B;
index<="0011";
S_2<="001";
DONE<='0';
else---parte intera uguale
if (IN_A(5 downto 0) > IN_B(5 downto 0)) then
max<=IN_A;
S_2<="001";
DONE<='0';
elsif (IN_A(5 downto 0) < IN_B(5 downto 0)) then
max<=IN_B;
index<="0011";
S_2<="001";
DONE<='0';
else--anche la parte frazionaria uguale
max<=IN_A;
S_2<="001";
DONE<='0';
end if;
end if;
nx_state<=state_C_P;
 
Reply With Quote
 
jeppe jeppe is offline
Senior Member
Join Date: Mar 2008
Location: Denmark
Posts: 348
 
      01-21-2009
Well - my best advice would be:

Implement two states instead of one - you could call them

when state_C0001 =>
....
when state_c0010 =>
....

you must select the correct state in state_B - but then it should be easy.

Jeppe
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Latch problem in FSM engrjet VHDL 1 03-13-2008 07:35 AM
flip flop in mealy state machine Ola VHDL 1 11-21-2005 06:13 PM
FSM IOB problem Eric VHDL 3 03-17-2005 10:35 PM
Mealy fsm in sychronous systems. M.A.Khader VHDL 1 08-30-2004 01:29 PM
FSM Problem Charlie VHDL 5 12-31-2003 05:40 PM



Advertisments