From 03f9d29395d3e1619c5a56162ef786451f5a5a59 Mon Sep 17 00:00:00 2001 From: megacz Date: Sun, 8 Mar 2009 15:08:53 -0700 Subject: [PATCH] clean up Dvi, add a test case --- ships/Dvi.ship | 253 +++++++++++++------------------------------------------- 1 file changed, 59 insertions(+), 194 deletions(-) diff --git a/ships/Dvi.ship b/ships/Dvi.ship index a2a9ec8..669e8d3 100644 --- a/ships/Dvi.ship +++ b/ships/Dvi.ship @@ -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 -- 1.7.10.4