decode: Avoid multiplexing from instruction reg fields to regfile address ports
authorPaul Mackerras <paulus@ozlabs.org>
Fri, 4 Oct 2019 09:26:37 +0000 (19:26 +1000)
committerPaul Mackerras <paulus@ozlabs.org>
Fri, 4 Oct 2019 23:17:04 +0000 (09:17 +1000)
commit7fe84220a51f08d79af71966c46ae52bc8369b00
tree5dce4a0af3e1b444519df18045cb37c86582eec1
parent96b402a4bfb4ec8d74c64aa2dd4b8de7ee90e3c0
decode: Avoid multiplexing from instruction reg fields to regfile address ports

This aims to simplify the logic between the instruction image and
the register file read address ports and reduce the size of the decode
tables.  With this patch, the input_reg_a column of the decode tables
can only select RA or zeroes, the input_reg_b column can only select
RB or a constant (0, -1, or an immediate value from the instruction),
and the input_reg_c columns can only select RS or zeroes.

That means that the rotate/shift/logical ops now have their first
input coming in via the input_reg_c column.  That means we need to
add a read_data3 field to the Decode2ToExecuteType record, but that
will go away again when we split out the rotate/mask/logical ops to
their own unit.

As a related but not tightly connected change, this patch also sets
the read1_enable signal to the register file be 0 when RA=0 and the
input_reg_a for the instruction is RA_OR_ZERO (previously it was 1).

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
common.vhdl
decode1.vhdl
decode2.vhdl
decode_types.vhdl
execute1.vhdl