problem in ISE with mealy FSM

Joined
Nov 5, 2008
Messages
9
Reaction score
0
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)
 
Joined
Nov 5, 2008
Messages
9
Reaction score
0
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;
 
Joined
Mar 10, 2008
Messages
348
Reaction score
0
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top