diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-11-18 20:17:38 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-11-18 20:17:41 -0600 |
| commit | 223dbc0619adde456cf5dde7c2c5235c33301b15 (patch) | |
| tree | ac7e0ddd81aaf2b973b9f9f25c2f1718da296d30 | |
| parent | bc56985a67d2cec759cbad8a0de2c6f54b6818cd (diff) | |
rtl/gfx: fix Verilator loop unrolling bug in gfx_pipes
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | rtl/gfx/gfx_pipes.sv | 9 |
2 files changed, 4 insertions, 8 deletions
@@ -203,5 +203,6 @@ $(OBJ_DIR)/%.mk: \ --Mdir $(dir $@) --top $(word 1,$(subst /, ,$*)) -FI $(ROOT)/$(TB_DIR)/verilator.hpp \ $(filter %.sv %.cpp,$(patsubst tb/%,../tb/%,$^)) \ $(if $(filter $(TOP),$(word 1,$(subst /, ,$*))),, \ - --vpi --public-flat-rw -LDFLAGS "$(COCOTB_LDFLAGS) $(LIBPYTHON)" \ + --vpi --public-flat-rw --unroll-count 128 \ + -LDFLAGS "$(COCOTB_LDFLAGS) $(LIBPYTHON)" \ $(shell $(COCOTB_CONFIG) --share)/lib/verilator/verilator.cpp) diff --git a/rtl/gfx/gfx_pipes.sv b/rtl/gfx/gfx_pipes.sv index 390a481..09b1d43 100644 --- a/rtl/gfx/gfx_pipes.sv +++ b/rtl/gfx/gfx_pipes.sv @@ -17,13 +17,8 @@ module gfx_pipes if (!stall) begin pipes[0] <= in; - /* 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]; + for (integer i = 1; i < DEPTH; ++i) + pipes[i] <= pipes[i - 1]; end endmodule |
