add Dvi.ship
[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 percolate down:  dvi_gpio1   1
28
29 percolate up:    dvi_iic_scl 1
30 percolate inout: dvi_iic_sda 1
31
32 percolate up:    gpio_led_c   1
33 percolate up:    gpio_led_e   1
34 percolate up:    gpio_led_n   1
35 percolate up:    gpio_led_s   1
36 percolate up:    gpio_led_w   1
37 percolate up:    gpio_led_0   1
38 percolate up:    gpio_led_1   1
39 percolate up:    gpio_led_2   1
40 percolate up:    gpio_led_3   1
41 percolate up:    gpio_led_4   1
42 percolate up:    gpio_led_5   1
43 percolate up:    gpio_led_6   1
44 percolate up:    gpio_led_7   1
45
46 == TeX ==============================================================
47
48 == Fleeterpreter ====================================================
49
50   public void service() { }
51
52 == FleetSim ==============================================================
53
54 == FPGA ==============================================================
55
56   assign dvi_de      = 1;
57   assign dvi_reset_b = 1;
58
59   assign dvi_d0      = 1;
60   assign dvi_d1      = 0;
61   assign dvi_d2      = 1;
62   assign dvi_d3      = 0;
63   assign dvi_d4      = 1;
64   assign dvi_d5      = 0;
65   assign dvi_d6      = 1;
66   assign dvi_d7      = 0;
67   assign dvi_d8      = 1;
68   assign dvi_d9      = 0;
69   assign dvi_d10     = 1;
70   assign dvi_d11     = 0;
71
72   assign gpio_led_n = 1;
73   assign gpio_led_s = 0;
74
75   assign gpio_led_0 = dvi_gpio1;
76   assign gpio_led_1 = 0;
77   assign gpio_led_2 = 1;
78   assign gpio_led_3 = 0;
79   assign gpio_led_4 = 1;
80   assign gpio_led_5 = 0;
81   assign gpio_led_6 = 1;
82   assign gpio_led_7 = 0;
83
84   wire dvi_xclk_p_unbuffered;
85   wire dvi_xclk_n_unbuffered;
86   wire dvi_xclk_fb;
87   BUFG GBUF_FOR_DVI_CLOCK_N (.I(dvi_xclk_n_unbuffered), .O(dvi_xclk_n));
88   BUFG GBUF_FOR_DVI_CLOCK_P (.I(dvi_xclk_p_unbuffered), .O(dvi_xclk_p));
89   DCM  // 25Mhz VGA clock
90    #(
91       .CLKFX_MULTIPLY(4),
92       .CLKFX_DIVIDE(16),
93       .CLKIN_PERIOD("20 ns")
94     ) vgadcm (
95       .CLKIN    (clk),
96       .CLKFB    (dvi_xclk_fb),
97       .CLKFX    (dvi_xclk_p_unbuffered),
98       .CLKFX180 (dvi_xclk_n_unbuffered),
99       .CLK0     (dvi_xclk_fb)
100     );
101
102   wire [31:0] vga_pixel_addr_;
103   wire        vga_pixel_r;
104   wire        vga_pixel_a_;
105   reg         vga_pixel_a;
106   assign vga_pixel_a_ = vga_pixel_a;
107   wire [18:0] inAddr;
108
109   reg we;
110   wire [2:0] mem_out;
111   wire  [31:0] vga_pixel_data;
112   assign vga_pixel_data = {
113              8'b0,
114              mem_out[2], 7'b0,
115              mem_out[1], 7'b0,
116              mem_out[0], 7'b0
117   };
118
119   assign inAddr = inX_d + (inY_d * 640);
120
121   vram vram(clk, !rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
122
123   wb_vga wb_vga(
124         .wb_clk_i(clk),
125         .wb_rst_i(rst),
126         
127         .fbwb_adr_o(vga_pixel_addr_),
128         .fbwb_stb_o(vga_pixel_r),
129         .fbwb_ack_i(vga_pixel_a_),
130         .fbwb_dat_i(vga_pixel_data),
131
132         /* VGA signals */
133         .vga_clk(dvi_xclk),
134         .vga_psave(vga_psave),
135         .vga_hsync(dvi_h),
136         .vga_vsync(dvi_v),
137         .vga_sync(vga_sync),
138         .vga_blank(vga_blank),
139         .vga_r(vga_r),
140         .vga_g(vga_g),
141         .vga_b(vga_b)
142         // .vga_clkout(vga_clkout)
143   );
144
145   always @(posedge clk) begin
146
147     if (rst) begin
148       `reset
149     end else begin
150       `cleanup
151       vga_pixel_a <= vga_pixel_r;
152
153       if (`inX_full && `inY_full && `inData_full) begin
154          we <= 1;
155          `drain_inX
156          `drain_inY
157          `drain_inData
158       end else begin
159          we <= 0;
160       end
161
162     end
163   end
164
165 == Constants ========================================================
166
167 == Test ==============================================================
168 #skip
169
170 #ship debug : Debug
171
172 == Contributors =========================================================
173 Adam Megacz <megacz@cs.berkeley.edu>