Hi All, going to try and describe things without revealing too much about the application.
Basically a board receives a logic input (call it A) from a host system. A is distributed to 16 outputs which drive some circuits, let's call the outputs Y[15:0]. In normal operation, all the Y outputs are just equal to A, so none of the bits of Y are independent. But for self-testing purposes, we need to make these outputs somewhat independent, which will require some logic in between.
Basically what I want is to configure each Y bit to select A, ~A, 0, or 1. One way to do this with off-the-shelf devices is to have each Y come from a multiplexer (can be implemented with a 1G57 logic gate), each of which requires two control bits. These control bits would come from a GPIO expander (so need 32 bits to support 16 outputs). Our board already has an I2C interface to the host system, and the reconfiguration doesn't have to be fast, so I2C provides a convenient interface for the GPIO expander. See attached diagram (hoping attachment works...).
But even if we use a single logic gate for each output, that's a lot of board space and components. And we may need to scale to more outputs. I'm looking to replace the whole thing with a CPLD/FPGA, but I'm not very familiar with low-end options.
One big caveat for this application is that this board contains extremely sensitive broadband RF receivers (can't get into specifics here), so RFI generated by an FPGA is a big concern. I'm fairly sure that even low-end FPGAs have internal oscillators and logic which operates in the background to support certain features (configuration, initialization, debugging, etc). Would be ideal if we could feed the FPGA an additional signal (call it IDLE) which would disable as much of this as possible. So when we need to update the control bits via I2C we would first de-assert IDLE. Then before running the tests we would assert IDLE, which would disable as much as possible while leaving the required combination logic functioning. Repeat as necessary.
Obviously the amount of RFI we see from the FPGA will depend on numerous factors outside of the FPGA itself, but I'm trying to at least select parts which get close to this sort of behavior. This sort of stuff is always buried deep in documentation (or not provided at all). For example, I was looking at the Igloo Nano, and it mentions an "Idle" mode which can be entered by just halting external clock sources. Sounds great, but it doesn't seem to describe what happens to its internal oscillators or the circuitry they clock. Just hoping for some general tips.
Also a few other specifications about the application/fpga:
The logic input A is not very fast, minimum pulse width is maybe 500ns. A few tens of nanoseconds of skew/delay on the Y outputs won't matter.
Being able to update the firmware via that same I2C interface would be nice, but isn't a requirement
FPGA configuration can be stored either in FPGA NVM (i.e. MAX10) or in an external memory (i.e. cyclone)
QFP/QFN footprints would be nice, but BGA is an option too (min pitch 0.65mm though)