FPGA's and SoC can be used for many more advanced functions as making a LED to blink. However "LED Blinky" is considered a "Hello World" for systems that can not otherwise say Hello.
To make LED to Blink (under user control) following requirements are needed:
If any of those requirements are missing, you will most likely fail with the simple task to get an LED to Blink.
It is very common that modern Integrated Circuits have separate power supply pins for I/O Voltage. That voltage if applied control the output levels from the device, if the Voltage is too low or missing then it is not possible to have enough current from the device I/O Pin to make a LED Lit.
FPGA and SoC SoM's can have fixed and user controlled Voltages for the I/O Banks. It is important to assure that the I/O Bank that controls the LED has a valid Supply Voltage applied.
If you are not sure about the I/O Banks Voltage supplies then there are some options to try.
If there is on board LED directly connected to FPGA "DONE" output, then it is also possible to control it as long as it is possible to configure the FPGA (or PL portion of Zynq). For Zynq the PS subsystem is not needed if configuration is done via JTAG.
The good thing about Done LED is that if it is available it has fixed location, there is no need to assign it to some pin and it has fixed available power as well. The tricky parts is that DONE output is controlled by FPGA Primitive so the code to control the Done LED is different from that of normal PL I/O Controlled LED.
If there is a LED directly connected to lower MIO Bank of the Zynq then this LED is also always controllable, as this Bank has to be powered for the device to boot. This LED can also be controlled if the PL portion of the Zynq is not configured or even un-powered.
This is an option that is always available as long as we have JTAG Connection to the PL.
Example of VIO LED, the SoM being used is Kintex UltraScale TE0841, the LED is implemented in F32C Softcore Bootloader that is waiting for Arduino IDE to download a sketch. There is no limit for the number of virtual LED's. It is also possible to attach those VIO LED's to Zynq GPIO when using EMIO mulitplexing, so the same GUI would show LED's controlled by Zynq PS during boot or running Linux.
MIO LED | DONE LED | User LED PL | Notes | |
---|---|---|---|---|
TE0710 | - | |||
TE0711 | - | |||
TE0712 | - | No* | Yes* | LED's are routed to PL I/O by System Control CPLD |
TE0714 | - | No | Yes | One fixed LED on PL,1.8V or 3.3V I/O Voltage always present |
TE0720 | MIO7 | Yes, Fixed | Yes* | System control CPLD can remap the LED functions during FSBL |
TE0725 | - | Yes | Yes | LED's power always available |
TE0741 | - | |||
TE0745 | MIO | - | ||
TE0782 | ||||
TE0841 | - | - | Yes |
Base | User LED's | Notes |
---|---|---|
TE0701 | up to 8 max | All LED's controlled by the System Control CPLD, some require user I/O Bank voltage |
TE0703 | 2* | User supplied I/O Voltage |
TE0705 | ||
TE0706 | 0 | Can use RJ45 LED's as PL User LED's |
SoM | Variant | Clock | RAM | Notes |
---|---|---|---|---|
TE0712 | ||||
TE0725 | ||||
TE0841 |
F32C_Demo availability of designs and prebuilt images ready to be used with Arduino IDE.