|  |  |  | # ULX3S Manual
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Connectors
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     US1    Main micro-USB for power, program and communication. | 
					
						
							|  |  |  |            All onboard hardware can be programmed or reconfigured | 
					
						
							|  |  |  |            over US1: FPGA, FLASH, WiFi, RTC. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     US2    Auxiliary micro-USB connected directly to FPGA pins | 
					
						
							|  |  |  |            for experimenting with user-defined USB cores. | 
					
						
							|  |  |  |            Board provides power to US2. | 
					
						
							|  |  |  |            Board can't be powered from US2. | 
					
						
							|  |  |  |            If you want to power board from US2, reverse diode | 
					
						
							|  |  |  |            D9 near US2 connector. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GPDI   Plug for cable to digital monitor or TV, | 
					
						
							|  |  |  |            4 TMDS+- video | 
					
						
							|  |  |  |            1 HEAC+- ethernet and audio return  | 
					
						
							|  |  |  |            SDA,SCL  I2C (DDS EDID) | 
					
						
							|  |  |  |            CEC      remote control | 
					
						
							|  |  |  |            +5V      supply to enable plug-in detection | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     AUDIO  3.5 mm jack with 3 channels for earphones | 
					
						
							|  |  |  |            and digital audio or composite video (analog TV) | 
					
						
							|  |  |  |            Suitable cables are 3.5mm to 3-RCA (cinch) | 
					
						
							|  |  |  |            Red-White-Yellow for iPhone/iBook/NOKIA. | 
					
						
							|  |  |  |            Sony cables are the most popular and look identical | 
					
						
							|  |  |  |            but are not suitable, they have GND at Ring2! | 
					
						
							|  |  |  |            Tip:    Left analog audio | 
					
						
							|  |  |  |            Ring1:  Right analog audio | 
					
						
							|  |  |  |            Ring2:  Digital audio SPDIF | 
					
						
							|  |  |  |            Sleeve: GND | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     OLED   7-pin 2.54 mm header OLED1 for SSD1331 SPI color OLED | 
					
						
							|  |  |  |            pinout:   CS DC RES SDA SCL VCC GND | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     JTAG   6-pin 2.54 mm header J4 for external JTAG programmer | 
					
						
							|  |  |  |            pinout:   3V3 GND | 
					
						
							|  |  |  |                      TCK TDI | 
					
						
							|  |  |  |                      TDO TMS | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     GPIO   40-pin 2.54 mm double-row connectors J1 and J2 for GPIO  | 
					
						
							|  |  |  |            at 3.3V logical level with 56 bidirectional single-ended | 
					
						
							|  |  |  |            pins or 28 bidirectional differential pairs or combined, | 
					
						
							|  |  |  |            some single-ended and some differential. | 
					
						
							|  |  |  |            J1 pins marked 9-13 are shared with WiFi (PCB v1.7) | 
					
						
							|  |  |  |            J2 pins marked 14-17 are shared with ADC. | 
					
						
							|  |  |  |            4 PMOD connectors can be made out of it | 
					
						
							|  |  |  |            (GND and 3.3V power are on the right place) | 
					
						
							|  |  |  |            J1-J2 distance is suitable to be plugged into triple | 
					
						
							|  |  |  |            protoboard using a single row of J1/J2.       | 
					
						
							|  |  |  |            J2 has also 5V IN/OUT (be careful, GPIO pins are not | 
					
						
							|  |  |  |            5V tolerant). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SD     Micro SD card, all signal pins are routed to FPGA and | 
					
						
							|  |  |  |            shared with ESP-32 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ESP32  Placeholder to solder ESP-32 WROOM module. | 
					
						
							|  |  |  |            ESP-32 can provide standalone web interface for uploading | 
					
						
							|  |  |  |            bitstream into FPGA and its config FLASH.  | 
					
						
							|  |  |  |            Warning on PCB v1.7 ESP-32 must be isolated from all SD | 
					
						
							|  |  |  |            card pins otherwise ESP-32 won't boot no matter if | 
					
						
							|  |  |  |            SD card is inserted or not. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Power
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Plug US1 into PC or USB charger and board should power up. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Initial voltage rise at USB 5V line will trigger board powering | 
					
						
							|  |  |  | up and holding the power. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | USB-serial chip FT231X will always be powered from 5V USB | 
					
						
							|  |  |  | on PCB v1.7. The board has switching voltage regulators | 
					
						
							|  |  |  | which can be turned off to reduce power consumption. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Green LED D18 behaviour is the "Power LED". Green LED ON will keep  | 
					
						
							|  |  |  | board powered up. By factory default, when USB-serial chip | 
					
						
							|  |  |  | is enumerated by PC, Green LED will turn ON. | 
					
						
							|  |  |  | Normally when board is plugged into USB charger Green LED may shortly | 
					
						
							|  |  |  | blink and stay OFF, but board will keep being powered. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Board PCB v1.7 must be hardware patched to be able to reliably | 
					
						
							|  |  |  | enter shutdown mode. (It will keep waking up). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RTC without battery will keep powering up the board as factory default. | 
					
						
							|  |  |  | 3V battery CR1225 and configured RTC chip is required for the board to | 
					
						
							|  |  |  | enter shutdown mode. There are several ways to wake up the board: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     1) Press BTN0 | 
					
						
							|  |  |  |     2) Re-plug US1 micro-USB cable | 
					
						
							|  |  |  |     3) RTC ALARM (using PCF8523 arduino example) | 
					
						
							|  |  |  |     4) Turn on Green LED D18 (using ftx_prog or libftdi) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Just a short pulse at RTC (ALARM INT1 shorly pull down) or | 
					
						
							|  |  |  | Green LED shortly going HIGH is enough to wake up the board. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is SHUTDOWN pin where FPGA can turn OFF the board. | 
					
						
							|  |  |  | This pin is not correctly routed on PCB v1.7 and needs | 
					
						
							|  |  |  | hardware upgrade to make it work. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | On J2 connector there are 2 pins for 5V external power input | 
					
						
							|  |  |  | and output. They are located on top right, near pin labeled 27  | 
					
						
							|  |  |  | and US2 connector. Power is unidirectionaly routed using schottky | 
					
						
							|  |  |  | diodes. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Powering only from 3.3V is not possible because switching regulators | 
					
						
							|  |  |  | need 5V to generate 2.5V and 1.1V. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Switching regulators use ferrite core coils L1,L2,L3 which can saturate | 
					
						
							|  |  |  | at magnetic fields above 0.3T. Never approach neodymium magnets | 
					
						
							|  |  |  | near powered board. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Programming over USB
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Use ftx_prog to allow max USB power consumption of 500mA | 
					
						
							|  |  |  | and change product/manufacturer name of FT231X chip: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ftx_prog --max-bus-power 500 | 
					
						
							|  |  |  |     ftx_prog --manufacturer "FER-RADIONA-EMARD" | 
					
						
							|  |  |  |     ftx_prog --product "ULX3S FPGA 45K v1.7" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Optionally you can change "45K" to "25K" or "12K" in regard with FPGA chip size. | 
					
						
							|  |  |  | Re-plug the USB and it will appear as new name which can be autodetected | 
					
						
							|  |  |  | with USB-serial JTAG tool. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Use Emard's fork of Xark's [FleaFPGA-JTAG](https://github.com/emard/FleaFPGA-JTAG) tool. | 
					
						
							|  |  |  | This tool accepts VME files for uploading to the FPGA SRAM or onboard  | 
					
						
							|  |  |  | SPI FLASH chip. SRAM VME file is simple to make, but when generating  | 
					
						
							|  |  |  | FLASH VME file, follow the Lattice  | 
					
						
							|  |  |  | TN02050 document:  | 
					
						
							|  |  |  | "Programming External SPI Flash through JTAG for ECP5/ECP5-5G" | 
					
						
							|  |  |  | section: | 
					
						
							|  |  |  | "6. Programming the SPI Flash with bitstream file using Diamond Programmer" | 
					
						
							|  |  |  | and select FLASH chip type: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Family: SPI Serial Flash | 
					
						
							|  |  |  |     Vendor: Micron | 
					
						
							|  |  |  |     Device: SPI-M25F32 | 
					
						
							|  |  |  |     Package. 8-pin VDFPN8 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When it creates VME file, pass it to FleaFPGA-JTAG argument and wait | 
					
						
							|  |  |  | 5-10 minutes, it's not particulary fast. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     FleaFPGA-JTAG bitstream-flash.vme | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Programming over JTAG header
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Any openocd compatible JTAG like FT2232 can be connected to JTAG header | 
					
						
							|  |  |  | and it will program SRAM and FLASH at maximum speed possible. | 
					
						
							|  |  |  | Even Diamond programmer can use any FT2232 module as a native programmer, | 
					
						
							|  |  |  | with a little help - it will work after first bitstream is programmed | 
					
						
							|  |  |  | over FT2232 with openocd. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Openocd accepts SVF files, everything applies the same as for VME files | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ddtcmd -oft -svfsingle -revd -if ulx3s_flash.xcf -of bitstream.svf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Programming over WiFi
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ESP-32 provides standalone JTAG SVF player over web HTTP and TCP interface for | 
					
						
							|  |  |  | programming and flashing in convenient and OS independent way. Web interface | 
					
						
							|  |  |  | requires no client software installed but web browser. It is much faster than | 
					
						
							|  |  |  | FT231X but still not as fast as FT2232. It accepts SVF files but you need to limit | 
					
						
							|  |  |  | SVF command size to max 8 kilobits "-maxdata 8", effectively it will split | 
					
						
							|  |  |  | upload into many shorter SVF commands because ESP-32 doesn't have enough | 
					
						
							|  |  |  | memory to buffer entire bitstream delivered in a long single SVF command. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ddtcmd -oft -svfsingle -revd -maxdata 8 -if ulx3s_flash.xcf -of bitstream.svf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To start using ESP-32 first you need to compile | 
					
						
							|  |  |  | [ULX3S passthru from f32c project](https://github.com/f32c/f32c/tree/master/rtl/proj/lattice/ulx3s/passthru_45f) | 
					
						
							|  |  |  | and upload it using FleaFPGA-JTAG or external JTAG programmer. | 
					
						
							|  |  |  | "Passthru" bitstream configures FPGA to route lines from USB-serial to ESP-32. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Then you need to install Arduino and its ESP-32 support, and | 
					
						
							|  |  |  | install Emard's library [LibXSVF-ESP](https://github.com/emard/LibXSVF-ESP), | 
					
						
							|  |  |  | required library dependencies and  | 
					
						
							|  |  |  | [ESP-32 SPIFFS uploader](https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/tag/v0.1) | 
					
						
							|  |  |  | Version "ESP32FS-v0.1.zip" worked for me. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In Arduino boards manager select this ESP-32 board: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     DOIT ESP32 DEVKIT V1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Select "Examples->LibXSVF->websvf" and optionally change | 
					
						
							|  |  |  | its default ssid/password. Compile and upload the code by | 
					
						
							|  |  |  | clicking "Sketch->Upload", check reports on lower terminal | 
					
						
							|  |  |  | window, successfull upload will finish with this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Hash of data verified. | 
					
						
							|  |  |  |     Leaving... | 
					
						
							|  |  |  |     Hard resetting... | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Then upload the web page content to ESP-32 FLASH filesystem, | 
					
						
							|  |  |  | at websvf window click "Tools->ESP32 Sketch Data Upload". | 
					
						
							|  |  |  | successful upload will finish with same as above. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Connect to ESP-32 WiFi (it will either connect to your | 
					
						
							|  |  |  | local WiFi or become access point with | 
					
						
							|  |  |  | default ssid=websvf password=12345678). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In web browser open upload page "http://192.168.4.1". | 
					
						
							|  |  |  | If ESP-32 connected as a client, IP address will vary depending | 
					
						
							|  |  |  | on local network. Discover it by using WiFi access | 
					
						
							|  |  |  | point web interface, ARP, NMAP, or by sniffing it. | 
					
						
							|  |  |  | On the ESP-32 page something like this will appear: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Select SVF File or use minimal or svfupload.py | 
					
						
							|  |  |  |       [File] File not selected | 
					
						
							|  |  |  |       [Upload] | 
					
						
							|  |  |  |       [0%              ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Navigate file selector to bitstream.svf file, it will show | 
					
						
							|  |  |  | its size in KB. Then click "Upload", progress bar will run | 
					
						
							|  |  |  | from 0% to 100% in few seconds (if it's SRAM upload) and | 
					
						
							|  |  |  | bitstream will be started. FLASH can also be written from | 
					
						
							|  |  |  | web iterface it takes 2-3 minutes. Also on the web interface | 
					
						
							|  |  |  | there's available for download a small python commandline  | 
					
						
							|  |  |  | upload tool. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that FPGA can enable or disable ESP-32 module. If ESP-32 | 
					
						
							|  |  |  | is disabled by newly uploaded bistream, some alert window will | 
					
						
							|  |  |  | pop-up after otherwise successful upload because ESP-32 cannot | 
					
						
							|  |  |  | close HTTP session properly. | 
					
						
							|  |  |  | To make it go smooth, in the bitstream make FPGA pin "wifi_en" | 
					
						
							|  |  |  | as input (HIGH-impedance, pull up). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Technically, ESP-32 can be loaded with such a code that | 
					
						
							|  |  |  | permanently holds JTAG lines while FPGA can at the same time | 
					
						
							|  |  |  | have in FLASH a bitstream that permanenly enables ESP-32. | 
					
						
							|  |  |  | Such combination will preventing JTAG from working so | 
					
						
							|  |  |  | ULX3S board may become "Bricked". There is jumper J3 to disable | 
					
						
							|  |  |  | ESP-32, its left of SD card slot. Note boards PCB v1.7 need | 
					
						
							|  |  |  | upgrade for this jumper to work correctly. |