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 ====================================================
== 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;
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),
always @(posedge clk) begin
- if (!rst) begin
+ if (rst) begin
`reset
end else begin
- `flush
+ `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
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