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