ship: Video == Ports =========================================================== data in: inX data in: inY data in: inData == 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 [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 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 we <= 1; inX_a <= 1; inY_a <= 1; inData_a <= 1; end else begin we <= 0; end end end == Constants ======================================================== == Test ============================================================== // 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