diff --git a/fpga.pio b/fpga.pio
index 00b8adf..84eb5b9 100644
--- a/fpga.pio
+++ b/fpga.pio
@@ -30,8 +30,8 @@ pull noblock ; get data from memory
mov x, ~osr
jmp !x recv_data_start ; check for end of values
mov osr, ~x
-wait 1 gpio CLK_PIN ; synchronize
wait 0 gpio CLK_PIN ; synchronize
+wait 1 gpio CLK_PIN ; synchronize
out pins, 8 ; output data to pins
jmp send_data_loop ; keep sending since no null-terminator
@@ -42,13 +42,14 @@ mov osr, x ; set pins to in
out pindirs, 8 ; ...
set pindirs, 0b01 ; ...
wait 1 gpio REQ_PIN ; wait for data to be ready, indicated by req signal high
+wait 1 gpio CLK_PIN
.wrap_target
-in pins, 8 ; read data from pins
-push noblock ; write data to memory
wait 0 gpio CLK_PIN ; synchronize
jmp pin start ; stop receiving data if FPGA is done
wait 1 gpio CLK_PIN ; synchronize
+in pins, 8 ; read data from pins
+push noblock ; ...
.wrap ; otherwise keep receiving data
% c-sdk {
diff --git a/ice/constraints.sdc b/ice/constraints.sdc
index b02d443..209683a 100644
--- a/ice/constraints.sdc
+++ b/ice/constraints.sdc
@@ -1 +1 @@
-create_clock -period 125 [get_ports {clk}]
\ No newline at end of file
+create_clock -period 83.33333 [get_ports {clk}]
\ No newline at end of file
diff --git a/ice/mandelbrot/.recovery b/ice/mandelbrot/.recovery
index 49b4ff7..aa4bc7b 100644
--- a/ice/mandelbrot/.recovery
+++ b/ice/mandelbrot/.recovery
@@ -21,6 +21,9 @@
+
diff --git a/ice/mandelbrot/mandelbrot_tcr.dir/pn240928081403.tcr b/ice/mandelbrot/mandelbrot_tcr.dir/pn240928081403.tcr
deleted file mode 100644
index 78db677..0000000
--- a/ice/mandelbrot/mandelbrot_tcr.dir/pn240928081403.tcr
+++ /dev/null
@@ -1,125 +0,0 @@
-#Start recording tcl command: 9/25/2024 13:09:03
-#Project Location: C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot; Project name: mandelbrot
-prj_create -name "mandelbrot" -impl "impl_1" -dev iCE40UP5K-UWG30ITR -performance "High-Performance_1.2V" -synthesis "synplify"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/top.sv" "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/constraints.sdc" "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/constraints.pdc"
-prj_save
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/top.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/top.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/top.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/impl_1/top.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/impl_1/top.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/source/impl_1/top.sv"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_set_device -part iCE40UP5K-SG48I -performance "High-Performance_1.2V"
-prj_run Synthesis -impl impl_1
-prj_run Map -impl impl_1
-prj_run Map -impl impl_1
-prj_run Export -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/spi.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/spi.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/top.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/top.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/spi.sv"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run PAR -impl impl_1
-prj_run PAR -impl impl_1
-prj_run PAR -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/xd.sv"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/xd.sv"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/spi.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/spi.sv"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run Export -impl impl_1
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/ram.sv"
-prj_disable_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/ram.sv"
-prj_enable_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/ram.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/ram.sv"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/spi.sv"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-#Stop recording: 9/28/2024 08:14:03
diff --git a/ice/mandelbrot/mandelbrot_tcr.dir/pn241002102238.tcr b/ice/mandelbrot/mandelbrot_tcr.dir/pn241002102238.tcr
deleted file mode 100644
index 494fabe..0000000
--- a/ice/mandelbrot/mandelbrot_tcr.dir/pn241002102238.tcr
+++ /dev/null
@@ -1,5 +0,0 @@
-#Start recording tcl command: 10/2/2024 09:00:03
-#Project Location: C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot; Project name: mandelbrot
-prj_open "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/mandelbrot.rdf"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/ram.sv"
-#Stop recording: 10/2/2024 10:22:38
diff --git a/ice/mandelbrot/mandelbrot_tcr.dir/pn241003133906.tcr b/ice/mandelbrot/mandelbrot_tcr.dir/pn241003133906.tcr
deleted file mode 100644
index e030376..0000000
--- a/ice/mandelbrot/mandelbrot_tcr.dir/pn241003133906.tcr
+++ /dev/null
@@ -1,56 +0,0 @@
-#Start recording tcl command: 10/2/2024 11:19:00
-#Project Location: C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot; Project name: mandelbrot
-prj_open "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/mandelbrot.rdf"
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Map -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/color_converter.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/color_converter.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/framebuffer.sv"
-prj_run PAR -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Map -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Export -impl impl_1
-prj_run Synthesis -impl impl_1
-#Stop recording: 10/3/2024 13:39:06
diff --git a/ice/mandelbrot/mandelbrot_tcr.dir/pn241004114221.tcr b/ice/mandelbrot/mandelbrot_tcr.dir/pn241004114221.tcr
deleted file mode 100644
index 2c1fee3..0000000
--- a/ice/mandelbrot/mandelbrot_tcr.dir/pn241004114221.tcr
+++ /dev/null
@@ -1,20 +0,0 @@
-#Start recording tcl command: 10/3/2024 13:54:22
-#Project Location: C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot; Project name: mandelbrot
-prj_open "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/mandelbrot.rdf"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/fifo.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/fifo.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/xd.sv"
-prj_run Synthesis -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Map -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run Synthesis -impl impl_1
-prj_run Export -impl impl_1
-prj_set_impl_opt -impl "impl_1" "top" "top"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/xd.sv"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/framebuffer.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/fifo.sv"
-#Stop recording: 10/4/2024 11:42:21
diff --git a/ice/mandelbrot/mandelbrot_tcr.dir/pn241004151504.tcr b/ice/mandelbrot/mandelbrot_tcr.dir/pn241004151504.tcr
deleted file mode 100644
index 404f9eb..0000000
--- a/ice/mandelbrot/mandelbrot_tcr.dir/pn241004151504.tcr
+++ /dev/null
@@ -1,9 +0,0 @@
-#Start recording tcl command: 10/4/2024 13:54:24
-#Project Location: C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot; Project name: mandelbrot
-prj_open "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/mandelbrot.rdf"
-prj_remove_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/fifo.sv"
-prj_run Synthesis -impl impl_1
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/coords.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/source/impl_1/renderer.sv"
-prj_add_source "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/source/impl_1/multiplier.sv"
-#Stop recording: 10/4/2024 15:15:04
diff --git a/ice/mandelbrot/mandelbrot_tcr.dir/pn241008133909.tcr b/ice/mandelbrot/mandelbrot_tcr.dir/pn241008133909.tcr
deleted file mode 100644
index ad40fd2..0000000
--- a/ice/mandelbrot/mandelbrot_tcr.dir/pn241008133909.tcr
+++ /dev/null
@@ -1,22 +0,0 @@
-#Start recording tcl command: 10/7/2024 10:43:02
-#Project Location: C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot; Project name: mandelbrot
-prj_open "C:/Users/fuzzc/Documents/Hardware/pico-ice/pico-ice-video/ice/mandelbrot/mandelbrot.rdf"
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-prj_run PAR -impl impl_1
-prj_run Export -impl impl_1
-#Stop recording: 10/8/2024 13:39:09
diff --git a/ice/mandelbrot/promote.xml b/ice/mandelbrot/promote.xml
index afad920..27b4a59 100644
--- a/ice/mandelbrot/promote.xml
+++ b/ice/mandelbrot/promote.xml
@@ -1,3 +1,7 @@
-
+
+
+
+
+
diff --git a/ice/mandelbrot/source/impl_1/renderer.sv b/ice/mandelbrot/source/impl_1/renderer.sv
index 54fd8fa..875f5b8 100644
--- a/ice/mandelbrot/source/impl_1/renderer.sv
+++ b/ice/mandelbrot/source/impl_1/renderer.sv
@@ -1,7 +1,7 @@
module renderer
#(
- parameter ITERATIONS = 127,
- parameter OUTPUT_WIDTH = 7,
+ parameter ITERATIONS = 220,
+ parameter OUTPUT_WIDTH = 8,
localparam ITERATION_WIDTH = $clog2(ITERATIONS + 1),
localparam SHIFT_AMOUNT = ITERATION_WIDTH - OUTPUT_WIDTH,
localparam FRACTION_BITS = 13
diff --git a/ice/mandelbrot/source/impl_1/tb_top.cpp b/ice/mandelbrot/source/impl_1/tb_top.cpp
index 0fa5694..973b50c 100644
--- a/ice/mandelbrot/source/impl_1/tb_top.cpp
+++ b/ice/mandelbrot/source/impl_1/tb_top.cpp
@@ -107,9 +107,9 @@ int main(int argc, char** argv, char** env)
if (!dut->req || done) { continue; }
- framebuffer[current] = dut->data;
+ framebuffer[current++] = dut->data;
- if (++current == H_RES * V_RES * 2)
+ if (current == H_RES * V_RES * 2)
{
current = 0;
SDL_UpdateTexture(sdl_texture, nullptr, framebuffer, H_RES * 2);
diff --git a/ice/mandelbrot/source/impl_1/top.sv b/ice/mandelbrot/source/impl_1/top.sv
index cdbe17b..f9598d1 100644
--- a/ice/mandelbrot/source/impl_1/top.sv
+++ b/ice/mandelbrot/source/impl_1/top.sv
@@ -7,6 +7,8 @@ module top
inout wire [7:0] data
);
+localparam RENDER_COUNT = 4;
+
reg req_last;
reg [7:0] waddr;
@@ -16,35 +18,83 @@ wire [7:0] command;
ram command_buffer(.wclk(clk), .rclk(clk), .waddr(waddr), .raddr(raddr), .data_in(data), .write_en(dir && req), .data_out(command));
-wire [6:0] iters;
+wire [7:0] iters[RENDER_COUNT];
-wire [7:0] x[1];
-wire [7:0] y[1];
+wire [7:0] x[RENDER_COUNT];
+wire [7:0] y[RENDER_COUNT];
+
+wire [RENDER_COUNT-1:0] renderer_done;
+reg [RENDER_COUNT-1:0] renderer_done_r;
wire coords_fin;
-wire coords_inc;
+reg coords_inc;
reg coords_inc_last;
-reg coords_fin_last;
+reg [5:0] coords_fin_last;
-renderer r(.clk(clk), .rst(dir), .start(!dir && !coords_fin), .x(x[0]), .y(y[0]), .cx(16'h1000), .cy(16'h2000), .zoom(3'd6), .done(coords_inc), .iters(iters));
-coords #(.POS_COUNT(1)) coords_inst(.clk(clk), .rst(dir), .inc(coords_inc), .x(x), .y(y), .finished(coords_fin));
+genvar ri;
+generate
+ for (ri = 0; ri < RENDER_COUNT; ri = ri + 1) begin
+ renderer r(.clk(clk), .rst(dir), .start(!dir && !coords_fin && !renderer_done[ri] && !renderer_done_r[ri]), .x(x[ri]), .y(y[ri]), .cx(15'h1000), .cy(15'h2000), .zoom(3'd6), .done(renderer_done[ri]), .iters(iters[ri]));
+ end
+endgenerate
+
+coords #(.POS_COUNT(RENDER_COUNT)) coords_inst(.clk(clk), .rst(dir), .inc(coords_inc), .x(x), .y(y), .finished(coords_fin));
wire fb_clk;
-reg [15:0] fb_addr;
+reg [16:0] fb_addr;
wire fb_we;
wire [15:0] fb_data_out;
+reg [15:0] fb_data_out_last;
reg fb_half_out;
-spram_big fb(.clk(fb_clk), .we({ fb_we, fb_we, fb_we, fb_we }), .addr(fb_addr), .data_in({ 8'd128, 8'(iters) + 8'd62 }), .data_out(fb_data_out));
+spram_big fb
+(
+ .clk(fb_clk),
+ .we
+ ({
+ { fb_we, fb_we, fb_we, fb_we },
+ { fb_we, fb_we, fb_we, fb_we },
+ { fb_we, fb_we, fb_we, fb_we },
+ { fb_we, fb_we, fb_we, fb_we }
+ }),
+ .addr(fb_addr[15:0]),
+ .data_in
+ ({
+ { 8'd128, iters[0] + 8'd16 },
+ { 8'd128, iters[1] + 8'd16 },
+ { 8'd128, iters[2] + 8'd16 },
+ { 8'd128, iters[3] + 8'd16 }
+ }),
+ .data_out(fb_data_out)
+);
always_ff @(posedge clk) begin
req_last <= req;
- coords_fin_last <= coords_fin && !dir;
+ coords_fin_last[5:1] <= coords_fin_last[4:0];
+ coords_fin_last[0] <= coords_fin && !dir;
coords_inc_last <= coords_inc && !dir;
+ if (dir) begin
+ renderer_done_r <= '0;
+ end else begin
+ integer i;
+ for (i = 0; i < RENDER_COUNT; i = i + 1) begin
+ if (renderer_done[i]) begin
+ renderer_done_r[i] <= 1;
+ end
+ end
+
+ if (renderer_done_r == '1) begin
+ renderer_done_r <= '0;
+ coords_inc <= 1;
+ end else begin
+ coords_inc <= 0;
+ end
+ end
+
if (dir) begin
raddr <= 0;
fb_addr <= 0;
@@ -56,25 +106,26 @@ always_ff @(posedge clk) begin
waddr <= 0;
end
end else if (coords_fin) begin
- if (!coords_fin_last) begin
+ if (!coords_fin_last[0] || !coords_fin_last[1]) begin
fb_addr <= 0;
fb_half_out <= 0;
end else begin
fb_half_out <= !fb_half_out;
if (fb_half_out) begin
+ fb_data_out_last <= fb_data_out;
fb_addr <= fb_addr + 1;
end
end
end else if (coords_inc_last) begin
- fb_addr <= fb_addr + 1;
+ fb_addr <= fb_addr + RENDER_COUNT;
end
end
assign fb_clk = clk;
-assign fb_we = coords_inc;
-assign fin = !dir && coords_fin && coords_fin_last && fb_addr >= 65531;
+assign fb_we = coords_inc && !coords_fin;
+assign fin = !dir && coords_fin_last[5] && fb_addr >= 65536;
-assign req = dir ? 'Z : coords_fin_last;
-assign data = dir ? 'Z : (fb_half_out ? fb_data_out[15:8] : fb_data_out[7:0]);
+assign req = dir ? 'Z : coords_fin_last[5];
+assign data = dir ? 'Z : (fb_half_out ? fb_data_out_last[15:8] : fb_data_out_last[7:0]);
endmodule
\ No newline at end of file
diff --git a/ice/spram.sv b/ice/spram.sv
index cfdcbce..f777084 100644
--- a/ice/spram.sv
+++ b/ice/spram.sv
@@ -7,28 +7,25 @@ module spram
output wire [15:0] data_out
);
-SP256K bb_spram_inst(.AD(addr), .DI(data_in), .MASKWE(we), .WE(|we), .CS('1), .CK(clk), .STDBY('0), .SLEEP('0), .PWROFF_N('1), .DO(data_out));
+`ifdef VERILATOR
+reg [15:0] mem[16384];
-endmodule
+reg [15:0] data_out_r;
-module spram_big
-(
- input wire clk,
- input wire [3:0] we,
- input wire [15:0] addr,
- input wire [15:0] data_in,
- output wire [15:0] data_out
-);
-
-wire [15:0] datas_out[4];
-
-genvar i;
-generate
+always_ff @(posedge clk) begin
+ integer i;
for (i = 0; i < 4; i = i + 1) begin
- spram spram_inst(.clk(clk), .we(addr[15:14] == i ? we : '0), .addr(addr[13:0]), .data_in(data_in), .data_out(datas_out[i]));
+ if (we[i]) begin
+ mem[addr][(3+4*i)+:4] <= data_in[(3+4*i)+:4];
+ end
end
-endgenerate
+
+ data_out_r <= mem[addr];
+end
-assign data_out = datas_out[addr[15:14]];
+assign data_out = data_out_r;
+`else
+SP256K bb_spram_inst(.AD(addr), .DI(data_in), .MASKWE(we), .WE(|we), .CS('1), .CK(clk), .STDBY('0), .SLEEP('0), .PWROFF_N('1), .DO(data_out));
+`endif
endmodule
\ No newline at end of file
diff --git a/ice/spram_big.sv b/ice/spram_big.sv
new file mode 100644
index 0000000..0f83bdf
--- /dev/null
+++ b/ice/spram_big.sv
@@ -0,0 +1,21 @@
+module spram_big
+(
+ input wire clk,
+ input wire [3:0] we[4],
+ input wire [15:0] addr,
+ input wire [15:0] data_in[4],
+ output wire [15:0] data_out
+);
+
+wire [15:0] datas_out[4];
+
+genvar i;
+generate
+ for (i = 0; i < 4; i = i + 1) begin
+ spram spram_inst(.clk(clk), .we(we[i]), .addr(addr[15:2]), .data_in(data_in[i]), .data_out(datas_out[i]));
+ end
+endgenerate
+
+assign data_out = datas_out[addr[1:0]];
+
+endmodule
\ No newline at end of file
diff --git a/main.cpp b/main.cpp
index 032f98e..dbc0fe7 100644
--- a/main.cpp
+++ b/main.cpp
@@ -30,7 +30,7 @@ int main()
ice_led_init();
ice_usb_init();
- ice_fpga_init(8);
+ ice_fpga_init(4);
ice_fpga_start();
gpio_pull_up(DIR_PIN);