The if check you are talking about is done only when entering the state. Say you are doing this from S2 it jumps to S3 then the go to idle you are talking about is going to happen only if you enter S2 again and the GPIF engine will go to idle. Is this what you are doing??
In spite of the months between our posts this is timely.
Our code is:
If we set IF /EF=1 AND /EF=1 go to S3 else go to idle
We are doing this from S3 thinking that we should stay in S3 untill /EF (not empty fifo) asserts sending us to Idle.
Say you are doing this from S2 it jumps to S3 then the go to idle you are talking about is going to happen only if you enter S2 again and the GPIF engine will go to idle.
If I understand your comment: In S3 we set IF /EF=1 AND /EF=1 go to S2 else go to idle. S2 would be a pass thru (OE and REN stays low, data is not active). We will loop S3-S2-S3... once empty fifo goes low we will get to idle upon entering S3 when the branch test occurs. This part makes sense...but if the branch occurs on entering S3 it would seem we will not be clocking IFCLK which I believe to be set in S3 by selecting "next fifo data", or does this also occur on entering the state?