Stefan Wallentowitz
2014-04-28 12:08:03 UTC
Dear all,
finally, a big blob with some first multicore changes plus some massive
changes in newlib for better usability. Summary:
* mor1kx changes (https://github.com/wallento/mor1kx/tree/multicore)
* adds SPR_COREID and SPR_NUMCORES
* cherry-pick Stefan's l.lwa/l.swa
* adds snoop port to abort atomic on write to same address
* adds trace port (mor1kx_monitor does not work for two cores), this
can then be used for synthesizable trace processing
* adds ISR0 and ISR1 as "shadow register" alternative for calculations
in the prolog of exceptions
* or1k-src general changes (https://github.com/wallento/or1k-src)
* reentrant libc as we may want to use libc in exception handling
* different stacks for exception and software due to virtual memory
* Extend or1k support with restore and some service functions
* malloc_lock and malloc_unlock to avoid interrupts during malloc
* multicore stuff (https://github.com/wallento/or1k-src/tree/multicore)
* build two libgloss versions: libor1k.a and libor1k_mc.a, crt0{_mc}.o
* use SPR_COREID and SPR_NUMCORES in or1k_coreid() and or1k_numcores()
* cherry-pick Stefan's l.lwa/l.swa
* Basic synchronization functions in or1k-support
* Reentrant or1k-support for multiple cores
* libc Reentrancy for multiple cores
* malloc_lock uses l.lwa/l.swa
* or1k-gcc (https://github.com/wallento/or1k-gcc/tree/multicore)
* Add -mmulticore to switch between libor1k.a/crt0.o and
libor1k_mc.a/crt0_mc.o
You can run a demo (currently in Modelsim only) using fusesoc:
* Modified orpsoc-cores at
https://github.com/wallento/orpsoc-cores/tree/multicore-demo
* (for 64-bit Modelsim: fusesoc at https://github.com/wallento/fusesoc)
There is a very small example at: http://pastebin.com/1dyUnygK
When you want to try it out and have ~20 minutes, try this walkthrough:
http://pastebin.com/uDsh5DJE
I am looking forward to all discussion and input.
Bye,
Stefan
finally, a big blob with some first multicore changes plus some massive
changes in newlib for better usability. Summary:
* mor1kx changes (https://github.com/wallento/mor1kx/tree/multicore)
* adds SPR_COREID and SPR_NUMCORES
* cherry-pick Stefan's l.lwa/l.swa
* adds snoop port to abort atomic on write to same address
* adds trace port (mor1kx_monitor does not work for two cores), this
can then be used for synthesizable trace processing
* adds ISR0 and ISR1 as "shadow register" alternative for calculations
in the prolog of exceptions
* or1k-src general changes (https://github.com/wallento/or1k-src)
* reentrant libc as we may want to use libc in exception handling
* different stacks for exception and software due to virtual memory
* Extend or1k support with restore and some service functions
* malloc_lock and malloc_unlock to avoid interrupts during malloc
* multicore stuff (https://github.com/wallento/or1k-src/tree/multicore)
* build two libgloss versions: libor1k.a and libor1k_mc.a, crt0{_mc}.o
* use SPR_COREID and SPR_NUMCORES in or1k_coreid() and or1k_numcores()
* cherry-pick Stefan's l.lwa/l.swa
* Basic synchronization functions in or1k-support
* Reentrant or1k-support for multiple cores
* libc Reentrancy for multiple cores
* malloc_lock uses l.lwa/l.swa
* or1k-gcc (https://github.com/wallento/or1k-gcc/tree/multicore)
* Add -mmulticore to switch between libor1k.a/crt0.o and
libor1k_mc.a/crt0_mc.o
You can run a demo (currently in Modelsim only) using fusesoc:
* Modified orpsoc-cores at
https://github.com/wallento/orpsoc-cores/tree/multicore-demo
* (for 64-bit Modelsim: fusesoc at https://github.com/wallento/fusesoc)
There is a very small example at: http://pastebin.com/1dyUnygK
When you want to try it out and have ~20 minutes, try this walkthrough:
http://pastebin.com/uDsh5DJE
I am looking forward to all discussion and input.
Bye,
Stefan