minor updates

This commit is contained in:
Blaise Tine 2023-05-27 02:18:07 -04:00
parent 9b810edfe8
commit 7128082da1
5 changed files with 19 additions and 37 deletions

View file

@ -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

View file

@ -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)

View file

@ -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];

View file

@ -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;

View file

@ -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