add Video ship
authoradam <adam@megacz.com>
Thu, 21 Aug 2008 10:34:27 +0000 (11:34 +0100)
committeradam <adam@megacz.com>
Thu, 21 Aug 2008 10:34:27 +0000 (11:34 +0100)
ships/Video.ship [new file with mode: 0644]

diff --git a/ships/Video.ship b/ships/Video.ship
new file mode 100644 (file)
index 0000000..24f9423
--- /dev/null
@@ -0,0 +1,116 @@
+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 ========================================================
+
+== Contributors =========================================================
+Adam Megacz <megacz@cs.berkeley.edu>