Coder Social home page Coder Social logo

ulx3s's Introduction

ULX3S PCB

ULX3S = University digital Logic Learning Xtensible board release 3 with SDRAM, Successor of ULX2S.

Manual * Quickstart Binaries * ULX3S at Kitspace

3D preview

TOP BOTTOM

Prototypes available at SKRIPTARNICA, local shop inside of FER university.

This is a small (94x51 mm) standalone FPGA board for education, research and general purpose, with a full featured selection of chips which I all wanted on a low-cost PCB, but haven't found on the market. It's open source and open hardware because if it is good for our development of f32c SOC, it should be also good to other projects.

ULX3S will carry all digital logic on our research, education and makerspace projects in next 5 years.

ULX3S is standalone embeddable gadget with onboard display, buttons, storage, WiFi and compatible connectors.

ULX3S can do things no other board can.

ULX3S can self-reflash with a bitstream sent remotely from web interface over WiFi or from SD card browsed by onboard OLED display and buttons.

ULX3S can completely power down and wakeup from battery backed RTC.

ULX3S has rich range of chips and connectivity required for many other open source projects: SDRAM, USB, PS/2, SDCARD, Digital Video, FLASH, RTC, I2C, OLED, AUDIO, ADC, onboard FM/ASK antenna 88-433.92 MHz and 56 GPIO pins routed as differential pairs and have pinout that is PMOD compatible. There are 12 true differential bidirectional pairs and 16 single-ended pairs.

ULX3S is sufficiently equipped to emulate Amiga retro computer and run its games, but can do much more like running Linux.

Schematics and PCB started with KiCAD 4. After version v1.8 project switched to KiCAD 5 PCB editor:

kicad ulx3s.pro

View generated gerbers

gerbv -p plot/ulx3s.gvp

Features

FPGA: Lattice ECP5 LFE5U-85F-6BG381C (12/25/45/85K LUT)

USB: FTDI FT231XS (500kbit JTAG and 3Mbit USB-serial)

GPIO: 56 pins (12 true differential pairs, 16 single-ended pairs), PMOD compatible with power out 3.3V/1A 2.5V/1.5A

RAM: 16-bit SDRAM MT48LC32M16 (8/16/32/64 MB)

Flash: Quad-SPI Flash IS25LP128F (4/8/16 MB for FPGA config and user data)

Storage: Micro-SD slot

LEDs: 11 (8 blink-LEDs, 2 USB LEDs, 1 WiFi LED)

Buttons: 7 (4 direction, 2 fire, 1 power button)

Audio: 3.5 mm jack with 4 contacts (analog stereo + digital audio or composite video)

Video: GPDI connector with 3.3V-5V I2C bidirectional level shifter

Display: placeholder for 0.96" SPI COLOR OLED SSD1331

WiFi+bluetooth: placeholder for ESP-32 (Standalone JTAG web interface over WiFi)

Antenna: 88-108/433 MHz FM/ASK onboard

ADC: 8 channels, 12 bit, 1 MSa/s MAX11125 (4/8-ch, 8/10/12-bit, 0.5/1 MSa/s)

Power: 3 Switching voltage regulators: 1.1V, 2.5V, 3.3V (1.5/2A)

Clock: 25 MHz onboard, external differential clock input

Low power sleep: 5uA/5V standby, RTC MCP7940N clock wakeup, power button, 32768 Hz quartz and battery

GPDI is General Purpose Differential Interface, Electrically LVDS, mostly TMDS tolerant female receptacle more-or-less compatible with digital monitors/TVs

Production

Independent production like q3k or samlittlewood is welcome and desirable under conditions of modified MIT LICENSE. If you do manual assembly here is minimal parts list.

ZIP the gerbers and send them to manufacturer:

zip -r /tmp/ulx3s.zip plot/ulx3s

If you are going to order this project by yourself, it is important what manufacturer to choose for PCBA (PCB and Assembly) service.

