Skip to content

Add big-endian support#172

Open
zeldin wants to merge 2 commits intoYosysHQ:mainfrom
zeldin:big-endian
Open

Add big-endian support#172
zeldin wants to merge 2 commits intoYosysHQ:mainfrom
zeldin:big-endian

Conversation

@zeldin
Copy link

@zeldin zeldin commented Aug 2, 2020

This PR adds an option to picorv32 to build it in big endian mode.
The instruction stream format mandated by UCB for big endian systems can be enabled with a separate option. If this option is not enabled, an instruction stream generated for LE can be used (but note that sub-word rodata, such as string literals, will not be correct) in lieu of a big endian tool chain.

Tested on iCE40 HX8K hardware, including compressed instruction streams in the big endian format.

Signed-off-by: Marcus Comstedt <marcus@mc.pp.se>
@zeldin
Copy link
Author

zeldin commented Aug 16, 2020

Note: I have also updated binutils and gcc to support big endian code generation, here and here.

Between draft-20181101-ebe1ca4 and draft-20190622-6993896 of the RISC-V Instruction Set Manual, the wording was changed from requiring "natural endianness" of instruction parcels to require them to be little endian. Update the big endian instruction pipe to reflect the newer requirement. Signed-off-by: Marcus Comstedt <marcus@mc.pp.se>
@zeldin
Copy link
Author

zeldin commented Oct 20, 2020

I updated the code to follow the latest version of the RISC-V specification which calls for fully little-endian instruction encoding on big-endian RISC-V.

Updated toolchains are here:
https://github.com/zeldin/riscv-binutils-gdb/commits/big-endian
https://github.com/zeldin/riscv-gcc/commits/big-endian

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant