Pre-decode instructions when writing them to icache
authorPaul Mackerras <paulus@ozlabs.org>
Fri, 29 Jul 2022 10:29:26 +0000 (20:29 +1000)
committerPaul Mackerras <paulus@ozlabs.org>
Tue, 9 Aug 2022 10:14:31 +0000 (20:14 +1000)
commit21ab36a0c0cc05501d036a160f3002d21b7cd9cd
treec5c710eb5d84ef14a9a5d7ccdd5830dbcbfdf73b
parent26dc1e879c0999c201657dee44ea40c0760e4517
Pre-decode instructions when writing them to icache

This splits out the decoding done in the decode0 step into a separate
predecoder, used when writing instructions into the icache.  The
icache now holds 36 bits per instruction rather than 32.  For valid
instructions, those 36 bits comprise the bottom 26 bits of the
instruction word, a 9-bit insn_code value (which uniquely identifies
the instruction), and a zero in the MSB.  For illegal instructions,
the MSB is one and the full instruction word is in the bottom 32 bits.
Having the full instruction word available for illegal instructions
means that it can be printed in the log when simulating, or in future
could be placed in the HEIR register.

If we don't have an FPU, then the floating-point instructions are
regarded as illegal.  In that case, the insn_code values would fit
into 8 bits, which could be used in future to reduce the size of
decode_rom from 512 to 256 entries.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Makefile
cache_ram.vhdl
common.vhdl
core.vhdl
decode1.vhdl
icache.vhdl
microwatt.core
predecode.vhdl [new file with mode: 0644]