[Oberon] Project Oberon running from LPDDR memory on Pipistrello
skulski at pas.rochester.edu
Mon May 11 04:43:12 CEST 2020
Magnus and Joerg:
this is great news! Thank you! This is important to me because I am trying to decide how my ideal Oberon board will look like. I want to design such a board. So now I would like to use a memory hierarchy on the board. The closest to the CPU there will be the "tightly coupled memory" like Nios-II is using. (Described in the P.Chu's book on Nios-II SoPC.) This is purely firmware implemented in BRAM. It does not affect the HW design. Then I would like to use ZBT memory for the fast portion of the software. And then DRAM for everything else. Only the DRAM needs to be cached because ZBT is actually faster than the CPU can handle.
Your achievement is telling me that this is a feasible design. I was more afraid of the firmware than hardware because I know how to design the boards more easily than write firmware. So now I know there will be firmware to be adopted to such a board. This is great! Thank you!
From: Oberon [oberon-bounces at lists.inf.ethz.ch] on behalf of Magnus Karlsson [magnus at saanlima.com]
Sent: Sunday, May 10, 2020 9:22 PM
To: oberon at lists.inf.ethz.ch
Subject: Re: [Oberon] Project Oberon running from LPDDR memory on Pipistrello
I should clarify:
On power-up the cache is targeting the lower 128KB of the 1MB address space.
On 5/10/2020 6:12 PM, Magnus Karlsson wrote:
> FYI, I have worked the last week with Jörg Straube on getting Project
> Oberon running from DRAM on the Pipistrello board and I just checked
> in the code on github:
> It's using a 128KB cache organized as a 2-way 256-set cache with 256
> byte cache lines. The interface between the cache and the memory
> controller is 128 bits wide @100 MHz, and the memory controller itself
> has 800 MB/s peak memory bandwidth.
> On power-up the lower 128KB of the 1MB address space is covered by the
> cache. The main code for the cache is a simple state machine using
> about 150 lines of code with 4 states.
> The cache actually covers the lower 8MB address space so in theory we
> could have an 8MB Oberon system, but due to a bug somewhere in the
> Oberon code it crashes after about 1.25 sec with a trap (C2H on the
> LEDs) with more than 1MB of memory. The solution is to have the
> non-io address space aliased to the first 1MB. It seems like there
> are memory access cycles above 1MB that needs to actually affect the
> memory at the first 1MB. I did discover this way back when I did the
> 2MB version of Pepino and had the tie address bit 20 to 0 for it to
> boot (i.e. alias the second MB to the first MB) but never got around
> to pinpoint the problem. The same problem popped up again and I was
> able to trace it down.
> Video memory is in dual-port BRAM and can be relocated by writing to a
> new register. At power-up the video is a the normal spot (0E7F00H)
> but can be moved up above the 8MB boundary to have a continuous 8MB
> memory section for program and data by simply writing to a register
> with the new video base address.
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
More information about the Oberon