Parts can be ordered from Detailed BOM or from ULX3S at Kitspace, which automatically submits Simplified 1-click BOM by clicking on "Digikey" or "Mouser" button. On each click, Digikey and Mouser will keep accumulating the BOM in the shopping cart. Number of unique parts on Digikey and Mouser should be equal but DigiKey may split some parts (LEDs) in multiple rows. To reset shopping cart, click "New Cart" or "New Basket". Kitspace may be updated with about 1 day delay after this project update.

Choose PCBA manufacturer which can produce PCB of IPC CLASS 3 quality, 5/5 mil trace resolution and 0.2 mm holes. Avoid manufacturer who claims "quality" and "satisfaction" but doesn't really know what will be IPC CLASS rating for this project.

PCBA manufacturer prices for the parts should be approximately equal as those from distributors like Mouser or DigiKey. Avoid any PCBA manufacturer who asks 3$ for the 1$ part or 40$ for the 30$ part. Select Mouser language/location icon to PCBA manufacturer country of origin and $-currency to check is PCBA manufacturer telling the truth about prices.

Before soldering the parts, ask manufacturer for pictures of PCB. CLASS 3 demands, among other things, that all drill holes stay inside of VIA pads. If some holes break-out from pads, ask manufacturer to make new PCBs with better drill and copper layer alignment.

PCBCART offers CLASS 3 quality and assembly at reasonable cost. Prices for the parts are equal to Mouser.

Don't pay everything at once. Following payment phases during the PCBA production are recommended:

1. Pay for the parts
2. Manufacturer orders the parts and optionally negotiates with you about part numbers.
   Depending on market availability, some parts may come in different physical package.
3. Send updated gerbers which fit to ordered parts.
4. Pay for PCB
5. Manufacturer sends pictures of produced PCB for your inspection.
   If anything looks suspicious, ask also for X-ray imaging.
6. Pay for the assembly and shipping.

Nobody wants quality issues, so it is good to ask if manufacturer has qualified personnel able to follow instructions for ULX3S self-test before shipping.

ulx3s's People

Contributors

alon avatar emard avatar gornjas avatar neuschaefer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ulx3s's Issues

Kitspace Digikey/Mouser links still an issue?

Hey, I was just re-reading the readme. I noticed this section:

Parts can be ordered from Detailed BOM or from ULX3S at Kitspace, which automatically submits Simplified 1-click BOM by clicking on "Digikey" or "Mouser" button. On each click, Digikey and Mouser will keep accumulating the BOM in the shopping cart. Number of unique parts on Digikey and Mouser should be equal but Digikey scripts have bugs. First time click on "Digikey" will upload a partial BOM, then the shopping cart must be reset and next click on "Digikey" will upload complete BOM. To reset shopping cart, click "New Cart" or "New Basket". Kitspace may be updated with about 1 day delay after this project update.

Can you confirm that Digikey links still have this issue?

Git Tags for Board Versions

Is it possible to get git tags for respective board versions? We have earlier versions of the board, and it is not so easy to find the correct documentation.

Schematics for 3.1.8 from Mouser?

Hi emard,

I ❤️ the ULX3S, but one I bought from Mouser last week is giving me trouble and I cannot find schematics for it.

The board has silkscreen on the back that says 3.1.8. But the latest Kicad file in this repo is only 3.1.7. Where can I get the schematics for board 3.1.8?

ulx3s-3 1 8

The specific problem I'm trying to debug is that the ESP32 is not recognized by esptool.py or any other tool, and I suspect that's because the ESP32-WROVER-E's EN pin is only at 1.7V. The board has been a bit flaky in other ways too. Would be much easier to debug with the schematic.

By the way, output of ftx_prog in factory configuration shows board at version 3.0.8. I assume I should change this to 3.1.8?

ftx_prog

Thank you!

Some questions about using an external oscillator and pins on the ULX3S

Greetings,

I was introduced to ulx3s (I have the ECP5 LFE5U-25F-6BG381C FPGA and ULX3S v3.0.3) as part of the FER "Digital Logic" course (where we used it with VHDL) and now I am approaching it again as a hobbyist with the aim of making a High Speed USB (over US2) microphone array. Please bear with my ignorance as this is my first electronics project.

