summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_pipes.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-11-15 17:00:47 -0600
committerAlejandro Soto <alejandro@34project.org>2023-11-16 16:43:59 -0600
commitba803067cb54edece9ffa8b92f9bb97317d082e5 (patch)
tree4d94c1d3d82df91079d70407865f98472d0a16c9 /rtl/gfx/gfx_pipes.sv
parentebd16f54913aaafd0b6f86223f53fc40b2d64d03 (diff)
rtl/gfx: improve divider timing closure
Diffstat (limited to 'rtl/gfx/gfx_pipes.sv')
-rw-r--r--rtl/gfx/gfx_pipes.sv9
1 files changed, 7 insertions, 2 deletions
diff --git a/rtl/gfx/gfx_pipes.sv b/rtl/gfx/gfx_pipes.sv
index 09b1d43..390a481 100644
--- a/rtl/gfx/gfx_pipes.sv
+++ b/rtl/gfx/gfx_pipes.sv
@@ -17,8 +17,13 @@ module gfx_pipes
if (!stall) begin
pipes[0] <= in;
- for (integer i = 1; i < DEPTH; ++i)
- pipes[i] <= pipes[i - 1];
+ /* Esto tiene que ir así porque Verilator no soporta <= en for
+ * loops a las que no logre hacerle unrolling. Nótese que el
+ * orden de iteración descendiente es necesario porque estamos
+ * usando un blocking assignment dentro de always_ff.
+ */
+ for (integer i = DEPTH - 1; i > 0; --i)
+ pipes[i] = pipes[i - 1];
end
endmodule