clean up Dvi, add a test case
authormegacz <adam@megacz.com>
Sun, 8 Mar 2009 22:08:53 +0000 (15:08 -0700)
committermegacz <adam@megacz.com>
Sun, 8 Mar 2009 22:08:53 +0000 (15:08 -0700)
ships/Dvi.ship

index a2a9ec8..669e8d3 100644 (file)
@@ -42,46 +42,22 @@ percolate up:    gpio_led_5   1
 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 
  #(
@@ -166,174 +142,41 @@ 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
 
@@ -341,7 +184,6 @@ i2c_video_programmer my_i2c_video_programmer
       `reset
     end else begin
       `cleanup
-      vga_pixel_a <= vga_pixel_r;
 
       if (`inX_full && `inY_full && `inData_full) begin
          we <= 1;
@@ -355,7 +197,7 @@ i2c_video_programmer my_i2c_video_programmer
     end
   end
 
-*/
+
 
 == UCF ===============================================================
 
@@ -412,9 +254,32 @@ NET  gpio_led_7           LOC="AE24" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1
 == 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>