Gather FPGA perf stats
This commit is contained in:
@@ -881,7 +881,6 @@ assign vx_csr_io_req_rw = (STATE_CSR_WRITE == state);
|
||||
assign vx_csr_io_req_addr = cmd_csr_addr;
|
||||
assign vx_csr_io_req_data = cmd_csr_wdata;
|
||||
|
||||
assign cmd_csr_rdata = vx_csr_io_rsp_data;
|
||||
assign vx_csr_io_rsp_ready = 1;
|
||||
|
||||
assign cmd_csr_done = (STATE_CSR_WRITE == state) ? vx_csr_io_req_ready : vx_csr_io_rsp_valid;
|
||||
@@ -890,6 +889,7 @@ always_ff @(posedge clk)
|
||||
begin
|
||||
if (SoftReset) begin
|
||||
csr_io_req_sent <= 0;
|
||||
cmd_csr_rdata <= 0;
|
||||
end
|
||||
else begin
|
||||
if (vx_csr_io_req_valid && vx_csr_io_req_ready) begin
|
||||
@@ -898,6 +898,11 @@ begin
|
||||
if (cmd_csr_done) begin
|
||||
csr_io_req_sent <= 0;
|
||||
end
|
||||
if ((STATE_CSR_READ == state)
|
||||
&& vx_csr_io_rsp_ready
|
||||
&& vx_csr_io_rsp_valid) begin
|
||||
cmd_csr_rdata <= vx_csr_io_rsp_data;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ module VX_alu_unit (
|
||||
VX_mult #(
|
||||
.WIDTHA(33),
|
||||
.WIDTHB(33),
|
||||
.WIDTHP(64),
|
||||
.WIDTHP(66),
|
||||
.SIGNED(1),
|
||||
.PIPELINE(`MUL_LATENCY)
|
||||
) multiplier (
|
||||
|
||||
@@ -18,24 +18,21 @@ module VX_csr_arb (
|
||||
`UNUSED_VAR (clk)
|
||||
`UNUSED_VAR (reset)
|
||||
|
||||
wire pick_core = (| csr_core_req_if.valid);
|
||||
|
||||
// Which request to pick
|
||||
assign issued_csr_req_if.is_io = !pick_core;
|
||||
wire pick_core = (| csr_core_req_if.valid);
|
||||
|
||||
// Mux between core and io
|
||||
assign issued_csr_req_if.valid = pick_core ? csr_core_req_if.valid : {`NUM_THREADS{csr_io_req_if.valid}};
|
||||
assign issued_csr_req_if.is_csr = pick_core ? csr_core_req_if.is_csr : 1'b1;
|
||||
assign issued_csr_req_if.alu_op = pick_core ? csr_core_req_if.alu_op : (csr_io_req_if.rw ? `ALU_CSR_RW : `ALU_CSR_RS);
|
||||
assign issued_csr_req_if.csr_address = pick_core ? csr_core_req_if.csr_address : csr_io_req_if.addr;
|
||||
assign issued_csr_req_if.csr_mask = pick_core ? csr_core_req_if.csr_mask : (csr_io_req_if.rw ? csr_io_req_if.data : 32'b0);
|
||||
|
||||
assign csr_io_req_if.ready = !(csr_pipe_stall || pick_core);
|
||||
|
||||
// Core arguments
|
||||
assign issued_csr_req_if.warp_num = csr_core_req_if.warp_num;
|
||||
assign issued_csr_req_if.csr_address = pick_core ? csr_core_req_if.csr_address : csr_io_req_if.addr;
|
||||
assign issued_csr_req_if.csr_immed = pick_core ? csr_core_req_if.csr_immed : 0;
|
||||
assign issued_csr_req_if.csr_mask = pick_core ? csr_core_req_if.csr_mask : (csr_io_req_if.rw ? csr_io_req_if.data : 32'b0);
|
||||
assign issued_csr_req_if.is_io = !pick_core;
|
||||
assign issued_csr_req_if.warp_num = csr_core_req_if.warp_num;
|
||||
assign issued_csr_req_if.rd = csr_core_req_if.rd;
|
||||
assign issued_csr_req_if.wb = csr_core_req_if.wb;
|
||||
assign issued_csr_req_if.wb = csr_core_req_if.wb;
|
||||
|
||||
assign csr_io_req_if.ready = !(csr_pipe_stall || pick_core);
|
||||
|
||||
// Core Writeback
|
||||
assign csr_wb_if.valid = csr_pipe_rsp_if.valid & {`NUM_THREADS{~csr_pipe_rsp_if.is_io}};
|
||||
|
||||
@@ -38,7 +38,6 @@ module VX_csr_pipe #(
|
||||
.wb_valid (| writeback_if.valid)
|
||||
);
|
||||
|
||||
// wire hazard = (csr_address_s2 == csr_req_if.csr_address) & (warp_num_s2 == csr_req_if.warp_num) & |(valid_s2) & is_csr_s2;
|
||||
wire car_hazard = (csr_address_s2 == csr_req_if.csr_address) & (warp_num_s2 == csr_req_if.warp_num) & |(valid_s2) & is_csr_s2;
|
||||
|
||||
assign csr_read_data = car_hazard ? csr_updated_data_s2 : csr_read_data_unqual;
|
||||
|
||||
@@ -104,7 +104,7 @@ module VX_decode(
|
||||
assign is_lui = (curr_opcode == `INST_LUI);
|
||||
assign is_auipc = (curr_opcode == `INST_AUIPC);
|
||||
assign is_csr = (curr_opcode == `INST_SYS) && (func3 != 0);
|
||||
assign is_csr_immed = (is_csr) && (func3[2] == 1);
|
||||
assign is_csr_immed = is_csr && (func3[2] == 1);
|
||||
|
||||
assign is_gpgpu = (curr_opcode == `INST_GPGPU);
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ module VX_gpr_stage (
|
||||
wire is_jal = bckE_req_if.is_jal;
|
||||
`DEBUG_END
|
||||
|
||||
|
||||
assign csr_req_if.is_io = 1'b0; // GPR only issues csr requests coming from core
|
||||
|
||||
VX_gpr_read_if gpr_read_if();
|
||||
|
||||
@@ -35,7 +35,7 @@ module VX_divide #(
|
||||
quartus_div.lpm_widthd = WIDTHD,
|
||||
quartus_div.lpm_nrepresentation = NSIGNED ? "SIGNED" : "UNSIGNED",
|
||||
quartus_div.lpm_drepresentation = DSIGNED ? "SIGNED" : "UNSIGNED",
|
||||
quartus_div.lpm_hint = "LPM_REMAINDERPOSITIVE=FALSE,MAXIMIZE_SPEED=9",
|
||||
quartus_div.lpm_hint = "MAXIMIZE_SPEED=6,LPM_REMAINDERPOSITIVE=FALSE",
|
||||
quartus_div.lpm_pipeline = PIPELINE;
|
||||
|
||||
`else
|
||||
|
||||
@@ -23,9 +23,9 @@ module VX_mult #(
|
||||
.dataa (dataa),
|
||||
.datab (datab),
|
||||
.result (result),
|
||||
.sclr (reset),
|
||||
.aclr (1'b0),
|
||||
.clken (1'b1),
|
||||
.sclr (1'b0),
|
||||
.sum (1'b0)
|
||||
);
|
||||
|
||||
@@ -35,7 +35,7 @@ module VX_mult #(
|
||||
quartus_mult.lpm_widthp = WIDTHP,
|
||||
quartus_mult.lpm_representation = SIGNED ? "SIGNED" : "UNSIGNED",
|
||||
quartus_mult.lpm_pipeline = PIPELINE,
|
||||
quartus_mult.lpm_hint = "MAXIMIZE_SPEED=9";
|
||||
quartus_mult.lpm_hint = "DEDICATED_MULTIPLIER_CIRCUITRY=YES,MAXIMIZE_SPEED=9";
|
||||
`else
|
||||
|
||||
wire [WIDTHP-1:0] result_unqual;
|
||||
|
||||
Reference in New Issue
Block a user