-
Notifications
You must be signed in to change notification settings - Fork 396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RV32IMC with IBusCachedPlugin #93
Comments
Thanks :) It isn't realy a bug, but a set of incompatible feature. The issue with the RVC in that case, is that the RVC decompression is only done in the decode stage, which do not allow to produce the INSTRUCTION_ANTICIPATED value used by the reg file. There is multiple ways to workaround that. |
After disabling twoCycleRam and twoCycleCache it works like a charm 👍 I'd propose to add information about it in readme and possibly add cached IMC to standard configurations and size/performance breakdown, since IMC is quite popular configuration. Besides what makes IMC less performant than IM? I'm running CoreMark and it's about 5% slower. It's not a huge difference, but I'm curious, especially that for Syntacore scr1 it's the other way around (IM is about 2% less performant than IMC). These are not huge differences, but still it's interesting to know what is the cause of this. VexRiscv is my first SpinalHDL project I'm looking at, so I don't have enough competence to look around the code and figure it out myself. |
A performance hit due to RVC which should impact most implementations (and at least VexRiscv) is the fact that branch/jump on 32 bits unaligned instruction will result in the fetcher having to fetch two words. before being able to deliver that 32 bits instruction. You can imagine other cases where it require to read two different lines of the cache, or event two diferrent MMU TLB. I don't realy know about the Syntacore scr1 architecture. |
To be honest I didn't go too deep into scr1 architecture, but from what I can see there is no caching. FYI I'm using scr1 under PULPissimo with their logarithmic interconnect for memory, which is very fast (thus caching is not that required). I'll check if there is any performance difference for Ibex, which I was also evaluating. |
Same story for Ibex. IM is about 1,5% less performant than IMC. If I'll find some time maybe I'll try to fit cacheless VexRiscv in PULPissimo and do some benchmarks to see what is the difference. |
What is that :D ?
That's weird, i'm curious to understand why XD |
You can read more about log interconnect in Near-Threshold RISC-V Core With DSP Extensions Compiler creativity has nothing to do in this particular case, because on all platforms I'm testing, I'm executing the same exact code compiled using the same exact compiler with the same exact flags, so the only difference is the core and SoC platform. |
I noticed a similar case on the picorv32: when RVC is enabled, dhrystone performance is slightly lower when running identical IM32 binary. |
For me it's exactly the same core (so full IMC), but running either IMC or IM code, so the only variable compiled code. |
@Dolu1990 for your reference here is log interconnect code: pulp-platform/L2_tcdm_hybrid_interco. |
And more about log interconnect: https://iis-people.ee.ethz.ch/~arahimi/papers/DATE11.pdf |
According to SpinalHDL/VexRiscv#93 compressed mode doesn't work with a sync register file, and with twoCycleRam/twoCycleCache. Fix compressed instructions by moving to an async register file. Signed-off-by: Sean Cross <sean@xobs.io>
Hi, first of all congratulations for your impressive work. I'm currently evaluating different RISC-V cores and VexRiscv is my favourite so far.
I have a problem when trying to configure Briey to IMC ISA. I've tried Murax before with
IBusSimplePlugin(compressedGen = true)
and it worked just fine, but it doesn't seem to work withIBusCachedPlugin
. When I setcompressedGen = true
in Briey I have the following error:I'm using current master with IntelliJ IDE.
The text was updated successfully, but these errors were encountered: