ship: Video == Ports =========================================================== 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 ==================================================== private java.awt.Frame frame = null; public void service() { if (box_inX.dataReadyForShip() && box_inY.dataReadyForShip() && box_inData.dataReadyForShip() ) { long x = box_inX.removeDataForShip(); long y = box_inY.removeDataForShip(); long d = box_inData.removeDataForShip(); if (frame==null) { frame = new java.awt.Frame(); java.awt.Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); frame.setSize((int)dim.getWidth(),(int)dim.getHeight()); frame.show(); frame.setBackground(new java.awt.Color(0,0,0)); } java.awt.Color c = new java.awt.Color( ((d & (1L<<2))!=0) ? 0xff : 0x00, ((d & (1L<<1))!=0) ? 0xff : 0x00, ((d & (1L<<0))!=0) ? 0xff : 0x00 ); java.awt.Graphics2D g = (java.awt.Graphics2D)frame.getGraphics(); g.transform(java.awt.geom.AffineTransform.getScaleInstance(((double)frame.getWidth())/640, ((double)frame.getHeight())/480)); g.setColor(c); g.fillRect((int)x,(int)y,1,1); } } == FleetSim ============================================================== == 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; 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(vga_clk), .vga_psave(vga_psave), .vga_hsync(vga_hsync), .vga_vsync(vga_vsync), .vga_sync(vga_sync), .vga_blank(vga_blank), .vga_r(vga_r), .vga_g(vga_g), .vga_b(vga_b), .vga_clkout(vga_clkout) ); always @(posedge clk) begin if (rst) begin `reset end else begin `cleanup vga_pixel_a <= vga_pixel_r; if (`inX_full && `inY_full && `inData_full) begin we <= 1; `drain_inX `drain_inY `drain_inData end else begin we <= 0; end 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