HCL:Cilamari
Driving bare metal tests is hard. We see that in functional tests for individual components as well as full system tests where you want to see whether a Linux distribution is actually functional on a target system. To solve the problem at least for a subset of devices (namely ARM development boards), we want to create our own device that would be able to drive a Device Under Test (DUT).
Some peripherals can only be fully emulated through an FPGA. So the Cilamari system is built around the Xilinx ZU2CG-1 which gives us FPGA logic to drive components we do not have native "target" hard IP blocks for in the SoC.
Hardware Specs
Base System
- Xilinx ZU2CG
- DDR4 SODIMM slot
- SPI Flash
- USB host (USB 3.0?)
- SD host
- JTAG
- 2x RJ45 1Gbit/s
- M.2 Slot for PCIe (and SATA?) connectivity
- (eMMC)
- Battery and quartz for RTC
To drive DUTs
- 2x HDMI in/out (switchable)
- 2x USB device
- 2x SD card device (needs 1.8V & 3.3V switch)
- 2+x TTL UART (3.3V)
- 5+x Relay (galvanic separation)
- 1+x Power measurement on relay
- (CAN)
- PMODs or another way to connect to the rest of PL pins. Most of these should be switchable for 1.8V/3.3V/5V
SD card device
This is self made IP to emulate an SD card. The plug will just be an extension of the PCB with an artefact that resembles a microSD card with a long tail. To actually connect to a DUT, this male plug can then be connected to an extension chord (or the cheap alternative) which in turn gives us a flex cable to not break any components.
We will eventually also want to support eMMC (so 8 DAT lines). I'm not quite sure how that will happen yet. Maybe a separate flex plug?
Additional Ideas
Display Port
Display Port may become more widely used again thanks to USB-C support, so it should be possible to test it. I don't know how hard it would be to handle DP via the FPGA. This is WIP to determine.
Ulrich had an idea to make one in/out HDMI port in only and mux that with a DP in:
-> DP_in -> SN65DP159 (TI) -> \ HD3SS215 (TI) -> SoC-FPGA -> HDMI_in -----------------> /
The main uncertainty in the solution above is to figure out whether it's sufficient to test MST.
Question: Isn't this just an adapter to convert physical layer of the link? i.e. as I (Ben) understand it right now this is equivalent to a DP++ to HDMI adapter and the DP++ output would be switched to sending a TDMS bitstream rather than a DP bitstream. So from the computers perspective, it acts like HDMI. It would still be useful for connecting hardware, but it wouldn't be testing DP. After some research, it turned out that you, Ben, are right. The proposed solution is for DP++ (which was new to me as my last video PCB dates back to 2013). There are some devices out there from Parade Technologies (PS171, PS176), which could be used and are used in adapters. However the distributor in germany (hyline) indicated that only HDCP licensees are entitled to buy these devices with a minimum quantity of 2.5k parts.
HDMI I/O
As an HDMI input ADV7619 would be nice as it enables fast interfaces. It is available via standard distris (farnell, digikey, ...). HDMI output is TBD as of now.
HDMI input can probably be done straight inside the FPGA via DP decoding. The only problem here is that we need to attach an MMCM to the clock line and multiply that clock up by 10x which means we need really fast I/O pins. Maybe the HP pins can do that, but they are at 1.8V so we need a 3.3V to 1.8V converter.
USB-C
Supporting USB-C with actual USB-3.0 links as well as Display Port would be nice. Again, this is something we need to figure out whether it's feasible or not.
Audio
Capturing / sending audio is on the wish list. We'll see if we can wire something like i2s out. If not, it should always be possible to handle audio capture and playback support via a USB sound card. Audio jack detection works mechanically in most cases, which makes it close to impossible to emulate.
Used interfaces
PS
Port | Pins | Target |
---|---|---|
GT1 | ? | USB 3 host |
GT2 | ? | USB 3 device |
GT3 | ? | M.2 PCIe |
GT4 | ? | ? |
MIO | ? | Ethernet |
MIO | ? | Ethernet |
MIO | ? | SPI Flash |
MIO | 2 | USB2 host (for USB3 port) |
MIO | 2 | UART |
MIO | 2 | UART |
MIO | ? | free |
? | ? | Power Measurement |
PL
Port | Pins | Notes | Target |
---|---|---|---|
HD | 2 | 1xDP | USB2 device |
HD | 2 | 1xDP | USB2 device |
HD | 6 | SD emulation | |
HD | 10 | SD emulation (w/ eMMC) | |
HD | 5 | Relay | |
HP | 8 | 4xDP | HDMI |
HD | 2 | HDMI I2C | |
HP | 8 | 4xDP | HDMI |
HD | 2 | HDMI I2C | |
HP | 42 | free | |
HD | -5 | free |