1 package edu.berkeley.slipway.demos;
3 import edu.berkeley.slipway.*;
4 import edu.berkeley.slipway.util.*;
5 import static java.awt.event.KeyEvent.*;
6 import com.atmel.fpslic.*;
7 import static com.atmel.fpslic.FpslicConstants.*;
8 import edu.berkeley.slipway.gui.*;
10 import java.awt.event.*;
11 import java.awt.color.*;
12 import org.ibex.util.*;
16 public class Demo2 implements KeyListener {
18 public static void main(String[] s) throws Exception {
21 public SlipwayBoard slipway;
22 public Demo2() throws Exception {
23 slipway = new SlipwayBoard();
25 public void go() throws Exception {
26 long begin = System.currentTimeMillis();
27 long end = System.currentTimeMillis();
28 Log.info(Demo.class, "finished in " + ((end-begin)/1000) + "s");
32 Log.info(Demo.class, "issuing command");
34 FpslicDevice device = slipway.getFpslicDevice();
35 FpslicDevice.Cell root = device.cell(5,5);
65 device.iob_bot(12, false).enableOutput(NW);
66 FpslicDevice.Cell c = device.cell(12, 0);
68 while(c.east() != null && c.east().east() != null) {
74 FpslicDevice.Cell div = device.cell(19, 21);
76 div = ExperimentUtils.divider(div);
80 for(int x=2; x<MAX+1; x++) {
81 c = device.cell(x, 20);
82 FpslicDevice.Cell bridge = x==2 ? c.sw() : c.nw();
83 FpslicDevice.Cell pred = x==MAX ? c.south() : c.east();
84 FpslicDevice.Cell next = x==2 ? c.south() : c.west();
85 muller(c, pred, bridge, next);
88 bridge = x==MAX ? c.ne() : c.se();
89 pred = x==2 ? c.north() : c.west();
90 next = x==MAX ? c.north() : c.east();
91 muller(c, pred, bridge, next);
93 //device.cell(MAX+0,20).yi(WEST);
94 //device.cell(MAX+0,20).ylut(LUT_SELF);
95 //device.cell(MAX+1,20).yi(WEST);
96 //device.cell(MAX+1,20).ylut(LUT_SELF);
97 device.cell(MAX+2,20).yi(WEST);
98 device.cell(MAX+2,20).ylut(LUT_SELF);
99 device.cell(MAX+2,20).xlut(LUT_OTHER);
100 device.cell(18,20).ylut(LUT_SELF);
105 public void go2() throws Exception {
106 FpslicDevice device = slipway.getFpslicDevice();
110 vis = new Gui3(device, slipway);
111 vis.addKeyListener(this);
112 Frame fr = new Frame();
113 fr.setLayout(new BorderLayout());
114 fr.add(vis, BorderLayout.CENTER);
116 fr.setSize(900, 900);
120 //synchronized(Demo.class) { Demo.class.wait(); }
122 try { Thread.sleep(500); } catch (Exception e) { }
129 public void muller(FpslicDevice.Cell c, FpslicDevice.Cell pred, FpslicDevice.Cell bridge, FpslicDevice.Cell next) {
130 FpslicDevice device = slipway.getFpslicDevice();
132 bridge.xlut(LUT_OTHER);
140 c.ylut((LUT_SELF & ~LUT_OTHER) |
141 (LUT_Z & ~LUT_OTHER) |
145 public void setupScanCell() {
146 FpslicDevice device = slipway.getFpslicDevice();
147 FpslicDevice fpslic = (FpslicDevice)device;
148 fpslic.cell(23,15).h(3, true);
149 fpslic.cell(23,15).yi(L3);
150 fpslic.cell(23,15).ylut(0xAA);
151 fpslic.iob_right(15, true).enableOutput(WEST);
153 fpslic.cell(23,0).ylut(0x00);
154 fpslic.iob_right(0, true).enableOutput(WEST);
158 public void keyTyped(KeyEvent k) { }
159 public void keyReleased(KeyEvent k) { }
160 public void keyPressed(KeyEvent k) {
161 switch(k.getKeyCode()) {
168 for(int x=0; x<4; x++)
169 for(int y=0; y<4; y++)
171 for(int x=0; x<4; x++)
172 for(int y=0; y<4; y++)
175 public void scan(final GuiCell c) {
177 final FpslicDevice.Cell cell = (FpslicDevice.Cell)c.fpslicCell;
178 scan(slipway, cell, YLUT, true);
181 slipway.readFpgaData(new BCB(c));
182 scan(slipway, cell, YLUT, false);
183 } catch (IOException e) {
184 throw new RuntimeException(e);
188 public static void scan(SlipwayBoard slipway, FpslicDevice.Cell cell, int source, boolean setup) {
189 FpslicDevice dev = slipway.getFpslicDevice();
191 //if (source != NONE) cell.c(source);
192 if (cell.b()) cell.b(false);
193 if (cell.f()) cell.f(false);
195 if (cell.out(L3)!=setup) cell.out(L3, setup);
196 if (cell.vx(L3)!=setup) cell.v(L3, setup);
198 FpslicDevice.SectorWire sw = cell.vwire(L3);
199 //System.out.println("wire is: " + sw);
201 if (sw.row > (12 & ~0x3) && sw.north()!=null && sw.north().drives(sw))
202 sw.north().drives(sw, false);
203 while(sw.row > (12 & ~0x3) && sw.south() != null) {
204 //System.out.println(sw + " -> " + sw.south());
205 if (sw.drives(sw.south())!=setup) sw.drives(sw.south(), setup);
208 if (sw.row < (12 & ~0x3) && sw.south() != null && sw.south().drives(sw))
209 sw.north().drives(sw, false);
210 while(sw.row < (12 & ~0x3) && sw.north() != null) {
211 //System.out.println(sw + " -> " + sw.north());
212 if (sw.drives(sw.north())!=setup) sw.drives(sw.north(), setup);
216 //cell = dev.cell(19, 15);
217 cell = dev.cell(cell.col, 15);
219 System.out.println("cell is " + cell);
228 if (cell.hx(L3) != setup) cell.h(L3, setup);
229 if (cell.vx(L3) != setup) cell.v(L3, setup);
232 if (sw.west()!=null && sw.west().drives(sw)) { sw.west().drives(sw, false); }
233 while(sw.east() != null) {
234 //System.out.println(sw + " -> " + sw.east());
235 if (sw.drives(sw.east())!=setup) sw.drives(sw.east(), setup);
242 private class BCB extends SlipwayBoard.ByteCallback {
244 public BCB(GuiCell c) {
247 public void call(byte b) throws Exception {
248 boolean on = (b & 0x80) != 0;