Depending on your ambition and willingness to compromise, many SDRs can do a reasonable job as a "goodnuf" spectrum analyzer.
But you probably won't get a good absolute power measurement out of any of the affordable SDRs. Yes you can calibrate, but the frequency response is not flat across the range of the radio, and may even have intentional dips. For some of these radios you'll have difficulty just getting DC balance and quadrature alignment right, never mind amplitude.
But relative measurements over a reasonably narrow frequency range can be quite good.
I've been using various Ettus USRPs for about 13 years now, ranging from the E100 up to the newest big beasts with two 200 MS/s receivers. In all that time I've *never* found a need to do FPGA design. It just isn't worth the time, and it really isn't the right place to be doing spectral analysis -- useful PSD measurements require more than just an FFT. There's windowing, buffer overlap, and probably larger FFTs than you'd want to do on an FPGA. And then, as has been pointed out, you still have to work through the software API and control.
So what to do? First, figure out just how much spectrum you need to see at one time.
Typically I use a fairly slow sample rate between the radio and the computer. SoDaRadio uses a 625 kHz rate, as I really don't need to see much more than 200 kHz at a time - it was designed as an all-mode transceiver. Keeping up with rates below about 1.5 MS/s is pretty easy even with old hardware.
The flip-side of low sample rates is the need to retune if you want to see a wider chunk of spectrum. Most of the affordable SDRs have trouble doing any kind of rapid frequency change in the oscillators between the antenna and the ADC. With delays in the library and driver code and the dynamics of PLL lock, the actual settling time might be hard to verify or even estimate. (I believe that clean oscillators and fast settling times might be in conflict. I'd rather have a clean LO and tolerate the delay: my N200 has been tuned to the same frequency for more than a week now.)
If you really want to see a wide band all at once, prepare to spend money on both a radio and the computer to eat the data. I've run some experiments with the high end radios at 100 MS/s but those were mostly streaming to storage. They connect to the host machine via 10 GB fiber and I think I can hear the photons screaming.
So, figure out the sample rate you need, balance it against simultaneous bandwidth and the capability of the host computer. Don't worry a whole lot about real-time response. The better software APIs will forgive you if you get a little behind -- real time response isn't nearly as important as keeping-up. The USRP run-time code even warns you if you've got insufficient buffer space allocated -- the big buffers make everything a little easier.
So, don't let the FPGA stuff be a barrier. Just ignore the FPGA route and write some code. Start with python if that's where you're comfortable. If python code can't keep up, you have at least three reasonable options
1. Trim your ambition.
2. Get a faster computer
3. See if a compiled solution (C, C++, whatever) can do the job.
Option 3 isn't all it's cracked up to be. If you do it right, most of the code running in the python app is actually in some library (like Numpy or scipy) that is tuned to Hellengone. (But I'll confess that I do most of my work in C++ -- I've got a basket of tools (filter builders, overlap-and-save widgets, resamplers, etc.) that I've been carrying around with me for a few years.)
Finally - don't overlook GnuRadio and GnuRadioCompanion. They're great starting places to experiment. Sometimes that's all you need.