Giter Site home page Giter Site logo

Comments (18)

cnlohr avatar cnlohr commented on July 18, 2024 1

I just reread the spec in that section again.

Would a good approach be to, inside the emulator, emulate the AMOs as other atomics. I.e. make them appear as LR.W/SC.W? It feels like that is easier to emulate than actual AMOs.

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024 1

For the time being, I've added the following note:

†: Zifence+RV32A are stubbed. So, tweaks will need to be made if you want to emulate a multiprocessor system with this emulator.

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024

Please be more specific about what is needed? Keep in mind this is a single-core hart + there is no memory ordering constraints as everything happens synchronously.

Do you have any tests I can test against?

I have considered also reducing functionality of A to AMOSwap only though I am unsure how to clarify this. Do you have any feedback? Considering A's SW will invalidate any other pending load operations, I don't see any harm in allowing all operations to pass synchronously. Maybe I'm misunderstanding something?

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

Please be more specific about what is needed? Keep in mind this is a single-core hart + there is no memory ordering constraints as everything happens synchronously.

Documentation.
You should explain how the Zicsr and Zifencei extensions are also implemented and the caveats of the atomic extension being non-atomic.

Do you have any tests I can test against?

I have considered also reducing functionality of A to AMOSwap only though I am unsure how to clarify this. Do you have any feedback? Considering A's SW will invalidate any other pending load operations, I don't see any harm in allowing all operations to pass synchronously. Maybe I'm misunderstanding something?

There are none as there is only one CPU.

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

also idk if u know this but you can have GCC emulate multiplication and just omit the M extension. there is also an option in BR to do so.

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024

I am aware of this, but it added to the complexity significantly for the targets where I could do that and I couldn't figure out how to build the kernel against RV32IA using buildroot.

I will need to do more research to really understand RV32A. I still don't actually understand how it works. It would be "nice" to make it actually atomic.

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

Tbh I'm impressed it works without it but nice to know it's not actually necessary in practice.

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024

I mean I Would like to add proper support, at least for AMOSwap but I don't understand what to do based on the language used in the spec.

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

Go look at libgcc it's what implements multiplication when there is no hw multiplier. Look in the gcc root gcc/libgcc/config/riscv/atomic.c
I think that emulates C atomics when HW doesn't support it. So I would take that as a reference.

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024

I guess I don't understand what it is overall you are recommending I do?

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

Just add documentation of the caveats I explained. If you want to fix the caveats you can refer to my last post. Or just document them. You should also explained what you did with the fence and friends instructions.

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024

What I'm trying to explain is I still don't understand how what I've done is different from how it should be. I can't really document what I don't understand.

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

What I'm trying to explain is I still don't understand how what I've done is different from how it should be. I can't really document what I don't understand.

That's fine I don't understand it well either. Just a general explanation that they are not to spec. Which you have done now!

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

If you want this will make Linux without M extension and also shortens both the defconfigs
https://github.com/Mr-Bossman/buildroot/commits/mini

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024

@Mr-Bossman how long does boot take? How big is your kernel image?

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

@Mr-Bossman how long does boot take? How big is your kernel image?

Ignore the file ext.
4MiB
Image.zip

this / is in qemu in yours it takes ~0.3s for my PC.
Screenshot from 2022-12-10 22-21-09

from mini-rv32ima.

cnlohr avatar cnlohr commented on July 18, 2024

Wow that's really impressive. I didn't think that would be possible w/o M.

from mini-rv32ima.

Mr-Bossman avatar Mr-Bossman commented on July 18, 2024

its very much a hack lol

from mini-rv32ima.

Related Issues (20)

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.