Finding an empty slot in an array of registers
The structure you're looking for is called a "priority encoder". It will take a set of bits and give you the number of the lowest-numbered bit that is asserted. If you invert your "valid" bits to create a set of "empty" bits for the reservation stations (a term that I first saw in conjunction with the IBM System 360 Model 91), the priority encoder will give you the number of the first available one.

The HDL source code for a priority encoder is indeed a large combinatorial if-then-else statement, but this is a common construct and the synthesis tools can map it efficiently onto the underlying hardware.

My first full-time job after college (early 1980s) was to design a new CPU for scientific applications, and I borrowed heavily from the 360/91 design. Unfortunately, my design never got built, but I still have a lot of my design notes, and every now and then I think about doing it in an FPGA.