From b529f538b89240642cf96fb96b43da0b0ce1f4b0 Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Sun, 17 Oct 2021 10:52:07 -0700 Subject: [PATCH] Makefile updates --- ci/blackbox.sh | 8 +- ci/regression.sh | 5 +- driver/asesim/Makefile | 9 +- driver/fpga/Makefile | 9 +- driver/rtlsim/Makefile | 2 +- driver/simx/Makefile | 5 +- driver/vlsim/Makefile | 9 +- hw/rtl/VX_cache_arb.sv | 159 ++++++++++++++++++++++++++++++++++ hw/rtl/VX_writeback.sv | 13 ++- tests/regression/tex/Makefile | 6 +- 10 files changed, 185 insertions(+), 40 deletions(-) create mode 100644 hw/rtl/VX_cache_arb.sv diff --git a/ci/blackbox.sh b/ci/blackbox.sh index f14acec2..c44dc238 100755 --- a/ci/blackbox.sh +++ b/ci/blackbox.sh @@ -132,9 +132,9 @@ if [ $DEBUG -eq 1 ] then if [ $SCOPE -eq 1 ] then - DEBUG=$DEBUG_LEVEL SCOPE=1 CONFIGS="$CONFIGS" make -s -C $DRIVER_PATH + DEBUG=$DEBUG_LEVEL SCOPE=1 CONFIGS="$CONFIGS" make -C $DRIVER_PATH else - DEBUG=$DEBUG_LEVEL CONFIGS="$CONFIGS" make -s -C $DRIVER_PATH + DEBUG=$DEBUG_LEVEL CONFIGS="$CONFIGS" make -C $DRIVER_PATH fi if [ $HAS_ARGS -eq 1 ] @@ -153,9 +153,9 @@ then else if [ $SCOPE -eq 1 ] then - SCOPE=1 CONFIGS="$CONFIGS" make -s -C $DRIVER_PATH + SCOPE=1 CONFIGS="$CONFIGS" make -C $DRIVER_PATH else - CONFIGS="$CONFIGS" make -s -C $DRIVER_PATH + CONFIGS="$CONFIGS" make -C $DRIVER_PATH fi if [ $HAS_ARGS -eq 1 ] diff --git a/ci/regression.sh b/ci/regression.sh index 546219c3..f93735a8 100755 --- a/ci/regression.sh +++ b/ci/regression.sh @@ -26,7 +26,9 @@ tex() { echo "begin texture tests..." -CONFIGS="-DEXT_TEX_ENABLE=1" ./ci/blackbox.sh --app=tex +CONFIGS="-DEXT_TEX_ENABLE=1" ./ci/blackbox.sh --driver=vlsim --app=tex --args="-isoccer.png -osoccer_result.png -g0" +CONFIGS="-DEXT_TEX_ENABLE=1" ./ci/blackbox.sh --driver=rtlsim --app=tex --args="-itoad.png -otoad_result.png -g1" +CONFIGS="-DEXT_TEX_ENABLE=1" ./ci/blackbox.sh --driver=rtlsim --app=tex --args="-irainbow.png -orainbow_result.png -g1" echo "coverage texture done!" } @@ -169,6 +171,7 @@ while [ "$1" != "" ]; do stress1 ;; -all ) coverage + tex cluster debug config diff --git a/driver/asesim/Makefile b/driver/asesim/Makefile index c3077e06..4452a194 100644 --- a/driver/asesim/Makefile +++ b/driver/asesim/Makefile @@ -63,12 +63,5 @@ scope: scope-defs.h $(PROJECT): $(SRCS) $(OPAE_SYN_DIR)/vortex_afu.h $(SCOPE_H) $(CXX) $(CXXFLAGS) -DUSE_ASE $(SRCS) $(LDFLAGS) -o $(PROJECT) -.depend: $(SRCS) - $(CXX) $(CXXFLAGS) -MM $(SRCS) > .depend; - clean: - rm -rf $(PROJECT) *.o .depend scope-defs.h - -ifneq ($(MAKECMDGOALS),clean) - -include .depend -endif + rm -rf $(PROJECT) *.o scope-defs.h \ No newline at end of file diff --git a/driver/fpga/Makefile b/driver/fpga/Makefile index a2771ecb..bdc12d60 100644 --- a/driver/fpga/Makefile +++ b/driver/fpga/Makefile @@ -65,12 +65,5 @@ scope: scope-defs.h $(PROJECT): $(SRCS) $(OPAE_SYN_DIR)/vortex_afu.h $(SCOPE_H) $(CXX) $(CXXFLAGS) -DUSE_FPGA $^ $(LDFLAGS) -o $(PROJECT) -.depend: $(SRCS) - $(CXX) $(CXXFLAGS) -MM $(SRCS) > .depend; - clean: - rm -rf $(PROJECT) *.o .depend scope-defs.h - -ifneq ($(MAKECMDGOALS),clean) - -include .depend -endif + rm -rf $(PROJECT) *.o scope-defs.h \ No newline at end of file diff --git a/driver/rtlsim/Makefile b/driver/rtlsim/Makefile index 87bd7980..cf0a184d 100644 --- a/driver/rtlsim/Makefile +++ b/driver/rtlsim/Makefile @@ -35,4 +35,4 @@ $(PROJECT): $(SRCS) clean: $(MAKE) -C $(RTLSIM_DIR) clean-static - rm -rf $(PROJECT) *.o .depend \ No newline at end of file + rm -rf $(PROJECT) *.o \ No newline at end of file diff --git a/driver/simx/Makefile b/driver/simx/Makefile index ba6f0284..82bf6e32 100644 --- a/driver/simx/Makefile +++ b/driver/simx/Makefile @@ -21,9 +21,6 @@ $(PROJECT): $(SRCS) $(MAKE) -C $(SIMX_DIR) static $(CXX) $(CXXFLAGS) $^ $(LDFLAGS) -o $@ -.depend: $(SRCS) - $(CXX) $(CXXFLAGS) -MM $^ > .depend; - clean: $(MAKE) -C $(SIMX_DIR) clean-static - rm -rf $(PROJECT) *.o .depend \ No newline at end of file + rm -rf $(PROJECT) *.o \ No newline at end of file diff --git a/driver/vlsim/Makefile b/driver/vlsim/Makefile index 58e8d566..5608ad11 100644 --- a/driver/vlsim/Makefile +++ b/driver/vlsim/Makefile @@ -50,13 +50,6 @@ $(PROJECT): $(SRCS) $(SCOPE_H) $(SCOPE_ENABLE) $(PERF_ENABLE) $(MAKE) -C $(VLSIM_DIR) static $(CXX) $(CXXFLAGS) -DUSE_VLSIM $(SRCS) $(LDFLAGS) -o $(PROJECT) -.depend: $(SRCS) - $(CXX) $(CXXFLAGS) -MM $(SRCS) > .depend; - clean: $(MAKE) -C $(VLSIM_DIR) clean-static - rm -rf $(PROJECT) *.o .depend scope-defs.h - -ifneq ($(MAKECMDGOALS),clean) - -include .depend -endif + rm -rf $(PROJECT) *.o scope-defs.h \ No newline at end of file diff --git a/hw/rtl/VX_cache_arb.sv b/hw/rtl/VX_cache_arb.sv new file mode 100644 index 00000000..85800edf --- /dev/null +++ b/hw/rtl/VX_cache_arb.sv @@ -0,0 +1,159 @@ +`include "VX_define.vh" + +module VX_cache_arb #( + parameter NUM_REQS = 1, + parameter LANES = 1, + parameter DATA_SIZE = 1, + parameter TAG_IN_WIDTH = 1, + parameter TAG_SEL_IDX = 0, + parameter BUFFERED_REQ = 0, + parameter BUFFERED_RSP = 0, + parameter TYPE = "R", + + localparam ADDR_WIDTH = (32-`CLOG2(DATA_SIZE)), + localparam DATA_WIDTH = (8 * DATA_SIZE), + localparam LOG_NUM_REQS = `CLOG2(NUM_REQS), + localparam TAG_OUT_WIDTH = TAG_IN_WIDTH + LOG_NUM_REQS +) ( + input wire clk, + input wire reset, + + // input requests + input wire [NUM_REQS-1:0][LANES-1:0] req_valid_in, + input wire [NUM_REQS-1:0][LANES-1:0] req_rw_in, + input wire [NUM_REQS-1:0][LANES-1:0][DATA_SIZE-1:0] req_byteen_in, + input wire [NUM_REQS-1:0][LANES-1:0][ADDR_WIDTH-1:0] req_addr_in, + input wire [NUM_REQS-1:0][LANES-1:0][DATA_WIDTH-1:0] req_data_in, + input wire [NUM_REQS-1:0][LANES-1:0][TAG_IN_WIDTH-1:0] req_tag_in, + output wire [NUM_REQS-1:0][LANES-1:0] req_ready_in, + + // output request + output wire [LANES-1:0] req_valid_out, + output wire [LANES-1:0] req_rw_out, + output wire [LANES-1:0][DATA_SIZE-1:0] req_byteen_out, + output wire [LANES-1:0][ADDR_WIDTH-1:0] req_addr_out, + output wire [LANES-1:0][DATA_WIDTH-1:0] req_data_out, + output wire [LANES-1:0][TAG_OUT_WIDTH-1:0] req_tag_out, + input wire [LANES-1:0] req_ready_out, + + // input response + input wire rsp_valid_in, + input wire [LANES-1:0] rsp_tmask_in, + input wire [LANES-1:0][DATA_WIDTH-1:0] rsp_data_in, + input wire [TAG_OUT_WIDTH-1:0] rsp_tag_in, + output wire rsp_ready_in, + + // output responses + output wire [NUM_REQS-1:0] rsp_valid_out, + output wire [NUM_REQS-1:0][LANES-1:0] rsp_tmask_out, + output wire [NUM_REQS-1:0][LANES-1:0][DATA_WIDTH-1:0] rsp_data_out, + output wire [NUM_REQS-1:0][TAG_IN_WIDTH-1:0] rsp_tag_out, + input wire [NUM_REQS-1:0] rsp_ready_out +); + localparam REQ_DATAW = TAG_OUT_WIDTH + ADDR_WIDTH + 1 + DATA_SIZE + DATA_WIDTH; + localparam RSP_DATAW = LANES * (1 + DATA_WIDTH) + TAG_IN_WIDTH; + + if (NUM_REQS > 1) begin + + wire [NUM_REQS-1:0][LANES-1:0][REQ_DATAW-1:0] req_data_in_merged; + wire [LANES-1:0][REQ_DATAW-1:0] req_data_out_merged; + + for (genvar i = 0; i < NUM_REQS; i++) begin + for (genvar j = 0; j < LANES; ++j) begin + wire [TAG_OUT_WIDTH-1:0] req_tag_in_w; + + VX_bits_insert #( + .N (TAG_IN_WIDTH), + .S (LOG_NUM_REQS), + .POS (TAG_SEL_IDX) + ) bits_insert ( + .data_in (req_tag_in[i][j]), + .sel_in (LOG_NUM_REQS'(i)), + .data_out (req_tag_in_w) + ); + + assign req_data_in_merged[i][j] = {req_tag_in_w, req_addr_in[i][j], req_rw_in[i][j], req_byteen_in[i][j], req_data_in[i][j]}; + end + end + + VX_stream_arbiter #( + .NUM_REQS (NUM_REQS), + .LANES (LANES), + .DATAW (REQ_DATAW), + .BUFFERED (BUFFERED_REQ), + .TYPE (TYPE) + ) req_arb ( + .clk (clk), + .reset (reset), + .valid_in (req_valid_in), + .data_in (req_data_in_merged), + .ready_in (req_ready_in), + .valid_out (req_valid_out), + .data_out (req_data_out_merged), + .ready_out (req_ready_out) + ); + + for (genvar i = 0; i < LANES; ++i) begin + assign {req_tag_out[i], req_addr_out[i], req_rw_out[i], req_byteen_out[i], req_data_out[i]} = req_data_out_merged[i]; + end + + /////////////////////////////////////////////////////////////////////// + + wire [NUM_REQS-1:0][RSP_DATAW-1:0] rsp_data_out_merged; + + wire [LOG_NUM_REQS-1:0] rsp_sel = rsp_tag_in[TAG_SEL_IDX +: LOG_NUM_REQS]; + + wire [TAG_IN_WIDTH-1:0] rsp_tag_in_w; + + VX_bits_remove #( + .N (TAG_OUT_WIDTH), + .S (LOG_NUM_REQS), + .POS (TAG_SEL_IDX) + ) bits_remove ( + .data_in (rsp_tag_in), + .data_out (rsp_tag_in_w) + ); + + VX_stream_demux #( + .NUM_REQS (NUM_REQS), + .LANES (1), + .DATAW (RSP_DATAW), + .BUFFERED (BUFFERED_RSP) + ) rsp_demux ( + .clk (clk), + .reset (reset), + .sel_in (rsp_sel), + .valid_in (rsp_valid_in), + .data_in ({rsp_tmask_in, rsp_tag_in_w, rsp_data_in}), + .ready_in (rsp_ready_in), + .valid_out (rsp_valid_out), + .data_out (rsp_data_out_merged), + .ready_out (rsp_ready_out) + ); + + for (genvar i = 0; i < NUM_REQS; i++) begin + assign {rsp_tmask_out[i], rsp_tag_out[i], rsp_data_out[i]} = rsp_data_out_merged[i]; + end + + end else begin + + `UNUSED_VAR (clk) + `UNUSED_VAR (reset) + + assign req_valid_out = req_valid_in; + assign req_tag_out = req_tag_in; + assign req_addr_out = req_addr_in; + assign req_rw_out = req_rw_in; + assign req_byteen_out = req_byteen_in; + assign req_data_out = req_data_in; + assign req_ready_in = req_ready_out; + + assign rsp_valid_out = rsp_valid_in; + assign rsp_tmask_out = rsp_tmask_in; + assign rsp_tag_out = rsp_tag_in; + assign rsp_data_out = rsp_data_in; + assign rsp_ready_in = rsp_ready_out; + + end + +endmodule \ No newline at end of file diff --git a/hw/rtl/VX_writeback.sv b/hw/rtl/VX_writeback.sv index 7c2bcfb1..cdf7f988 100644 --- a/hw/rtl/VX_writeback.sv +++ b/hw/rtl/VX_writeback.sv @@ -93,9 +93,6 @@ module VX_writeback #( assign fpu_commit_if.ready = rsp_ready[1] || ~fpu_commit_if.wb; assign alu_commit_if.ready = rsp_ready[2] || ~alu_commit_if.wb; assign csr_commit_if.ready = rsp_ready[3] || ~csr_commit_if.wb; -`ifdef EXT_TEX_ENABLE - assign gpu_commit_if.ready = rsp_ready[4] || ~gpu_commit_if.wb; -`endif `else assign alu_commit_if.ready = rsp_ready[1] || ~alu_commit_if.wb; assign csr_commit_if.ready = rsp_ready[2] || ~csr_commit_if.wb; @@ -103,6 +100,16 @@ module VX_writeback #( assign gpu_commit_if.ready = rsp_ready[3] || ~gpu_commit_if.wb; `endif `endif + +`ifdef EXT_TEX_ENABLE +`ifdef EXT_F_ENABLE + assign gpu_commit_if.ready = rsp_ready[4] || ~gpu_commit_if.wb; +`else + assign gpu_commit_if.ready = rsp_ready[3] || ~gpu_commit_if.wb; +`endif +`else + assign gpu_commit_if.ready = 1; +`endif assign stall = ~writeback_if.ready && writeback_if.valid; diff --git a/tests/regression/tex/Makefile b/tests/regression/tex/Makefile index 0c47a8bc..8b313d25 100644 --- a/tests/regression/tex/Makefile +++ b/tests/regression/tex/Makefile @@ -47,13 +47,13 @@ run-simx: $(PROJECT) kernel.bin LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/simx:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-fpga: $(PROJECT) kernel.bin - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/fpga:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-asesim: $(PROJECT) kernel.bin - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae/ase:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/asesim:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-vlsim: $(PROJECT) kernel.bin - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae/vlsim:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/vlsim:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-rtlsim: $(PROJECT) kernel.bin LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/rtlsim:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS)