[11] | 1 | A simple arbitration circuit for VIS TTC |
---|
| 2 | Yuji Kukimoto |
---|
| 3 | kukimoto@eecs.berkeley.edu |
---|
| 4 | |
---|
| 5 | STG: see figures.ps |
---|
| 6 | circuit structure: see figures.ps |
---|
| 7 | |
---|
| 8 | Overall picture: |
---|
| 9 | |
---|
| 10 | Three requesting modules (called clients) are competing to get a bus |
---|
| 11 | access. At any point, only one module is allowed to get a bus access. |
---|
| 12 | Each client has a controller attached to it, from which an |
---|
| 13 | acknowledgment is given. All the controllers communicate with an |
---|
| 14 | arbiter so that at any time at most one controller gives an |
---|
| 15 | acknowledgment. The arbiter is a simple three-state machine. It has |
---|
| 16 | a single output indicating which controller can be selected among the |
---|
| 17 | three at each time tick. If the "active" input of the controller is |
---|
| 18 | 0, the output is X, meaning that no one is selected. |
---|
| 19 | |
---|
| 20 | The protocol here is that a controller takes a control from the |
---|
| 21 | arbiter if it is selected by the arbiter and it has a request. |
---|
| 22 | Otherwise, the control is passed to the next controller. A signal |
---|
| 23 | pass_ctrl is set to one iff the controller needs to pass a control to |
---|
| 24 | another controller. There are two cases: 1) when the controller is |
---|
| 25 | done processing a request, 2) when the controller has no request |
---|
| 26 | waiting, but is selected. In both cases, the variable is set to one in |
---|
| 27 | the next clock so that another controller waiting for an access can |
---|
| 28 | take a control. The "active" signal of the arbiter is set to one iff |
---|
| 29 | one of the pass_ctrl is set to one. |
---|
| 30 | |
---|
| 31 | A client has to keep a request signal high until an acknowledgment is |
---|
| 32 | given. Even after an acknowledgment is returned from the |
---|
| 33 | corresponding controller, req can be high for a finite amount of time. |
---|
| 34 | This means that different requests take different time to complete. |
---|
| 35 | Fairness constraints arise here since we do not want to keep req high |
---|
| 36 | for infinite time. |
---|
| 37 | |
---|
| 38 | I. CTL Model Checking |
---|
| 39 | |
---|
| 40 | A. Property: |
---|
| 41 | |
---|
| 42 | 1. mutual exclusion |
---|
| 43 | 2. AG(req->AF(ack)) |
---|
| 44 | |
---|
| 45 | # safety: mutual exclusion |
---|
| 46 | AG ( !(ackA = 1 * ackB = 1 + ackB = 1 * ackC = 1 + ackC = 1 * ackA=1) ); |
---|
| 47 | |
---|
| 48 | # liveness: |
---|
| 49 | AG( (reqA = 1) -> AF(ackA = 1) ); |
---|
| 50 | AG( (reqB = 1) -> AF(ackB = 1) ); |
---|
| 51 | AG( (reqC = 1) -> AF(ackC = 1) ); |
---|
| 52 | |
---|
| 53 | B. Fairness: |
---|
| 54 | |
---|
| 55 | !(clientA.state=HAVE_TOKEN); |
---|
| 56 | !(clientB.state=HAVE_TOKEN); |
---|
| 57 | !(clientC.state=HAVE_TOKEN); |
---|
| 58 | |
---|
| 59 | C. Files: |
---|
| 60 | |
---|
| 61 | arbiter.v: a fair arbiter. the liveness property passes under fairness |
---|
| 62 | constraints. arbiter_bug.v is another version of arbiter.v, where the state |
---|
| 63 | transition graph of the arbiter is slightly different. This is not a |
---|
| 64 | fair arbiter. |
---|
| 65 | |
---|
| 66 | arbiter.fair: fairness constraints |
---|
| 67 | |
---|
| 68 | arbiter.ctl: ctl files |
---|
| 69 | |
---|
| 70 | II. Language emptiness check: |
---|
| 71 | |
---|
| 72 | A. File: arbiter_le.v |
---|
| 73 | |
---|
| 74 | An observer is added to check if the liveness property for clientA is |
---|
| 75 | satisfied. The observer is a non-deterministic machine which |
---|
| 76 | represents the complement of the liveness property. Ending up in |
---|
| 77 | state BAD in the observer means that the behavior is bad. Thus, |
---|
| 78 | observer.state=BAD is added to the fairness constraints. The |
---|
| 79 | corresponding fairness file is arbiter_le.fair. The language emptiness |
---|
| 80 | check passes, implying that the design is correct. |
---|
| 81 | |
---|
| 82 | B. Note: |
---|
| 83 | |
---|
| 84 | Complementing the liveness property is not so intuitive even though |
---|
| 85 | the property is very simple. It turned out that we really need a |
---|
| 86 | non-deterministic machine to representing this property under Buchi |
---|
| 87 | constraint. |
---|