Where should I go to start building this knowledge.
You might have a go at playing with one of the available open-source SoC/SoC builder. Plenty to chose from. The language used to create the core and soc may or may not be relevant to real-life work (Verilog, SystemVerilog, VHDL, SpinalHDL, Chisel, Migen, nMigen, ...), but the underlying principles will be similar. Tinkering is a good way to learn :-)
E.g.
LiteX and
ESP can both generate Linux-capable SoC with different cores; the first support SMP with the VexRiscv core (32-bits RISC-V), the second with LEON (a venerable 32-bits SPARC core that was designed - and used - for aerospace applications). They both support uni-processor with 64-bits RISC-V (Ariane/CVA6 for ESP, Rocket or BlackParrot for LiteX). LiteX fits on fairly small FPGA and can do very lightweight core (for bare-metal codes), ESP seems to require larger devices (they don't really support any cheap board).
There's probably plenty more out there, including those developed for retrocomputing (e.g.
MIST,
MISTer,
TEMLIB, ...)