Automatic generation of high-throughput systolic tree-based solvers for modern FPGAs