1//: version "2.1"
2//: property encoding = "iso8859-1"
3//: property locale = "en"
4//: property prefix = "_GG"
5//: property title = "Coke Machine Interface"
6
7`timescale 1ns/1ns
8
9//: /netlistBegin main
10module main;    //: root_module
11wire w6;    //: /sn:0 {0}(57,149)(42,149){1}
12wire w7;    //: /sn:0 {0}(57,165)(42,165){1}
13wire w16;    //: /sn:0 {0}(240,117)(255,117){1}
14wire [7:0] w14;    //: /sn:0 {0}(#:240,85)(255,85){1}
15wire [2:0] w19;    //: /sn:0 {0}(#:240,165)(255,165){1}
16wire w15;    //: /sn:0 {0}(240,101)(255,101){1}
17wire w4;    //: /sn:0 {0}(57,117)(42,117){1}
18wire w3;    //: /sn:0 {0}(57,101)(42,101){1}
19wire [5:0] w0;    //: /sn:0 {0}(#:57,53)(42,53){1}
20wire w21;    //: /sn:0 {0}(240,197)(255,197){1}
21wire w24;    //: /sn:0 {0}(240,245)(255,245){1}
22wire w23;    //: /sn:0 {0}(240,229)(255,229){1}
23wire [2:0] w20;    //: /sn:0 {0}(#:240,181)(255,181){1}
24wire [5:0] w1;    //: /sn:0 {0}(#:57,69)(42,69){1}
25wire w25;    //: /sn:0 {0}(240,261)(255,261){1}
26wire [2:0] w18;    //: /sn:0 {0}(#:240,149)(255,149){1}
27wire w8;    //: /sn:0 {0}(57,181)(42,181){1}
28wire w22;    //: /sn:0 {0}(240,213)(255,213){1}
29wire w17;    //: /sn:0 {0}(240,133)(255,133){1}
30wire [5:0] w12;    //: /sn:0 {0}(#:240,53)(255,53){1}
31wire w11;    //: /sn:0 {0}(57,229)(42,229){1}
32wire w2;    //: /sn:0 {0}(57,85)(42,85){1}
33wire w10;    //: /sn:0 {0}(57,213)(42,213){1}
34wire [5:0] w13;    //: /sn:0 {0}(#:240,69)(255,69){1}
35wire w5;    //: /sn:0 {0}(57,133)(42,133){1}
36wire w9;    //: /sn:0 {0}(57,197)(42,197){1}
37wire w26;    //: /sn:0 {0}(240,277)(255,277){1}
38//: enddecls
39
40  cokemachine g0 (.INSACK(w11), .RETINS(w10), .CHGCOM(w9), .BILLOUT(w8), .BILLLT(w7), .BILLIN(w6), .NOCHG(w5), .CHGN(w4), .CHGD(w3), .CHGQ(w2), .ELIGHT(w1), .DISP(w0), .DISPACK(w26), .CHGACK(w25), .BILLACK(w24), .CNRET(w23), .BILLOK(w22), .BILLSNS(w21), .NUMN(w20), .NUMD(w19), .NUMQ(w18), .INSN(w17), .INSD(w16), .INSQ(w15), .COST(w14), .EMPTY(w13), .PRESS(w12));   //: @(58, 37) /sz:(181, 256) /sn:0 /p:[ Li0>0 Li1>0 Li2>0 Li3>0 Li4>0 Li5>0 Li6>0 Li7>0 Li8>0 Li9>0 Li10>0 Li11>0 Ro0<0 Ro1<0 Ro2<0 Ro3<0 Ro4<0 Ro5<0 Ro6<0 Ro7<0 Ro8<0 Ro9<0 Ro10<0 Ro11<0 Ro12<0 Ro13<0 Ro14<0 ]
41
42endmodule
43//: /netlistEnd
44
45//: /hdlBegin cokemachine
46//: interface  /sz:(181, 272) /bd:[ Li0>COST[7:0](208/272) Li1>INSACK(192/272) Li2>RETINS(176/272) Li3>CHGCOM(160/272) Li4>BILLOUT(144/272) Li5>BILLLT(128/272) Li6>BILLIN(112/272) Li7>NOCHG(96/272) Li8>CHGN(80/272) Li9>CHGD(64/272) Li10>CHGQ(48/272) Li11>ELIGHT[5:0](32/272) Li12>DISP[5:0](16/272) Bi0>_RESET(92/181) Ro0<BILLNG(240/272) Ro1<DISPACK(224/272) Ro2<CHGACK(208/272) Ro3<BILLACK(192/272) Ro4<CNRET(176/272) Ro5<BILLOK(160/272) Ro6<BILLSNS(144/272) Ro7<NUMN[2:0](128/272) Ro8<NUMD[2:0](112/272) Ro9<NUMQ[2:0](96/272) Ro10<INSN(80/272) Ro11<INSD(64/272) Ro12<INSQ(48/272) Ro13<EMPTY[5:0](32/272) Ro14<PRESS[5:0](16/272) ]
47//: enddecls
48module cokemachine(DISP, ELIGHT, CHGCOM, CHGQ, CHGD, CHGN, NOCHG, BILLIN, BILLOUT, BILLLT, RETINS, INSACK, EMPTY, PRESS, INSQ, INSD, INSN, BILLSNS, BILLOK, BILLNG, COST,CNRET, BILLACK, DISPACK, CHGACK);
49
50  input [5:0] DISP;               // Dispense drink
51  input [5:0] ELIGHT;             // Empty light
52  input CHGCOM;                   // Commit change
53  input CHGQ, CHGD, CHGN;         // Make change (quarter, dime, nickle)
54  input NOCHG;                    // No change light
55  input BILLIN, BILLOUT;          // Move bill in or out
56  input BILLLT;                   // Insert bill light
57  input RETINS;                   // Return inserted coins
58  input INSACK;                   // Acknoeledge a coin insertion
59  input [7:0] COST;               // Cost per drink in nickles
60  input _RESET;                   // Reset the coke machine.
61
62  output [5:0] EMPTY, PRESS;      // Empty sensor, button press sensor
63  output INSQ, INSD, INSN;        // Sense coin insertion (quarter, dime, nickle)
64  output [2:0] NUMQ, NUMD, NUMN;  // Number of coins in changer (quarter, dime, nickle)
65  output BILLSNS;                 // Sense bill in bill slot
66  output BILLOK, BILLNG;          // Scanner reports bill ok (or no good)
67  output CNRET;                   // Coin return pressed
68  output BILLACK;                 // Acknowledge a BILLIN/BILLOUT signal
69  output DISPACK;                 // Acknowledge a DISP signal
70  output CHGACK;                  // Acknowledge a change signal
71
72  reg [5:0] EMPTY, PRESS;
73  reg INSQ, INSD, INSN;
74  reg [2:0] NUMQ, NUMD, NUMN;
75  reg BILLSNS;
76  reg BILLOK, BILLNG;
77  reg CNRET;
78  reg BILLACK;
79  reg DISPACK;
80  reg CHGACK;
81
82  initial
83    begin
84      CHGACK = 1'b0;
85      DISPACK = 1'b0;
86      $tkg$post("CokeMachine","%m");
87      $tkg$exec("CokeMachine::setCost %m %d",COST);
88      $tkg$exec("CokeMachine::resetMachine %m %d",_RESET);
89    end
90
91  //
92  // Respon to changes in the "empty" light.
93  //
94  always @ (ELIGHT)
95    $tkg$exec("CokeMachine::setEmpty %m {%b %b %b %b %b %b}", ELIGHT[0],ELIGHT[1],ELIGHT[2],ELIGHT[3],ELIGHT[4],ELIGHT[5]);
96
97  //
98  // Respond to changes in the "dispense" signal.
99  //
100  wire D0 = DISP[0];
101  always @ (D0)
102    if (D0 && !DISPACK)
103      begin
104        #10 $tkg$exec("CokeMachine::dispense %m 0");
105        DISPACK = 1'b1;
106      end
107    else if (!D0)
108      #10 DISPACK = 1'b0;
109
110  wire D1 = DISP[1];
111  always @ (D1)
112    if (D1 && !DISPACK)
113      begin
114        #10 $tkg$exec("CokeMachine::dispense %m 1");
115        DISPACK = 1'b1;
116      end
117    else if (!D1)
118      #10 DISPACK = 1'b0;
119
120  wire D2 = DISP[2];
121  always @ (D2)
122    if (D2 && !DISPACK)
123      begin
124        #10 $tkg$exec("CokeMachine::dispense %m 2");
125        DISPACK = 1'b1;
126      end
127    else if (!D2)
128      #10 DISPACK = 1'b0;
129
130  wire D3 = DISP[3];
131  always @ (D3)
132    if (D3 && !DISPACK)
133      begin
134        #10 $tkg$exec("CokeMachine::dispense %m 3");
135        DISPACK = 1'b1;
136      end
137    else if (!D3)
138      #10 DISPACK = 1'b0;
139
140  wire D4 = DISP[4];
141  always @ (D4)
142    if (D4 && !DISPACK)
143      begin
144        #10 $tkg$exec("CokeMachine::dispense %m 4");
145        DISPACK = 1'b1;
146      end
147    else if (!D4)
148      #10 DISPACK = 1'b0;
149
150  wire D5 = DISP[5];
151  always @ (D5)
152    if (D5 && !DISPACK)
153      begin
154        #10 $tkg$exec("CokeMachine::dispense %m 5");
155        DISPACK = 1'b1;
156      end
157    else if (!D5)
158      #10 DISPACK = 1'b0;
159
160  //
161  // Make change
162  //
163  always @ (CHGQ)
164    if (CHGQ && !CHGACK)
165      begin
166        #10 $tkg$exec("CokeMachine::ejectChange %m 25");
167        CHGACK = 1'b1;
168      end
169    else if (!CHGQ)
170    #10 CHGACK = 1'b0;
171
172  always @ (CHGD)
173    if (CHGD && !CHGACK)
174      begin
175        #10 $tkg$exec("CokeMachine::ejectChange %m 10");
176        CHGACK = 1'b1;
177      end
178    else if (!CHGD)
179      #10 CHGACK = 1'b0;
180
181  always @ (CHGN)
182    if (CHGN && !CHGACK)
183      begin
184        #10 $tkg$exec("CokeMachine::ejectChange %m 5");
185        CHGACK = 1'b1;
186      end
187    else if (!CHGN)
188      #10 CHGACK = 1'b0;
189
190  always @ (CHGCOM)
191    if (CHGCOM && !CHGACK)
192      begin
193        #10 $tkg$exec("CokeMachine::commitInserted %m");
194        CHGACK = 1'b1;
195      end
196    else if (!CHGCOM)
197      CHGACK = 1'b0;
198
199  always @ (RETINS)
200    if (RETINS && !CHGACK)
201      begin
202        #10 $tkg$exec("CokeMachine::returnInserted %m");
203        CHGACK = 1'b1;
204      end
205    else if (!RETINS)
206      CHGACK = 1'b0;
207
208  //
209  // Acknowledge coin insertion
210  //
211  always @ (INSACK) $tkg$exec("CokeMachine::insertAck %m -value %b",INSACK);
212
213
214  always @ (COST) $tkg$exec("CokeMachine::setCost %m %d",COST);
215  always @ (_RESET) $tkg$exec("CokeMachine::resetMachine %m %d",_RESET);
216
217  //
218  // No change, and insert bill lights
219  //
220//  always @ (NOCHG) $tkg$exec("CokeMachine::setNoChange %m %b",NOCHG);
221//  always @ (BILLLT) $tkg$exec("CokeMachine::setBillLight %m %b",BILLLT);
222  always @ (NOCHG) $tkg$send("%m.NOCHG",NOCHG);
223  always @ (BILLLT) $tkg$send("%m.BILLLT",BILLLT);
224
225
226
227  //
228  // Bill reader handling
229  //
230  always @ (BILLIN)
231     #10 $tkg$exec("CokeMachine::billIn %m -value %b",BILLIN);
232
233  always @ (BILLOUT)
234     #10 $tkg$exec("CokeMachine::billOut %m -value %b",BILLOUT);
235
236  always #10 EMPTY = $tkg$recv("%m.EMPTY");
237  always #10 PRESS = $tkg$recv("%m.PRESS");
238  always #10 INSQ = $tkg$recv("%m.INSQ");
239  always #10 INSD = $tkg$recv("%m.INSD");
240  always #10 INSN = $tkg$recv("%m.INSN");
241  always #10 NUMQ = $tkg$recv("%m.NUMQ");
242  always #10 NUMD = $tkg$recv("%m.NUMD");
243  always #10 NUMN = $tkg$recv("%m.NUMN");
244  always #10 BILLSNS = $tkg$recv("%m.BILLSNS");
245  always #10 CNRET = $tkg$recv("%m.CNRET");
246  always #10 BILLOK = $tkg$recv("%m.BILLOK");
247  always #10 BILLNG = $tkg$recv("%m.BILLNG");
248  always #10 BILLACK = $tkg$recv("%m.BILLACK");
249
250endmodule
251//: /hdlEnd
252
253
254`timescale 1ns/1ns
255
256
257`timescale 1ns/1ns
258
259