improved rtl/isolde_exec_block.sv

This commit is contained in:
daro 2024-09-23 22:39:06 +03:00
parent 1f3fa3045a
commit 7755227294
3 changed files with 50 additions and 5 deletions

View file

@ -103,6 +103,8 @@ module isolde_decoder
read_ptr <= read_ptr + 1;
case (isolde_opcode_q)
isolde_opcode_vle32_4: load_quad_word();
isolde_opcode_gemm: decode_64b_gemm();
endcase
end
endcase
@ -156,4 +158,38 @@ module isolde_decoder
end
end
endtask
task static decode_64b_gemm;
/**
(v4i32 QPR:$rd2), ( IntOp ( iPTR GPR:$rd1)
,( iPTR GPR:$rs1)
,( v4i32 QPR:$rs4)
,( iPTR GPR:$rs2)
,( v4i32 QPR:$rs5)
,( iPTR GPR:$rs3)
,( i32 imm:$transA)
,( i32 imm:$transB)
)
**/
begin
if (3'h1 == read_ptr) begin
//first 32 bits
// isolde_rf_bus.wdata_0[3] <= isolde_decoder_instr_batch_i[1][24:20]; //rs2
// isolde_rf_bus.wdata_0[3] <= isolde_decoder_instr_batch_i[1][19:15]; //rs1
// isolde_rf_bus.wdata_0[3] <= isolde_decoder_instr_batch_i[1][14:12]; //funct3
// isolde_rf_bus.wdata_0[3] <= isolde_decoder_instr_batch_i[1][11:7]; //rd1
// // extension 32 bits
// isolde_rf_bus.wdata_0[1] <= isolde_decoder_instr_batch_i[0][61:57]; //rs6
isolde_rf_bus.raddr_1 <= isolde_decoder_instr_batch_i[0][56:52]; //rs5
isolde_rf_bus.raddr_0 <= isolde_decoder_instr_batch_i[0][51:47]; //rs4
// isolde_rf_bus.wdata_0[1] <= isolde_decoder_instr_batch_i[0][46:44]; //_ext_funct3
// isolde_rf_bus.wdata_0[1] <= isolde_decoder_instr_batch_i[0][43:39]; //rd2
isolde_decoder_exec_bus.funct2 <= isolde_decoder_instr_batch_i[0][38:37]; //_ext_funct2
// isolde_rf_bus.wdata_0[1] <= isolde_decoder_instr_batch_i[0][36:32]; //rs3
end
end
endtask
endmodule

View file

@ -126,9 +126,17 @@ module isolde_exec_block
`ifndef SYNTHESIS
$fwrite(log_fh, " --- %s\n", "isolde_exec_block::start_gemm");
$fwrite(log_fh, " func3=%b\n", isolde_exec_from_decoder.func3);
$fwrite(log_fh, " rd=%d\n", isolde_exec_from_decoder.rd);
$fwrite(log_fh, " rd1=%d\n", isolde_exec_from_decoder.rd);
$fwrite(log_fh, " rs1=%d\n", isolde_exec_from_decoder.rs1);
$fwrite(log_fh, " rs2=%d\n", isolde_exec_from_decoder.rs2);
$fwrite(log_fh, " rs4=%d\n", isolde_rf_bus.raddr_0 );
$fwrite(log_fh, " Q[%d] = [ %d, %d, %d, %d ]\n", isolde_rf_bus.raddr_0, isolde_rf_bus.rdata_0[0], isolde_rf_bus.rdata_0[1],
isolde_rf_bus.rdata_0[2], isolde_rf_bus.rdata_0[3]);
$fwrite(log_fh, " rs5=%d\n", isolde_rf_bus.raddr_1 );
$fwrite(log_fh, " Q[%d] = [ %d, %d, %d, %d ]\n", isolde_rf_bus.raddr_1, isolde_rf_bus.rdata_1[0], isolde_rf_bus.rdata_1[1],
isolde_rf_bus.rdata_1[2], isolde_rf_bus.rdata_1[3]);
$fwrite(log_fh, " funct2=%b\n", isolde_exec_from_decoder.funct2 );
`endif
begin
cnt_max <= 4; // wait cycles time for completion

View file

@ -13,8 +13,9 @@ interface isolde_fetch2exec_if (
//
isolde_decoder_pkg::isolde_opcode_e isolde_opcode; //decoded instruction
logic [2:0] func3; //instr[14-12]
logic [4:0] rd; //register destination vector
logic [4:0] rs1; //register source vector
logic [4:0] rs2; //register source vector
logic [4:0] rd; //register destination
logic [4:0] rs1; //register source
logic [4:0] rs2; //register source
//
logic [1:0] funct2;
endinterface