There are some people here who can actually help, I can not. I wouldn't dream of designing a PCB for an FPGA, particularly if it used a BGA package. More complicated yet would be interfacing to DDR memory and getting the trace lengths correct. I concede! I am not the guy to do this...
So, what would I do? Well, I might go over to ztex.de and buy something like the 2.01 board. I would then design a daughter card that contained my peripherals and just plug the FPGA board into a pair of headers.
Clearly, my approach won't work for commercial projects but I don't build those. BTW, the 2.01 board has a very fast FPGA->USB->PC interface.
I used this approach when I added a couple of USB serial ports and a compact flash drive to a Z80 board and I did it again when I wanted to use an MBED to receive SPI and send TCP. In the latter case, the daughter card contains just a 6 pin PMOD header and a magjack. A trivial PCB but it saved me a BUNCH of work.
Actually, I did it one other time when I was messing around with an LPC2106 (ARM7) board and I wanted to play MP3s grabbed from an NFS server. I just plugged an LPC2106 'STAMP' style board into a daughter board with a TCP/IP 'STAMP' style board and a CODEC. Pretty trivial.
Considering how complex the contraints file has gotten under Vivado, I will always yield to someone else to create it. Mine came from Digilent for the Arty and Basys 3 boards.