[Oberon] Project Oberon running from LPDDR memory on Pipistrello
Paul Reed
paulreed at paddedcell.com
Mon May 11 10:37:25 CEST 2020
Hi Joerg, Magnus,
Surely that's to do with data access not jumps? But anyway, I believe
updating the Verilog will indeed fix the 2MB problem, it did for me. I
think the bug you found was to do with type descriptor access off a
pointer, which was fixed a while back. Apologies for this!
Hope that helps - and thanks for your efforts!
Paul
On 2020-05-11 09:31, Jörg Straube wrote:
> Magnus
>
> Don’t know if this is the culprit:
>
> There was this line in the RISC5.v you used:
>
> assign adr = stallL ? B[23:0] + {4'b0, off} : {pcmux, 2'b00};
>
> For backward jumps this would be better
>
> assign adr = stallL ? B[23:0] + {{4{off[19]}}, off} : {pcmux, 2'b00};
>
> I’m in the process to verify and will include the newest
> enhancements and bug fixes in the Verilog files. (rounding error in
> floating points, new shifter and registers…) and compiler.
>
> br
>
> Jörg
>
> Gesendet von Mail [1] für Windows 10
>
> VON: Magnus Karlsson
> GESENDET: Montag, 11. Mai 2020 03:23
> AN: oberon at lists.inf.ethz.ch
> BETREFF: 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.
>
> Magnus
>
> 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:
>
>> See
>
>>
> https://github.com/Saanlima/Pipistrello/tree/master/Projects/Oberon_lpddr
>
>>
>
>> 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.
>
>>
>
>> Cheers,
>
>> Magnus
>
>> --
>
>> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> systems
>
>> https://lists.inf.ethz.ch/mailman/listinfo/oberon
>
> --
>
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> systems
>
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
>
>
>
> Links:
> ------
> [1] https://go.microsoft.com/fwlink/?LinkId=550986
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
More information about the Oberon
mailing list