add test for Video ship
[fleet.git] / ships / Video.ship
1 ship: Video
2
3 == Ports ===========================================================
4 data  in:    inX
5 data  in:    inY
6 data  in:    inData
7
8 == TeX ==============================================================
9
10 == Fleeterpreter ====================================================
11
12   private java.awt.Frame frame = null;
13   public void service() {
14   if (box_inX.dataReadyForShip() &&
15       box_inY.dataReadyForShip() &&
16       box_inData.dataReadyForShip()
17       ) {
18       long x      = box_inX.removeDataForShip();
19       long y      = box_inY.removeDataForShip();
20       long d      = box_inData.removeDataForShip();
21
22       if (frame==null) {
23            frame = new java.awt.Frame();
24            java.awt.Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
25            frame.setSize((int)dim.getWidth(),(int)dim.getHeight());
26            frame.show();
27            frame.setBackground(new java.awt.Color(0,0,0));
28       }
29       java.awt.Color c = new java.awt.Color(
30          ((d & (1L<<2))!=0) ? 0xff : 0x00,
31          ((d & (1L<<1))!=0) ? 0xff : 0x00,
32          ((d & (1L<<0))!=0) ? 0xff : 0x00
33       );
34       java.awt.Graphics2D g = (java.awt.Graphics2D)frame.getGraphics();
35       g.transform(java.awt.geom.AffineTransform.getScaleInstance(((double)frame.getWidth())/640, ((double)frame.getHeight())/480));
36       g.setColor(c);
37       g.fillRect((int)x,(int)y,1,1);
38
39     }
40   }
41
42 == FleetSim ==============================================================
43
44 == FPGA ==============================================================
45
46
47   wire [31:0] vga_pixel_addr_;
48   wire        vga_pixel_r;
49   wire        vga_pixel_a_;
50   reg         vga_pixel_a;
51   assign vga_pixel_a_ = vga_pixel_a;
52   wire [18:0] inAddr;
53
54   reg we;
55   wire [2:0] mem_out;
56   wire  [31:0] vga_pixel_data;
57   assign vga_pixel_data = {
58              8'b0,
59              mem_out[2], 7'b0,
60              mem_out[1], 7'b0,
61              mem_out[0], 7'b0
62   };
63
64   assign inAddr = inX_d + (inY_d * 640);
65
66   vram vram(clk, rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
67
68   wb_vga wb_vga(
69         .wb_clk_i(clk),
70         .wb_rst_i(!rst),
71         
72         .fbwb_adr_o(vga_pixel_addr_),
73         .fbwb_stb_o(vga_pixel_r),
74         .fbwb_ack_i(vga_pixel_a_),
75         .fbwb_dat_i(vga_pixel_data),
76
77         /* VGA signals */
78         .vga_clk(vga_clk),
79         .vga_psave(vga_psave),
80         .vga_hsync(vga_hsync),
81         .vga_vsync(vga_vsync),
82         .vga_sync(vga_sync),
83         .vga_blank(vga_blank),
84         .vga_r(vga_r),
85         .vga_g(vga_g),
86         .vga_b(vga_b),
87         .vga_clkout(vga_clkout)
88   );
89
90   always @(posedge clk) begin
91
92     if (!rst) begin
93       `reset
94     end else begin
95
96       vga_pixel_a <= vga_pixel_r;
97
98       if (!inData_r && inData_a) inData_a <= 0;
99       if (!inX_r    && inX_a)    inX_a <= 0;
100       if (!inY_r    && inY_a)    inY_a <= 0;
101       if (inX_r && !inX_a && inY_r && !inY_a && inData_r && !inData_a) begin
102          we <= 1;
103          inX_a <= 1;
104          inY_a <= 1;
105          inData_a <= 1;
106       end else begin
107          we <= 0;
108       end
109
110     end
111   end
112
113 == Constants ========================================================
114
115 == Test ==============================================================
116
117 // can't test much here; just make sure it accepts values
118
119 #expect 0
120 #expect 0
121 #expect 0
122
123 #ship debug : Debug
124 #ship video : Video
125
126 video.inX:
127   set word=0;
128   deliver;
129   send token to debug.in;
130 video.inY:
131   set word=0;
132   deliver;
133   send token to debug.in;
134 video.inData:
135   set word=0;
136   deliver;
137   send token to debug.in;
138
139 debug.in:
140   set word=0;
141   set ilc=*;
142   recv token, deliver;
143
144
145 == Contributors =========================================================
146 Adam Megacz <megacz@cs.berkeley.edu>