X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ships%2FVideo.ship;h=b6142428c111aaa7f3e85fbe8fa162c2f0fbfa76;hb=b78b1fc6bf752e42b1a8d675cd6a3d4ce992688c;hp=24f9423e5bef7ae0b45ece464539e6dcc44c58aa;hpb=85d968586dd487cc74f2a19d9019fff31c79725d;p=fleet.git diff --git a/ships/Video.ship b/ships/Video.ship index 24f9423..b614242 100644 --- a/ships/Video.ship +++ b/ships/Video.ship @@ -5,6 +5,16 @@ data in: inX data in: inY data in: inData +percolate up: vga_psave 1 +percolate up: vga_hsync 1 +percolate up: vga_vsync 1 +percolate up: vga_sync 1 +percolate up: vga_blank 1 +percolate up: vga_r 8 +percolate up: vga_g 8 +percolate up: vga_b 8 +percolate up: vga_clkout 1 + == TeX ============================================================== == Fleeterpreter ==================================================== @@ -43,6 +53,24 @@ data in: inData == FPGA ============================================================== + wire vga_clk_unbuffered; // synthesis attribute period of vga_clk_unbuffered is "40 ns"; + + wire vga_clk; + wire vga_clk_fb; + + BUFG GBUF_FOR_VGA_CLOCK (.I(vga_clk_unbuffered), .O(vga_clk)); + DCM // 25Mhz VGA clock + #( + .CLKFX_MULTIPLY(4), + .CLKFX_DIVIDE(16), + .CLKIN_PERIOD("20 ns") + ) vgadcm ( + .CLKIN (clk), + .CLKFB(vga_clk_fb), + .CLKFX (vga_clk_unbuffered), + .CLK0 (vga_clk_fb) + ); + wire [31:0] vga_pixel_addr_; wire vga_pixel_r; @@ -63,11 +91,11 @@ data in: inData assign inAddr = inX_d + (inY_d * 640); - vram vram(clk, rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out); + 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), + .wb_rst_i(rst), .fbwb_adr_o(vga_pixel_addr_), .fbwb_stb_o(vga_pixel_r), @@ -89,20 +117,17 @@ data in: inData always @(posedge clk) begin - if (!rst) begin + if (rst) begin `reset end else begin - + `cleanup vga_pixel_a <= vga_pixel_r; - if (!inData_r && inData_a) inData_a <= 0; - if (!inX_r && inX_a) inX_a <= 0; - if (!inY_r && inY_a) inY_a <= 0; - if (inX_r && !inX_a && inY_r && !inY_a && inData_r && !inData_a) begin + if (`inX_full && `inY_full && `inData_full) begin we <= 1; - inX_a <= 1; - inY_a <= 1; - inData_a <= 1; + `drain_inX + `drain_inY + `drain_inData end else begin we <= 0; end @@ -110,7 +135,91 @@ data in: inData end end +== UCF =============================================================== + +## VGA ############################################################################## + +#net "vga_hsync" loc = f9; +#net "vga_hsync" slew = slow; +#net "vga_hsync" drive = 2; +# +#net "vga_vsync" loc = h10; +#net "vga_vsync" slew = slow; +#net "vga_vsync" drive = 2; +# +#net "vga_clkout" loc ="c12"; +#net "vga_clkout" slew = fast; +#net "vga_clkout" drive = 8; +# +#net "vga_r<7>" loc ="h8"; +#net "vga_r<6>" loc ="c5"; +#net "vga_r<5>" loc ="h9"; +#net "vga_r<4>" loc ="g12"; +#net "vga_r<3>" loc ="g11"; +#net "vga_r<2>" loc ="g10"; +#net "vga_r<1>" loc ="f11"; +#net "vga_r<0>" loc ="f10"; +#net "vga_r<*>" slew = slow; +#net "vga_r<*>" drive = 2; +# +#net "vga_g<7>" loc ="d5"; +#net "vga_g<6>" loc ="d4"; +#net "vga_g<5>" loc ="f8"; +#net "vga_g<4>" loc ="e13"; +#net "vga_g<3>" loc ="e12"; +#net "vga_g<2>" loc ="e11"; +#net "vga_g<1>" loc ="e9"; +#net "vga_g<0>" loc ="e8"; +#net "vga_g<*>" slew = slow; +#net "vga_g<*>" drive = 2; +# +#net "vga_b<7>" loc ="c4"; +#net "vga_b<6>" loc ="c3"; +#net "vga_b<5>" loc ="d12"; +#net "vga_b<4>" loc ="d11"; +#net "vga_b<3>" loc ="d10"; +#net "vga_b<2>" loc ="d9"; +#net "vga_b<1>" loc ="c13"; +#net "vga_b<0>" loc ="g8"; +#net "vga_b<*>" slew = slow; +#net "vga_b<*>" drive = 2; +# +#net "vga_*" iostandard = lvcmos33; +# + + == Constants ======================================================== +== Test ============================================================== + +#skip +// can't test much here; just make sure it accepts values + +#expect 0 +#expect 0 +#expect 0 + +#ship debug : Debug +#ship video : Video + +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