Dvi.ship: software implementatino
[fleet.git] / ships / Dvi.ship
1 ship: Dvi
2
3 == Ports ===========================================================
4 data  in:    inPixelX
5 data  in:    inPixelY
6 data  in:    inPixelValue
7
8 data  in:    inAddrRead
9 data  in:    inAddrWrite
10 data  in:    inDataWrite
11
12 data  out:   out
13
14 percolate up:    dvi_d0      1
15 percolate up:    dvi_d1      1
16 percolate up:    dvi_d2      1
17 percolate up:    dvi_d3      1
18 percolate up:    dvi_d4      1
19 percolate up:    dvi_d5      1
20 percolate up:    dvi_d6      1
21 percolate up:    dvi_d7      1
22 percolate up:    dvi_d8      1
23 percolate up:    dvi_d9      1
24 percolate up:    dvi_d10     1
25 percolate up:    dvi_d11     1
26
27 percolate up:    dvi_h       1
28 percolate up:    dvi_v       1
29 percolate up:    dvi_xclk_n  1
30 percolate up:    dvi_xclk_p  1
31 percolate up:    dvi_de      1
32 percolate up:    dvi_reset_b 1
33
34 percolate up:    gpio_led_c   1
35 percolate up:    gpio_led_e   1
36 percolate up:    gpio_led_n   1
37 percolate up:    gpio_led_s   1
38 percolate up:    gpio_led_w   1
39
40 percolate up:    gpio_led_4   1
41 percolate up:    gpio_led_5   1
42 percolate up:    gpio_led_6   1
43 percolate up:    gpio_led_7   1
44
45 percolate up:    dvi_iic_scl 1
46 percolate inout: dvi_iic_sda 1
47
48 percolate up:    gpio_led_0   1
49 percolate up:    gpio_led_1   1
50 percolate up:    gpio_led_2   1
51 percolate up:    gpio_led_3   1
52
53 percolate up:      sram_adv_ld_b 1
54 percolate up:      sram_bw0 1
55 percolate up:      sram_bw1 1
56 percolate up:      sram_bw2 1
57 percolate up:      sram_bw3 1
58 percolate up:      sram_clk 1
59 percolate up:      sram_cs_b 1
60 percolate up:      sram_flash_a0 1
61 percolate up:      sram_flash_a1 1
62 percolate up:      sram_flash_a2 1
63 percolate up:      sram_flash_a3 1
64 percolate up:      sram_flash_a4 1
65 percolate up:      sram_flash_a5 1
66 percolate up:      sram_flash_a6 1
67 percolate up:      sram_flash_a7 1
68 percolate up:      sram_flash_a8 1
69 percolate up:      sram_flash_a9 1
70 percolate up:      sram_flash_a10 1
71 percolate up:      sram_flash_a11 1
72 percolate up:      sram_flash_a12 1
73 percolate up:      sram_flash_a13 1
74 percolate up:      sram_flash_a14 1
75 percolate up:      sram_flash_a15 1
76 percolate up:      sram_flash_a16 1
77 percolate up:      sram_flash_a17 1
78 percolate up:      sram_flash_a18 1
79 percolate up:      sram_flash_a19 1
80 percolate up:      sram_flash_a20 1
81 percolate up:      sram_flash_a21 1
82 percolate up:      sram_flash_we_b 1
83 percolate up:      sram_mode 1
84 percolate up:      sram_oe_b 1
85
86 percolate inout:    sram_dqp0 1
87 percolate inout:    sram_dqp1 1
88 percolate inout:    sram_dqp2 1
89 percolate inout:    sram_dqp3 1
90
91 percolate inout:    sram_flash_d0 1
92 percolate inout:    sram_flash_d1 1
93 percolate inout:    sram_flash_d2 1
94 percolate inout:    sram_flash_d3 1
95 percolate inout:    sram_flash_d4 1
96 percolate inout:    sram_flash_d5 1
97 percolate inout:    sram_flash_d6 1
98 percolate inout:    sram_flash_d7 1
99 percolate inout:    sram_flash_d8 1
100 percolate inout:    sram_flash_d9 1
101 percolate inout:    sram_flash_d10 1
102 percolate inout:    sram_flash_d11 1
103 percolate inout:    sram_flash_d12 1
104 percolate inout:    sram_flash_d13 1
105 percolate inout:    sram_flash_d14 1
106 percolate inout:    sram_flash_d15 1
107 percolate inout:    sram_d16 1
108 percolate inout:    sram_d17 1
109 percolate inout:    sram_d18 1
110 percolate inout:    sram_d19 1
111 percolate inout:    sram_d20 1
112 percolate inout:    sram_d21 1
113 percolate inout:    sram_d22 1
114 percolate inout:    sram_d23 1
115 percolate inout:    sram_d24 1
116 percolate inout:    sram_d25 1
117 percolate inout:    sram_d26 1
118 percolate inout:    sram_d27 1
119 percolate inout:    sram_d28 1
120 percolate inout:    sram_d29 1
121 percolate inout:    sram_d30 1
122 percolate inout:    sram_d31 1
123
124 == FPGA ==============================================================
125
126 wire [9:0] x_coord;
127 wire [9:0] y_coord;
128 wire data_valid_ext;
129 wire clk_fb;
130 wire pix_clk;
131 wire[7:0] dvi_green;
132 wire[7:0] dvi_red;
133 wire[7:0] dvi_blue;
134
135 assign dvi_reset_b = 1;
136 assign dvi_de = data_valid_ext;
137
138 vga_timing_generator 
139  #(
140      .WIDTH(640),
141      .H_FP(16),
142      .H_SYNC(96),
143      .H_BP(48),
144      .HEIGHT(480),
145      .V_FP(12),
146      .V_SYNC(2),
147      .V_BP(31),
148      .HEIGHT_BITS(10),
149      .WIDTH_BITS(10),
150      .DATA_DELAY(0)
151   ) my_vga_timing_generator (
152      .rst(rst),
153      .clk(pix_clk),
154      .hsync(dvi_h),
155      .vsync(dvi_v),
156      .X_COORD(x_coord),
157      .Y_COORD(y_coord),
158      .DATA_VALID(),
159      .DATA_VALID_EXT(data_valid_ext),
160      .PIXEL_COUNT()
161   );
162
163   ODDR #(
164       .DDR_CLK_EDGE("OPPOSITE_EDGE"),    // "OPPOSITE_EDGE" or "SAME_EDGE" 
165       .INIT(1'b0),                          // Initial value for Q port ('1' or '0')
166       .SRTYPE("SYNC")                    // Reset Type ("ASYNC" or "SYNC")
167   ) ODDR_xclk_p (
168       .Q(dvi_xclk_p),       // 1-bit DDR output
169       .C(pix_clk),          // 1-bit clock input
170       .CE(1),              // 1-bit clock enable input
171       .D1(1),              // 1-bit data input (positive edge)
172       .D2(0),              // 1-bit data input (negative edge)
173       .R(0),              // 1-bit reset input
174       .S(0)               // 1-bit set input
175       );
176   ODDR #(
177       .DDR_CLK_EDGE("OPPOSITE_EDGE"),    // "OPPOSITE_EDGE" or "SAME_EDGE" 
178       .INIT(1'b0),                          // Initial value for Q port ('1' or '0')
179       .SRTYPE("SYNC")                    // Reset Type ("ASYNC" or "SYNC")
180   ) ODDR_xclk_n (
181       .Q(dvi_xclk_n),       // 1-bit DDR output
182       .C(pix_clk),          // 1-bit clock input
183       .CE(1),              // 1-bit clock enable input
184       .D1(0),              // 1-bit data input (positive edge)
185       .D2(1),              // 1-bit data input (negative edge)
186       .R(0),              // 1-bit reset input
187       .S(0)               // 1-bit set input
188       );
189
190   i2c_video_programmer my_i2c_video_programmer_i (
191       .CLK200Mhz(clk),
192       .RST(rst),
193       .I2C_SDA(dvi_iic_sda),
194       .I2C_SCL(dvi_iic_scl));
195
196   DCM_BASE #(
197       .CLKDV_DIVIDE(4.0),     // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
198       .CLKFX_DIVIDE(16),      // Can be any interger from 1 to 32
199       .CLKFX_MULTIPLY(2),       // Can be any integer from 2 to 32
200       .CLKIN_DIVIDE_BY_2("FALSE"),   // TRUE/FALSE to enable CLKIN divide by two feature
201       .CLKIN_PERIOD(10.0),     // Specify period of input clock in ns from 1.25 to 1000.00
202       .CLKOUT_PHASE_SHIFT("NONE"),  // Specify phase shift mode of NONE or FIXED
203       .CLK_FEEDBACK("1X"),    // Specify clock feedback of NONE or 1X
204       .DCM_AUTOCALIBRATION("TRUE"),    // DCM calibrartion circuitry TRUE/FALSE
205       .DCM_PERFORMANCE_MODE("MAX_SPEED"),  // Can be MAX_SPEED or MAX_RANGE
206       .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),  // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
207       .DFS_FREQUENCY_MODE("HIGH"),  // LOW or HIGH frequency mode for frequency synthesis
208       .DLL_FREQUENCY_MODE("LOW"),  // LOW, HIGH, or HIGH_SER frequency mode for DLL
209       .DUTY_CYCLE_CORRECTION("TRUE"),    // Duty cycle correction, TRUE or FALSE
210       .FACTORY_JF(16'hF0F0),  // FACTORY JF Values Suggested to be set to X"F0F0" 
211       .PHASE_SHIFT(0),       // Amount of fixed phase shift from -255 to 1023
212       .STARTUP_WAIT("FALSE")   // Delay configuration DONE until DCM LOCK, TRUE/FALSE
213   ) DCM_BASE_dvi (
214       .CLK0(clk_fb),
215       .CLKDV(pix_clk),
216       .CLKFB(clk_fb),
217       .CLKIN(clk),
218       .RST(rst)
219       );
220
221   ODDR ODDR_dvi_d0  (dvi_d0,  pix_clk, 1, dvi_green[4], dvi_blue[0],  ~data_valid_ext, 0);
222   ODDR ODDR_dvi_d1  (dvi_d1,  pix_clk, 1, dvi_green[5], dvi_blue[1],  ~data_valid_ext, 0);
223   ODDR ODDR_dvi_d2  (dvi_d2,  pix_clk, 1, dvi_green[6], dvi_blue[2],  ~data_valid_ext, 0);
224   ODDR ODDR_dvi_d3  (dvi_d3,  pix_clk, 1, dvi_green[7], dvi_blue[3],  ~data_valid_ext, 0);
225   ODDR ODDR_dvi_d4  (dvi_d4,  pix_clk, 1, dvi_red[0],   dvi_blue[4],  ~data_valid_ext, 0);
226   ODDR ODDR_dvi_d5  (dvi_d5,  pix_clk, 1, dvi_red[1],   dvi_blue[5],  ~data_valid_ext, 0);
227   ODDR ODDR_dvi_d6  (dvi_d6,  pix_clk, 1, dvi_red[2],   dvi_blue[6],  ~data_valid_ext, 0);
228   ODDR ODDR_dvi_d7  (dvi_d7,  pix_clk, 1, dvi_red[3],   dvi_blue[7],  ~data_valid_ext, 0);
229   ODDR ODDR_dvi_d8  (dvi_d8,  pix_clk, 1, dvi_red[4],   dvi_green[0], ~data_valid_ext, 0);
230   ODDR ODDR_dvi_d9  (dvi_d9,  pix_clk, 1, dvi_red[5],   dvi_green[1], ~data_valid_ext, 0);
231   ODDR ODDR_dvi_d10 (dvi_d10, pix_clk, 1, dvi_red[6],   dvi_green[2], ~data_valid_ext, 0);
232   ODDR ODDR_dvi_d11 (dvi_d11, pix_clk, 1, dvi_red[7],   dvi_green[3], ~data_valid_ext, 0);
233
234   reg we;
235   reg  [31:0] mem_out;
236   wire [20:0] inAddr;
237   wire [20:0] vga_pixel_addr_;
238   reg  [20:0] vga_pixel_addr;
239   reg  [20:0] last_vga_pixel_addr;
240
241   reg write_enable;
242   reg oe;
243   reg [3:0] wait_until_read;
244   reg [3:0] wait_until_write;
245   reg [3:0] wait_until_video;
246   reg [37:0] addr;
247   wire [35:0] data_out;
248   reg [37:0] out_d;
249   reg [37:0] writeData;
250   
251   reg use_addr;
252
253   assign out_d_ = out_d;
254   
255   assign sram_flash_a0 = use_addr ? addr[0] : 0;
256   assign sram_flash_a1 = use_addr ? addr[1] : vga_pixel_addr[0];
257   assign sram_flash_a2 = use_addr ? addr[2] : vga_pixel_addr[1];
258   assign sram_flash_a3 = use_addr ? addr[3] : vga_pixel_addr[2];
259   assign sram_flash_a4 = use_addr ? addr[4] : vga_pixel_addr[3];
260   assign sram_flash_a5 = use_addr ? addr[5] : vga_pixel_addr[4];
261   assign sram_flash_a6 = use_addr ? addr[6] : vga_pixel_addr[5];
262   assign sram_flash_a7 = use_addr ? addr[7] : vga_pixel_addr[6];
263   assign sram_flash_a8 = use_addr ? addr[8] : vga_pixel_addr[7];
264   assign sram_flash_a9 = use_addr ? addr[9] : vga_pixel_addr[8];
265   assign sram_flash_a10 = use_addr ? addr[10] : vga_pixel_addr[9];
266   assign sram_flash_a11 = use_addr ? addr[11] : vga_pixel_addr[10];
267   assign sram_flash_a12 = use_addr ? addr[12] : vga_pixel_addr[11];
268   assign sram_flash_a13 = use_addr ? addr[13] : vga_pixel_addr[12];
269   assign sram_flash_a14 = use_addr ? addr[14] : vga_pixel_addr[13];
270   assign sram_flash_a15 = use_addr ? addr[15] : vga_pixel_addr[14];
271   assign sram_flash_a16 = use_addr ? addr[16] : vga_pixel_addr[15];
272   assign sram_flash_a17 = use_addr ? addr[17] : vga_pixel_addr[16];
273   assign sram_flash_a18 = use_addr ? addr[18] : vga_pixel_addr[17];
274   assign sram_flash_a19 = use_addr ? addr[19] : vga_pixel_addr[18];
275   assign sram_flash_a20 = use_addr ? addr[20] : vga_pixel_addr[19];
276   assign sram_flash_a21 = use_addr ? addr[21] : vga_pixel_addr[20];
277   
278   assign data_out[0]  = sram_flash_d0;   assign sram_flash_d0  = oe ? 1'bz : writeData[0];
279   assign data_out[1]  = sram_flash_d1;   assign sram_flash_d1  = oe ? 1'bz : writeData[1];
280   assign data_out[2]  = sram_flash_d2;   assign sram_flash_d2  = oe ? 1'bz : writeData[2];
281   assign data_out[3]  = sram_flash_d3;   assign sram_flash_d3  = oe ? 1'bz : writeData[3];
282   assign data_out[4]  = sram_flash_d4;   assign sram_flash_d4  = oe ? 1'bz : writeData[4];
283   assign data_out[5]  = sram_flash_d5;   assign sram_flash_d5  = oe ? 1'bz : writeData[5];
284   assign data_out[6]  = sram_flash_d6;   assign sram_flash_d6  = oe ? 1'bz : writeData[6];
285   assign data_out[7]  = sram_flash_d7;   assign sram_flash_d7  = oe ? 1'bz : writeData[7];
286   assign data_out[8]  = sram_flash_d8;   assign sram_flash_d8  = oe ? 1'bz : writeData[8];
287   assign data_out[9]  = sram_flash_d9;   assign sram_flash_d9  = oe ? 1'bz : writeData[9];
288   assign data_out[10] = sram_flash_d10;  assign sram_flash_d10 = oe ? 1'bz : writeData[10];
289   assign data_out[11] = sram_flash_d11;  assign sram_flash_d11 = oe ? 1'bz : writeData[11];
290   assign data_out[12] = sram_flash_d12;  assign sram_flash_d12 = oe ? 1'bz : writeData[12];
291   assign data_out[13] = sram_flash_d13;  assign sram_flash_d13 = oe ? 1'bz : writeData[13];
292   assign data_out[14] = sram_flash_d14;  assign sram_flash_d14 = oe ? 1'bz : writeData[14];
293   assign data_out[15] = sram_flash_d15;  assign sram_flash_d15 = oe ? 1'bz : writeData[15];
294   assign data_out[16] = sram_d16;        assign sram_d16       = oe ? 1'bz : writeData[16];
295   assign data_out[17] = sram_d17;        assign sram_d17       = oe ? 1'bz : writeData[17];
296   assign data_out[18] = sram_d18;        assign sram_d18       = oe ? 1'bz : writeData[18];
297   assign data_out[19] = sram_d19;        assign sram_d19       = oe ? 1'bz : writeData[19];
298   assign data_out[20] = sram_d20;        assign sram_d20       = oe ? 1'bz : writeData[20];
299   assign data_out[21] = sram_d21;        assign sram_d21       = oe ? 1'bz : writeData[21];
300   assign data_out[22] = sram_d22;        assign sram_d22       = oe ? 1'bz : writeData[22];
301   assign data_out[23] = sram_d23;        assign sram_d23       = oe ? 1'bz : writeData[23];
302   assign data_out[24] = sram_d24;        assign sram_d24       = oe ? 1'bz : writeData[24];
303   assign data_out[25] = sram_d25;        assign sram_d25       = oe ? 1'bz : writeData[25];
304   assign data_out[26] = sram_d26;        assign sram_d26       = oe ? 1'bz : writeData[26];
305   assign data_out[27] = sram_d27;        assign sram_d27       = oe ? 1'bz : writeData[27];
306   assign data_out[28] = sram_d28;        assign sram_d28       = oe ? 1'bz : writeData[28];
307   assign data_out[29] = sram_d29;        assign sram_d29       = oe ? 1'bz : writeData[29];
308   assign data_out[30] = sram_d30;        assign sram_d30       = oe ? 1'bz : writeData[30];
309   assign data_out[31] = sram_d31;        assign sram_d31       = oe ? 1'bz : writeData[31];
310   assign data_out[32] = sram_dqp0;       assign sram_dqp0      = oe ? 1'bz : writeData[32];
311   assign data_out[33] = sram_dqp1;       assign sram_dqp1      = oe ? 1'bz : writeData[33];
312   assign data_out[34] = sram_dqp2;       assign sram_dqp2      = oe ? 1'bz : writeData[34];
313   assign data_out[35] = sram_dqp3;       assign sram_dqp3      = oe ? 1'bz : writeData[35];
314   
315   assign sram_mode       = 0;
316   assign sram_clk        = clk;
317   assign sram_bw0        = ~write_enable;
318   assign sram_bw1        = ~write_enable;
319   assign sram_bw2        = ~write_enable;
320   assign sram_bw3        = ~write_enable;
321   assign sram_flash_we_b = ~write_enable;
322   assign sram_adv_ld_b   = 0;
323   assign sram_cs_b       = 0;
324   assign sram_oe_b       = ~oe;
325
326   // Framebuffer is 544x478 -- yeah, I know that's completely weird.
327
328   wire on_screen_;
329   reg on_screen;
330   assign on_screen_ = (x_coord >= 48) && (x_coord < 592);
331   wire [9:0] adjusted_x_coord;
332   assign adjusted_x_coord = x_coord - 48;
333
334   assign inAddr          = inPixelX_d[20:0]
335                          + { 7'b0000000, inPixelY_d[8:0], 5'b00000    }
336                          + {     3'b000, inPixelY_d[8:0], 9'b0000000000 };
337   assign vga_pixel_addr_ = { 11'b00000000000, adjusted_x_coord }
338                          + { 7'b0000000, y_coord[8:0], 5'b00000 }
339                          + {     3'b000, y_coord[8:0], 9'b0000000000 };
340
341   assign dvi_red         = on_screen ? { mem_out[17:12], 2'b0 } : 0;
342   assign dvi_green       = on_screen ? { mem_out[11:6],  2'b0 } : 0;
343   assign dvi_blue        = on_screen ? { mem_out[5:0],   2'b0 } : 0;
344
345   always @(posedge pix_clk) begin
346       vga_pixel_addr <= vga_pixel_addr_;
347       on_screen      <= on_screen_;
348   end
349
350   wire idle;
351   assign idle = (wait_until_write==0 && wait_until_read==0 && wait_until_video==0);
352
353   always @(posedge clk) begin
354     if (rst) begin
355       `reset
356       wait_until_read <= 0;
357       wait_until_video <= 0;
358       wait_until_write <= 0;
359       use_addr <= 0;
360   
361     end else begin
362       `cleanup
363   
364       write_enable <= 0;
365       oe <= 1;
366
367       if (wait_until_write == 1) begin
368         wait_until_write <= 0;
369         oe <= 0;
370         use_addr <= 0;
371       end else if (wait_until_write != 0) begin
372         wait_until_write <= wait_until_write-1;
373       end
374
375       if (wait_until_read == 1) begin
376         wait_until_read <= 0;
377         out_d <= { 1'b0, data_out };
378         `fill_out
379         `drain_inAddrRead
380         use_addr <= 0;
381       end else if (wait_until_read != 0) begin
382         wait_until_read <= wait_until_read-1;
383       end
384
385       if (wait_until_video == 1) begin
386         wait_until_video <= 0;
387         mem_out <= data_out;
388       end else if (wait_until_video != 0) begin
389         wait_until_video <= wait_until_video-1;
390       end
391
392       if (`inAddrWrite_full && `inDataWrite_full && idle && `out_empty) begin
393         write_enable     <= 1;
394         wait_until_write <= 1;
395         addr             <= { inAddrWrite_d, 1'b0 };
396         writeData        <= inDataWrite_d;
397         out_d            <= { 1'b1, 37'b0 };
398         use_addr         <= 1;
399         `fill_out
400         `drain_inDataWrite
401         `drain_inAddrWrite
402   
403       end else if (`inPixelX_full && `inPixelY_full && `inPixelValue_full && idle) begin
404         `drain_inPixelX
405         `drain_inPixelY
406         `drain_inPixelValue
407         write_enable     <= 1;
408         wait_until_write <= 1;
409         addr             <= { inAddr, 1'b0 };
410         writeData        <= inPixelValue_d;
411         use_addr        <= 1;
412
413       end else if (`inAddrRead_full && idle && `out_empty) begin
414         // next cycle (wait_until_read==3) will assert the address for the request
415         // cycle after that (wait_until_read==2) is the gap
416         // cycle after that (wait_until_read==1) will have the valid data being asserted back
417         // unfortunately, I seem to get errors unless I wait for an EXTRA cycle on top of this.
418 //        wait_until_read <= 3;
419         wait_until_read <= 4;
420         addr            <= { inAddrRead_d, 1'b0 };
421         use_addr        <= 1;
422
423       end else if (last_vga_pixel_addr != vga_pixel_addr && idle && on_screen) begin
424         // wait_until_video can't be more than 3, because (3+1) is the ratio of the pixel clock to the host clock
425         wait_until_video    <= 3;
426         addr                <= { vga_pixel_addr, 1'b0 };
427         last_vga_pixel_addr <= vga_pixel_addr;
428
429       end
430   
431     end
432   end
433
434
435 == UCF ===============================================================
436
437 #Net "dvi_0/dvi_xclk_p_unbuffered" PERIOD =  5 ns HIGH 50%;
438
439 NET  dvi_d0               LOC="AB8"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
440 NET  dvi_d1               LOC="AC8"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
441 NET  dvi_d2               LOC="AN12"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
442 NET  dvi_d3               LOC="AP12"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
443 NET  dvi_d4               LOC="AA9"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
444 NET  dvi_d5               LOC="AA8"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
445 NET  dvi_d6               LOC="AM13"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
446 NET  dvi_d7               LOC="AN13"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
447 NET  dvi_d8               LOC="AA10"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
448 NET  dvi_d9               LOC="AB10"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
449 NET  dvi_d10              LOC="AP14"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
450 NET  dvi_d11              LOC="AN14"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
451 NET  dvi_de               LOC="AE8"   | IOSTANDARD="LVDCI_33" | SLEW=FAST;   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
452 NET  dvi_reset_b          LOC="AK6"   | IOSTANDARD="LVCMOS33";   # Bank 18, Vcco=3.3V, No DCI
453 NET  dvi_h                LOC="AM12"  | IOSTANDARD="LVDCI_33" | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
454 NET  dvi_v                LOC="AM11"  | IOSTANDARD="LVDCI_33" | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
455 NET  dvi_xclk_n           LOC="AL10"  | IOSTANDARD="LVCMOS33" | DRIVE=24 | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
456 NET  dvi_xclk_p           LOC="AL11"  | IOSTANDARD="LVCMOS33" | DRIVE=24 | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
457
458 NET  dvi_gpio1            LOC="N30" | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
459 NET  dvi_iic_scl          LOC="U27" | PULLUP | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
460 NET  dvi_iic_sda          LOC="T29" | PULLUP | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
461
462 NET  gpio_led_c           LOC="E8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
463 NET  gpio_led_e           LOC="AG23";  # Bank 2, Vcco=3.3V
464 NET  gpio_led_n           LOC="AF13";  # Bank 2, Vcco=3.3V
465 NET  gpio_led_s           LOC="AG12";  # Bank 2, Vcco=3.3V
466 NET  gpio_led_w           LOC="AF23";  # Bank 2, Vcco=3.3V
467
468 NET  gpio_led_0           LOC="H18";   # Bank 3, Vcco=2.5V, No DCI
469 NET  gpio_led_1           LOC="L18";   # Bank 3, Vcco=2.5V, No DCI
470 NET  gpio_led_2           LOC="G15";   # Bank 3, Vcco=2.5V, No DCI
471 NET  gpio_led_3           LOC="AD26" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
472 NET  gpio_led_4           LOC="G16";   # Bank 3, Vcco=2.5V, No DCI
473 NET  gpio_led_5           LOC="AD25" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
474 NET  gpio_led_6           LOC="AD24" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
475 NET  gpio_led_7           LOC="AE24" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
476
477 ######
478
479 NET  sram_adv_ld_b        LOC="H8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
480 NET  sram_bw0             LOC="D10";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
481 NET  sram_bw1             LOC="D11";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
482 NET  sram_bw2             LOC="J11";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
483 NET  sram_bw3             LOC="K11";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
484 NET  sram_clk             LOC="AG21";  # Bank 4, Vcco=3.3V, No DCI      
485 NET  sram_clk             LOC="G8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
486 NET  sram_cs_b            LOC="J10";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
487 NET  sram_d16             LOC="N10";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
488 NET  sram_d17             LOC="E13";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
489 NET  sram_d18             LOC="E12";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
490 NET  sram_d19             LOC="L9";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
491 NET  sram_d20             LOC="M10";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors      
492 NET  sram_d21             LOC="E11";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
493 NET  sram_d22             LOC="F11";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
494 NET  sram_d23             LOC="L8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
495 NET  sram_d24             LOC="M8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
496 NET  sram_d25             LOC="G12";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
497 NET  sram_d26             LOC="G11";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
498 NET  sram_d27             LOC="C13";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
499 NET  sram_d28             LOC="B13";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
500 NET  sram_d29             LOC="K9";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
501 NET  sram_d30             LOC="K8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
502 NET  sram_d31             LOC="J9";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
503 NET  sram_dqp0            LOC="D12";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
504 NET  sram_dqp1            LOC="C12";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
505 NET  sram_dqp2            LOC="H10";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
506 NET  sram_dqp3            LOC="H9";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
507 NET  sram_flash_a0        LOC="K12";   # Bank 1, Vcco=3.3V
508 NET  sram_flash_a1        LOC="K13";   # Bank 1, Vcco=3.3V
509 NET  sram_flash_a2        LOC="H23";   # Bank 1, Vcco=3.3V
510 NET  sram_flash_a3        LOC="G23";   # Bank 1, Vcco=3.3V
511 NET  sram_flash_a4        LOC="H12";   # Bank 1, Vcco=3.3V
512 NET  sram_flash_a5        LOC="J12";   # Bank 1, Vcco=3.3V
513 NET  sram_flash_a6        LOC="K22";   # Bank 1, Vcco=3.3V
514 NET  sram_flash_a7        LOC="K23";   # Bank 1, Vcco=3.3V
515 NET  sram_flash_a8        LOC="K14";   # Bank 1, Vcco=3.3V
516 NET  sram_flash_a9        LOC="L14";   # Bank 1, Vcco=3.3V
517 NET  sram_flash_a10       LOC="H22";   # Bank 1, Vcco=3.3V
518 NET  sram_flash_a11       LOC="G22";   # Bank 1, Vcco=3.3V
519 NET  sram_flash_a12       LOC="J15";   # Bank 1, Vcco=3.3V
520 NET  sram_flash_a13       LOC="K16";   # Bank 1, Vcco=3.3V
521 NET  sram_flash_a14       LOC="K21";   # Bank 1, Vcco=3.3V
522 NET  sram_flash_a15       LOC="J22";   # Bank 1, Vcco=3.3V
523 NET  sram_flash_a16       LOC="L16";   # Bank 1, Vcco=3.3V
524 NET  sram_flash_a17       LOC="L15";   # Bank 1, Vcco=3.3V
525 NET  sram_flash_a18       LOC="L20";   # Bank 1, Vcco=3.3V
526 NET  sram_flash_a19       LOC="L21";   # Bank 1, Vcco=3.3V
527 NET  sram_flash_a20       LOC="AE23";  # Bank 2, Vcco=3.3V
528 NET  sram_flash_a21       LOC="AE22";  # Bank 2, Vcco=3.3V
529 NET  sram_flash_d0        LOC="AD19";  # Bank 2, Vcco=3.3V
530 NET  sram_flash_d1        LOC="AE19";  # Bank 2, Vcco=3.3V
531 NET  sram_flash_d2        LOC="AE17";  # Bank 2, Vcco=3.3V
532 NET  sram_flash_d3        LOC="AF16";  # Bank 2, Vcco=3.3V
533 NET  sram_flash_d4        LOC="AD20";  # Bank 2, Vcco=3.3V
534 NET  sram_flash_d5        LOC="AE21";  # Bank 2, Vcco=3.3V
535 NET  sram_flash_d6        LOC="AE16";  # Bank 2, Vcco=3.3V
536 NET  sram_flash_d7        LOC="AF15";  # Bank 2, Vcco=3.3V
537 NET  sram_flash_d8        LOC="AH13";  # Bank 4, Vcco=3.3V, No DCI
538 NET  sram_flash_d9        LOC="AH14";  # Bank 4, Vcco=3.3V, No DCI
539 NET  sram_flash_d10       LOC="AH19";  # Bank 4, Vcco=3.3V, No DCI
540 NET  sram_flash_d11       LOC="AH20";  # Bank 4, Vcco=3.3V, No DCI
541 NET  sram_flash_d12       LOC="AG13";  # Bank 4, Vcco=3.3V, No DCI
542 NET  sram_flash_d13       LOC="AH12";  # Bank 4, Vcco=3.3V, No DCI
543 NET  sram_flash_d14       LOC="AH22";  # Bank 4, Vcco=3.3V, No DCI
544 NET  sram_flash_d15       LOC="AG22";  # Bank 4, Vcco=3.3V, No DCI
545 NET  sram_flash_we_b      LOC="AF20";  # Bank 2, Vcco=3.3V
546 NET  sram_mode            LOC="A13";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
547 NET  sram_oe_b            LOC="B12";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
548
549
550
551 == TeX ==============================================================
552
553 == Fleeterpreter ====================================================
554 private java.awt.Frame frame = null;
555 private java.awt.Panel panel = null;
556 private long[][] bits;
557 public static int SCREEN_WIDTH = 577;
558 public static int SCREEN_HEIGHT = 478;
559 public void service() {
560     long x,y,d;
561     if (box_inPixelX.dataReadyForShip() &&
562         box_inPixelY.dataReadyForShip() &&
563         box_inPixelValue.dataReadyForShip()) {
564         x      = box_inPixelX.removeDataForShip();
565         y      = box_inPixelY.removeDataForShip();
566         d      = box_inPixelValue.removeDataForShip();
567     } else if (box_inAddrWrite.dataReadyForShip() &&
568                box_inDataWrite.dataReadyForShip() &&
569                box_out.readyForDataFromShip()) {
570         long addr = box_inAddrWrite.removeDataForShip();
571         x      = addr % SCREEN_WIDTH;
572         y      = addr / SCREEN_WIDTH;
573         d      = box_inDataWrite.removeDataForShip();
574         box_out.addDataFromShip(0,true);
575     } else if (box_inAddrRead.dataReadyForShip() &&
576                box_out.readyForDataFromShip()) {
577         long addr = box_inAddrRead.removeDataForShip();
578         x      = addr % SCREEN_WIDTH;
579         y      = addr / SCREEN_WIDTH;
580         box_out.addDataFromShip(bits[(int)x][(int)y],false);
581         return;
582     } else {
583         return;
584     }
585     if (frame==null) {
586         frame = new java.awt.Frame();
587         bits = new long[SCREEN_WIDTH][SCREEN_HEIGHT];
588         for(int i=0; i<SCREEN_WIDTH; i++) bits[i] = new long[SCREEN_HEIGHT];
589         frame.setSize(SCREEN_WIDTH,SCREEN_HEIGHT);
590         panel = new java.awt.Panel() {
591                 public void paint(java.awt.Graphics g_) {
592                     java.awt.Graphics2D g2 = (java.awt.Graphics2D)g_;
593                     g2.transform(java.awt.geom.AffineTransform.getScaleInstance(((double)panel.getWidth())/SCREEN_WIDTH,
594                                                                                 ((double)panel.getHeight())/SCREEN_HEIGHT));
595                     for(int xx=0; xx<SCREEN_WIDTH; xx++) {
596                         for(int yy=0; yy<SCREEN_HEIGHT; yy++) {
597                             long d = bits[xx][yy];
598                             java.awt.Color c = new java.awt.Color(
599                                                                   (int)(((d >> 12) & ~((-1L) << 6)) << 2),
600                                                                   (int)(((d >>  6) & ~((-1L) << 6)) << 2),
601                                                                   (int)(((d >>  0) & ~((-1L) << 6)) << 2)
602                                                                   );
603                             g2.setColor(c);
604                             g2.fillRect((int)xx,(int)yy,1,1);
605                         }
606                     }
607                 }
608             };
609         frame.setLayout(new java.awt.BorderLayout());
610         frame.add(panel, java.awt.BorderLayout.CENTER);
611         panel.setBackground(java.awt.Color.black);
612         frame.show();
613     }
614     bits[(int)x][(int)y] = d;
615     panel.repaint();
616 }
617
618 == FleetSim ==============================================================
619
620 == Constants =========================================================
621
622 == Test ==============================================================
623 #skip
624
625 #expect 0
626 #expect 0
627 #expect 0
628
629 #ship debug : Debug
630 #ship video : Dvi
631
632 video.inPixelX:
633   set word=0;
634   deliver;
635   send token to debug.in;
636 video.inPixelY:
637   set word=0;
638   deliver;
639   send token to debug.in;
640 video.inPixelValue:
641   set word=0;
642   deliver;
643   send token to debug.in;
644
645 debug.in:
646   set word=0;
647   set ilc=*;
648   recv token, deliver;
649
650
651 == Contributors =========================================================
652 Adam Megacz <megacz@cs.berkeley.edu>