mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-24 05:47:35 -04:00
minor updates
This commit is contained in:
parent
9b810edfe8
commit
7128082da1
5 changed files with 19 additions and 37 deletions
|
@ -114,7 +114,6 @@
|
|||
`define INST_ALU_SLL 4'b1111
|
||||
`define INST_ALU_OTHER 4'b0111
|
||||
`define INST_ALU_BITS 4
|
||||
`define INST_ALU_OP(x) x[`INST_ALU_BITS-1:0]
|
||||
`define INST_ALU_CLASS(op) op[3:2]
|
||||
`define INST_ALU_SIGNED(op) op[0]
|
||||
`define INST_ALU_IS_SUB(op) (op[3:0] == 4'b1011)
|
||||
|
@ -137,9 +136,9 @@
|
|||
`define INST_BR_MRET 4'b1110
|
||||
`define INST_BR_OTHER 4'b1111
|
||||
`define INST_BR_BITS 4
|
||||
`define INST_BR_NEG(x) x[1]
|
||||
`define INST_BR_LESS(x) x[2]
|
||||
`define INST_BR_STATIC(x) x[3]
|
||||
`define INST_BR_NEG(op) op[1]
|
||||
`define INST_BR_LESS(op) op[2]
|
||||
`define INST_BR_STATIC(op) op[3]
|
||||
|
||||
`define INST_M_MUL 3'b000
|
||||
`define INST_M_MULHU 3'b001
|
||||
|
@ -176,10 +175,9 @@
|
|||
`define INST_LSU_SW 4'b1010
|
||||
`define INST_LSU_SD 4'b1011 // new for RV64I SD
|
||||
`define INST_LSU_BITS 4
|
||||
`define INST_LSU_FMT(x) x[2:0]
|
||||
`define INST_LSU_WSIZE(x) x[1:0]
|
||||
`define INST_LSU_IS_MEM(x) (3'h0 == x)
|
||||
`define INST_LSU_IS_FENCE(x) (3'h1 == x)
|
||||
`define INST_LSU_FMT(op) op[2:0]
|
||||
`define INST_LSU_WSIZE(op) op[1:0]
|
||||
`define INST_LSU_IS_FENCE(mod) (mod == 1)
|
||||
|
||||
`define INST_FENCE_BITS 1
|
||||
`define INST_FENCE_D 1'h0
|
||||
|
|
|
@ -66,15 +66,6 @@ module VX_dispatch (
|
|||
wire [`INST_LSU_BITS-1:0] lsu_op_type = `INST_LSU_BITS'(dispatch_if.op_type);
|
||||
wire lsu_is_fence = `INST_LSU_IS_FENCE(dispatch_if.op_mod);
|
||||
|
||||
// USED TO TRUNCATE IMMEDIATE and RS1 TO 32 BITS
|
||||
wire [`XLEN-1:0] trunc_ibuffer_imm = ibuffer_if.imm[`XLEN-1:0];
|
||||
wire [`NUM_THREADS-1:0][`XLEN-1:0] trunc_rs1;
|
||||
|
||||
for (genvar i = 0; i < `NUM_THREADS; ++i) begin
|
||||
// These values are used for PC calculations, so should stay as 32 bits
|
||||
assign trunc_rs1[i] = gpr_rsp_if.rs1_data[i][`XLEN-1:0];
|
||||
end
|
||||
|
||||
VX_skid_buffer #(
|
||||
.DATAW (UUID_WIDTH + NW_WIDTH + `NUM_THREADS + `XLEN + `INST_LSU_BITS + 1 + `XLEN + `NR_BITS + 1 + `NUM_THREADS*`XLEN + `NUM_THREADS*`XLEN),
|
||||
.OUT_REG (1)
|
||||
|
@ -83,7 +74,7 @@ module VX_dispatch (
|
|||
.reset (reset),
|
||||
.valid_in (lsu_req_valid),
|
||||
.ready_in (lsu_req_ready),
|
||||
.data_in ({dispatch_if.uuid, dispatch_if.wid, dispatch_if.tmask, dispatch_if.PC, lsu_op_type, lsu_is_fence, trunc_ibuffer_imm, dispatch_if.rd, dispatch_if.wb, trunc_rs1, gpr_rsp_if.rs2_data}),
|
||||
.data_in ({dispatch_if.uuid, dispatch_if.wid, dispatch_if.tmask, dispatch_if.PC, lsu_op_type, lsu_is_fence, ibuffer_if.imm, dispatch_if.rd, dispatch_if.wb, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data}),
|
||||
.data_out ({lsu_req_if.uuid, lsu_req_if.wid, lsu_req_if.tmask, lsu_req_if.PC, lsu_req_if.op_type, lsu_req_if.is_fence, lsu_req_if.offset, lsu_req_if.rd, lsu_req_if.wb, lsu_req_if.base_addr, lsu_req_if.store_data}),
|
||||
.valid_out (lsu_req_if.valid),
|
||||
.ready_out (lsu_req_if.ready)
|
||||
|
@ -96,10 +87,6 @@ module VX_dispatch (
|
|||
wire [`CSR_ADDR_BITS-1:0] csr_addr = dispatch_if.imm[`CSR_ADDR_BITS-1:0];
|
||||
wire [`NRI_BITS-1:0] csr_imm = dispatch_if.imm[`CSR_ADDR_BITS +: `NRI_BITS];
|
||||
|
||||
// USED TO TRUNCATE CSRs TO 32 BITS. I DONT KNOW IF THIS IS CORRECT???
|
||||
// Commenting this to fix a warning because this csr_rs1_data signal is not being used anywhere else. -Jaswanth
|
||||
// wire [31:0] csr_rs1_data = gpr_rsp_if.rs1_data[tid][31:0]; // CSR stays 32 bits
|
||||
|
||||
VX_skid_buffer #(
|
||||
.DATAW (UUID_WIDTH + NW_WIDTH + `NUM_THREADS + `XLEN + `INST_CSR_BITS + `CSR_ADDR_BITS + `NR_BITS + 1 + 1 + `NRI_BITS + `UP(`NT_BITS) + (`NUM_THREADS * `XLEN)),
|
||||
.OUT_REG (1)
|
||||
|
|
|
@ -107,15 +107,15 @@ module VX_lsu_unit #(
|
|||
wire mem_req_valid;
|
||||
wire [`NUM_THREADS-1:0] mem_req_mask;
|
||||
wire mem_req_rw;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-REQ_ASHIFT-1:0] mem_req_addr;
|
||||
reg [`NUM_THREADS-1:0][DCACHE_WORD_SIZE-1:0] mem_req_byteen;
|
||||
reg [`NUM_THREADS-1:0][`XLEN-1:0] mem_req_data;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-REQ_ASHIFT-1:0] mem_req_addr;
|
||||
reg [`NUM_THREADS-1:0][DCACHE_WORD_SIZE-1:0] mem_req_byteen;
|
||||
reg [`NUM_THREADS-1:0][`XLEN-1:0] mem_req_data;
|
||||
wire [TAG_WIDTH-1:0] mem_req_tag;
|
||||
wire mem_req_ready;
|
||||
|
||||
wire mem_rsp_valid;
|
||||
wire [`NUM_THREADS-1:0] mem_rsp_mask;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-1:0] mem_rsp_data;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-1:0] mem_rsp_data;
|
||||
wire [TAG_WIDTH-1:0] mem_rsp_tag;
|
||||
wire mem_rsp_eop;
|
||||
wire mem_rsp_ready;
|
||||
|
@ -134,7 +134,7 @@ module VX_lsu_unit #(
|
|||
wire [`NUM_THREADS-1:0][REQ_ASHIFT-1:0] req_align;
|
||||
|
||||
for (genvar i = 0; i < `NUM_THREADS; ++i) begin
|
||||
assign req_align[i] = full_addr[i][REQ_ASHIFT-1:0];
|
||||
assign req_align[i] = full_addr[i][REQ_ASHIFT-1:0];
|
||||
assign mem_req_addr[i] = full_addr[i][`XLEN-1:REQ_ASHIFT];
|
||||
end
|
||||
|
||||
|
@ -162,12 +162,10 @@ module VX_lsu_unit #(
|
|||
endcase
|
||||
end
|
||||
|
||||
wire lsu_req_fire = lsu_req_if.valid && lsu_req_if.ready;
|
||||
// TODO: memory misalignment not supported!
|
||||
`RUNTIME_ASSERT(~(lsu_req_fire && `INST_LSU_WSIZE(lsu_req_if.op_type) == 1 && req_align[i][0] != 0), ("misaligned memory access!"));
|
||||
`ifdef XLEN_64
|
||||
`RUNTIME_ASSERT(~(lsu_req_fire && `INST_LSU_WSIZE(lsu_req_if.op_type) == 2 && req_align[i][1:0] != 0), ("misaligned memory access!"));
|
||||
`endif
|
||||
// memory misalignment not supported!
|
||||
wire lsu_req_fire = lsu_req_if.valid && lsu_req_if.ready;
|
||||
`RUNTIME_ASSERT((~lsu_req_fire || ~lsu_req_if.tmask[i] || lsu_req_if.is_fence || (full_addr[i] % (1 << `INST_LSU_WSIZE(lsu_req_if.op_type))) == 0),
|
||||
("misaligned memory access, PC=0x%0h, addr=0x%0h, wsize=%0d!", lsu_req_if.PC, full_addr[i], `INST_LSU_WSIZE(lsu_req_if.op_type)));
|
||||
|
||||
always @(*) begin
|
||||
mem_req_data[i] = lsu_req_if.store_data[i];
|
||||
|
|
|
@ -9,8 +9,8 @@ interface VX_lsu_req_if ();
|
|||
wire [`XLEN-1:0] PC;
|
||||
wire [`INST_LSU_BITS-1:0] op_type;
|
||||
wire is_fence;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-1:0] store_data;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-1:0] base_addr;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-1:0] store_data;
|
||||
wire [`NUM_THREADS-1:0][`XLEN-1:0] base_addr;
|
||||
wire [`XLEN-1:0] offset;
|
||||
wire [`NR_BITS-1:0] rd;
|
||||
wire wb;
|
||||
|
|
|
@ -2,7 +2,7 @@ XLEN ?= 32
|
|||
|
||||
TARGET ?= opaesim
|
||||
|
||||
XRT_SYN_DIR ?= ../../../hw/syn/xilinx/xrt
|
||||
XRT_SYN_DIR ?= ../../../hw/syn/xilinx/xrt
|
||||
|
||||
ifeq ($(XLEN),64)
|
||||
RISCV_TOOLCHAIN_PATH ?= /opt/riscv64-gnu-toolchain
|
||||
|
@ -54,7 +54,6 @@ VX_CFLAGS += -DLLVM_VORTEX
|
|||
VX_LDFLAGS += -Wl,-Bstatic,--gc-sections,-T,$(VORTEX_KN_PATH)/linker/vx_link$(XLEN).ld $(VORTEX_KN_PATH)/libvortexrt.a
|
||||
|
||||
CXXFLAGS += -std=c++17 -Wall -Wextra -pedantic -Wfatal-errors
|
||||
|
||||
CXXFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_KN_PATH)/../hw
|
||||
|
||||
LDFLAGS += -L$(VORTEX_RT_PATH)/stub -lvortex
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue