![]() |
|
|
|||||||
![]() |
VHDL - Want flag to keep value through all states |
|
|
Thread Tools | Search this Thread |
|
|
#1 |
|
I am using a single-process state-machine style of coding. I have a
flag that gets set or cleared in one state. I want it to keep whatever value that is throughout the rest of the state machine until the machine returns to that state. What is the correct way of doing this? Please note that I am not referring to a "default" state. That much I understand. I just want the flag to be set once and then stay that way regardless of the condition that set it changing later. Process (clk) begin if rising_edge(clk) then case state when one => flag <= input; ... when two => if flag = '1' then .... else .... etc... Thanks, Shannon Shannon |
|
|
|
|
#2 |
|
Posts: n/a
|
On Jun 15, 1:34*pm, Shannon <sgo...@sbcglobal.net> wrote:
> I am using a single-process state-machine style of coding. *I have a > flag that gets set or cleared in one state. *I want it to keep > whatever value that is throughout the rest of the state machine until > the machine returns to that state. *What is the correct way of doing > this? > > Please note that I am not referring to a "default" state. *That much I > understand. *I just want the flag to be set once and then stay that > way regardless of the condition that set it changing later. > > Process (clk) > begin > * if rising_edge(clk) then > * * case state > * * * when one => > * * * * *flag <= input; > * * * * *... > * * * when two => > * * * * *if flag = '1' then > * * * * * .... > * * * * *else > * * * * *.... > etc... > > Thanks, > Shannon I'm suffering post traumatic "send" disorder.... I'm betting that I don't have to do anything since it is in a clocked process and will become a register. Shannon Shannon |
|
|
|
#3 |
|
Posts: n/a
|
On Jun 15, 4:34*pm, Shannon <sgo...@sbcglobal.net> wrote:
> I am using a single-process state-machine style of coding. *I have a > flag that gets set or cleared in one state. *I want it to keep > whatever value that is throughout the rest of the state machine until > the machine returns to that state. *What is the correct way of doing > this? > > Please note that I am not referring to a "default" state. *That much I > understand. *I just want the flag to be set once and then stay that > way regardless of the condition that set it changing later. > > Process (clk) > begin > * if rising_edge(clk) then > * * case state > * * * when one => > * * * * *flag <= input; > * * * * *... > * * * when two => > * * * * *if flag = '1' then > * * * * * .... > * * * * *else > * * * * *.... > etc... > > Thanks, > Shannon If you simply don't assign the signal's value in those states where the signal should remain unchanged, then the value will remain the same until the next clock tick. The synthesizer will implement this by making the clock enable for the signal's register '0' for those states where the signal is not assigned. This is one of the nice things about single-process state machines. Dave Dave |
|
|
|
#4 |
|
Posts: n/a
|
Dave wrote:
> If you simply don't assign the signal's value in those states where > the signal should remain unchanged, then the value will remain the > same until the next clock tick. The synthesizer will implement this by > making the clock enable for the signal's register '0' for those states > where the signal is not assigned. This is one of the nice things about > single-process state machines. Yes. Describing changes takes less text than describing the full state and output. It is unfortunate that asynchronous processes and the default assignments they require, are so well covered in vhdl instruction. Some designers retain this verbose style in all cases, out of habit. -- Mike Treseler Mike Treseler |
|
|
|
#5 |
|
Posts: n/a
|
On Jun 16, 12:22*pm, Mike Treseler <mtrese...@gmail.com> wrote:
> Dave wrote: > > If you simply don't assign the signal's value in those states where > > the signal should remain unchanged, then the value will remain the > > same until the next clock tick. The synthesizer will implement this by > > making the clock enable for the signal's register '0' for those states > > where the signal is not assigned. This is one of the nice things about > > single-process state machines. > > Yes. > Describing changes takes less text > than describing the full state and output. > > It is unfortunate that asynchronous processes > and the default assignments they require, > are so well covered in vhdl instruction. > > Some designers retain this verbose > style in all cases, out of habit. > > * * * * -- Mike Treseler What's worse, most texts that promote dual processes also don't promote the best way to avoid latches in the combinatorial processes: default assignments right up front in the process. With those, you have your choice of default signal behavior being unchanged, set or reset for each signal. Most texts try to focus on an else for every if, and complete assignment lists in every state, both of which are much harder to write, read and update/maintain. You still have all the default behavior choices with a single clocked process, which is much better in the first place. Andy Andy |
|
|
|
#6 |
|
Posts: n/a
|
On Jun 16, 10:36*am, Andy <jonesa...@comcast.net> wrote:
> On Jun 16, 12:22*pm, Mike Treseler <mtrese...@gmail.com> wrote: > > > > > Dave wrote: > > > If you simply don't assign the signal's value in those states where > > > the signal should remain unchanged, then the value will remain the > > > same until the next clock tick. The synthesizer will implement this by > > > making the clock enable for the signal's register '0' for those states > > > where the signal is not assigned. This is one of the nice things about > > > single-process state machines. > > > Yes. > > Describing changes takes less text > > than describing the full state and output. > > > It is unfortunate that asynchronous processes > > and the default assignments they require, > > are so well covered in vhdl instruction. > > > Some designers retain this verbose > > style in all cases, out of habit. > > > * * * * -- Mike Treseler > > What's worse, most texts that promote dual processes also don't > promote the best way to avoid latches in the combinatorial processes: > default assignments right up front in the process. With those, you > have your choice of default signal behavior being unchanged, set or > reset for each signal. Most texts try to focus on an else for every > if, and complete assignment lists in every state, both of which are > much harder to write, read and update/maintain. > > You still have all the default behavior choices with a single clocked > process, which is much better in the first place. > > Andy thanks for the help. I suspected the answer moments after I pressed send. I used to be a two-process person but you guys convinced me otherwise. I never was a three-process person. Shannon Shannon |
|
|
|
#7 |
|
Posts: n/a
|
Shannon wrote:
> I'm suffering post traumatic "send" disorder.... And yet the "send" button is the source of all enlightenment Mike Treseler |
|
![]() |
| Thread Tools | Search this Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Judge: File-swapping tools are legal | Citizen Bob | DVD Video | 140 | 11-08-2006 06:42 PM |
| "The biggest scandal to ever hit American politics" | Jas | DVD Video | 149 | 12-05-2004 02:47 PM |
| BREAKING: Kerry leading in key states, PA, FL, OH, WI, MI .... | Official Election Guide 2004 | DVD Video | 89 | 11-08-2004 03:40 PM |
| Swiftboat Veterans for Truth = Nixon phony pro-war veterans group: John Kerry DVD | jasmine | DVD Video | 57 | 10-13-2004 10:30 PM |
| Can you play dvd's from europe in the united states? | Darmin | DVD Video | 14 | 03-05-2004 06:36 AM |