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