NCC clean newCell
[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 percolate up:         vga_psave   1
9 percolate up:         vga_hsync   1
10 percolate up:         vga_vsync   1
11 percolate up:         vga_sync    1
12 percolate up:         vga_blank   1
13 percolate up:         vga_r       8
14 percolate up:         vga_g       8
15 percolate up:         vga_b       8
16 percolate up:         vga_clkout  1
17
18 == TeX ==============================================================
19
20 == Fleeterpreter ====================================================
21
22   private java.awt.Frame frame = null;
23   public void service() {
24   if (box_inX.dataReadyForShip() &&
25       box_inY.dataReadyForShip() &&
26       box_inData.dataReadyForShip()
27       ) {
28       long x      = box_inX.removeDataForShip();
29       long y      = box_inY.removeDataForShip();
30       long d      = box_inData.removeDataForShip();
31
32       if (frame==null) {
33            frame = new java.awt.Frame();
34            java.awt.Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
35            frame.setSize((int)dim.getWidth(),(int)dim.getHeight());
36            frame.show();
37            frame.setBackground(new java.awt.Color(0,0,0));
38       }
39       java.awt.Color c = new java.awt.Color(
40          ((d & (1L<<2))!=0) ? 0xff : 0x00,
41          ((d & (1L<<1))!=0) ? 0xff : 0x00,
42          ((d & (1L<<0))!=0) ? 0xff : 0x00
43       );
44       java.awt.Graphics2D g = (java.awt.Graphics2D)frame.getGraphics();
45       g.transform(java.awt.geom.AffineTransform.getScaleInstance(((double)frame.getWidth())/640, ((double)frame.getHeight())/480));
46       g.setColor(c);
47       g.fillRect((int)x,(int)y,1,1);
48
49     }
50   }
51
52 == FleetSim ==============================================================
53
54 == FPGA ==============================================================
55
56   wire vga_clk_unbuffered;  // synthesis attribute period of vga_clk_unbuffered is "40 ns";
57
58   wire vga_clk;
59   wire vga_clk_fb;
60
61   BUFG GBUF_FOR_VGA_CLOCK (.I(vga_clk_unbuffered), .O(vga_clk));
62   DCM  // 25Mhz VGA clock
63    #(
64       .CLKFX_MULTIPLY(4),
65       .CLKFX_DIVIDE(16),
66       .CLKIN_PERIOD("20 ns")
67     ) vgadcm (
68       .CLKIN (clk),
69       .CLKFB(vga_clk_fb),
70       .CLKFX (vga_clk_unbuffered),
71       .CLK0  (vga_clk_fb)
72     );
73
74
75   wire [31:0] vga_pixel_addr_;
76   wire        vga_pixel_r;
77   wire        vga_pixel_a_;
78   reg         vga_pixel_a;
79   assign vga_pixel_a_ = vga_pixel_a;
80   wire [18:0] inAddr;
81
82   reg we;
83   wire [2:0] mem_out;
84   wire  [31:0] vga_pixel_data;
85   assign vga_pixel_data = {
86              8'b0,
87              mem_out[2], 7'b0,
88              mem_out[1], 7'b0,
89              mem_out[0], 7'b0
90   };
91
92   assign inAddr = inX_d + (inY_d * 640);
93
94   vram vram(clk, !rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
95
96   wb_vga wb_vga(
97         .wb_clk_i(clk),
98         .wb_rst_i(rst),
99         
100         .fbwb_adr_o(vga_pixel_addr_),
101         .fbwb_stb_o(vga_pixel_r),
102         .fbwb_ack_i(vga_pixel_a_),
103         .fbwb_dat_i(vga_pixel_data),
104
105         /* VGA signals */
106         .vga_clk(vga_clk),
107         .vga_psave(vga_psave),
108         .vga_hsync(vga_hsync),
109         .vga_vsync(vga_vsync),
110         .vga_sync(vga_sync),
111         .vga_blank(vga_blank),
112         .vga_r(vga_r),
113         .vga_g(vga_g),
114         .vga_b(vga_b),
115         .vga_clkout(vga_clkout)
116   );
117
118   always @(posedge clk) begin
119
120     if (rst) begin
121       `reset
122     end else begin
123       `cleanup
124       vga_pixel_a <= vga_pixel_r;
125
126       if (`inX_full && `inY_full && `inData_full) begin
127          we <= 1;
128          `drain_inX
129          `drain_inY
130          `drain_inData
131       end else begin
132          we <= 0;
133       end
134
135     end
136   end
137
138 == UCF ===============================================================
139
140 ## VGA ##############################################################################
141
142 #net "vga_hsync" loc   = f9;
143 #net "vga_hsync" slew  = slow;
144 #net "vga_hsync" drive = 2;
145 #
146 #net "vga_vsync" loc   = h10;
147 #net "vga_vsync" slew  = slow;
148 #net "vga_vsync" drive = 2;
149 #
150 #net "vga_clkout"  loc ="c12";
151 #net "vga_clkout"  slew = fast;
152 #net "vga_clkout"  drive = 8;
153 #
154 #net "vga_r<7>" loc ="h8";
155 #net "vga_r<6>" loc ="c5";
156 #net "vga_r<5>" loc ="h9";
157 #net "vga_r<4>" loc ="g12";
158 #net "vga_r<3>" loc ="g11";
159 #net "vga_r<2>" loc ="g10";
160 #net "vga_r<1>" loc ="f11";
161 #net "vga_r<0>" loc ="f10";
162 #net "vga_r<*>" slew = slow;
163 #net "vga_r<*>" drive = 2;
164 #
165 #net "vga_g<7>" loc ="d5";
166 #net "vga_g<6>" loc ="d4";
167 #net "vga_g<5>" loc ="f8";
168 #net "vga_g<4>" loc ="e13";
169 #net "vga_g<3>" loc ="e12";
170 #net "vga_g<2>" loc ="e11";
171 #net "vga_g<1>" loc ="e9";
172 #net "vga_g<0>" loc ="e8";
173 #net "vga_g<*>" slew = slow;
174 #net "vga_g<*>" drive = 2;
175 #
176 #net "vga_b<7>" loc ="c4";
177 #net "vga_b<6>" loc ="c3";
178 #net "vga_b<5>" loc ="d12";
179 #net "vga_b<4>" loc ="d11";
180 #net "vga_b<3>" loc ="d10";
181 #net "vga_b<2>" loc ="d9";
182 #net "vga_b<1>" loc ="c13";
183 #net "vga_b<0>" loc ="g8";
184 #net "vga_b<*>" slew = slow;
185 #net "vga_b<*>" drive = 2;
186 #
187 #net "vga_*" iostandard = lvcmos33;
188 #
189
190
191 == Constants ========================================================
192
193 == Test ==============================================================
194
195 #skip
196 // can't test much here; just make sure it accepts values
197
198 #expect 0
199 #expect 0
200 #expect 0
201
202 #ship debug : Debug
203 #ship video : Video
204
205 video.inX:
206   set word=0;
207   deliver;
208   send token to debug.in;
209 video.inY:
210   set word=0;
211   deliver;
212   send token to debug.in;
213 video.inData:
214   set word=0;
215   deliver;
216   send token to debug.in;
217
218 debug.in:
219   set word=0;
220   set ilc=*;
221   recv token, deliver;
222
223
224 == Contributors =========================================================
225 Adam Megacz <megacz@cs.berkeley.edu>