While preparing for this project I realized that it would maybe be necessary to have a more stable and precise oscillator than the 25 MHz one included on ulx3s, so I have some related questions:

  • This 250 MHz LVDS oscillator [0] looks OK to me as a clock source. Is there perhaps a reason that trying to use it with ULX3S and my ECP5 instead of the 25 MHz oscillator on the ULX3S would be a bad idea?

  • Is there a reason besides cost-cutting that ULX3S does not come with a better oscillator?

  • I do not know how LVDS works, but that does not matter as the FPGA takes care of LVDS after I connect it with the "test" circuit suggested in the oscillator datasheets, only presenting digital clock signals to VHDL code? At least that is how I would prefer the situation to be!

  • Am I correct in thinking that to use the LVDS oscillator with the ECP5, it is needed to connect its OUT pad/pin terminal to the J1 GP12 connection (marked with "+" on the ULX3S PCB), which would be accessible through VHDL with the gp(12) signal, assuming I use your LPF? Does the same hold for OUT- on the oscillator and J1 GN12 on the ULX3S PCB and gn(12) in VHDL, and is gn(12) supposed to always be the logical compement of gp(12) in such a case?

  • Do I set the IO_TYPE for the gp[12] and gn[12] to LVDS25 in the IOBUF PORT command/statement in the LPF file?

  • Can somebody perhaps explain the purpose of the "N/C" pin terminal on the linked oscillator? I think it is supposed to always be left unconnected electrically??

  • Can the Ground pin terminal be connected to something on the ULX3S? Likewise, how to draw power from the ULX3S to power the oscillator and other electronics necessary for my project? (I will probably use some kind of linear voltage regulator or voltage reference to get a more stable voltage source than the switching regulators on ULX3S can provide.) I would very much appreciate a photo of the v3.0.3 PCB with the necessary pins circled.

  • Related to the previous question, I think the square-looking connections (there are 6 pairs of them on the ULX3S PCB) are ground, can I connect the oscillator ground to one of them? Are they all equivalent? On another note, what are the 4 wide circular connections with big holes through them on the ULX3S PCB?

  • I am not sure how exactly to set up the LVDS resistors in the FPGA, or whether I need them.

  • Did anybody ever need a heatsink for the ECP5 in their projects? Maybe I will need one ...

[0] https://www.arrow.com/en/products/dsc1103ai5-250.0000/microchip-technology

Sample code for using LAN8720

Hi @emard,
thank you for creating such a good ulx3s guide.
I did get the LAN8720 module to try out ethernet on the ulx3s.

First of all is there anything I need to bear in mind regarding the pyhsical connection to the ulx3s?
Right now I just plugged it in from 9 to 13 like you mentioned in the README.

Second do you have any example code for using the module?
I tried using it in Litex but I assume I wired somthing up improperly as the my code doesn't work as expected.

Future 10 MHz ADC

Is it possible to add a 10 MHz ADC in future versions ?
I think it would be very useful, as DVB-T and ISDB-T both are digital broadcasting system that are 10MHz-bandwidth OFDM signal making the ULX3S a very professional low cost DSP lab.
DVB-T is the European standard while ISDB-T is the open standard that is used in Japan and South America. Covering a huge demand.

constraint file pin numbering comments for gp[]

Regarding the comments for the gp pins:

I'm wondering if perhaps there's a mistake in the numbering in the comments, for example, in the constraint file:

LOCATE COMP "gp[14]" SITE "U18"; # J2_5+  GP14 DIFF ADC1
LOCATE COMP "gn[14]" SITE "U17"; # J2_5-  GN14 DIFF ADC0

specifically, I would have thought that J2_5+ and J2_5- should instead be labeled J2_14+ and J2_14- (the differential numbering in the middle of the connector; J2_5 appears to be the J2 connector pin number for GN14 = U17)

or perhaps the comments should be J2_5+ and J2_6- if using connector pin numbers (then what does the 14 in the middle represent?)

from the schematic:
image

