fix(hpu): fix overflow flag of OVF_MUL & OVF_MULS, also update simulation HPU config

This commit is contained in:
pgardratzama
2025-10-06 17:17:55 +02:00
committed by Pierre Gardrat
parent ab25919187
commit ca4159f123
2 changed files with 15 additions and 6 deletions

View File

@@ -25,18 +25,26 @@
lut_mem = 256
lut_pc = {Hbm={pc=34}}
fw_size= 16777215 # i.e. 16 MiB
fw_size= 16777216 # i.e. 16 MiB
fw_pc = {Ddr= {offset= 0x3900_0000}} # NB: Allocation must take place in the Discrete DDR
bsk_pc = [
{Hbm={pc=8}},
{Hbm={pc=10}},
{Hbm={pc=12}},
{Hbm={pc=14}},
{Hbm={pc=24}},
{Hbm={pc=26}},
{Hbm={pc=28}},
{Hbm={pc=30}},
{Hbm={pc=40}},
{Hbm={pc=42}},
{Hbm={pc=44}},
{Hbm={pc=46}},
{Hbm={pc=56}},
{Hbm={pc=60}}
{Hbm={pc=58}},
{Hbm={pc=60}},
{Hbm={pc=62}}
]
ksk_pc = [
@@ -64,7 +72,7 @@
[firmware]
implementation = "Llt"
integer_w=[2,4,6,8,10,12,14,16,32,64,128]
min_batch_size = 11
min_batch_size = 12
kogge_cfg = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/kogge_cfg.toml"
custom_iop.'IOP[0]' = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/custom_iop/cust_0.asm"
custom_iop.'IOP[1]' = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/custom_iop/cust_1.asm"
@@ -80,8 +88,8 @@
custom_iop.'IOP[21]' = "${HPU_BACKEND_DIR}/config_store/${HPU_CONFIG}/custom_iop/cust_21.asm"
[firmware.op_cfg.default]
fill_batch_fifo = true
min_batch_size = false
fill_batch_fifo = false
min_batch_size = true
use_tiers = false
flush_behaviour = "Patient"
flush = true

View File

@@ -498,6 +498,7 @@ pub fn iop_mulx(
// Wrapped required lookup table in MetaVar
let pbs_msg = new_pbs!(prog, "MsgOnly");
let pbs_carry = new_pbs!(prog, "CarryInMsg");
let pbs_carry_is_some = new_pbs!(prog, "CarryIsSome");
let pbs_mul_lsb = new_pbs!(prog, "MultCarryMsgLsb");
let pbs_mul_msb = new_pbs!(prog, "MultCarryMsgMsb");
let pbs_mult_is_some = new_pbs!(prog, "MultCarryMsgIsSome");
@@ -691,7 +692,7 @@ pub fn iop_mulx(
pp_vars.push_back((w + 1, msb));
} else if flag.is_some() {
// Last carry must be extracted for overflow computation
let ovf_lsb_nz = var.pbs(&pbs_mult_msb_is_some, false);
let ovf_lsb_nz = var.pbs(&pbs_carry_is_some, false);
ovf_non_zero_vars.push(ovf_lsb_nz);
}
}