Skip to content

Commit

Permalink
* Add missing qspi to the Pi to
Browse files Browse the repository at this point in the history
be able to program bitstream faster.
Done

* used IS25LP016D-JBLE as flash, but
 it has problems with enabling QE for QSPI.
Relace with the model used on icebreaker
This is already done, comment should be removed

* ecp5 SPI clock pin can't be used as an input
 so have to [add a bodge wire](mattvenn#3)
for SPI peripheral comms with Pi.
See the test-spi-clk-in branch for a workaround.
Worked around by connecting this pin to a second FPGA pin

* connected I2C pins are just GPIOs. I have found the Pi's I2C hardware unusable, so always use the slower bitbanged version.
Connected I2C pins to official pins.
Removed pull resistors as this is not needed
  • Loading branch information
Rik Starmans committed Jul 17, 2021
1 parent f5ee05d commit 62485d9
Show file tree
Hide file tree
Showing 5 changed files with 5,624 additions and 5,693 deletions.
9 changes: 2 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,28 +48,23 @@ Check ECP5 family datasheet for more information.
* add more ground vias under BGA

## Errata

* Add missing qspi to the Pi to be able to program bitstream faster.
* configuration bits for FPGA should be tied to gnd not through a 10k resistor. The voltage is about 1v, so might
be a little close to the threshold of the 3.3v IOBANK supply. Replace with 0Ohm resistors? Or just tie to gnd?
* used IS25LP016D-JBLE as flash, but it has problems with enabling QE for QSPI. Relace with the model used on icebreaker
* ecp5 SPI clock pin can't be used as an input, so have to [add a bodge wire](https://github.com/mattvenn/basic-ecp5-pcb/issues/3) for SPI peripheral comms with Pi. See the test-spi-clk-in branch for a workaround.

## RPi connection info

See [test/mv_ecp.lpf](test/mv_ecp.lpf) for FPGA pinning. The following are the physical pins on the raspberry pi:

* serial: TX, RX on pins 8 and 10
* I2C: bitbanged on pins 38 and 40. Optional pullup resistors R1 & R2. Need to set up in boot/config.txt
* I2C: pins 2 and 3.
* GPIOs: pins 31, 32, 33, 36.
* SPI: SDO, SDI, CLK, CE0 on pins 19, 21, 23, 24. These are connected to the onboard FLASH for bitstream config.
* Extra SPI CE1: pin 26

### RPi Gotchas

* [fomu_flash will leave the SPI device in an unusable state](https://github.com/im-tomu/fomu-flash/issues/8). Run `sudo rmmod spi_bcm2835 && sudo modprobe spi_bcm2835` to reset it.
* connected I2C pins are just GPIOs. I have found the Pi's I2C hardware unusable, so always use the slower bitbanged version.
To enable add this to /boot/config.txt: `dtoverlay=i2c-gpio,i2c_gpio_sda=21,i2c_gpio_scl=20,i2c_gpio_delay_us=8,bus=3`


## Test:

Expand Down
211 changes: 105 additions & 106 deletions hardware/basic-ecp5-pcb-cache.lib
Original file line number Diff line number Diff line change
Expand Up @@ -382,11 +382,110 @@ X R4.2 5 0 150 50 D 50 50 4 1 P
ENDDRAW
ENDDEF
#
# Lattice_ECP_FPGA_ECP5U_45_CABGA256
# Mechanical_MountingHole_Pad
#
DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N
F0 "H" 0 250 50 H V C CNN
F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
MountingHole*Pad*
$ENDFPLIST
DRAW
C 0 50 50 0 1 50 N
X 1 1 0 -100 100 U 50 50 1 1 I
ENDDRAW
ENDDEF
#
# Memory_Flash_W25Q128JVS
#
DEF Memory_Flash_W25Q128JVS U 0 20 Y Y 1 F N
F0 "U" -350 350 50 H V C CNN
F1 "Memory_Flash_W25Q128JVS" 300 350 50 H V C CNN
F2 "Package_SO:SOIC-8_5.23x5.23mm_P1.27mm" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
ALIAS W25Q128JVS
$FPLIST
SOIC*5.23x5.23mm*P1.27mm*
$ENDFPLIST
DRAW
S -400 300 400 -300 0 1 10 f
X ~CS 1 -500 100 100 R 50 50 1 1 I
X DO(IO1) 2 500 100 100 L 50 50 1 1 B
X IO2 3 500 -100 100 L 50 50 1 1 B
X GND 4 0 -400 100 U 50 50 1 1 W
X DI(IO0) 5 500 200 100 L 50 50 1 1 B
X CLK 6 -500 -100 100 R 50 50 1 1 I
X IO3 7 500 -200 100 L 50 50 1 1 B
X VCC 8 0 400 100 D 50 50 1 1 W
ENDDRAW
ENDDEF
#
# Regulator_Linear_TLV73333PDBV
#
DEF Regulator_Linear_TLV73333PDBV U 0 10 Y Y 1 F N
F0 "U" -150 225 50 H V C CNN
F1 "Regulator_Linear_TLV73333PDBV" 0 225 50 H V L CNN
F2 "Package_TO_SOT_SMD:SOT-23-5" 0 325 50 H I C CIN
F3 "" 0 0 50 H I C CNN
ALIAS LD39015M10R LD39015M12R LD39015M125R LD39015M15R LD39015M18R LD39015M25R LD39015M33R TLV73310PDBV TLV73311PDBV TLV73312PDBV TLV73315PDBV TLV73318PDBV TLV73325PDBV TLV733285PDBV TLV73328PDBV TLV73330PDBV TLV73333PDBV
$FPLIST
SOT?23*
$ENDFPLIST
DRAW
S -200 175 200 -200 0 1 10 f
X IN 1 -300 100 100 R 50 50 1 1 W
X GND 2 0 -300 100 U 50 50 1 1 W
X EN 3 -300 0 100 R 50 50 1 1 I
X NC 4 200 0 100 L 50 50 1 1 N N
X OUT 5 300 100 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# Regulator_Switching_TLV62568DBV
#
DEF Regulator_Switching_TLV62568DBV U 0 20 Y Y 1 F N
F0 "U" -200 250 50 H V L CNN
F1 "Regulator_Switching_TLV62568DBV" 0 250 50 H V L CNN
F2 "Package_TO_SOT_SMD:SOT-23-5" 50 -250 50 H I L CIN
F3 "" -250 450 50 H I C CNN
ALIAS NCP1529A TLV62569DBV
$FPLIST
SOT?23*
$ENDFPLIST
DRAW
S -200 200 200 -200 0 1 10 f
X EN 1 -300 0 100 R 50 50 1 1 I
X GND 2 0 -300 100 U 50 50 1 1 W
X SW 3 300 100 100 L 50 50 1 1 w
X VIN 4 -300 100 100 R 50 50 1 1 W
X FB 5 300 0 100 L 50 50 1 1 I
ENDDRAW
ENDDEF
#
# Switch_SW_Push
#
DEF Switch_SW_Push SW 0 40 N N 1 F N
F0 "SW" 50 100 50 H V L CNN
F1 "Switch_SW_Push" 0 -60 50 H V C CNN
F2 "" 0 200 50 H I C CNN
F3 "" 0 200 50 H I C CNN
DRAW
C -80 0 20 0 1 0 N
C 80 0 20 0 1 0 N
P 2 0 1 0 0 50 0 120 N
P 2 0 1 0 100 50 -100 50 N
X 1 1 -200 0 100 R 50 50 0 1 P
X 2 2 200 0 100 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
# basic-ecp5-pcb-rescue_ECP5U_45_CABGA256-Lattice_ECP_FPGA
#
DEF Lattice_ECP_FPGA_ECP5U_45_CABGA256 U 0 40 Y Y 9 L N
DEF basic-ecp5-pcb-rescue_ECP5U_45_CABGA256-Lattice_ECP_FPGA U 0 40 Y Y 9 L N
F0 "U" 150 250 60 H V R CNN
F1 "Lattice_ECP_FPGA_ECP5U_45_CABGA256" 150 150 60 H V R CNN
F1 "basic-ecp5-pcb-rescue_ECP5U_45_CABGA256-Lattice_ECP_FPGA" 150 150 60 H V R CNN
F2 "" 150 50 60 H I R CNN
F3 "" 150 -150 60 H I R CNN
F4 "ECP5U_45" 150 -50 60 H I R CNN "manf#"
Expand Down Expand Up @@ -659,113 +758,13 @@ X TMS T11 0 -300 200 R 50 50 9 1 B
ENDDRAW
ENDDEF
#
# Mechanical_MountingHole_Pad
#
DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N
F0 "H" 0 250 50 H V C CNN
F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
MountingHole*Pad*
$ENDFPLIST
DRAW
C 0 50 50 0 1 50 N
X 1 1 0 -100 100 U 50 50 1 1 I
ENDDRAW
ENDDEF
#
# Memory_Flash_W25Q128JVS
#
DEF Memory_Flash_W25Q128JVS U 0 20 Y Y 1 F N
F0 "U" -350 350 50 H V C CNN
F1 "Memory_Flash_W25Q128JVS" 300 350 50 H V C CNN
F2 "Package_SO:SOIC-8_5.23x5.23mm_P1.27mm" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
ALIAS W25Q128JVS
$FPLIST
SOIC*5.23x5.23mm*P1.27mm*
$ENDFPLIST
DRAW
S -400 300 400 -300 0 1 10 f
X ~CS 1 -500 100 100 R 50 50 1 1 I
X DO(IO1) 2 500 100 100 L 50 50 1 1 B
X IO2 3 500 -100 100 L 50 50 1 1 B
X GND 4 0 -400 100 U 50 50 1 1 W
X DI(IO0) 5 500 200 100 L 50 50 1 1 B
X CLK 6 -500 -100 100 R 50 50 1 1 I
X IO3 7 500 -200 100 L 50 50 1 1 B
X VCC 8 0 400 100 D 50 50 1 1 W
ENDDRAW
ENDDEF
#
# Regulator_Linear_TLV73333PDBV
#
DEF Regulator_Linear_TLV73333PDBV U 0 10 Y Y 1 F N
F0 "U" -150 225 50 H V C CNN
F1 "Regulator_Linear_TLV73333PDBV" 0 225 50 H V L CNN
F2 "Package_TO_SOT_SMD:SOT-23-5" 0 325 50 H I C CIN
F3 "" 0 0 50 H I C CNN
ALIAS LD39015M10R LD39015M12R LD39015M125R LD39015M15R LD39015M18R LD39015M25R LD39015M33R TLV73310PDBV TLV73311PDBV TLV73312PDBV TLV73315PDBV TLV73318PDBV TLV73325PDBV TLV733285PDBV TLV73328PDBV TLV73330PDBV TLV73333PDBV
$FPLIST
SOT?23*
$ENDFPLIST
DRAW
S -200 175 200 -200 0 1 10 f
X IN 1 -300 100 100 R 50 50 1 1 W
X GND 2 0 -300 100 U 50 50 1 1 W
X EN 3 -300 0 100 R 50 50 1 1 I
X NC 4 200 0 100 L 50 50 1 1 N N
X OUT 5 300 100 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# Regulator_Switching_TLV62568DBV
#
DEF Regulator_Switching_TLV62568DBV U 0 20 Y Y 1 F N
F0 "U" -200 250 50 H V L CNN
F1 "Regulator_Switching_TLV62568DBV" 0 250 50 H V L CNN
F2 "Package_TO_SOT_SMD:SOT-23-5" 50 -250 50 H I L CIN
F3 "" -250 450 50 H I C CNN
ALIAS NCP1529A TLV62569DBV
$FPLIST
SOT?23*
$ENDFPLIST
DRAW
S -200 200 200 -200 0 1 10 f
X EN 1 -300 0 100 R 50 50 1 1 I
X GND 2 0 -300 100 U 50 50 1 1 W
X SW 3 300 100 100 L 50 50 1 1 w
X VIN 4 -300 100 100 R 50 50 1 1 W
X FB 5 300 0 100 L 50 50 1 1 I
ENDDRAW
ENDDEF
#
# Switch_SW_Push
#
DEF Switch_SW_Push SW 0 40 N N 1 F N
F0 "SW" 50 100 50 H V L CNN
F1 "Switch_SW_Push" 0 -60 50 H V C CNN
F2 "" 0 200 50 H I C CNN
F3 "" 0 200 50 H I C CNN
DRAW
C -80 0 20 0 1 0 N
C 80 0 20 0 1 0 N
P 2 0 1 0 0 50 0 120 N
P 2 0 1 0 100 50 -100 50 N
X 1 1 -200 0 100 R 50 50 0 1 P
X 2 2 200 0 100 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
# clock_SiT2001B
# basic-ecp5-pcb-rescue_SiT2001B-clock
#
DEF clock_SiT2001B X 0 10 Y Y 1 F N
DEF basic-ecp5-pcb-rescue_SiT2001B-clock X 0 10 Y Y 1 F N
F0 "X" -200 250 50 H V L CNN
F1 "clock_SiT2001B" 50 -250 50 H V L CNN
F1 "basic-ecp5-pcb-rescue_SiT2001B-clock" 50 -250 50 H V L CNN
F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG210-4Pin_2.5x2.0mm" 200 -650 50 H I C CNN
F3 "" -100 0 50 H I C CNN
ALIAS SG-211
$FPLIST
Oscillator*SMD*SeikoEpson*SG210*2.5x2.0mm*
$ENDFPLIST
Expand Down
Loading

0 comments on commit 62485d9

Please sign in to comment.