I have been studying a lot about SystemVerilog interfaces lately and how to put all the actual interface logic in them. Because right now, the accepted way is to program controllers for each side and just reusing that because protocols don't change and the internal architecture usually deploy