3d88be3b8ae3fca1380eb232bb702ea976d01743
[fleet.git] / ships / Dvi.ship
1 ship: Video
2
3 == Ports ===========================================================
4 data  in:    inX
5 data  in:    inY
6 data  in:    inData
7
8 percolate up:    dvi_d0      1
9 percolate up:    dvi_d1      1
10 percolate up:    dvi_d2      1
11 percolate up:    dvi_d3      1
12 percolate up:    dvi_d4      1
13 percolate up:    dvi_d5      1
14 percolate up:    dvi_d6      1
15 percolate up:    dvi_d7      1
16 percolate up:    dvi_d8      1
17 percolate up:    dvi_d9      1
18 percolate up:    dvi_d10     1
19 percolate up:    dvi_d11     1
20
21 percolate up:    dvi_h       1
22 percolate up:    dvi_v       1
23 percolate up:    dvi_xclk_n  1
24 percolate up:    dvi_xclk_p  1
25 percolate up:    dvi_de      1
26 percolate up:    dvi_reset_b 1
27
28 percolate down:  gpio_sw_c    1
29
30 percolate up:    gpio_led_c   1
31 percolate up:    gpio_led_e   1
32 percolate up:    gpio_led_n   1
33 percolate up:    gpio_led_s   1
34 percolate up:    gpio_led_w   1
35
36 percolate up:    gpio_led_0   1
37 percolate up:    gpio_led_1   1
38 percolate up:    gpio_led_2   1
39 percolate up:    gpio_led_3   1
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 down:  dvi_gpio1   1
46 percolate up:    dvi_iic_scl 1
47 percolate inout: dvi_iic_sda 1
48
49 == FPGA ==============================================================
50
51 wire [11:0] dvi_d;
52 assign dvi_d0  = dvi_d[0];
53 assign dvi_d1  = dvi_d[1];
54 assign dvi_d2  = dvi_d[2];
55 assign dvi_d3  = dvi_d[3];
56 assign dvi_d4  = dvi_d[4];
57 assign dvi_d5  = dvi_d[5];
58 assign dvi_d6  = dvi_d[6];
59 assign dvi_d7  = dvi_d[7];
60 assign dvi_d8  = dvi_d[8];
61 assign dvi_d9  = dvi_d[9];
62 assign dvi_d10 = dvi_d[10];
63 assign dvi_d11 = dvi_d[11];
64
65 dvi_video_test my_dvi_video_test(
66   .CLK_P(clk),
67   .CLK_N(clk),
68   .I2C_SDA(dvi_iic_sda),
69   .I2C_SCL(dvi_iic_scl),
70
71   .DVI_D(dvi_d),
72   .DVI_H(dvi_h),
73   .DVI_V(dvi_v),
74   .DVI_DE(dvi_de),
75   .DVI_XCLK_N(dvi_xclk_n),
76   .DVI_XCLK_P(dvi_xclk_p),
77   .DVI_RESET_B(dvi_reset_b),
78
79   .VGA_PIXEL_CLK(1'b0),
80   .VGA_Y_GREEN(8'b0),
81   .VGA_CBCR_RED(8'b0),
82   .VGA_BLUE(8'b0),
83   .VGA_HSYNC(1'b0),
84   .VGA_VSYNC(1'b0),
85   .VGA_ODD_EVEN_B(1'b0),
86   .VGA_SOGOUT(1'b0),
87   .VGA_CLAMP(1'b0),
88   .VGA_COAST(1'b0),
89
90   .SOGOUT(),
91   .PIXEL_X_COORD(),
92   .PIXEL_Y_COORD(),
93   .TOTAL_PIXEL_COUNT(),
94   .VGA_DATA_VALID(),
95   .Y(),
96   .HSYNC(),
97   .VSYNC(),
98   .DVI_PIXEL_COUNT(),
99   .DVI_X_COORD(),
100   .DVI_Y_COORD(),
101   .DVI_DATA_VALID()
102
103  );
104
105
106
107 /*
108   assign dvi_de      = 1;
109   assign dvi_reset_b = 1;
110
111   assign dvi_d0      = 1;
112   assign dvi_d1      = 0;
113   assign dvi_d2      = 1;
114   assign dvi_d3      = 0;
115   assign dvi_d4      = 1;
116   assign dvi_d5      = 0;
117   assign dvi_d6      = 1;
118   assign dvi_d7      = 0;
119   assign dvi_d8      = 1;
120   assign dvi_d9      = 0;
121   assign dvi_d10     = 1;
122   assign dvi_d11     = 0;
123 */
124   assign gpio_led_n = 1;
125   assign gpio_led_s = 0;
126
127   assign gpio_led_0 = dvi_gpio1;
128   assign gpio_led_1 = gpio_sw_c;
129   //assign gpio_led_2 = dvi_xclk_p;
130   //assign gpio_led_3 = 0;
131   //assign gpio_led_4 = 1;
132   assign gpio_led_5 = 0;
133   assign gpio_led_6 = 1;
134   assign gpio_led_7 = 0;
135 /*
136   wire dvi_xclk_p_unbuffered;
137   wire dvi_xclk_n_unbuffered;
138   wire dvi_xclk_fb;
139 */
140 /*
141   reg initialized;
142   always @(posedge clk) begin
143     if (rst) begin
144       initialized <= 0;
145     end else begin
146       if (!initialized && gpio_sw_c) begin
147       end
148     end
149   end
150 */
151 /*
152 i2c_video_programmer my_i2c_video_programmer
153   ( .CLK200Mhz(clk),
154     .RST(rst),
155     .I2C_SDA(dvi_iic_sda),
156     .I2C_SCL(dvi_iic_scl)
157   );
158
159
160   BUFG GBUF_FOR_DVI_CLOCK_N (.I(dvi_xclk_n_unbuffered), .O(dvi_xclk_n));
161   BUFG GBUF_FOR_DVI_CLOCK_P (.I(dvi_xclk_p_unbuffered), .O(dvi_xclk_p));
162   DCM  // 36Mhz DVI clock
163    #(
164       .CLKFX_MULTIPLY(9),
165       .CLKFX_DIVIDE(25),
166       .CLKIN_PERIOD("10 ns"),
167       .DLL_FREQUENCY_MODE("LOW")
168     ) vgadcm (
169       .CLKIN    (clk),
170       .CLKFB    (dvi_xclk_fb),
171       .CLKFX    (dvi_xclk_p_unbuffered),
172       .CLKFX180 (dvi_xclk_n_unbuffered),
173       .CLK0     (dvi_xclk_fb)
174     );
175
176
177   wire [31:0] vga_pixel_addr_;
178   wire        vga_pixel_r;
179   wire        vga_pixel_a_;
180   reg         vga_pixel_a;
181   assign vga_pixel_a_ = vga_pixel_a;
182   wire [18:0] inAddr;
183
184   reg we;
185   wire [2:0] mem_out;
186   wire  [31:0] vga_pixel_data;
187   assign vga_pixel_data = {
188              8'b0,
189              mem_out[2], 7'b0,
190              mem_out[1], 7'b0,
191              mem_out[0], 7'b0
192   };
193
194   assign inAddr = inX_d + (inY_d * 640);
195
196   vram vram(clk, !rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
197
198   wb_vga wb_vga(
199         .wb_clk_i(clk),
200         .wb_rst_i(rst),
201         
202         .fbwb_adr_o(vga_pixel_addr_),
203         .fbwb_stb_o(vga_pixel_r),
204         .fbwb_ack_i(vga_pixel_a_),
205         .fbwb_dat_i(vga_pixel_data),
206
207         // VGA signals
208         .vga_clk(dvi_xclk_p),
209         .vga_psave(vga_psave),
210         .vga_hsync(dvi_h),
211         .vga_vsync(dvi_v),
212         .vga_sync(vga_sync),
213         .vga_blank(vga_blank),
214         .vga_r(vga_r),
215         .vga_g(vga_g),
216         .vga_b(vga_b)
217         // .vga_clkout(vga_clkout)
218   );
219
220   always @(posedge clk) begin
221
222     if (rst) begin
223       `reset
224     end else begin
225       `cleanup
226       vga_pixel_a <= vga_pixel_r;
227
228       if (`inX_full && `inY_full && `inData_full) begin
229          we <= 1;
230          `drain_inX
231          `drain_inY
232          `drain_inData
233       end else begin
234          we <= 0;
235       end
236
237     end
238   end
239
240 */
241
242 == UCF ===============================================================
243
244 #Net "dvi_0/dvi_xclk_p_unbuffered" PERIOD =  5 ns HIGH 50%;
245
246 NET  dvi_d0               LOC="AB8"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
247 NET  dvi_d1               LOC="AC8"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
248 NET  dvi_d2               LOC="AN12"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
249 NET  dvi_d3               LOC="AP12"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
250 NET  dvi_d4               LOC="AA9"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
251 NET  dvi_d5               LOC="AA8"   | IOSTANDARD="LVDCI_33";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
252 NET  dvi_d6               LOC="AM13"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
253 NET  dvi_d7               LOC="AN13"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
254 NET  dvi_d8               LOC="AA10"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
255 NET  dvi_d9               LOC="AB10"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
256 NET  dvi_d10              LOC="AP14"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
257 NET  dvi_d11              LOC="AN14"  | IOSTANDARD="LVDCI_33";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
258 NET  dvi_de               LOC="AE8"   | IOSTANDARD="LVDCI_33" | SLEW=FAST;   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
259 NET  dvi_reset_b          LOC="AK6"   | IOSTANDARD="LVCMOS33";   # Bank 18, Vcco=3.3V, No DCI
260 NET  dvi_h                LOC="AM12"  | IOSTANDARD="LVDCI_33" | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
261 NET  dvi_v                LOC="AM11"  | IOSTANDARD="LVDCI_33" | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
262 NET  dvi_xclk_n           LOC="AL10"  | IOSTANDARD="LVCMOS33" | DRIVE=24 | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
263 NET  dvi_xclk_p           LOC="AL11"  | IOSTANDARD="LVCMOS33" | DRIVE=24 | SLEW=FAST;  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
264
265 NET  dvi_gpio1            LOC="N30" | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
266 NET  dvi_iic_scl          LOC="U27" | PULLUP | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
267 NET  dvi_iic_sda          LOC="T29" | PULLUP | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
268
269 NET  gpio_sw_c            LOC="AJ6" | IOSTANDARD="LVCMOS33";   # Bank 18, Vcco=3.3V, No DCI
270
271 NET  gpio_led_c           LOC="E8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
272 NET  gpio_led_e           LOC="AG23";  # Bank 2, Vcco=3.3V
273 NET  gpio_led_n           LOC="AF13";  # Bank 2, Vcco=3.3V
274 NET  gpio_led_s           LOC="AG12";  # Bank 2, Vcco=3.3V
275 NET  gpio_led_w           LOC="AF23";  # Bank 2, Vcco=3.3V
276
277 NET  gpio_led_0           LOC="H18";   # Bank 3, Vcco=2.5V, No DCI
278 NET  gpio_led_1           LOC="L18";   # Bank 3, Vcco=2.5V, No DCI
279 NET  gpio_led_2           LOC="G15";   # Bank 3, Vcco=2.5V, No DCI
280 NET  gpio_led_3           LOC="AD26" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
281 NET  gpio_led_4           LOC="G16";   # Bank 3, Vcco=2.5V, No DCI
282 NET  gpio_led_5           LOC="AD25" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
283 NET  gpio_led_6           LOC="AD24" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
284 NET  gpio_led_7           LOC="AE24" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
285
286 == TeX ==============================================================
287
288 == Fleeterpreter ====================================================
289
290   public void service() { }
291
292 == FleetSim ==============================================================
293
294 == Constants =========================================================
295
296 == Test ==============================================================
297 #skip
298
299 #ship debug : Debug
300
301 == Contributors =========================================================
302 Adam Megacz <megacz@cs.berkeley.edu>