Ok, lets put it in this way: if firmware layering is properly done, i.e. that for beginning lower hardware is abstracted from higher "presentation" layer then no difference should be if all code is executed on one place (i.e. MCU board) or many others. Then it become simply a matter of designer choice.
I've been thinking a lot about this over the last few days. On the one hand, I like the idea of leaving lots of flexibiilty to the module designer. On the other hand, forcing the module designer to use a separate micro means that the module driver code
must be separated from the master and use a defined interface, which is a good thing in my book. We also know that designing
any module will require some programming, whether it be in the master or in the module.
I'm now doing a thought experiment on 'simple' cards which might be reasonable candidates for no-MCU implementation:
- Basic Digital Input No MCU needed. MCU could be useful for time stamping inputs if desired.
- Relay Driver Could do with simple outputs. But I would like to have a defined state in the event of a backplane communications failure, which is easier to do with an MCU than logic.
- Relay MUX card This card is likely to use latching relays* which require set/reset drive and should have cycle counters. Again, easier to do with an MCU.
- Power supply / Electronic Load / Function Generator I would really like an MCU to handle a) calibration b) any mode switching and c) graceful shutdown in the event of a backplane communications failure.
- Multimeter / Power Meter I would like an MCU to do calibration and manage input MUXing.
- Data acquisition card Could be done without MCU
So I'm seeing that a good number of cards should have an MCU. So my current thinking is that Ogden is right;
it's reasonable to require all the modules to have an MCU. If using an MCU in each module, UART comms make sense. They could start at a well-supported baud rate (e.g. good old-fashioned 9600 baud) to exchange identity information and then negotiate for higher speeds (10 MHz / 16 = 625 kbaud for an MCU, >100 Mbaud for an FPGA!).
I would suggest that the backplane keep using LVDS to support those higher data rates. I would like to keep 2 (maybe 4?) extra LVDS lanes on hand for some slots to support applications where big data transfer is required. Using a clock distribution system (which we definitely want to have), LVDS can go up to 1000 Mbit/s or so without using crazy expensive FPGAs. (600 Mbit/s LVDS isolators are available from Analog Devices.) 4x LVDS lanes @ 600 Mbit/s each = 2.4 Gbit/s!
A basic 'connect this DIB module to my computer' interface could be a power supply, UART port and basic enclosure.
* Latching type relays are recommended for low current sealed signal relays to reduce self-heating. Self-heating can apparently lead to migration of compounds inside the sealed contact compartment and cause sticking or high contact resistance. Self-heating can also cause thermocouple effects.