minor update - 206-214 mhz

This commit is contained in:
Blaise Tine
2020-08-29 05:14:08 -07:00
parent def28e1ed0
commit 0a0b28aac0
16 changed files with 90 additions and 122 deletions

View File

@@ -72,9 +72,9 @@ module VX_alu_unit #(
for (genvar i = 0; i < `NUM_THREADS; i++) begin
always @(*) begin
case (alu_op_class)
0: alu_result[i] = is_sub ? sub_result[i][31:0] : add_result[i];
0: alu_result[i] = add_result[i];
1: alu_result[i] = {31'b0, sub_result[i][32]};
2: alu_result[i] = shift_result[i];
2: alu_result[i] = is_sub ? sub_result[i][31:0] : shift_result[i];
default: alu_result[i] = misc_result[i];
endcase
end

View File

@@ -111,7 +111,7 @@ module VX_commit #(
end
end
`else
`UNUSED_FIELD(fpu_commit_if, curr_PC)
`UNUSED_VAR(fpu_commit_if.curr_PC)
`endif
endmodule

View File

@@ -111,13 +111,13 @@
`define MOD_BITS 3
`define ALU_ADD 4'b0000
`define ALU_SUB 4'b0001
`define ALU_LUI 4'b0010
`define ALU_AUIPC 4'b0011
`define ALU_SLTU 4'b0100
`define ALU_SLT 4'b0101
`define ALU_SRL 4'b1000
`define ALU_SRA 4'b1001
`define ALU_SUB 4'b1011
`define ALU_AND 4'b1100
`define ALU_OR 4'b1101
`define ALU_XOR 4'b1110

View File

@@ -38,7 +38,7 @@ module VX_fpu_unit #(
VX_cam_buffer #(
.DATAW (`NW_BITS + `NUM_THREADS + 32 + `NR_BITS + 1),
.SIZE (`FPUQ_SIZE)
) mul_queue (
) fpu_cam (
.clk (clk),
.reset (reset),
.acquire_slot (fpuq_push),

View File

@@ -36,6 +36,8 @@ module VX_gpr_bypass #(
delayed_push <= 0;
use_buffer <= 0;
use_buffer2 <= 0;
buffer <= 0;
buffer2 <= 0;
end else begin
delayed_push <= push;
assert(!use_buffer2 || use_buffer);

View File

@@ -25,6 +25,9 @@ module VX_gpr_fp_ctrl (
if (reset) begin
read_rs3 <= 0;
rs3_wid <= 0;
rs1_tmp_data <= 0;
rs2_tmp_data <= 0;
rs3_tmp_data <= 0;
end else begin
if (rs3_delay) begin
read_rs3 <= 1;

View File

@@ -52,10 +52,10 @@ module VX_gpr_stage #(
assign gpr_read_if.rs3_data = 0;
assign gpr_read_if.ready_in = 1;
`UNUSED_FIELD (gpr_read_if, valid);
`UNUSED_FIELD (gpr_read_if, use_rs3);
`UNUSED_FIELD (gpr_read_if, rs3);
`UNUSED_FIELD (gpr_read_if, ready_out);
`UNUSED_VAR (gpr_read_if.valid);
`UNUSED_VAR (gpr_read_if.use_rs3);
`UNUSED_VAR (gpr_read_if.rs3);
`UNUSED_VAR (gpr_read_if.ready_out);
`endif
assign writeback_if.ready = 1'b1;

View File

@@ -84,6 +84,8 @@ module VX_ibuffer #(
reg deq_valid, deq_valid_n;
reg [DATAW-1:0] deq_instr, deq_instr_n;
reg [DATAW-1:0] q_data_prev_r, q_data_out_r;
always @(*) begin
valid_table_n = valid_table;
if (deq_fire) begin
@@ -94,6 +96,8 @@ module VX_ibuffer #(
end
end
// schedule the next instruction to issue
// does round-robin scheduling when multiple warps are present
always @(*) begin
deq_valid_n = 0;
deq_wid_n = 'x;
@@ -108,7 +112,7 @@ module VX_ibuffer #(
end else if ((1 == num_warps) || freeze) begin
deq_valid_n = (!deq_fire || (q_size[deq_wid] != SIZEW'(1))) || enq_fire;
deq_wid_n = (!deq_fire || (q_size[deq_wid] != SIZEW'(1))) ? deq_wid : ibuf_enq_if.wid;
deq_instr_n = deq_fire ? ((q_size[deq_wid] != SIZEW'(1)) ? q_data_prev[deq_wid] : q_data_in) : q_data_out[deq_wid];
deq_instr_n = deq_fire ? ((q_size[deq_wid] != SIZEW'(1)) ? q_data_prev_r : q_data_in) : q_data_out_r;
end else begin
for (integer i = 0; i < `NUM_WARPS; i++) begin
if (schedule_table_n[i]) begin
@@ -141,6 +145,9 @@ module VX_ibuffer #(
schedule_table[deq_wid_n] <= 0;
end
q_data_out_r <= (0 == num_warps) ? q_data_in : q_data_out[deq_wid_n];
q_data_prev_r <= q_data_prev[deq_wid_n];
deq_valid <= deq_valid_n;
deq_wid <= deq_wid_n;
deq_instr <= deq_instr_n;

View File

@@ -110,7 +110,7 @@ module VX_lsu_unit #(
VX_cam_buffer #(
.DATAW (`NW_BITS + 32 + `NR_BITS + 1 + (`NUM_THREADS * 2) + 2),
.SIZE (`LSUQ_SIZE)
) lsu_queue (
) lsu_cam (
.clk (clk),
.reset (reset),
.write_addr (req_tag),

View File

@@ -35,7 +35,7 @@ module VX_mul_unit #(
VX_cam_buffer #(
.DATAW (`NW_BITS + `NUM_THREADS + 32 + `NR_BITS + 1),
.SIZE (`MULQ_SIZE)
) mul_queue (
) mul_cam (
.clk (clk),
.reset (reset),
.acquire_slot (mulq_push),

View File

@@ -31,13 +31,7 @@
/* verilator lint_on UNDRIVEN */ \
/* verilator lint_on DECLFILENAME */
`define UNUSED_VAR(x) /* verilator lint_off UNUSED */ \
wire [$bits(x)-1:0] __``x``__ = x; \
/* verilator lint_on UNUSED */
`define UNUSED_FIELD(x,y) /* verilator lint_off UNUSED */ \
wire [$bits(x.y)-1:0] __``y``__ = x.y; \
/* verilator lint_on UNUSED */
`define UNUSED_VAR(x) always @(x) begin end
`define UNUSED_PIN(x) /* verilator lint_off PINCONNECTEMPTY */ \
. x () \

View File

@@ -25,7 +25,7 @@ module VX_writeback #(
wire wb_valid;
wire [`NW_BITS-1:0] wb_wid;
wire [`NUM_THREADS-1:0] wb_thread_mask;
wire [`NUM_THREADS-1:0] wb_tmask;
wire [`NR_BITS-1:0] wb_rd;
wire [`NUM_THREADS-1:0][31:0] wb_data;
@@ -43,7 +43,7 @@ module VX_writeback #(
fpu_valid ? fpu_commit_if.wid :
0;
assign wb_thread_mask = alu_valid ? alu_commit_if.thread_mask :
assign wb_tmask = alu_valid ? alu_commit_if.thread_mask :
lsu_valid ? lsu_commit_if.thread_mask :
csr_valid ? csr_commit_if.thread_mask :
mul_valid ? mul_commit_if.thread_mask :
@@ -73,7 +73,7 @@ module VX_writeback #(
.reset (reset),
.stall (stall),
.flush (1'b0),
.in ({wb_valid, wb_wid, wb_thread_mask, wb_rd, wb_data}),
.in ({wb_valid, wb_wid, wb_tmask, wb_rd, wb_data}),
.out ({writeback_if.valid, writeback_if.wid, writeback_if.thread_mask, writeback_if.rd, writeback_if.data})
);

View File

@@ -62,7 +62,7 @@ module VX_snp_forwarder #(
VX_cam_buffer #(
.DATAW (`DRAM_ADDR_WIDTH + 1 + SNP_REQ_TAG_WIDTH),
.SIZE (SNRQ_SIZE)
) snp_fwd_buffer (
) snp_fwd_cam (
.clk (clk),
.reset (reset),
.write_addr (sfq_write_addr),

View File

@@ -85,30 +85,28 @@ module VX_fp_noncomp #(
wire tmp_a_smaller = $signed(dataa[i]) < $signed(datab[i]);
wire tmp_ab_equal = (dataa[i] == datab[i]) | (tmp_a_type[4] & tmp_b_type[4]);
always @(posedge clk) begin
if (~stall) begin
a_sign[i] <= tmp_a_sign;
b_sign[i] <= tmp_b_sign;
a_exponent[i] <= tmp_a_exponent;
b_exponent[i] <= tmp_b_exponent;
a_mantissa[i] <= tmp_a_mantissa;
b_mantissa[i] <= tmp_b_mantissa;
a_type[i] <= tmp_a_type;
b_type[i] <= tmp_b_type;
a_smaller[i] <= tmp_a_smaller;
ab_equal[i] <= tmp_ab_equal;
end
end
VX_generic_register #(
.N(1 + 1 + 8 + 8 + 23 + 23 + $bits(fp_type_t) + $bits(fp_type_t) + 1 + 1)
) fnc1_reg (
.clk (clk),
.reset (reset),
.stall (stall),
.flush (1'b0),
.in ({tmp_a_sign, tmp_b_sign, tmp_a_exponent, tmp_b_exponent, tmp_a_mantissa, tmp_b_mantissa, tmp_a_type, tmp_b_type, tmp_a_smaller, tmp_ab_equal}),
.out ({a_sign[i], b_sign[i], a_exponent[i], b_exponent[i], a_mantissa[i], b_mantissa[i], a_type[i], b_type[i], a_smaller[i], ab_equal[i]})
);
end
always @(posedge clk) begin
if (~stall) begin
op_type_r <= op_type;
frm_r <= frm;
dataa_r <= dataa;
datab_r <= datab;
end
end
VX_generic_register #(
.N(`FPU_BITS + `FRM_BITS + (2 * `NUM_THREADS * 32))
) fnc2_reg (
.clk (clk),
.reset (reset),
.stall (stall),
.flush (1'b0),
.in ({op_type, frm, dataa, datab}),
.out ({op_type_r, frm_r, dataa_r, datab_r})
);
// FCLASS
for (genvar i = 0; i < LANES; i++) begin

View File

@@ -1,38 +0,0 @@
`ifndef VX_ISSUE_IF
`define VX_ISSUE_IF
`include "VX_define.vh"
interface VX_issue_if ();
wire valid;
wire [`ITAG_BITS-1:0] issue_tag;
wire [`NW_BITS-1:0] wid;
wire [`NUM_THREADS-1:0] thread_mask;
wire [31:0] curr_PC;
wire [`EX_BITS-1:0] ex_type;
wire [`OP_BITS-1:0] op_type;
wire [`FRM_BITS-1:0] frm;
wire wb;
wire [`NR_BITS-1:0] rd;
wire [`NUM_THREADS-1:0][31:0] rs1_data;
wire [`NUM_THREADS-1:0][31:0] rs2_data;
wire [`NUM_THREADS-1:0][31:0] rs3_data;
wire [`NR_BITS-1:0] rs1;
wire [31:0] imm;
wire rs1_is_PC;
wire rs2_is_imm;
wire [1NT_BITS-1:0] tid;
endinterface
`endif

View File

@@ -19,6 +19,8 @@ module VX_skid_buffer #(
always @(posedge clk) begin
if (reset) begin
data_out_r <= 0;
buffer <= 0;
use_buffer <= 0;
valid_out_r <= 0;
end else begin