Finite State Machine (FSM) is widely used in RTL control path design. Here is a typical state flow chart. Once flow chart is drew, RTL coding is just straightforward. All difficulty lies on how to use flow chart to represent, model, and solve the underlying control requirement. You’ve heard all kinds of FSM related interview questions. For example, given a sequence of random 0s and 1s, how to detect a particular pattern such as 0110, etc.
Sometimes a system can be well defined and represented by a “Operation flow chart”. Taking below chart for example, system defines several operations, op0, op1, …, and op5. Operations have dependencies. For example, op1 and op2 depends on op2, which means if op1 or op2 needs to be executed, op1 needs to be executed first. In “Operation flow chart”, an arrow arc represents a dependency.
When system operates, controller responds to operation request. If there is a request for op3, controller should check dependency layer by layer and executes op0, op2, and op3 in order. Requests can be on top of each other. With op3 request answered, if op4 request comes in, since system already has op0 and op2 executed, controller only needs to execute op4 directly. When op3 request is removed, controller should try to stop other operations. Controller should try to stop op2 but since op2 is still needed by op4, op2 can’t be stopped yet. Once op4 request is removed, op2 can be stopped. If op1 is not needed, even op0 can be stopped.
Clearly operation flow chart is different from finite state flow chart. In FSM flow chart, a system can only stay at one state at any given time. But a system can have any number of operations on-going at the same time as long as the dependency is satisfied.
How do we design such a controller based on operation flow chart?
Use points to gain access. You can either purchase points or contribute content and use contribution points to gain access.