mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-22 04:47:25 -04:00
improved rtl/isolde_exec_block.sv
This commit is contained in:
parent
1f3fa3045a
commit
7755227294
3 changed files with 50 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue