3 == Ports ===========================================================
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
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
28 percolate down: gpio_sw_c 1
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
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
45 percolate down: dvi_gpio1 1
46 percolate up: dvi_iic_scl 1
47 percolate inout: dvi_iic_sda 1
49 == FPGA ==============================================================
53 assign dvi_d0 = dvi_d[0];
54 assign dvi_d1 = dvi_d[1];
55 assign dvi_d2 = dvi_d[2];
56 assign dvi_d3 = dvi_d[3];
57 assign dvi_d4 = dvi_d[4];
58 assign dvi_d5 = dvi_d[5];
59 assign dvi_d6 = dvi_d[6];
60 assign dvi_d7 = dvi_d[7];
61 assign dvi_d8 = dvi_d[8];
62 assign dvi_d9 = dvi_d[9];
63 assign dvi_d10 = dvi_d[10];
64 assign dvi_d11 = dvi_d[11];
69 assign dvi_reset_b = 1;
71 assign dvi_de = data_valid_ext;
78 //assign dvi_green = 8'b101010;
79 //assign dvi_red = 8'b111111;
80 //assign dvi_blue = 8'b000000;
82 assign dvi_green = x_coord[7:0];
83 assign dvi_red = y_coord[7:0];
84 assign dvi_blue = 8'b00000000;
99 ) my_vga_timing_generator (
107 .DATA_VALID_EXT(data_valid_ext),
112 .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
113 .INIT(1'b0), // Initial value for Q port ('1' or '0')
114 .SRTYPE("SYNC") // Reset Type ("ASYNC" or "SYNC")
116 .Q(dvi_xclk_p), // 1-bit DDR output
117 .C(pix_clk), // 1-bit clock input
118 .CE(1), // 1-bit clock enable input
119 .D1(1), // 1-bit data input (positive edge)
120 .D2(0), // 1-bit data input (negative edge)
121 .R(0), // 1-bit reset input
122 .S(0) // 1-bit set input
125 .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
126 .INIT(1'b0), // Initial value for Q port ('1' or '0')
127 .SRTYPE("SYNC") // Reset Type ("ASYNC" or "SYNC")
129 .Q(dvi_xclk_n), // 1-bit DDR output
130 .C(pix_clk), // 1-bit clock input
131 .CE(1), // 1-bit clock enable input
132 .D1(0), // 1-bit data input (positive edge)
133 .D2(1), // 1-bit data input (negative edge)
134 .R(0), // 1-bit reset input
135 .S(0) // 1-bit set input
138 i2c_video_programmer my_i2c_video_programmer_i (
141 .I2C_SDA(dvi_iic_sda),
142 .I2C_SCL(dvi_iic_scl));
145 .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
146 .CLKFX_DIVIDE(16), // Can be any interger from 1 to 32
147 .CLKFX_MULTIPLY(2), // Can be any integer from 2 to 32
148 .CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature
149 .CLKIN_PERIOD(10.0), // Specify period of input clock in ns from 1.25 to 1000.00
150 .CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift mode of NONE or FIXED
151 .CLK_FEEDBACK("1X"), // Specify clock feedback of NONE or 1X
152 .DCM_AUTOCALIBRATION("TRUE"), // DCM calibrartion circuitry TRUE/FALSE
153 .DCM_PERFORMANCE_MODE("MAX_SPEED"), // Can be MAX_SPEED or MAX_RANGE
154 .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
155 .DFS_FREQUENCY_MODE("HIGH"), // LOW or HIGH frequency mode for frequency synthesis
156 .DLL_FREQUENCY_MODE("LOW"), // LOW, HIGH, or HIGH_SER frequency mode for DLL
157 .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
158 .FACTORY_JF(16'hF0F0), // FACTORY JF Values Suggested to be set to X"F0F0"
159 .PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 1023
160 .STARTUP_WAIT("FALSE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE
169 ODDR ODDR_dvi_d0 (dvi_d0, pix_clk, 1, dvi_green[4], dvi_blue[0], ~data_valid_ext, 0);
170 ODDR ODDR_dvi_d1 (dvi_d1, pix_clk, 1, dvi_green[5], dvi_blue[1], ~data_valid_ext, 0);
171 ODDR ODDR_dvi_d2 (dvi_d2, pix_clk, 1, dvi_green[6], dvi_blue[2], ~data_valid_ext, 0);
172 ODDR ODDR_dvi_d3 (dvi_d3, pix_clk, 1, dvi_green[7], dvi_blue[3], ~data_valid_ext, 0);
173 ODDR ODDR_dvi_d4 (dvi_d4, pix_clk, 1, dvi_red[0], dvi_blue[4], ~data_valid_ext, 0);
174 ODDR ODDR_dvi_d5 (dvi_d5, pix_clk, 1, dvi_red[1], dvi_blue[5], ~data_valid_ext, 0);
175 ODDR ODDR_dvi_d6 (dvi_d6, pix_clk, 1, dvi_red[2], dvi_blue[6], ~data_valid_ext, 0);
176 ODDR ODDR_dvi_d7 (dvi_d7, pix_clk, 1, dvi_red[3], dvi_blue[7], ~data_valid_ext, 0);
177 ODDR ODDR_dvi_d8 (dvi_d8, pix_clk, 1, dvi_red[4], dvi_green[0], ~data_valid_ext, 0);
178 ODDR ODDR_dvi_d9 (dvi_d9, pix_clk, 1, dvi_red[5], dvi_green[1], ~data_valid_ext, 0);
179 ODDR ODDR_dvi_d10 (dvi_d10, pix_clk, 1, dvi_red[6], dvi_green[2], ~data_valid_ext, 0);
180 ODDR ODDR_dvi_d11 (dvi_d11, pix_clk, 1, dvi_red[7], dvi_green[3], ~data_valid_ext, 0);
185 dvi_video_test my_dvi_video_test(
193 .DVI_XCLK_N(dvi_xclk_n),
194 .DVI_XCLK_P(dvi_xclk_p),
195 .DVI_RESET_B(dvi_reset_b),
197 .VGA_PIXEL_CLK(1'b0),
203 .VGA_ODD_EVEN_B(1'b0),
211 .TOTAL_PIXEL_COUNT(),
227 assign dvi_reset_b = 1;
242 assign gpio_led_n = 1;
243 assign gpio_led_s = 0;
245 assign gpio_led_0 = dvi_gpio1;
246 assign gpio_led_1 = gpio_sw_c;
247 //assign gpio_led_2 = dvi_xclk_p;
248 //assign gpio_led_3 = 0;
249 //assign gpio_led_4 = 1;
250 assign gpio_led_5 = 0;
251 assign gpio_led_6 = 1;
252 assign gpio_led_7 = 0;
254 wire dvi_xclk_p_unbuffered;
255 wire dvi_xclk_n_unbuffered;
260 always @(posedge clk) begin
264 if (!initialized && gpio_sw_c) begin
270 i2c_video_programmer my_i2c_video_programmer
273 .I2C_SDA(dvi_iic_sda),
274 .I2C_SCL(dvi_iic_scl)
278 BUFG GBUF_FOR_DVI_CLOCK_N (.I(dvi_xclk_n_unbuffered), .O(dvi_xclk_n));
279 BUFG GBUF_FOR_DVI_CLOCK_P (.I(dvi_xclk_p_unbuffered), .O(dvi_xclk_p));
280 DCM // 36Mhz DVI clock
284 .CLKIN_PERIOD("10 ns"),
285 .DLL_FREQUENCY_MODE("LOW")
288 .CLKFB (dvi_xclk_fb),
289 .CLKFX (dvi_xclk_p_unbuffered),
290 .CLKFX180 (dvi_xclk_n_unbuffered),
295 wire [31:0] vga_pixel_addr_;
299 assign vga_pixel_a_ = vga_pixel_a;
304 wire [31:0] vga_pixel_data;
305 assign vga_pixel_data = {
312 assign inAddr = inX_d + (inY_d * 640);
314 vram vram(clk, !rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
320 .fbwb_adr_o(vga_pixel_addr_),
321 .fbwb_stb_o(vga_pixel_r),
322 .fbwb_ack_i(vga_pixel_a_),
323 .fbwb_dat_i(vga_pixel_data),
326 .vga_clk(dvi_xclk_p),
327 .vga_psave(vga_psave),
331 .vga_blank(vga_blank),
335 // .vga_clkout(vga_clkout)
338 always @(posedge clk) begin
344 vga_pixel_a <= vga_pixel_r;
346 if (`inX_full && `inY_full && `inData_full) begin
360 == UCF ===============================================================
362 #Net "dvi_0/dvi_xclk_p_unbuffered" PERIOD = 5 ns HIGH 50%;
364 NET dvi_d0 LOC="AB8" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
365 NET dvi_d1 LOC="AC8" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
366 NET dvi_d2 LOC="AN12" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
367 NET dvi_d3 LOC="AP12" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
368 NET dvi_d4 LOC="AA9" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
369 NET dvi_d5 LOC="AA8" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
370 NET dvi_d6 LOC="AM13" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
371 NET dvi_d7 LOC="AN13" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
372 NET dvi_d8 LOC="AA10" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
373 NET dvi_d9 LOC="AB10" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
374 NET dvi_d10 LOC="AP14" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
375 NET dvi_d11 LOC="AN14" | IOSTANDARD="LVDCI_33"; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
376 NET dvi_de LOC="AE8" | IOSTANDARD="LVDCI_33" | SLEW=FAST; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
377 NET dvi_reset_b LOC="AK6" | IOSTANDARD="LVCMOS33"; # Bank 18, Vcco=3.3V, No DCI
378 NET dvi_h LOC="AM12" | IOSTANDARD="LVDCI_33" | SLEW=FAST; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
379 NET dvi_v LOC="AM11" | IOSTANDARD="LVDCI_33" | SLEW=FAST; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
380 NET dvi_xclk_n LOC="AL10" | IOSTANDARD="LVCMOS33" | DRIVE=24 | SLEW=FAST; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
381 NET dvi_xclk_p LOC="AL11" | IOSTANDARD="LVCMOS33" | DRIVE=24 | SLEW=FAST; # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
383 NET dvi_gpio1 LOC="N30" | IOSTANDARD="LVCMOS18"; # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
384 NET dvi_iic_scl LOC="U27" | PULLUP | IOSTANDARD="LVCMOS18"; # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
385 NET dvi_iic_sda LOC="T29" | PULLUP | IOSTANDARD="LVCMOS18"; # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
387 NET gpio_sw_c LOC="AJ6" | IOSTANDARD="LVCMOS33"; # Bank 18, Vcco=3.3V, No DCI
389 NET gpio_led_c LOC="E8"; # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
390 NET gpio_led_e LOC="AG23"; # Bank 2, Vcco=3.3V
391 NET gpio_led_n LOC="AF13"; # Bank 2, Vcco=3.3V
392 NET gpio_led_s LOC="AG12"; # Bank 2, Vcco=3.3V
393 NET gpio_led_w LOC="AF23"; # Bank 2, Vcco=3.3V
395 NET gpio_led_0 LOC="H18"; # Bank 3, Vcco=2.5V, No DCI
396 NET gpio_led_1 LOC="L18"; # Bank 3, Vcco=2.5V, No DCI
397 NET gpio_led_2 LOC="G15"; # Bank 3, Vcco=2.5V, No DCI
398 NET gpio_led_3 LOC="AD26" | IOSTANDARD="LVCMOS18"; # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
399 NET gpio_led_4 LOC="G16"; # Bank 3, Vcco=2.5V, No DCI
400 NET gpio_led_5 LOC="AD25" | IOSTANDARD="LVCMOS18"; # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
401 NET gpio_led_6 LOC="AD24" | IOSTANDARD="LVCMOS18"; # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
402 NET gpio_led_7 LOC="AE24" | IOSTANDARD="LVCMOS18"; # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
404 == TeX ==============================================================
406 == Fleeterpreter ====================================================
408 public void service() { }
410 == FleetSim ==============================================================
412 == Constants =========================================================
414 == Test ==============================================================
419 == Contributors =========================================================
420 Adam Megacz <megacz@cs.berkeley.edu>