If not, then what exactly does the 5 mean in J2_5+ and J2_5- ?

ESP32 to SSD1331 HWSPI using correct default pin numbers?

I am unable to get the SSD-1331 display working in HWSPI (fast) mode. I'm wondering if the SPI pins are connected the same as the default ESP-Dev-Module (WROOM-32). I'm thinking perhaps not.

I was able to get the ESP32 to use the SSD-1331 display in SWSPI (slow) mode. using these pin definitions and the passthru code loaded on the FPGA:

// ULX3S names in physical connector order:
#define oled_csn  17 // aka cs
#define oled_dc   16 // aka ds
#define oled_resn 25 // aka rst
#define oled_mosi 15 // aka mosi
#define oled_clk  14 // aka sclk

For the SWSPI, the option 1 in the Adafruit LCDGFXDemo example, the display is instantiated like this:

// Option 1: use any pins but a little slower
#pragma message "Using SWSPI"
Adafruit_SSD1331 display = Adafruit_SSD1331(oled_csn, oled_dc, oled_mosi, oled_clk, oled_resn);

For HWSPI, the display is instead instantiated like this:

#pragma message "Using HWSPI"
Adafruit_SSD1331 display = Adafruit_SSD1331(&SPI, oled_csn, oled_dc, oled_resn);

I have some addition notes in my SSD1331 Branch of Examples and duplicated here:

Arduino Implmentation Notes

This an Arduino-style solution, suitable for use with either the Ardunio IDE,
or Visual Micro. The display can be initialized either with this software SPI, which is
perhaps more flexible but a little slower:

Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, mosi, sclk, rst);

... or the alternative is this hardware SPI instantiation (untested / not working at this time):

Adafruit_SSD1331 display = Adafruit_SSD1331(&SPI, cs, dc, rst);

Note the comments in the Adafruit code:

hwspi hardcodes those pins, no need to redefine them.

As the ULX3S appears to use different pins, is HWSPI even possible? The cs, dc, rst pins do not seem to be otherwise defined without the macros.

The &SPI is defined in %USERPROFILE%\Documents\Arduino\hardware\espressif\esp32\libraries\SPI\src\SPI.cpp of interest, is this initialization code:

    if(sck == -1 && miso == -1 && mosi == -1 && ss == -1) {
        _sck = (_spi_num == VSPI) ? SCK : 14;
        _miso = (_spi_num == VSPI) ? MISO : 12;
        _mosi = (_spi_num == VSPI) ? MOSI : 13;
        _ss = (_spi_num == VSPI) ? SS : 15;
    } else {
        _sck = sck;
        _miso = miso;
        _mosi = mosi;
        _ss = ss;
    }

We're looking for the defaults not explicitly stated in the declaration Adafruit_SSD1331(&SPI, oled_csn, oled_dc, oled_resn); specifically (MOSI and SCLK) - however here it appears MISO is pin 12 and SCK is 15 (we are expecting MOSI=15 and SCK=14) when _spi_num != VSPI.

TODO: where is _spi_num defined?

The last line of file SPI.cpp

SPIClass SPI(VSPI);

Note in MAIN_ESP32_HAL_SPI_H_ (.\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-spi.h)

#define VSPI  3 //SPI bus normally attached to pins 5, 18, 19 and 23, but can be matrixed to any pins

Getting the board version number

I have purchased a new board but am unable to locate a revision number on it. It says "skriptarnica.hr" on the back where the ESP32 chip can be soldered. The documentation says that the boards sold through this website are v3.0.3. Does that apply to my board too? I cannot find any schematics for the above version. Is there any alternative version of the schematics that I can refer to?

schematics pdf is not searchable

It seems that schematics pdf is not searchable, which is shame, since finding components is much easier using search. Just re-creating schematics from current version of KiCad wil fix it. Tested with KiCad 5.0.2+dfsg1-1 on Debian sid.

This will also create color pdf with correct orientation, so win, win :-)

SD card detect pin

Does the ulx3s feature an SD card detect pin?
I looked at the pinout but couldn't find it under that name...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.