[libre-riscv-dev] chinese sponsor, looking to design an ECP5-based dev board

Luke Kenneth Casson Leighton lkcl at lkcl.net
Mon May 6 23:57:20 BST 2019


On Mon, May 6, 2019 at 6:41 PM Jacob Lifshay <programmerjake at gmail.com> wrote:
>
> I think one thing that would probably be quite useful is, instead of having
> ddr3 ram directly on the board, to have a ddr3 dimm or sodimm socket so
> that the user can upgrade the ram to as much as they're willing to buy and
> will fit, or just not use any if they don't need any. I think we should
> support 64-bit sodimms (no support for ECC) and if we want to emulate
> smaller bus widths, we can just disconnect some of the data lines.

 ah, i forgot to mention: the potential sponsor is used to doing
credit-card-sized computers.  SODIMM sockets are a different ballgame
that they may not be used to (in both form-factor as well as
engineering expertise).

 also, the ECP5 only supports up to 800mhz DDR (a 400mhz clock rate).
actually finding SODIMMs that are *guaranteed* to go down to that rate
is likely to be challenging.

and, if it doesn't work, will result in end-user complaints.

 a BGA-soldered LPDDR3 RAM IC makes it the chinese manufacturer's
problem to source the correct IC, and guarantees to the end-user that
it'll work.

 also, 64-bit SODIMMs basically means twin 80-pin interfaces for each
32-bit data bus width.  yes, really, DDR3 needs a staggering 80 pins,
for control, clock, negotiation and so on.  yes it's possible to share
the address lines, however not much else.  it'd mean around 140-150
pins dedicated to 64-bit-wide signal paths.

 now, i'm not sure if a single ECP5 can even cope with that (handle
two DDR3 data buses simultaneously).

 even if it did... the amount of data is:

 * well beyond what 8x 300mhz HyperRAM interfaces can handle (double).
8x 300mhz = 2400mbytes/sec, where 800mhz DDR3/LPDDR3 @ 32-bit
generates 3200 mbytes/sec.  twin 800mhz interfaces would be 6400
mbytes/sec.

  we would need 16x HyperRAM interfaces to cope, basically.  that's
208 pins.  (1x HyperRAM interface needs 13 pins)

 * not strictly necessary given the initial target (embedded mobile).
720p30 is really modest (a reason why it was chosen) - only 3 million
pixels / sec - which does not put too great a strain on the (shared)
memory bus bandwidth.

 * over the target power budget (2.5W)

> Lattice document for connecting ddr3 dram to ecp5:
> http://www.latticesemi.com/view_document?document_id=50467

 yes i found this last week, good reminder.  one of the "setup" pages
using the lattice config tool does actually have twin 32-bit buses
(and the usual 14-or-so DDR3 address pins)... i don't know if that's
hi/lo (DDR-rising, DDR-falling) or whether it's *actual* 64-bit.

 i honestly can't tell, from this, either:
 https://github.com/enjoy-digital/litedram/blob/master/litedram/phy/ecp5ddrphy.py

 worst case we'd need one ECP5 per LPDDR3 IC... then to have the
HyperRAM Buses do Chip-Select (CS#0, CS#1) and route all 8 HyperRAM
Buses to both ECP5s.

l.



More information about the libre-riscv-dev mailing list