Mealy state machine

Thread Starter

omerysmi

Joined Oct 10, 2014
55
Hi,
I have an exercise which i need to detect a block of odd number of '0's, and then the output will be 1.
for example if i get "10001" the output will be '1' after "000".
X: 10001
Y: 00010

I need to implement it with mealy state machine (X is input, Y is output).
This is what i did, Does it right?

 
Last edited:

Papabravo

Joined Feb 24, 2006
21,225
Your specification is ambiguous and I think the diagram is wrong. In a string three zeros there are two subblocks with an even number of zeros. According to your specification the output should be high for two clock cycles and then go low. Is that the way you see it as well? How about arrowheads on the transition arcs to show the direction. How about showing the state transition table?
 

Thread Starter

omerysmi

Joined Oct 10, 2014
55
Your specification is ambiguous and I think the diagram is wrong. In a string three zeros there are two subblocks with an even number of zeros. According to your specification the output should be high for two clock cycles and then go low. Is that the way you see it as well? How about arrowheads on the transition arcs to show the direction. How about showing the state transition table?
Maybe this is right? because a single '0' is not considered as "block" no?


 

JSCV

Joined Oct 3, 2015
23
As Papabravo mentioned you are not really clear in your specification.
When should the output become '0' again ?
What if there are more than 3 consequential '0' ?
should the output only be '1' when the number of '0' is even (2,4,6,8).

With the description you gave nobody is able to give you a correct answer.
 

WBahn

Joined Mar 31, 2012
30,051
Hi,
I have an exercise which i need to detect a block of even number of '0's, and then the output will be 1.
for example if i get "10001" the output will be '1' after "000".
This makes no sense. Why would the output be 1 after "000" when you are trying to detect blocks of even number of '0's?

Neither of your diagrams indicate the start state -- that's a rather important piece of information.
 

Thread Starter

omerysmi

Joined Oct 10, 2014
55
This makes no sense. Why would the output be 1 after "000" when you are trying to detect blocks of odd number of '0's?

Neither of your diagrams indicate the start state -- that's a rather important piece of information.
Sorry is my mistake it should detect odd number of zeros.
Anyway, the problem is that i don't know if a single '0' considered as a "block of zeros".
 

WBahn

Joined Mar 31, 2012
30,051
Actually, I think it's my mistake and that I misread your original post.

Given the example output, it would appear that it shouldn't consider a single 0 as a block.

But should it give "false" indications for blocks greater than three? The example output goes HI as soon as the third 0 is seen, but what if it turns out that this is a block of four 0's. It can't tell the future, so it would appear that it must. For instance, if should probably get

X = 10.00.00.00.01.00.01.0
Y = 00.01.01.01.00.00.10.0

I put in periods just to make it easier to match up the two strings.

Does that agree with your understanding?
 

Thread Starter

omerysmi

Joined Oct 10, 2014
55
Actually, I think it's my mistake and that I misread your original post.

Given the example output, it would appear that it shouldn't consider a single 0 as a block.

But should it give "false" indications for blocks greater than three? The example output goes HI as soon as the third 0 is seen, but what if it turns out that this is a block of four 0's. It can't tell the future, so it would appear that it must. For instance, if should probably get

X = 10.00.00.00.01.00.01.0
Y = 00.01.01.01.00.00.10.0

I put in periods just to make it easier to match up the two strings.

Does that agree with your understanding?
I think it should be like your example, but i am not sure about a single zero..

This is the diagram if so (single zero is not considered as a block of zeros)



and this is the diagram if a single '0' is included:

 

WBahn

Joined Mar 31, 2012
30,051
SHOW THE DAMN START STATE!

What is SO HARD about that? Don't make your reader (or the grader) GUESS! Engineering is NOT about guessing!
 

Papabravo

Joined Feb 24, 2006
21,225
Your machine needs a state to start in. Such a state is often the one you go to in response to a RESET signal. If you don't have such a state the machine can come up in an arbitrary and possibly unrecoverable state. This is especially true in cases where the behavior depends on the history of states the machine has traversed.
 

Thread Starter

omerysmi

Joined Oct 10, 2014
55
Your machine needs a state to start in. Such a state is often the one you go to in response to a RESET signal. If you don't have such a state the machine can come up in an arbitrary and possibly unrecoverable state. This is especially true in cases where the behavior depends on the history of states the machine has traversed.
A is the start state
 

WBahn

Joined Mar 31, 2012
30,051
You generally indicate the start state with at least an arrow coming from nowhere and pointing at the start state. Frequently this is labeled with the name of the signal that will send it there from any other state (such as RESET). That's just a common convention to avoid cluttering the diagram. The strict way is to have a label coming from each state to the start state explicitly. This approach is particularly important when some states don't respond the same way to a reset signal. For your exercise, just showing an arrow pointing to the start state should suffice.
 

Thread Starter

omerysmi

Joined Oct 10, 2014
55
You generally indicate the start state with at least an arrow coming from nowhere and pointing at the start state. Frequently this is labeled with the name of the signal that will send it there from any other state (such as RESET). That's just a common convention to avoid cluttering the diagram. The strict way is to have a label coming from each state to the start state explicitly. This approach is particularly important when some states don't respond the same way to a reset signal. For your exercise, just showing an arrow pointing to the start state should suffice.
Ok i understand you..in my diagram A is the start state

Anyway the problem is that if for example i have an even number of zeros the output will be also '1' after the first '0'. like here:
X: 1110011
Y: 0001000

You understand what i mean? there is no odd number of zeros and the output is also '1'.
 
Last edited:

WBahn

Joined Mar 31, 2012
30,051
This is going to be a problem as long as you are supposed to assert the output HI while one of the zeros in the sequence is present. The machine has no way to foresee the future and so it doesn't know if the next bit will be a zero or a one. So a HI can only be interpreted as meaning, "As of right now, the length of the present sequence of zeros is odd."
 

Thread Starter

omerysmi

Joined Oct 10, 2014
55
This is going to be a problem as long as you are supposed to assert the output HI while one of the zeros in the sequence is present. The machine has no way to foresee the future and so it doesn't know if the next bit will be a zero or a one. So a HI can only be interpreted as meaning, "As of right now, the length of the present sequence of zeros is odd."
If the machine wait until '1' appear after sequence of zeros it will solve the problem but if for example there is not '1' after zeros like here: "1001000" you understand?
 
Top