These are generally crafted as synthesizable cores, often provided with Verilog or VHDL in terms of their hardware description. You can view them like high-level languages in terms of computer programming. They are flexible enough to be changed in terms of their designs, thus the use of the word “soft” in their description.