I'm working on an audio design that involves a digital subsystem with the following needed:
1. USB 2.0 HS (480Mbps), USB audio class 2.0 device support.
2. Ethernet support, WiFi/BT are optional, if they come free, I will take it. If not, I won't miss it.
3. Ethernet protocol with at least UDP, WINS and supporting IP/ARP/RARP.
4. Enough processing power, looking at 400 32-bit MMACS with modulus addressing (FIR), the modulus addressing part can be replaced with banked linear addressing.
5. Fast SPI, SDI, QSPI, parallel port or whatever interface that can dump at least 100Mb/s to an FPGA.
6. SPDIF receiving up to 24/192.
7. 4 bi-quad sigma delta modulation (similar to IIR) at 12.288Msps, dual channel.
So far, I'm using ESP32 (Ethernet/WiFi/BT)+ADSP-BF706 (DSP, USBHS)+iCE40 (SPDIF MUX+receiving) combination, but there are 2 problems with this combination:
1. I don't know how well ESP32 will be supported in a long run -- will be be still available in 5 years? High end audio is a low volume, high profit, R&D intensive business, and a redesign due to unable to source components is unacceptable.
2. Multichip solution involves collaboration between chips, which may cause CPU overhead and is fundamentally not elegant.
Here I have an alternative: iMX6ULL+RAM
Pros: Single chip for all computing needs, plus native float support, and long term availability. With SPDIF receiver, Ethernet controller and dual USB HS built in.
Cons: Practically must run Linux, realtime performance not guaranteed, ALSA driver must be GPLed (so I need to mmap incoming data to user space, process with closed-source DSP code, and mmap to kernel). Also, it takes ~5 seconds to boot with my best optimization: minimal uboot, minimal kernel, no sysvinit/systemd (app is init), while ESP32 boots instantly.
So, can anyone give me a suggestion on whether should I use ESP32+DSP+FPGA or should I use iMX6+RAM solution? I have spent some time on both -- I have virtually all BF706 firmware done, but I have not started working on ESP32 yet, not on FPGA, though I can reuse my old AES RX IP. On the other hand, I've been working on iMX6ULL yocto also for a while and was able to reduce boot time to 5 seconds. I think with more in-depth modification on u-boot and kernel, I can reduce that to <3 seconds.