percolate up: gpio_led_6 1
percolate up: gpio_led_7 1
-percolate down: dvi_gpio1 1
percolate up: dvi_iic_scl 1
percolate inout: dvi_iic_sda 1
== FPGA ==============================================================
-/*
-wire [11:0] dvi_d;
-assign dvi_d0 = dvi_d[0];
-assign dvi_d1 = dvi_d[1];
-assign dvi_d2 = dvi_d[2];
-assign dvi_d3 = dvi_d[3];
-assign dvi_d4 = dvi_d[4];
-assign dvi_d5 = dvi_d[5];
-assign dvi_d6 = dvi_d[6];
-assign dvi_d7 = dvi_d[7];
-assign dvi_d8 = dvi_d[8];
-assign dvi_d9 = dvi_d[9];
-assign dvi_d10 = dvi_d[10];
-assign dvi_d11 = dvi_d[11];
-*/
-
wire [9:0] x_coord;
wire [9:0] y_coord;
-assign dvi_reset_b = 1;
wire data_valid_ext;
-assign dvi_de = data_valid_ext;
wire clk_fb;
wire pix_clk;
wire[7:0] dvi_green;
wire[7:0] dvi_red;
wire[7:0] dvi_blue;
-//assign dvi_green = 8'b101010;
-//assign dvi_red = 8'b111111;
-//assign dvi_blue = 8'b000000;
-
-assign dvi_green = x_coord[7:0];
-assign dvi_red = y_coord[7:0];
-assign dvi_blue = 8'b00000000;
+assign dvi_reset_b = 1;
+assign dvi_de = data_valid_ext;
vga_timing_generator
#(
.RST(rst)
);
- ODDR ODDR_dvi_d0 (dvi_d0, pix_clk, 1, dvi_green[4], dvi_blue[0], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d1 (dvi_d1, pix_clk, 1, dvi_green[5], dvi_blue[1], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d2 (dvi_d2, pix_clk, 1, dvi_green[6], dvi_blue[2], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d3 (dvi_d3, pix_clk, 1, dvi_green[7], dvi_blue[3], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d4 (dvi_d4, pix_clk, 1, dvi_red[0], dvi_blue[4], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d5 (dvi_d5, pix_clk, 1, dvi_red[1], dvi_blue[5], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d6 (dvi_d6, pix_clk, 1, dvi_red[2], dvi_blue[6], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d7 (dvi_d7, pix_clk, 1, dvi_red[3], dvi_blue[7], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d8 (dvi_d8, pix_clk, 1, dvi_red[4], dvi_green[0], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d9 (dvi_d9, pix_clk, 1, dvi_red[5], dvi_green[1], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d10 (dvi_d10, pix_clk, 1, dvi_red[6], dvi_green[2], ~data_valid_ext, 0);
- ODDR ODDR_dvi_d11 (dvi_d11, pix_clk, 1, dvi_red[7], dvi_green[3], ~data_valid_ext, 0);
-
-
-
-/*
-dvi_video_test my_dvi_video_test(
- .CLK_P(clk),
- .CLK_N(clk),
-
- .DVI_D(dvi_d),
- .DVI_H(dvi_h),
- .DVI_V(dvi_v),
- .DVI_DE(dvi_de),
- .DVI_XCLK_N(dvi_xclk_n),
- .DVI_XCLK_P(dvi_xclk_p),
- .DVI_RESET_B(dvi_reset_b),
-
- .VGA_PIXEL_CLK(1'b0),
- .VGA_Y_GREEN(8'b0),
- .VGA_CBCR_RED(8'b0),
- .VGA_BLUE(8'b0),
- .VGA_HSYNC(1'b0),
- .VGA_VSYNC(1'b0),
- .VGA_ODD_EVEN_B(1'b0),
- .VGA_SOGOUT(1'b0),
- .VGA_CLAMP(1'b0),
- .VGA_COAST(1'b0),
-
- .SOGOUT(),
- .PIXEL_X_COORD(),
- .PIXEL_Y_COORD(),
- .TOTAL_PIXEL_COUNT(),
- .VGA_DATA_VALID(),
- .Y(),
- .HSYNC(),
- .VSYNC(),
- .DVI_PIXEL_COUNT(),
- .DVI_X_COORD(),
- .DVI_Y_COORD(),
- .DVI_DATA_VALID()
-
- );
-*/
-
-
-/*
- assign dvi_de = 1;
- assign dvi_reset_b = 1;
-
- assign dvi_d0 = 1;
- assign dvi_d1 = 0;
- assign dvi_d2 = 1;
- assign dvi_d3 = 0;
- assign dvi_d4 = 1;
- assign dvi_d5 = 0;
- assign dvi_d6 = 1;
- assign dvi_d7 = 0;
- assign dvi_d8 = 1;
- assign dvi_d9 = 0;
- assign dvi_d10 = 1;
- assign dvi_d11 = 0;
-*/
- assign gpio_led_n = 1;
- assign gpio_led_s = 0;
-
- assign gpio_led_0 = dvi_gpio1;
- assign gpio_led_1 = gpio_sw_c;
- //assign gpio_led_2 = dvi_xclk_p;
- //assign gpio_led_3 = 0;
- //assign gpio_led_4 = 1;
- assign gpio_led_5 = 0;
- assign gpio_led_6 = 1;
- assign gpio_led_7 = 0;
-/*
- wire dvi_xclk_p_unbuffered;
- wire dvi_xclk_n_unbuffered;
- wire dvi_xclk_fb;
-*/
-/*
- reg initialized;
- always @(posedge clk) begin
- if (rst) begin
- initialized <= 0;
- end else begin
- if (!initialized && gpio_sw_c) begin
- end
- end
- end
-*/
-/*
-i2c_video_programmer my_i2c_video_programmer
- ( .CLK200Mhz(clk),
- .RST(rst),
- .I2C_SDA(dvi_iic_sda),
- .I2C_SCL(dvi_iic_scl)
- );
+ ODDR ODDR_dvi_d0 (dvi_d0, pix_clk, 1, dvi_green[4], dvi_blue[0], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d1 (dvi_d1, pix_clk, 1, dvi_green[5], dvi_blue[1], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d2 (dvi_d2, pix_clk, 1, dvi_green[6], dvi_blue[2], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d3 (dvi_d3, pix_clk, 1, dvi_green[7], dvi_blue[3], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d4 (dvi_d4, pix_clk, 1, dvi_red[0], dvi_blue[4], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d5 (dvi_d5, pix_clk, 1, dvi_red[1], dvi_blue[5], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d6 (dvi_d6, pix_clk, 1, dvi_red[2], dvi_blue[6], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d7 (dvi_d7, pix_clk, 1, dvi_red[3], dvi_blue[7], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d8 (dvi_d8, pix_clk, 1, dvi_red[4], dvi_green[0], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d9 (dvi_d9, pix_clk, 1, dvi_red[5], dvi_green[1], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d10 (dvi_d10, pix_clk, 1, dvi_red[6], dvi_green[2], ~data_valid_ext, 0);
+ ODDR ODDR_dvi_d11 (dvi_d11, pix_clk, 1, dvi_red[7], dvi_green[3], ~data_valid_ext, 0);
- BUFG GBUF_FOR_DVI_CLOCK_N (.I(dvi_xclk_n_unbuffered), .O(dvi_xclk_n));
- BUFG GBUF_FOR_DVI_CLOCK_P (.I(dvi_xclk_p_unbuffered), .O(dvi_xclk_p));
- DCM // 36Mhz DVI clock
- #(
- .CLKFX_MULTIPLY(9),
- .CLKFX_DIVIDE(25),
- .CLKIN_PERIOD("10 ns"),
- .DLL_FREQUENCY_MODE("LOW")
- ) vgadcm (
- .CLKIN (clk),
- .CLKFB (dvi_xclk_fb),
- .CLKFX (dvi_xclk_p_unbuffered),
- .CLKFX180 (dvi_xclk_n_unbuffered),
- .CLK0 (dvi_xclk_fb)
- );
-
-
- wire [31:0] vga_pixel_addr_;
- wire vga_pixel_r;
- wire vga_pixel_a_;
- reg vga_pixel_a;
- assign vga_pixel_a_ = vga_pixel_a;
- wire [18:0] inAddr;
-
reg we;
- wire [2:0] mem_out;
- wire [31:0] vga_pixel_data;
- assign vga_pixel_data = {
- 8'b0,
- mem_out[2], 7'b0,
- mem_out[1], 7'b0,
- mem_out[0], 7'b0
- };
-
- assign inAddr = inX_d + (inY_d * 640);
-
- vram vram(clk, !rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
-
- wb_vga wb_vga(
- .wb_clk_i(clk),
- .wb_rst_i(rst),
-
- .fbwb_adr_o(vga_pixel_addr_),
- .fbwb_stb_o(vga_pixel_r),
- .fbwb_ack_i(vga_pixel_a_),
- .fbwb_dat_i(vga_pixel_data),
-
- // VGA signals
- .vga_clk(dvi_xclk_p),
- .vga_psave(vga_psave),
- .vga_hsync(dvi_h),
- .vga_vsync(dvi_v),
- .vga_sync(vga_sync),
- .vga_blank(vga_blank),
- .vga_r(vga_r),
- .vga_g(vga_g),
- .vga_b(vga_b)
- // .vga_clkout(vga_clkout)
- );
+ wire [2:0] mem_out;
+ wire [18:0] inAddr;
+ wire [18:0] vga_pixel_addr_;
+ reg [18:0] vga_pixel_addr;
+
+ assign inAddr = inX_d + { inY_d[8:0], 7'b0000000 } + { inY_d[8:0], 10'b0000000000 };
+ assign vga_pixel_addr_ = x_coord + { y_coord[8:0], 7'b0000000 } + { y_coord[8:0], 10'b0000000000 };
+ assign dvi_red = { mem_out[2], 7'b0 };
+ assign dvi_green = { mem_out[1], 7'b0 };
+ assign dvi_blue = { mem_out[0], 7'b0 };
+
+ vram vram(clk, ~rst, we,
+ inAddr[18:0],
+ vga_pixel_addr,
+ inData_d, ,
+ mem_out);
+
+ always @(posedge pix_clk) begin
+ vga_pixel_addr <= vga_pixel_addr_;
+ end
always @(posedge clk) begin
`reset
end else begin
`cleanup
- vga_pixel_a <= vga_pixel_r;
if (`inX_full && `inY_full && `inData_full) begin
we <= 1;
end
end
-*/
+
== UCF ===============================================================
== Constants =========================================================
== Test ==============================================================
-#skip
+
+#expect 0
+#expect 0
+#expect 0
#ship debug : Debug
+#ship video : Dvi
+
+video.inX:
+ set word=0;
+ deliver;
+ send token to debug.in;
+video.inY:
+ set word=0;
+ deliver;
+ send token to debug.in;
+video.inData:
+ set word=0;
+ deliver;
+ send token to debug.in;
+
+debug.in:
+ set word=0;
+ set ilc=*;
+ recv token, deliver;
+
== Contributors =========================================================
Adam Megacz <megacz@cs.berkeley.edu>