| 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. | 
|---|